Индикатор времени до окончания свечи

4.0/5 оценка (11 голосов)
  • Версия: 3.5
  • Требования: Quik 8.6
  • Размер: 1.45 MB
  • Просм: 9269
  • Добавлено: 05.02.16
  • Скачано: 1584
  • Изменено: 09.12.21

Следуем моде на умные часы:

Представляем вам умные часы от компании Bot4Sale! wink


Индикатор, показывающий на графике время, оставшееся до закрытия свечи.

 

 

Установка

Архив содержит 2 версии: демонстрационную и полную. Сеанс работы демонстрационной версии составляет 10 минут, после чего скрипт необходимо перезапустить. В полной версии ограничений нет.

  1. Прочите файл readme.html
  2. Разархивируйте полученный с сайта файл. Файлы демонстрационной версии не защищены паролем.
  3. Поместите файл bot4sale64.dll в папку терминала quik
  4. Если в папке терминала quik отсутствует подпапка LuaIndicators, создайте её.
  5. Поместите файл Candle_Rest.lua в папку LuaIndicators.
  6. Файл cr.lua положите в любое удобное вам место. В ту же папку  поместите звуковые файлы .wav
  7. Запустите скрипт cr.lua посредством меню терминала Сервисы-Lua скрипты.
  8. Графику цены инструмента (или любому другому графику) назначьте идентификатор. Для этого вызовите его свойства и во вкладке Дополнительно введите идентификатор
  9. Теперь можно на этом графике запустить индикатор. Его вы увидите в списке доступных индикаторов. В настройках индикатора в поле Идентификатор графика цены укажите тот же идентификатор, который вы только что дали графику цены. При необходимости настройте и остальные параметры индикатора.

 

Если Вам необходимо, чтобы индикатор исполнял звуковую сигнализацию, укажите в параметрах имя звукового файла и время до окончания свечи, когда необходимо проиграть звук. Например, при задании 0-12-34 сигнал будет произведен за 12 минут 34 секунды до завершения времени свечи (1-23-34 означает 1 час, 23 минуты, 34 секунды).

Если звуковая сигнализация вам не нужна, не указывайте название звукового файла в настройках индикатора.

Демонстрационная версия по функционалу аналогична полной, но каждые 10 минут просит нажать на кнопку.

 

История версий

 
Версия Описание
3.5
  • Добавлена возможность выбирать номер линии, если часы привязываются к индкатору. а не к графику котировок.
3.4
  • Исправлена ошибка, при которой в некоторых версиях терминала скрипт не запускался
3.3
  • Добавлена проверка допустимости звукового файла
  • Добавлены сообщения об ошибках
3.2
  • Убраны неточности рисования
3.1
  • Адаптировано для работы с квик версии 8.6
  • Небольшие улучшения
3.0
  • Адаптировано для работы с квик версии 8
2.0
  • Полностью переписано.
  • Удалена библиотека staticvar.dll как не оправдавшая себя.
  • Добавлен функционал, позволяющий индикатору корректно (на сколько это возможно в терминале quik) работать при размножении графиков и в режиме связанных окон.
1.4
  • Уменьшена нагрузка на процессор
  • Исправлены ошибки
1.3
  • Пересобрано для работы с библиотекой bot4sale.dll
  • Оптимизация кода
1.2
  • Добавлена индикация секунд, оставшихся до наступления времени сигнала
1.1
  • Возможность задать цвет символа часов
  • Возможность задать толщину рамки
1.0
  • Исправление неточностей первой версии
  • Звуковая сигнализация
0.99
  • Начальная версия

Полная версия идет в обмен на взнос на постройку зимнего приюта для майских жуков. Номер банковской карты и электронные кошельки:

Размер взноса не регламентируется, но торг здесь неуместен! )))

 


Есть предложения? - Пишите.

Комментарии   
# Peligrin 11.02.2016 12:08
Не получилось увидеть часики
делал как в описании, но пока результат ноль.

скажите - 10 минут ограничение - потом перезапустить скрипт :
1 - он сам остановится ? или просто перестает исполнять свои функции
2 - нужно ли перезапустить квик что бы скрипт заработал опять?
Ответить | Ответить с цитатой | Цитировать
# admin 11.02.2016 12:24
Здравствуйте.

Если не получилось вообще ничего увидеть -значит, что-то забыли установить или сделали не так, как написано в порядке установки.

Если индикатор запустился, но не получается увидеть символ часиков и получить оповещение перед завершением свечи - значит, вы не указали в параметрах индикатора время, когда это звуковое оповещение нужно издавать. Зададите это время правильно - часики появятся и дуделка будет дудеть.

Перезапускать нужно файл cr.lua в меню Сервисы-Скрипты Lua

Если что-то совсем не получается - звоните скайпом
Ответить | Ответить с цитатой | Цитировать
# Peligrin 11.02.2016 14:09
Все делал верно.
Вся засада оказалась в самом квике ( восстановил его из резервной копии - и все заработало с первого раза)
Ответить | Ответить с цитатой | Цитировать
# Peligrin 11.02.2016 14:17
Подскажите - как разместить часы у верхней границы окна?
Как отодвинуть вправо - понятно - нужно в ini файле указать расстояние от правой свечки
как их в верх-вниз можно двигать?
Ответить | Ответить с цитатой | Цитировать
# admin 11.02.2016 14:23
Это вопрос на 100 рублей.

Ответ. Никак. Разработчики терминала не предоставили никаких возможностей для этого. От слова "совсем".

Пишите им, ругайтесь, требуйте.... Можно нецензурно.
Ответить | Ответить с цитатой | Цитировать
# Peligrin 11.02.2016 15:08
Перемещать часы получилось с небольшим извратом и не совсем красиво (но может кому пригодится)
-сделать под них отельный график в отдельно окне,
- убрать все лишнее надписи
- оставить 1 последний бар
- сделать сдвиг графика на 1 интервал
-, сделать тонкими границы окна и убрать заголовок
- сделать активным поверх всех окон


вопрос - а можно ли менять размер шрифта?
Ответить | Ответить с цитатой | Цитировать
# admin 11.02.2016 15:23
А ведь верно. Привязать часы можно не только к графику цены, но вообще к любому графику. Создаем новое окно, кладем в него какой-нибудь осциллятор типа стохастика, болтающегося вокруг нуля. масштабируем окошко, чтобы график превратился в линию и привязываем часики к графику этого стохастика.

Спасибо за идею!

Касаемо шрифта. На текущий момент шрифт не масштабируется. Это не совсем "windows font". Я могу сделать масштабирование шрифта, но мне непонятна надобность оного. Сможете обосновать картинкой и пояснениями?
Ответить | Ответить с цитатой | Цитировать
# Peligrin 11.02.2016 17:39
масштабирование шрифта - это скорее вопрос юзабилити, а не насущной потребности.
Получается что масштабировать пространство вокруг часиков можно,
а сами часы подогнать под размер окна нельзя.

сейчас шрифт нормально читаемый, возможность его увеличить - это что то вроде, дополнительная возможность настроить рабочее место более комфортно
Ответить | Ответить с цитатой | Цитировать
# admin 11.02.2016 17:52
Ок, Народ заинтересуется индикатором - добавлю и эту возможность
Ответить | Ответить с цитатой | Цитировать
# Peligrin 11.02.2016 17:52
к чему лучше привязать часики ?
к какому индикатору и с какими параметрами - что бы он возле нуля был?

мои эксперименты в этом направлении пока нормального результата не дали) в индикаторах я не силен
Ответить | Ответить с цитатой | Цитировать
# admin 11.02.2016 17:55
стохастик в отдельном окне и с вручную сжатым масштабом по вертикальной оси, чтобы стохастик превратился в линию. Нормально получается?
Ответить | Ответить с цитатой | Цитировать
# Peligrin 11.02.2016 18:22
с масштабирование м интересная мысль)),

пока самый лучший вид получился , если взять просто
"График % изменения закрытия" - и вытянуть по оси в одну линию, часы никуда не скачут, и хорошо смотрятся
Ответить | Ответить с цитатой | Цитировать
# Peligrin 11.02.2016 20:50
интересная идея с цифрами обратного отсчета!!!
секундная цифра и кружок близко друг возле друга - и сливаются , по возможности отодвинуть бы их хоть на немного друг от друга
(хотя это у меня может к концу дня уже в глазах плывет ))

Ответить | Ответить с цитатой | Цитировать
# admin 11.02.2016 21:14
Цвет кружочка поярче подберите и все перестанет сливаться :P
Ответить | Ответить с цитатой | Цитировать
# konst 13.05.2016 20:57
Доброго вечера! Подскажите-
1.При распаковке демо индикатора времени файлам cr надо добавлять luac и ini?Положить их в любую папку quik?
2.Файл staticvar.dll и w32.dll переместить в папку quik созданную самому или в любую из существующих?
3.Можно файлы пунктов1 и 2 сложить в одну папку?Спасибо.
Ответить | Ответить с цитатой | Цитировать
# admin 14.05.2016 16:12
Здравствуйте.

В статье подробно описана процедура установки. Мне кажется, что она приведена достаточно подробно и точно. Возможно, мне это лишь кажется...

Первый вопрос я не могу понять. Все слова знаю, но вместе их сложить я не смог. Папка quik это папка, в которой находится сам терминал quik.

Dll файлы должны находиться в папке терминала quik. То есть в той же папке, в которой находится файл info.exe
Ответить | Ответить с цитатой | Цитировать
# konst 14.05.2016 20:53
Доброго вечера,всё подробно расписано,а вопросы у меня уточнились,благ одаря Вам.
1.В папке терминала quik множество еще папок(ВТБ).Там есть папка под названием info_ini . В неё можно положить Dll файлы?
2.При распаковке у меня указывается со значком интернета файлы-- Candle_Rest и просто-сr. Cо значком шестеренки-пара менты конфигурации-та кже просто-сr.Надо ли два этих cr переименовывать в cr.luac и cr.ini ? Спасибо.
Ответить | Ответить с цитатой | Цитировать
# admin 14.05.2016 22:06
1. Положить надо в папку терминала Квик. Если бы нужно или можно было бы положить в другую папку, подпапку, диск, карман, чулан - это было бы написано в явном виде.

2. Переименовывать не нужно. Эти файлы уже имеют необходимые расширения. Ваша windows скрывает расширения от вас. Режим сокрытия расширений зарегистрирован ных типов файлов можно и желательно отключить - вам будет удобнее.
Ответить | Ответить с цитатой | Цитировать
# konst 15.05.2016 11:53
Спасибо за совет.
Ответить | Ответить с цитатой | Цитировать
# Aleksey174 17.10.2016 10:06
Сколько стоит полная версия индикатора? И как оплатить?
Ответить | Ответить с цитатой | Цитировать
# admin 17.10.2016 10:26
Здравствуйте.

В статье есть номер карты.
Ответить | Ответить с цитатой | Цитировать
# Aleksey174 17.10.2016 11:30
А сколько оплатить то?
Ответить | Ответить с цитатой | Цитировать
# admin 17.10.2016 11:55
Решайте сами. Ту сумму, которую вы считаете справедливой.
Ответить | Ответить с цитатой | Цитировать
# Кos 22.02.2017 17:22
Такой момент может кому пригодиться.
Файлы cr.luac и cr.ini надо также положить в папку LuaIndicators. Когда эти файлы были в другой произвольной папке то часики на графике не отображались, хотя скрипт запускался и в списке индикаторов находился, но часы на графике упорно не показывались.
Ответить | Ответить с цитатой | Цитировать
# Snider 06.04.2017 20:45
Оплатил xxx руб. Как снять ограничение по времени?
Ответить | Ответить с цитатой | Цитировать
# admin 06.04.2017 21:04
Пароль у вас в почте
Ответить | Ответить с цитатой | Цитировать
# Snider 06.04.2017 22:00
Спасибо.
Ответить | Ответить с цитатой | Цитировать
# Snider 07.04.2017 18:49
День прошел, пароля нет. Прошу скинуть повторно.
Ответить | Ответить с цитатой | Цитировать
# admin 07.04.2017 20:30
Проверьте папку спам. Если не найдете - пишите мне почтой или в скайпе
Ответить | Ответить с цитатой | Цитировать
# Snider 09.04.2017 15:46
Да, все нашел. Спасибо.
Ответить | Ответить с цитатой | Цитировать
# subspear 26.04.2017 20:29
Оплатил Квитанция: 1493223836331
Ответить | Ответить с цитатой | Цитировать
# Roman-gor 16.02.2018 15:14
Еще можно оплатить полную версию?
Ответить | Ответить с цитатой | Цитировать
# admin 16.02.2018 15:27
Даже необходимо! )
Ответить | Ответить с цитатой | Цитировать
# sapojnik59 04.07.2018 11:03
Здраствуйте,
оплатил за ИНДИКАТОР ВРЕМЕНИ ДО ОКОНЧАНИЯ СВЕЧИ, с карты .... 0350,
Номер документа: 911314
взнос на постройку зимнего приюта для майских жуков.
Ответить | Ответить с цитатой | Цитировать
# djovanni 28.01.2019 09:43
Еще актуально оплатить за полную версию?
Ответить | Ответить с цитатой | Цитировать
# admin 28.01.2019 10:15
На этом сайте все актуально. )))

В той или иной степени )))
Ответить | Ответить с цитатой | Цитировать
# Asd 25.03.2019 15:06
Оплатил полную версию,док.5251 78 карта ....3976. Заранее спасибо.
Ответить | Ответить с цитатой | Цитировать
# tokser 23.05.2019 07:05
Амин привет! Полную версию индикатора получить ещё актуально? со взносом на домик:)
Ответить | Ответить с цитатой | Цитировать
# admin 23.05.2019 08:03
В мире нет ничего более актуального чем взнос на домик!)
Ответить | Ответить с цитатой | Цитировать
# tokser 23.05.2019 12:19
что-то не получается установить индикатор, ругается, такой индификатор уже существует
Ответить | Ответить с цитатой | Цитировать
# admin 23.05.2019 23:05
Ругается не индикатор. Ругается терминал. Если он говорит, что такой идентификатор уже существует, значит вы пытаетесь друг разным графика дать один и тот же идентификатор.
Ответить | Ответить с цитатой | Цитировать
# Eugene Bright 18.10.2019 18:36
Здравствуйте!
Проработал все версии Руководства по QLUA и не нашел, как можно передать в скрипт бота (не индикатора) тайм-фрейм ценового графика.
Есть версия получать ТФ как разницу времени двух любых идущих по порядку свечек:

function GetTimeFrameInSec(TickerName)
-- Берем время свечи из графика. CreateDataSourc e пока не используем, т.к. при необходимости модификации
-- алгоритма, хотим легко добавлять индикаторы.
-- Плюс меньше зависим от коннекта - графики всегда с нами.
local NL=getNumCandles(TickerName.."_Price")
local tL2, nL2, lL2 = getCandlesByInd ex (TickerName.."_ Price", 0, NL-1, 1) -- last свеча
local tL1, nL1, lL1 = getCandlesByInd ex (TickerName.."_ Price", 0, NL-2, 1) -- last свеча

local aTimeFrameInSec = (tL2[0].datetim e.hour - tL1[0].datetime .hour)*3600 + (tL2[0].datetim e.min - tL1[0].datetime .min)*60 + (tL2[0].datetim e.sec - tL1[0].datetime.sec)

return aTimeFrameInSec
end

Но не нравится тот момент, что при изменении фрейма в терминале для "усвоения" нового фрейма скриптом, нужно перезапускать скрипт вручную.
Попытки автоматизироват ь процесс обновления внутри цикла while run=true do ...(здесь обращение к функции определения ТФ)... end
приводят к самоблокировке скрипта при переходе с длинного ТФ на короткий.

Есть ли идеи?
Спасибо.
Ответить | Ответить с цитатой | Цитировать
# admin 18.10.2019 18:54
Это не поможет?

www.bot4sale.ru/.../419-how-to-know-timeframe.html

Ну а отслеживать изменение таймфрейма графика пользователем - это вторая задача. Можно перед каждым обращением к этому графику из скрипта проверять количество свечей на нем. Если оно отличается от предыдущего - вычислять таймфрейм заново.
Ответить | Ответить с цитатой | Цитировать
# Eugene Bright 18.10.2019 19:36
Цитирую admin:
Это не поможет?

www.bot4sale.ru/.../419-how-to-know-timeframe.html

Ну а отслеживать изменение таймфрейма графика пользователем - это вторая задача. Можно перед каждым обращением к этому графику из скрипта проверять количество свечей на нем. Если оно отличается от предыдущего - вычислять таймфрейм заново.

===================================

Спасибо, но, по сути, это то же решение, что и приведенное мной.
Проблема в другом. Видимо, я не очень точно описал проблему.
Вот посмотрите на код, приведенный по Вашей ссылке: там тоже ТФ считается как разность смежных свечек.
Но для того, чтобы вызвать функцию, считающую этот параметр, нужно уже "жить" внутри этого ТФ. Если Вы только что "жили" в ТФ1 = 1 час (согласованный с ним sleep (ТФ1)) и вдруг поменяли на графике на ТФ2=5 минут, то скрипт узнает об этом в тот момент, когда снова обратится к sleep (ТФ2).
Но произойдет факт обновления только через 1 час! А график целый час уже "крутится" в ТФ=5 минут.
Обратная задача (переход с короткого ТФ на длинный) - безболезненный и автоматический (с использованием либо Вашего либо моего вариантов функций).

Вот в чем дело.
Ответить | Ответить с цитатой | Цитировать
# admin 18.10.2019 22:35
Я предложил вам перед каждым чтении данных с графика проверять его таймфрейм. Если он изменился - то скрипт немедленно производит нужные действия
Ответить | Ответить с цитатой | Цитировать
# Eugene Bright 18.10.2019 23:11
Скрипт производит нужные действия немедленно. как только "проснется" после очередного sleep().
И если этот sleep() спал до сих пор 1 час, а фрейм графика поменяли на 5 минут, то об этом изменении скрипт узнает сам только по истечении своего "старого" 1 часа. А потом - да, немедленно перейдет на новый период sleep(), который мы установили в размере 5 минут уже 1 час назад. А что делает скрипт в это время 1 час - 5 минут = 55 минут? Торгует?)))
Ответить | Ответить с цитатой | Цитировать
# admin 19.10.2019 12:23
Он спит и ничего не делает.
Ответить | Ответить с цитатой | Цитировать
# Eugene Bright 19.10.2019 14:06
Именно, спит.
Работать нужно, а он дрыхнет бессовестно)))
Ответить | Ответить с цитатой | Цитировать
# Eugene Bright 18.10.2019 21:15
Другой вариант.

Тайм-фрейм вычисляется в одном скрипте (назовем его Служебный - service.lua), который вызывается путем dofile() из второго (назовем его Главный - souvereign.lua) , основного скрипта, использующего результат расчета ТФ в первом скрипте?
Служебный скрипт
(service.lua)

function main()
while run==true do
...
TF = (функция расчета ТФ по графику)
...
sleep (1 минута)
end
end

Главный скрипт:
souvereign.lua


dofile(service.lua)
...
function main()
while run==true do
...
...
...
sleep (TF)
end
end

Создаем 2 независимых потока.

Что думаете?

ЗЫ: пока писал подумал, что и это не совсем полное решение. Нужен третий скрипт, который отслеживает изменение TF в скрипте service.lua.
Если TF(2) не равен предыдущему своему значению TF(1), то нужно перезапустить скрипт souvereign.lua путем вызова его через тот же оператор
dofile(souvereign.lua).
Так лучше?

Остается только понять, что означает "перезапустить" скрипт из-под другого скрипта?
Ведь чтобы "пере-"запустит ь, нужно сначала просто запустить, потом "закрыть" (прекратить его работу, выгрузить), а после - снова вызвать к жизни (загрузить, запустить и т.п.)...
Ответить | Ответить с цитатой | Цитировать
# admin 18.10.2019 22:37
Вы что то совсем закопались.

Проще всего заменить стандартный индикатор на самописный, который делает то же самое и при начале пересчета создает сигнал для скрипта.
Ответить | Ответить с цитатой | Цитировать
# Eugene Bright 18.10.2019 23:05
Вы не поняли: мы можем создавать любые сигналы, но скрипт, у которого "жизнь" зависит от команды sleep(), не узнает об этом сигнале, пока не проснется в следующей "петле". А спать он будет согласно с
предыдущему фрейму. Значит. нужна сторонняя сила, которая "пнёт" скрипт. Сторонний модуль.

Есть одно решение у Роберту Иерузалимски в разделе "Модули и пакеты" (стр. 190 его "программирован ия на ЛУА":

Чтобы заставить r e q u i r e загрузить один и тот же модуль дважды, мы
просто стираем запись о нем из p a c k a g e . l o a d e d:

p a c k a g e . l o a d e d . = n i l

В следующий раз, когда понадобится этот модуль, r e q u i r e проделает
всю необходимую работу еще раз.

Так что решение нетривиальное, но мне, пока я рассуждал с Вами, стала абсолютно понятна логика. Буду искать реализацию автоматической синхронизации фрейма графика и параметра для sleep().
Ответить | Ответить с цитатой | Цитировать
# admin 19.10.2019 12:17
У вас время sleep равно текущему таймфрейму графика?

Если да, то что мешает сделать так

for I=1, тайм-аут/100 do
if естьсигнал от индикатора() then
ДелаемЧтото()
break
end
sleep(100)
end

Заменяем один sleep() на кучу последовательны х мелких, между которыми проверяем сигнал

Если и такой вариант вас не устраивает, то лучше идти на форумы и пытаться там объяснить свою проблему


В любом случае вы погружаетесь в немыслимые глубины в поисках сложного решения простой проблемы. Хотя простые и понятные решения плавают на поверхности.
Ответить | Ответить с цитатой | Цитировать
# Eugene Bright 19.10.2019 14:04
Цитирую admin:
У вас время sleep равно текущему таймфрейму графика?

Если да, то что мешает сделать так

for I=1, тайм-аут/100 do
if естьсигнал от индикатора() then
ДелаемЧтото()
break
end
sleep(100)
end

Заменяем один sleep() на кучу последовательных мелких, между которыми проверяем сигнал

Если и такой вариант вас не устраивает, то лучше идти на форумы и пытаться там объяснить свою проблему


В любом случае вы погружаетесь в немыслимые глубины в поисках сложного решения простой проблемы. Хотя простые и понятные решения плавают на поверхности.


Спасибо, что послали...
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий