Владимир написал: Что вы фигнёй маетесь, господа? Я вот тоже "разработал свою систему создания торговых роботов в QUIK", хотя появился здесь (и написал свою первую строчку на Lua) в сентябре прошлого года. Скрипт свой я уже и не помню, когда правил в последний раз. В ём сейчас 16 функций, включая main и прочие OnStop, объём кода менее 20 кило, и на все "версии компилятора, ключи компиляции и режимы линковки" мне давно пилювать с высокой колокольни. Кажется, при запуске скрипта Квик чо-то там компилирует - ну и пусть себе компилирует, а я скармливаю ему чистейший Lua как интерпретатору. Всё прекрасно работает! Сейчас я пишу совсем уж сумасшедший скрипт, уже не с трёхмерными, а с четырёхмерными массивами, с разветвлённым диалогом, и я уже совершенно точно знаю, что и он будет прекрасно работать - я просто не вижу, откуда могут появиться проблемы. Вернее, я пока пишу описание, то бишь набросок ТЗ, и пишу уже не первую неделю - задача АЛГОРИТМИЧЕСКИ сложная, а вот ТЕХНИЧЕСКИЕ вопросы решены уже сейчас. Ну, может, вылезет количество функций и/или объём кода за тридцатник - и чего? А может даже и не вылезет. Нафига вам это надо - не понимаю...
Нет, соврал - парочка нерешённых технических проблем ещё осталась:
1. Мне хотелось бы получать с сервера свечи (от 15-минутных и выше), при этом меня интересуют только последние две свечи по каждому таймфрейму, можно даже без коллбеков - только доступ к этим данным.
2. Я не умею программно прочесть состояние своего портфеля (та табличка, которая зелёненьким цвет текста выводит). Портфель я, ессно, веду у себя, но время от времени случаются сбои и рассогласование содержимого портфеля с точки зрения брокера и самого скрипта. Примерно раз в неделю я это дело проверяю (вручную) и убираю нестыковки. А хотелось бы делать это программно, примерно раз в полчаса. Никто не знает, как это сделать?
"- Всё хорошо, прекрасная маркиза, Дела идут и жизнь легка. Ни одного печального сюрприза За исключением пустяка. Так, ерунда, пустое дело -- Кобыла ваша околела. А в остальном, прекрасная маркиза, Всё хорошо, всё хорошо."
Кроме того, циклы используют даже программы индикаторов разработчиков, что является крайне расточительным и не профессиональным решением для программ реального времени. Учитесь обходится без циклов в прогах реального времени и будет Вам счастье. --------------- Применение векторов на C в скриптах на луа сократит требуемый объем памяти и повысит быстродействие в десять и более раз.
Albert Eritsyan написал: Данная опция обеспечит возможность расположения этих файлов на HDD, в то время как программа сама будет находиться на SSD (чтобы не затирать SSD временными большими файлами).
Странное желание. Основное время запуска QUIK (а только это время волнует пользователя) занимает как раз чтение файлов с накопленными данными. Если у вас нет места на SSD - просто перенесите весь QUIK на HDD. Ну если вы готовы мириться с упавшей от этого скоростью запуска терминала.
Реально, куда больше времени уходит после чтения данных с дисков на синхронизацию и начало получение данных с сервера, вот тут-то info.log может разрастись до гигантских размеров. Пользователей же волнует суммарное время, а не время чтения с диска, так как им нужно синхронизированное поступление данных с сервера, последнее при переподключении терминала и превалирует над временем чтения с диска. Но, воля Ваша, оценивайте как "странное" желание.
Для хранения данных в КВИК используется проецируемые в память файлы т е данные хранятся на диске, а в рам отображаются лишь нужные страницы файлов. При работе в реальном времени информация с сохраненных файлов используется лишь на несколько процентов, так как история данных в реальных сделках не используется. Поэтому на скорость торговли размер сохраненных файлов не влияет. На скорость влияют те циклы, которыми как правило заполнены самопальные программы торговли.
Добрый день, проблема следующая. ------------------ Использую в торговых роботах нейронные сети. ----------------------- Если нейронные сети встраивать на основе QLUA , то все работает медленно и кушает много памяти. Поэтому полноценный процесс обучения практически не реализуем. ------------------------------------- Реализовал векторную алгебру в виде библиотеки на CИ для QLUA. Скорость вычислений возрастает в 7-20 раз, а затраты памяти сокращаются во столько же. Процесс обучения реализуем. ------------------------------------------------ Но очень раздражает необходимость делать бессмысленную работу перегоняя данные туда и обратно а потом обратно и туда. Сначала функциями QLUA приходится вытаскивать из архива квика данные , преобразовывая их в формат луа, а потом функциями из своей библиотеки обратно их преобразовывать из формата луа в формат CИ --------------------------------- Просьба к разработчикам выложить API С для обращения к хранилищу данных терминала QUIK. ----------------- Спасибо
Вопрос к разработчикам. что делать? -------------------------------------- брокер Сбербанк QUIK версия 8.7.1.3 (для предыдущей было тоже самое) Сейчас - утренняя сессия изменяются данные лишь в стакане Графики и таблица позиций не обновляется. Не отображаются новые сделки. На графиках лишь вчерашний день. Так часто бывает и в начала вечерней сессии.
Владимир написал: TGB, Я не знаю, что там за "метрики берутся за основу" - я работаю только с текущими курсами (ну или там с минутными свечами, в которых меня интересует только цена закрытия), и мне абсолютно по барабану, чем именно вызваны движения курса: поведением толпы, инсайдерской информацией, вбросами в СМИ или ещё чем. Мой алгоритм работает на исторических данных точно так же, как и на реальных. И работает (тьфу-тьфу!) хорошо!
если не секрет, то покажите картинку работы на реальном рынке и картинку работы на этом же участке на исторических данных. --------------- Т е один и тот же участок на котором Вы реально торговали и после этого в тесте прогнали свой алгоритм. --------------- Спорю, что сделки будут разные. одинаковыми они будут лишь у бога или дьявола, полагаю вы не из их числа.
тот факт что закрытие свечи происходит задним числом приводит к тому, что все роботы совершающие сделки на истории на закрытии свечи ВСЕГДА более прибыльные (иногда очень прибыльные), чем в реальном времени . На этом основан лохотрон по торговле в интернете такими роботами.
s_mike@rambler.ru написал: Свеча является закрытой тогда, когда появилась новая.
А не бывает такого, что приходит значение по предыдущей свече после прихода значений по новой?
бывает: 1) если это значение не было загружено ранее. 2) если это свеча индикатора, то так будет всегда для всех индикаторов, которые "заглядывают в будущее" - таких как fractal, ZigZag, и т д --------------------- Сама свеча цены - это тоже индикатор заглядывающий в будущее, поэтому закрытие свечи происходит лишь по истечению времени интервала, а не по времени последней сделки. ------------- В скрипте индикатора закрытие свечи определяется условием неравенства текущего индекса onCalculate предыдущему.
swerg написал: Мне лень читать в ВТБ, а в Финам попалось быстро http://zaoik.finam.ru/broker/regulations Берем документ "23.11.20 актуально с 26.11.20.pdf" http://zaoik.finam.ru/Files/documents/disclosure/finam/broker/regulations/2010_ %D0%A0%D0%B5%D0%B3%D0%BB%D0%B0%D0%BC%D0%B5%D0%BD%D1%82%20%D0 %B1%D1%80%D0%BE%D0%BA%D0%B5%D1%80%D1%81%D0%BA%D0%BE%D0%B3%D0 %BE%20%D0%BE%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0 %D0%BD%D0%B8%D1%8F%2023.11.20%20%D0%B0%D0%BA%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE% 20%D1%81%2026.11.20.pdf
см. пункт 22.2, особенно второй абзац пункта 22.2.2.
автор темы указал, что надо транслировать сделки клиента. -------------------- В п 22.2 речь идет о биржевой информации, которая определена в п 22.2.1 так: представляющая собой цифровые данные и иные сведения неконфиденциального характера о ходе и итогах торгов на различных рынках организатора торговли, а также иная информация, определяемая правилами проведения торгов на соответствующем рынке, правом на использование которых обладает организатор торговли. --------------------- Полагаю, что сделки конкретного клиента имеют конфиденциальный характер и не транслируются брокерам все его клиентам, а правом на использование этой информации обладает клиент, так как сделки выполнены за его счет и в его интересах.
Максим написал: Здравствуйте, подскажите, есть ли возможность получение значений индикатора МАСД не открывая сам график и не рассчитывая самому в скрипте. Постановка задачи: Пройтись по таблице текущие торги и отобрать акции с определенным значением МАСД.
Виктор написал: Ищу программиста. Вот по этому ТЗ мне сейчас пишут советника на форекс.Хочу такой же для фьючерсов и фондового рынка на LUA
Стратегия в общих чертах - на основе стандартного индикатора : ZigZag и ЗигЗаг поинтер (стрелочный). Два варианта торговли вариант № 1 без мартина в т.ч. с отработкой паттернов, вариант №2 с мартином.
Торговый сигнал на покупку: Индикаторы ZigZag и ЗигЗаг поинтер (стрелочный) должны обозначить минимум. Нужно подождать, пока отрисуется один, два или более свечей справа от минимума (настраиваемый параметр), на одном уровне + -, таким образом, с высокой вероятностью должен подтвердиться разворот. Входим в рынок на покупку рыночным или отложенным ордером (настраиваемый параметр), после чего устанавливается стоплосс (в варианте без мартина) )на уровне 5-10 пунктов ниже минимума индикатора (настраиваемый параметр). Сделка будет закрываться, когда индикатор установит максимум. Это один вариант, второй описан ниже пункт 12. Как советник отрабатывает отложенные ордера см. пункт 13 Торговый сигнал на продажу: Индикаторы ZigZag и ЗигЗаг поинтер (стрелочный) должны обозначить максимум. Затем выжидаем один, два бара или более баров (настраиваемый параметр) на одном уровне + -, входим на продажу. Стоплосс также устанавливаем на расстоянии 5-10 пунктов выше максимума (настраиваемый параметр). Позицию держим до тех пор, пока индикатор не установит минимум. Как советник отрабатывает отложенные ордера см. пункт 13
Важно – советник должен входить в рынок (рыночным или отложенным ордером) как только закрепился уровень ниже/ выше которого цена не идет. Закрепление уровня, который рынок не может пробить и происходит разворот цены – это основа стратегии. В советнике ввожу понятие «коридор» и если рынок не может пробить ниже/выше данный коридор и цена разворачивается – входим в позицию - отложкой или рыночным. Задача максимально точно определять точки разворота. Один из вариантов – пока справа не отрисуется энное количество свечных свечей примерно на этом же уровне +/-. Пример коридора - индикаторы отрисовали минимум, 2 свеча откатилась условно на 50 пипсов, 2, 3 примерно на этом же уровне, 4 вернулась на уровень коридора, где отрисовался минимум +/- и не может его пробить - входим рынок рыночным или посмотрю может будет более безопаснее входить лимитным ордером, вдруг цена откатится еще ниже. Если цена откатилась и индикаторы перерисовались этот лимитный ордер удаляется. Ждем пока благоприятной рыночной ситуации. Как советник отрабатывает отложенные ордера см. пункт 13. Диапазон коридора, в котором ходит цена настраиваемый параметр. Условно в настройках стоит 3-5 свечей, после отрисовки индикатором минимума/максимума и рынок ушел выше/ ниже коридора т.е. в рынок не вошли, Но рынок вернулся на 8-10,10 свече в этот коридор, в этот уровень, может чуть выше/ниже и не пробил его на следующей свече условно это будет 9, 11 свеча входим рынок лимиткой на пробой или рыночным ордером. См. 13 пункт как выставляется отложка. А)Важно. Закрытие по ордера по обратному сигналу зигзага. Ордер не должен закрываться моментально. Возможно рынок пойдет дальше и можно будет взять максимальный профит. Как только происходит закрепление уровня и вот вот будет разворот только тогда происходит закрытие рыночного ордера. Надеюсь стратегию правильно описал и Вам все понятно. Настройки. 1.BUY = true; //разрешить торговать 2.SELL = true; //разрешить торговать 3.LOT = 0.01; 4.Количество свечей для открытия ордера. 4.1. Уровень если условно 4 свеча выше (ниже) на +- 35 пипсов (задается в настройках) уровня минимума (максимума) то вход в рынок не происходит. Вход в рынок исключительно в рамках определенных уровней. Если это минимум то не более условно +35 пипсов. Если максимум – 35 пипсов.
5. Тейк профит 6. Стоп лосс. 7.Советник отображает индикатор Зиг Заг поинтер и ЗигЗаг на графике. Настройки Зиг Заг поинтер и стандартного индикатор Зиг Заг (буду подбирать оптимальные, ниже стандартные) Zigzag_Depth = 12; Zigzag_Deviation = 5; Zigzag_Backstep = 3; 8.Время начала работы (запуска) по времени терминала 9.Время окончания работы по времени терминала 10.Таймфрем на котором будет работать советник. 11.Выбор как торговать: 11.1.Торговать по индикатору ЗИГ ЗАГ поинтер (true, false) 11.2.Торговать по стандартному индикатору ЗИГ ЗАГ(true, false) 11.3.Использовать оба индикатора – сигнал поинтера должен подтверждается стандартным индикатором и наоборот (true, false)
12.Выше описан вариант, как ведется открытый рыночный ордер пока индикаторы не обновят минимум или максимум и ордер закрывается (true). Возможность отключить, прописав false и закрывать ордер по тралу. Включить трал - true Настройки трала а) сам трал (15, 20, 30 и т.д. пипсов) б) шаг трала (1,2, 5 пипсов) Если включен трал, как описано выше стоп переносится в безубыток и тралится согласно настройкам. Буду пробовать пипсовать на минутном таймфрейме. Поэтому лимитные ордера, трал все должно работать четко. Еще один вариант с виртуальным ТР по достижении которого если цена пошла дальше без отката включается трал с настройками и ордер тралится чтобы ловить импульсные движения на рынке.
13.Выставлять отложенный ордер (true. false) 13.1. Для большей безопасности скорее всего буду работать отложками, но это не означает, что рыночные ордера не должны выставляться, буду все пробовать, все варианты. В случае отложенного лимитного ордера выставляется отступ от, например, 5 свечи (условно 5,10,15-50 пипсов, настраиваемый параметр. Еще раз - важный момент отсчет расстояния отложки идет от закрытия условно 3, 4, 5 свечи, тела или хвостика.
14. В случае если рыночная ситуация сложилась так, что советник 3 раза подряд поймал стопока (настраиваемый параметр), советник отключается и запускается на следующий день во время начала работы.
15. Выбрать выше описанный вариант торговли советника. Вариант №1 (true, false)
16. Выбрать вариант торговли с усредняющей сеткой. Вариант № 2 (true, false). 17. Вариант №2 - советник строит усредняющую сетку ордеров. Открылся рыночный ордер, но рынок не развернулся т.е. все что не сработало выше. В этом случае настройки: Шаг сетки Тейкпрофит Максимальное количество колен. Условно прописывается 5 колен. Если советник открыл 5 колено т.е. последнее, в условиях прописанных выше, советник - выше (ниже) выставляет стоплосс. Стоп лосс (условно 200 пипсов) коэффициент умножения. Дополнительные Ограничения от слива депозита при мартине настройки вариант № 2: - закрыть сетку по ограничению в просадке в валюте депозита - ограничение по времени до принудительного закрытия сетки по лимиту времени. - ограничение по % просадки
18.Максимальный размер спреда при котором советник не работает, условно прописывается 15 пипсов. Если спред равен или выше советник не работает однозначно. 19. Мейжик ордеров. 20. Информ панель. Вывод текстовой информации в левом верхнем углу графика. Информ панель можно свернуть. Развернуть. а) профит (убыток) по текущему рыночному ордеру. Сделать это в рамочке чтобы это было красиво б)профит (убыток) сегодня в валюте депозита и процент прибыли. в) профит (убыток) за неделю в валюте депозита и процент прибыли г) профит (убыток) месяц в валюте депозита и процент прибыли д) Всего профит (убыток) в валюте депозита и процент прибыли с) Текущий спред. - текущая просадка (прибыль) в валюте депозита по открытым позициям и сколько осталось до принудительного закрытия по лимиту просадки в деньгах. - показывать время «жизни» ордера (сетки ордеров) в часах и минутах и количество время оставшегося до принудительного закрытия по лимиту времени. - % просадки по текущей сетке и сколько осталось до принудительного закрытия по ограничению в просадке. - количество открытых рыночных ордеров - объем всех рыночных ордеров составляет условно - общий своп по текущей сетке ордеров в валюте депозита
Размер и цвет шрифта настраиваемый. Информационное окно сделать на фоне. Цвет фона настраивается Ниже информационного окна кнопка закрыть ордера. Закрываются ордера по текущей валютой паре. Работа советника по паттернам 1.Вход в рынок по паттерну 123. Зиг заг показал минимум-максимум. В случае если рынок вышел из коридора, на 2, 3 свече ( в настройках 5) но частично вернулся на условно на 8-10 свече не войдя в коридор образовав паттерн 123, в точке два советник выставляет отложку. Настройки Включить отработку паттерна 123 (true. False) Расстояние от точки два до отложки. Закрытие по обратному сигналу индикатора Зигзаг т.е. как и при входе в «коридоре». См. пункт А) как должен закрываться рыночный ордер по обратному сигналу зиг-зага. Стоплосс. Показать на графике визуально, что советник отработал паттерн 123. Графическими фигурами это должно быть отмечено в терминале на графике. Отправить сообщение на эл. Почту (телеграмм), что советник по такой-то валютой паре отработал паттерн 123. Взял в профит энное количество пипсов и заработал условно 50 центов.
2.Вход в рынок по паттерну двойная (тройная) вершина, двойное(тройное) дно. Зиг заг показал минимум-максимум. В случае если рынок образовал паттерн двойная (тройная) вершина двойное(тройное) дно в точке два советник выставляет отложку. Как советник выставляет отложку см. пункт 13,1 Настройки Включить отработку паттерна дно и вершина (true. False) Расстояние от точки два до отложки. Закрытие по обратному сигналу индикатора Зигзаг т.е. как и при входе в «коридоре». См. пункт А) как должен закрываться рыночный ордер по обратному сигналу зиг-зага. Стоп лосс. Показать на графике визуально, что советник отработал паттерн дно, вершина. Графическими фигурами это должно быть отмечено в терминале на графике. Отправить сообщение на эл. Почту (телеграмм), что советник по такой-то валютой паре отработал паттерн дно, вершина. Взял в профит энное количество пипсов и заработал условно 50 центов. Как советник будет отрабатывать паттерн 123 напишите.
Е-ДРОБа Советник в советнике. Пробитие верхних и нижних экстремумов отложенными ордерами. Как только зиг заг отрисовал минимум от предыдущего максимума советник выставляет отложку на пробитие максимума. Как только зиг заг отрисовал максимум от предыдущего минимума советник выставляет отложку а пробититие минимума. Код есть - советник e-Droba-ZigZag работает отложенниками на пробой экстремумов по тренду, есть и трал, и перевод в безубыток. Настройки: 1.Включить е-дроба(true. False) Если включен настройки 1.2.Стоп лоcc 1.3. Тейк. Если тейкпрофит (true). 1.4. Если тейк – False, то ордер тралится Трал. Настройки трала - сам трал в пипсах и шаг трала. 1.5. Лот фиксированный. Для е-дроба должен быть отдельный лотаж. Настройки индикатора зигзаг такие же как в основе. 1.6. Расстояние от максимума/ минимума где советник выставляет отложку. 1.7. Показать на графике визуально, что советник отработал графическими фигурами это должно быть отмечено в терминале на графике. Отправить сообщение на эл. Почту (телеграмм), что советник по такой-то валютой паре отработал паттерн дно, вершина. Взял в профит энное количество пипсов и заработал условно 50 центов.
4.Скорость движения рынка. Советник определяет скорость движения рынка – зиг-заг отрисивал минимум/максимум и на следующей условно на 15 минутной свече рынок прошагал 100 пипсов и более т.е. высокая скорость движения рынка. Выше/ниже условно 15 минутной свечи советник выставляет отложку. Настройки Включить отработку высокой скорости движения рынка (true. False) Выставлять отложенный ордер на определенном таймфрейме в случае если рынок прошагал энное количество пипсов. Количество пипсов от свечи, или хвоста свечи до отложки. Таймфрейм на котором советник определяет скорость Количество пипсов которое пройдет рынок на определенном таймфрейме. Фиксированный лот Стоп лосс. Для чего это нужно – зиг-заг отрисовал минимум/максимум рынок резко развернулся и на второй свече полетел вверх/вниз. Закрытие происходит по обратному сигналу индикаторов ЗИГ ЗАГ Ловить в т.ч. резкие развороты и движения рынка.
21. Дополнительные фильтры. Мои варианты. Предложите свои А) Прикрутить индикатор ???
22. Количество попыток открытия ордеров. Задача - свести убыточные входы к нолю.
Предложите дополнительные фильтры, которые будут отсекать ложные входы и меньше ловить стопаков. И по максимуму брать профитное движение.
Условие - код сделать блоками и каждый блок закомментировать. Условно этот код индикатор зиг заг Это индикатор параболик. Это индикатор булс. Это трал и т.д. Да и хороший программист всегда даже для себя комментирует код. Тогда все ясно и понятно где и что. Все настройки советника вынести в «шапку». Советник передается с открытым кодом. Условие после передачи 10 торговых сессий на тестирование. Если что-то нужно дорабатывать или обнаружены ошибки, баги и или советник работает не так как описано в стратегии срок тестирования продлевается – советник дорабатывается. После тщательно тестирования - все Ок - оплата. Условие, 6 месяцев гарантии на программный продукт. Если обнаружится ошибка, нужно будет поправить по гарантии.
Подводя итог - советник математик, который катается по волнам - должен считать все четко, выводить достоверную информацию в информ панель и все должно работать четко без багов и ошибок.
-- тел. +79148601234 (ватсап) +79004069177 (ватсап)
Немного огорчу Вас. ZigZag , а также fractal в Квике - это индикаторы, которые заглядывают в будущее. Такие индикаторы прибыльно торгуют лишь на истории, и их успехи очевидны лишь на исторических графиках. -------------------- Реально торгующий на этих индикаторах робот будет просто убыточным. ------------------------------------- Блажен, кто верует..
swerg написал: Ладно, хрен с ним с этим троллем. Я на самом деле никак не могу получить ответ на свой вопрос, который давно меня заботит. Ну вот как это сделано в метатрейдере, в других терминалах? нигде ж нет никакого main(). Есть по сути просто скрипт с колбеками (да? я не ошибаюсь?) И вот когда в этих системах прекращается вызов этих колбеков?? я никак не могу этот момент найти, или ищу плохо. Или там после запуска скрипта вызов из него колбеков никогда не прекращается? Расскажите, а
Вообще-то, решение в виде бесконечного цикла , которое обеспечивает работу системы известно давно и широко используется, например в ОС микроконтроллеров (arduino).
Такое решение типично для одноядерных SOC.
Полагаю что проблема КВИКа в том, что VM LUA встраивалась в уже готовую систему, вместо того, чтобы дать пользователям нормальный API к функциям торгового терминала.
Кроме того, как неоднократно подчеркивали сами разработчики, они встраивали луа не для разработки торговых роботов , а для буратин и хрен знает зачем.
Ну кто Вам этого урода слепил, к тому и обращайтесь. Кому интересно в чужом г...не ковыряться . И сейчас угадаю.Типа -надо делать очевидно очень простые правки (как правило за символическую плату)
Какая может быть вытесняющая модель без потоков, шедулера (планировщика потоков), синхронизации?
Обыкновенная. Все скрипты есть просто куски текста, так что никаких потоков там нет и быть не может. Дойдут руки у интерпретатора - выполнит команду, нет - так и будут лежать голым текстом.
Да ничего я не придумывал"! Синонимы команд - обычный сервис: кому-то удобнее begin-end, кому-то {} - почему бы не дать такую возможность? А уж в именах объектов и их атрибутов синонимов и вообще может быть выше крыши (я имею в виду базы данных).
Не знаю, что за книгу вы написали и здесь пиарите, но в языках и виртуальных машинах вы ноль без палочки ------------------ Где Вы увидели интерпретатор в реализации луа в квике? Это VM а не интерпретатор и там не куски текста а байт код - т е это машинный язык именно VMLua. ------------------------ Пардон, что то я сильно бисер разметал...
Старатель написал: Что интересно, если переменную удалить сразу после использования, то скрипт станет занимать больше памяти.
Код
local a = 0
print (collectgarbage( "count" )) --> 23.4453125
Код
local a = 0
a = nil
print (collectgarbage( "count" )) --> 23.453125
рaзница в 8 байт. Как раз длина строчки a = nil )
a=nil - не удаляет переменную, а присваивает ей значение nil а скрипт естественно длиннее на строку a=nil. ------------------------------------ Чудес не бывает, бывает лишь отсутствие знаний.
Владимир написал: В своём коде я "обвистовал" все присвоения tostring или tonumber - пока работает (а мне, собственно, осталось только отладить подачу заявок и контроль их исполнения, да обработку событий от юзера), но замечания к реализации остались. На код глядеть местами тошно, но это мелочи. Однако, есть и довольно важные замечания. Попробую их изложить по группам:
I. Настоятельно рекомендуемые к исправлению:
1. У меня все до единого обращения к функциям другого потока (SetCell, SetColor и прочие) выполняются только после контроля флага останова. Тем не менее, даже после этого мне доводилось пару раз так "удачно" нажать на кнопку "остановить", что управление в main больше не возвращалось, скрипт завершался принудительно, и вместо записанного файла результатов работы скрипта я получал шиш с маслом. Здесь уже высказывалось мнение, что это "на 100% зона ответственности QUIK, и я с ним согласен. Я отслеживаю эту ситуацию по наличию или отсутствия финального message("Скрипт остановлен!") и по нулевому размеру файла результатов, но это же ненормально! Как и бесконечные "if f then ... end".
2. Как и первое предложение, это высказывалось уже давно, и не исправляется ГОДАМИ! Как и в первом случае, я не понимаю (и не хочу понимать!) почему "для того, чтобы строки отображались, необходимо, чтобы вызов CreateWindow() производился ДО процедуры добавления строк в таблицу". Здесь участники дискуссии, на мой взгляд, очень убедительно показывали, что такого быть не должно, но хотя бы внесите в описание языка эту "особенность"! Ведь многие (особенно новички) даже не подозревают о таких "нюансах" и тратят многие часы на отладку того, что в принципе не может быть отлажено.
3. Некоторые функции допускают необязательные аргументы (например, основание системы счисления в tonumber), а другие - нет. Так, SetColor (iTable, iRow, iCol, BCol, TCol) НЕ работает, а если подставить туда два дополнительных аргумента , SelBCol, SelTCol, равные QTABLE_NO_INDEX (-1) - начинает работать! Поскольку мне совершенно не были нужны выделенные ячейки, до необходимости переделать вызов в SetColor (iTable, iRow, iCol, BCol, TCol, SelBCol, SelTCol, -1, -1) без подсказки от службы техподдержки я бы просто не додумался НИКОГДА!
II. Очень хотелось бы, но это уже скорее ненаучная фантастика:
1. Определение типов данных программистом, типа STRING s, NUMBER n, BOOLEAN b, и чтобы интерпретатор не имел права менять указанный тип данных ни при каких обстоятельствах (вылетал бы с ошибкой). Хотя бы как дополнение к существующей "динамической типизации" (а лучше как полная её замена).
2. Вернуть "украденный" целочисленный тип данных (INTEGER i) и операции булевой алгебры для работы с ними (and, or, not или, в сишном синтаксисе, &, |, ^, >>= и т.д).
3. Отделить ключи от индексов. Точнее, ввести индексы в их классическом понимании как порядковый номер элемента в массиве (автоматически получая возможность задавать именно массивы, а не "таблицы Lua"), а также структуры данных (и, соответственно, возможность определять таблицы как массивы структур или, в реляционной терминологии, как массивы кортежей). Это, к тому же, заставит нумеровать массивы либо с нуля, либо с единицы, а не как Бог на душу положит. Для меня в своё время стало открытием, что определив таблицу как T={} я спокойно заполняю её данными, начиная с нулевого индекса, а если начинаю инициализировать вроде: Q = { 0x999999, 0xFFFFFF, 0x99FFFF, 0x99FF99 }; то для обращения к первому элементу требуется указать именно 1, а не 0.
III. Синтаксис
1. В циклах имеется break, а вот continue почему-то нет (про goto я просто молчу).
2. Неплохо бы вообще приблизить синтаксис к совершенно гениальному языку C (фигурные скобки вместо "паскалевских" begin-end - тем более, что никакого begin как начало блока здесь вообще нет), возможность определять константы (#define), возможность условной трансляции/исполнения (#if) - тогда языку просто цены не будет! ::
Вы не к тем разработчика обращаетесь. Ваши хотелки || и III. Это претензии к разработчикам языка луа, а это - в Бразилию. ---------------- Но самое прикольное, что и луа и VMLua и даже терминал QUIK - это все Вам бесплатно - т е халява. А дареному коню в зад, то бишь зубы, не смотрят. (Народная мудрость)
В 64-разрядный integer спокойно влезают даже 20-значные числа - более 18 квинтиллионов!
Для справки : Разрядность мантиссы в 64 битном вещественном числе составляет 52 бита, что позволяет точно отобразить лишь 16 разрядное десятичное целое число . а не 18 квинтиллионов, как наивно полагает Владимир.
методы создания торговых роботов, принципиально отличаются от написания программ по понятиям, которые гоняют туда сюда кучу данных. вот некоторые из аксиом, которые надо усвоить и научится программировать. ----------------- 1) В текущий момент времени робот должен тратить ресурсы лишь на обработку новой информации 2) Если робот не успевает обработать информацию до прихода новой, то информация лишняя и обрабатывать ее не имеет смысла. 3) Применение циклов в системах реального времени - это зло, которое надо избегать. ---------------- Поэтому в конкретный момент времени надо обрабатывать лишь новые сделки. =============== Если надо очень быстро то используйте API C for LUA. будет быстрее чем шарп, а для уровня решения задач посетителей данного форума еще и проще в понимании. А уж Буратинам надо писать исключительно на луа.
Все делается без шарпов на луа без проблем. -------------------------------------------------------------------------------------- Мы не ищем легких путей. Создадим себе трудности, чтобы потом искать того, кто их преодолеет для нас..
В ОБЩЕМ проблема не решена
Квиж жутко тормозит и набиваем массив
Освойте сначала луа а потом пишите на шарпе нет желания разбираться с вашей кашей.
Все делается без шарпов на луа без проблем. -------------------------------------------------------------------------------------- Мы не ищем легких путей. Создадим себе трудности, чтобы потом искать того, кто их преодолеет для нас..
nikolz написал: исправьте так: ------------------------------- function qsc.all_trades(msg) if type(msg.data)~="table" then msg.data={} end local i=#msg.data; local count = getNumberOf("all_trades"); while count>i do i=i+1; local depo_limit2 = getItem("all_trades",i) if msg.data == "" or depo_limit2.sec_code == sec_code1 and depo_limit2.datetime.hour >= 10 then msg.data = depo_limit2; end end return msg end
Благодарю за это, но это тоже медленно работает , буду SearchItems пробовать ...
Напишите для начала сколько времени у вас исполняется ваше решение и сколько это. -------------- В этом решении все существующие данные загрузятся один раз а не каждый цикл. Если новых данных нет, то время не тратится. --------------------- Поясняю на примере. Пусть в архиве 10000 данных. В вашем решении на каждом цикле будете читать в таблицу 10000 данных В моем это чтение будет лишь один раз. После поступление нового значение у Вас опять будет читаться все 10001 значение а в моем только 1. ------------------- Итак какие результаты у вас получились?
исправьте так: ------------------------------- function qsc.all_trades(msg) if type(msg.data)~="table" then msg.data={} end local i=#msg.data; local count = getNumberOf("all_trades"); while count>i do i=i+1; local depo_limit2 = getItem("all_trades",i) if msg.data == "" or depo_limit2.sec_code == sec_code1 and depo_limit2.datetime.hour >= 10 then msg.data[i]= depo_limit2; end end return msg end
на основе вашей функции, можно сделать примерно так: ------------------------------- function qsc.all_trades(msg) if msg.data==nil then msg.data={} end local i=#msg.data; local count = getNumberOf("all_trades"); while count>i do i=i+1; local depo_limit2 = getItem("all_trades",i) if msg.data == "" or depo_limit2.sec_code == sec_code1 and depo_limit2.datetime.hour >= 10 then msg.data[i]= depo_limit2; end end return msg end
nikolz написал: Вы еще далеки от понимания реальности фондовых рынков.
А зачем мне понимать их реальности? :: Есть тикеры, есть цена спроса и предложения и это ЕДИНСТВЕННАЯ реальность, которая меня интересует.
Нет, я не помню игровые автоматы в супермаркетах и беспроигрышную лотерею у вокзалов - мне всегда хватало мозгофф понять, что это лохотрон. Так что, бывшие напёрсточники теперь называются "маркетмейкеры"? ВОТ ЭТО ВОТ теперь называется ""монстры фондового рынка"? Я же говорю: КАБЗДЕЦ финансовому рынку с такими "трейдерами"! КАКИМ ОБРАЗОМ эта хрень может "сделать ликвидность и уменьшить спред"? Развести лохов на бабки? Да лохи и так все свои бабки благополучно просрут, без этих долбаных "мейкеров"!
А брокеры - это НЕ ТОЛЬКО "всего лишь посредники между биржей и клиентами" - цитата из Вики: На бирже маркетмейкером может являться, например, брокерская контора, которая по договору с биржей берёт на себя обязательство держать в течение оговорённого времени (скажем, не менее 90 % торгового времени) одновременно выставленные заявки с разницей между ценами покупки и продажи (см. спред) не более оговорённой величины, за это биржа предоставляет маркетмейкеру определённые льготы, например, по оплате комиссионного сбора.
Про HFT роботов: кого и как они там "обгладывают" - меня не интересует: меня они не обглодают. Ну что они могут обглодать за свои сраные доли секунды? Ну, получат они какую-то там "информацию" раньше - и что? Ну, купят что-то на полкопейки дешевле, ну, продадут на три копейки дороже - да и то лишь в том случае, если они по этой информации примут правильные решения. Я если рынок тупо проигнорирует эту инфу? А если они неправильно оценят эту информацию? Где тогда будут эти "пираньи"? Правильно, в зопе!
Не навязчиво рекомендую кроме вики прочитать ФЗ "О рынке ценных бумаг" Еще можно для расширения кругозора почитать книгу Дж.Сороса "Новая парадигма финансовых рынков". Он ее написал под впечатлением очередного обвала рынков. Что же относительно Вашего представления о фондовом рынке. Так на то оно действительно Ваше. Но зачем же так агрессивно его излагать?
Основа - это некое C# консольное приложение (многопоточный сервер), принимающее данные от lua скрипта и отправляющее уже сообщения в чат телеграм. Я предпочитаю делать так, дабы не связываться с проблемами совместимости библиотек lua.
Сначала сделал передачу данных на внутренний сервер через сокеты, но медленно оказалось. Переделал на Named Pipes, быстрее намного. Пришлось написать библиотеку Named Pipe клиента для lua.
Пока сделал только отправку сообщений, т.к. это самая частая просьба.
информация к размышлению. Вообще-то пакет байтов 500 по UDP сокетами передается даже на луа примерно не более чем за 20 ms. Это медленно? Какая же у вас получилась скорость ? ---------------------------
открыл оригинал и посмотрел, уот так уот неожиданно.
Да Вы батенька не только QLUA не знаете Вы начинаете изучать, а я должен гадать какую версию программы Вы взяли и откуда? Оно мне надо? Можете не отвечать. Вопрос риторический.
Христиан написал: Здравствуйте, хочу поставить Quik на VPS сервер чтобы работал там круглосуточно, волнует вопрос, как будет работать main() в отдельном потоке при наличии только 1 ядра? Все ли будет работать или нужно минимум 2. Поправьте если я чего-то не понимаю, спасибо
все будет работать без проблем, если хватит памяти и места на диске.
Владимир написал: Да какие они "маркетмейкеры", если работают аж на миллисекундах? Брокер - это маркетмейкер, это я понимаю. А эти... И вообще, как это биржи существовали в докомпьютерные времена? ::
Вы еще далеки от понимания реальности фондовых рынков. От брокера до маркет мейкера как от земли до луны. ------------------------------ Вот вам немного информации для размышления. Вы наверное помните еще игровые автоматы в супермаркетах и беспроигрышную лотерею у вокзалов (лохотрон называется)? Помните тех активных игроков, которые постоянно играют на автоматах и предлагают бесплатно поиграть прохожим у лохотрона? Это и есть пример маркет-мейкера. Маркет-мейкера нанимает биржа, чтобы он делал ликвидность и уменьшал спред. Т е если игрок бьет в позицию маркет-мейкера, то биржа платит маркет-мейкеру. -------------------------------------- А брокеры - это всего лишь посредники между биржей и клиентами. Они лишь собирают заявки и выставляют их на биржу потом раздают, что купили тем, кто просил. При этом втихаря раздают в долг игрокам деньги и акции других игроков. Т е делают то же самое что и банки, только банки берут деньги под проценты у одних и дают под проценты другим, а брокеры берут деньги у одних на халяву и дают под проценты другим. Чувствуете разницу? ------------------------------------- Теперь про HFT роботов. Они подобно пираньи . Обгладывают крупных инвесторов. Для этого им надо максимально быстрый доступ к торговой площадке. Пока до буратин, которые играют на КВИКЕ, дойдет информация , HFT роботы уже скушают, что всплыло в стакане. Но, делать на квике HFT робота - это как делать самолет из самоката. При этом главное процесс, так как результат лишь будет сниться.
Виктор написал: Я подключаю dll через lua-скрипты в require("dll").
Хочу чтобы lua-индикатор (это уже другой скрипт) тоже мог обращаться к функциям этой же самой, уже запущенной, dll. Возможно ли это реализовать? Как?
функции в динамической библиотеке dll всегда имеют одну копию в памяти. Поэтому ответ -возможно. Вы индикаторе надо тоже подключить эту библиотеку так же ка вы ее подключали в другом скрипте , но Вы это знаете.
Афонькин написал: Начинаю изучать Qlua. Для освоения рассматривал код индикаторов, который опубликован поддержкой (поэтому сам код приводить полностью нет смысла). Конкретно Momentum. Жалко что в тексте нет ремарок. При штудировании кода возник вопрос, который приводит меня в тупик :
Код
function Init ()
func = MOMENTUM()
return # Settings.line
end
function OnCalculate (Index)
return tonumber(Settings.Horizontal_line), ConvertValue(Settings, func(Index, Settings))
end
function MOMENTUM ()
local it = {[ 1 ] = 0 , l = 0 }
return function (I, Fsettings, ds)
Логически я читаю так в Init() инициализируется/запускается экземпляр функции MOMENTUM() ; в OnCalculate(Index) в неё передаются вводные func(Index, Settings)
откуда во внутренней функции function (I, Fsettings, ds) берутся данные в ds ? ! они по умолчанию как то привязаны к источнику данных ?
Спасибо заранее.
вы привели лишь кусок кода, поэтому объяснить его нельзя. Можно лишь гадать, как это и делает предыдущий оратор.
Владимир написал: Борис Гудылин, Ну, во-первых, это правила Московской биржи, во-вторых, если они не тупорылые жадные камикадзе, они должны бы немедленно этот пункт снять - при наличии малейшей конкуренции эти идиоты мгновенно бы лишились все своих клиентов! В-третьих, я предлагаю наказывать не за "неэффективные транзакции" (откуда юзеру знать, куда пойдёт рынок, сработает его заявка или нет?), а за смену заявок в течение короткого промежутка времени. Ошибся? Бывает, на первый раз прощается! Но если не первый - это уже ненормально, за это НУЖНО наказывать! Кстати, аналогичные правила не хило бы ввести и для комментов на этом форуме: минут 5-10 позволять разрешать редактировать свою запись - мало ли, опечатался где-то ляпнул что-то, не подумавши...
это и есть HFT роботы. Вы предлагаете наехать на монстров фондового рынка? Почитайте в инете, как HFT роботы делают профессиональных трейдеров. ------------------------------------------------ Мечтать не вредно, но бесполезно.
Владимир написал: я бы хотел иметь в виде интерпретатора аналог моего любимого С (или хотя бы JS)
Я, наверное, Вас обрадую. В QLua (Lua) существует C-API и у Вас есть возможность, практически полностью вести свои разработки на C. Хорошее описание C-API представлено в книге одного из отцов-основоположников языка Lua http://texno.info/wp-content/uploads/2019/09/lua.pdf (можно посмотреть также https://lua.org.ru/contents_ru.html#4.7 ). Вы можете создать dll-пакет на C и подключить в своем скрипте. Далее вызываете в скрипте свою функцию пакета, в которой делаете все что Вам нужно (например, запускаете потоки для обработки данных и так далее). Из такого пакета доступен весь интерфейс с QUIK. Есть хороший ресурс https://quikluacsharp.ru/ , на котором представлены некоторые шаблоны решений для QLua, в том числе, шаблон создания dll-пакета для QLua.
Ну наконец-то, настало время читать учебники. ------------------------------- Замечу, что QLUA - это библиотека (dll) и написана она на С-API. Поэтому можете писать свои библиотеки аналогично. ---------------- Что же касается перехвата всех исключений - то это скорее мечта дилетанта, чем реальность профи. Как нельзя найти все ошибки, так и невозможно перехватить все исключения. Это аксиома.
Просьба уточнить - правильно ли понимаем, что Вы хотели бы иметь возможность самостоятельно формировать данные свечек как исторические, так и текущего дня в отдельном файле и за тем импортировать их терминал в виде свечек графика QUIK для дальнейшей отладки роботов? Возможно, для Вашей задачи подойдёт Редактор архива данных для графиков ?
Да. Поясню. Дело в том, что накопление данных на компе в КВИКЕ начинается с момента первого подключения к конкретному инструменту. Кроме того, если происходит сбой (пропуск данных) ,то приходится перезаказывать. После этого все, что накоплено на компе, стирается и загружается история с сервера. --------------- Тестирую робота в реальных торгах. При этом результат работы зависит от длины истории, так как робот обучается. Невозможность увеличивать историю не позволяет проверить его на различной глубине обучения. -------------------- Тестирование алгоритма в других пакетах таких как Амиброкер, не позволяет полноценно использовать возможности QLUA и терминала QUIK.