Индикатор времени до окончания свечи
- Версия: 3.5
- Требования: Quik 8.6
- Размер: 1.45 MB
- Просм: 9269
- Добавлено: 05.02.16
- Скачано: 1584
- Изменено: 09.12.21
Следуем моде на умные часы:
Представляем вам умные часы от компании Bot4Sale! 
Индикатор, показывающий на графике время, оставшееся до закрытия свечи.
Установка
Архив содержит 2 версии: демонстрационную и полную. Сеанс работы демонстрационной версии составляет 10 минут, после чего скрипт необходимо перезапустить. В полной версии ограничений нет.
- Прочите файл readme.html
- Разархивируйте полученный с сайта файл. Файлы демонстрационной версии не защищены паролем.
- Поместите файл bot4sale64.dll в папку терминала quik
- Если в папке терминала quik отсутствует подпапка LuaIndicators, создайте её.
- Поместите файл Candle_Rest.lua в папку LuaIndicators.
- Файл cr.lua положите в любое удобное вам место. В ту же папку поместите звуковые файлы .wav
- Запустите скрипт cr.lua посредством меню терминала Сервисы-Lua скрипты.
- Графику цены инструмента (или любому другому графику) назначьте идентификатор. Для этого вызовите его свойства и во вкладке Дополнительно введите идентификатор
- Теперь можно на этом графике запустить индикатор. Его вы увидите в списке доступных индикаторов. В настройках индикатора в поле Идентификатор графика цены укажите тот же идентификатор, который вы только что дали графику цены. При необходимости настройте и остальные параметры индикатора.
Если Вам необходимо, чтобы индикатор исполнял звуковую сигнализацию, укажите в параметрах имя звукового файла и время до окончания свечи, когда необходимо проиграть звук. Например, при задании 0-12-34 сигнал будет произведен за 12 минут 34 секунды до завершения времени свечи (1-23-34 означает 1 час, 23 минуты, 34 секунды).
Если звуковая сигнализация вам не нужна, не указывайте название звукового файла в настройках индикатора.
Демонстрационная версия по функционалу аналогична полной, но каждые 10 минут просит нажать на кнопку.
История версий
Версия | Описание |
---|---|
3.5 |
|
3.4 |
|
3.3 |
|
3.2 |
|
3.1 |
|
3.0 |
|
2.0 |
|
1.4 |
|
1.3 |
|
1.2 |
|
1.1 |
|
1.0 |
|
0.99 |
|
Полная версия идет в обмен на взнос на постройку зимнего приюта для майских жуков. Номер банковской карты и электронные кошельки:
Размер взноса не регламентируется, но торг здесь неуместен! )))
Есть предложения? - Пишите.
делал как в описании, но пока результат ноль.
скажите - 10 минут ограничение - потом перезапустить скрипт :
1 - он сам остановится ? или просто перестает исполнять свои функции
2 - нужно ли перезапустить квик что бы скрипт заработал опять?
Если не получилось вообще ничего увидеть -значит, что-то забыли установить или сделали не так, как написано в порядке установки.
Если индикатор запустился, но не получается увидеть символ часиков и получить оповещение перед завершением свечи - значит, вы не указали в параметрах индикатора время, когда это звуковое оповещение нужно издавать. Зададите это время правильно - часики появятся и дуделка будет дудеть.
Перезапускать нужно файл cr.lua в меню Сервисы-Скрипты Lua
Если что-то совсем не получается - звоните скайпом
Вся засада оказалась в самом квике ( восстановил его из резервной копии - и все заработало с первого раза)
Как отодвинуть вправо - понятно - нужно в ini файле указать расстояние от правой свечки
как их в верх-вниз можно двигать?
Ответ. Никак. Разработчики терминала не предоставили никаких возможностей для этого. От слова "совсем".
Пишите им, ругайтесь, требуйте.... Можно нецензурно.
-сделать под них отельный график в отдельно окне,
- убрать все лишнее надписи
- оставить 1 последний бар
- сделать сдвиг графика на 1 интервал
-, сделать тонкими границы окна и убрать заголовок
- сделать активным поверх всех окон
вопрос - а можно ли менять размер шрифта?
Спасибо за идею!
Касаемо шрифта. На текущий момент шрифт не масштабируется. Это не совсем "windows font". Я могу сделать масштабирование шрифта, но мне непонятна надобность оного. Сможете обосновать картинкой и пояснениями?
Получается что масштабировать пространство вокруг часиков можно,
а сами часы подогнать под размер окна нельзя.
сейчас шрифт нормально читаемый, возможность его увеличить - это что то вроде, дополнительная возможность настроить рабочее место более комфортно
к какому индикатору и с какими параметрами - что бы он возле нуля был?
мои эксперименты в этом направлении пока нормального результата не дали) в индикаторах я не силен
пока самый лучший вид получился , если взять просто
"График % изменения закрытия" - и вытянуть по оси в одну линию, часы никуда не скачут, и хорошо смотрятся
секундная цифра и кружок близко друг возле друга - и сливаются , по возможности отодвинуть бы их хоть на немного друг от друга
(хотя это у меня может к концу дня уже в глазах плывет ))
1.При распаковке демо индикатора времени файлам cr надо добавлять luac и ini?Положить их в любую папку quik?
2.Файл staticvar.dll и w32.dll переместить в папку quik созданную самому или в любую из существующих?
3.Можно файлы пунктов1 и 2 сложить в одну папку?Спасибо.
В статье подробно описана процедура установки. Мне кажется, что она приведена достаточно подробно и точно. Возможно, мне это лишь кажется...
Первый вопрос я не могу понять. Все слова знаю, но вместе их сложить я не смог. Папка quik это папка, в которой находится сам терминал quik.
Dll файлы должны находиться в папке терминала quik. То есть в той же папке, в которой находится файл info.exe
1.В папке терминала quik множество еще папок(ВТБ).Там есть папка под названием info_ini . В неё можно положить Dll файлы?
2.При распаковке у меня указывается со значком интернета файлы-- Candle_Rest и просто-сr. Cо значком шестеренки-пара менты конфигурации-та кже просто-сr.Надо ли два этих cr переименовывать в cr.luac и cr.ini ? Спасибо.
2. Переименовывать не нужно. Эти файлы уже имеют необходимые расширения. Ваша windows скрывает расширения от вас. Режим сокрытия расширений зарегистрирован ных типов файлов можно и желательно отключить - вам будет удобнее.
В статье есть номер карты.
Файлы cr.luac и cr.ini надо также положить в папку LuaIndicators. Когда эти файлы были в другой произвольной папке то часики на графике не отображались, хотя скрипт запускался и в списке индикаторов находился, но часы на графике упорно не показывались.
оплатил за ИНДИКАТОР ВРЕМЕНИ ДО ОКОНЧАНИЯ СВЕЧИ, с карты .... 0350,
Номер документа: 911314
взнос на постройку зимнего приюта для майских жуков.
В той или иной степени )))
Проработал все версии Руководства по 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
приводят к самоблокировке скрипта при переходе с длинного ТФ на короткий.
Есть ли идеи?
Спасибо.
www.bot4sale.ru/.../419-how-to-know-timeframe.html
Ну а отслеживать изменение таймфрейма графика пользователем - это вторая задача. Можно перед каждым обращением к этому графику из скрипта проверять количество свечей на нем. Если оно отличается от предыдущего - вычислять таймфрейм заново.
===================================
Спасибо, но, по сути, это то же решение, что и приведенное мной.
Проблема в другом. Видимо, я не очень точно описал проблему.
Вот посмотрите на код, приведенный по Вашей ссылке: там тоже ТФ считается как разность смежных свечек.
Но для того, чтобы вызвать функцию, считающую этот параметр, нужно уже "жить" внутри этого ТФ. Если Вы только что "жили" в ТФ1 = 1 час (согласованный с ним sleep (ТФ1)) и вдруг поменяли на графике на ТФ2=5 минут, то скрипт узнает об этом в тот момент, когда снова обратится к sleep (ТФ2).
Но произойдет факт обновления только через 1 час! А график целый час уже "крутится" в ТФ=5 минут.
Обратная задача (переход с короткого ТФ на длинный) - безболезненный и автоматический (с использованием либо Вашего либо моего вариантов функций).
Вот в чем дело.
И если этот sleep() спал до сих пор 1 час, а фрейм графика поменяли на 5 минут, то об этом изменении скрипт узнает сам только по истечении своего "старого" 1 часа. А потом - да, немедленно перейдет на новый период sleep(), который мы установили в размере 5 минут уже 1 час назад. А что делает скрипт в это время 1 час - 5 минут = 55 минут? Торгует?)))
Работать нужно, а он дрыхнет бессовестно)))
Тайм-фрейм вычисляется в одном скрипте (назовем его Служебный - 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).
Так лучше?
Остается только понять, что означает "перезапустить" скрипт из-под другого скрипта?
Ведь чтобы "пере-"запустит ь, нужно сначала просто запустить, потом "закрыть" (прекратить его работу, выгрузить), а после - снова вызвать к жизни (загрузить, запустить и т.п.)...
Проще всего заменить стандартный индикатор на самописный, который делает то же самое и при начале пересчета создает сигнал для скрипта.
предыдущему фрейму. Значит. нужна сторонняя сила, которая "пнёт" скрипт. Сторонний модуль.
Есть одно решение у Роберту Иерузалимски в разделе "Модули и пакеты" (стр. 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().
Если да, то что мешает сделать так
for I=1, тайм-аут/100 do
if естьсигнал от индикатора() then
ДелаемЧтото()
break
end
sleep(100)
end
Заменяем один sleep() на кучу последовательны х мелких, между которыми проверяем сигнал
Если и такой вариант вас не устраивает, то лучше идти на форумы и пытаться там объяснить свою проблему
В любом случае вы погружаетесь в немыслимые глубины в поисках сложного решения простой проблемы. Хотя простые и понятные решения плавают на поверхности.
Спасибо, что послали...
RSS лента комментариев этой записи