nikolz (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
Заявка по минимуму последней свечи
 
if DS==nil then  DS,Error = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL); end
Программисты на LUA, Требуются LUA программисты
 
Цитата
Владимир написал:
TGB, Я не знаю, что там за "метрики берутся за основу" - я работаю только с текущими курсами (ну или там с минутными свечами, в которых меня интересует только цена закрытия), и мне абсолютно по барабану, чем именно вызваны движения курса: поведением толпы, инсайдерской информацией, вбросами в СМИ или ещё чем. Мой алгоритм работает на исторических данных точно так же, как и на реальных. И работает (тьфу-тьфу!) хорошо!
если не секрет,
то покажите картинку работы на реальном рынке
и картинку работы на этом же участке на исторических данных.
---------------  
Т е один и тот же участок на котором Вы реально торговали
и после этого в тесте прогнали свой алгоритм.
---------------
Спорю, что сделки будут разные.
одинаковыми они будут лишь у бога или дьявола, полагаю вы не из их числа.
Как определить последнюю свечу в индикаторе?, Как определить последнюю свечу в индикаторе?
 
тот факт что закрытие свечи происходит задним числом приводит к тому,
что все роботы совершающие сделки на истории на закрытии свечи ВСЕГДА более прибыльные (иногда очень прибыльные),
чем в реальном времени .
На этом основан лохотрон по торговле в интернете такими роботами.
Как определить последнюю свечу в индикаторе?, Как определить последнюю свечу в индикаторе?
 
Цитата
swerg написал:
Цитата
s_mike@rambler.ru написал:
Свеча является закрытой тогда, когда появилась новая.
А не бывает такого, что приходит значение по предыдущей свече после прихода значений по новой?
бывает:
1)  если это значение не было загружено ранее.
2) если это свеча индикатора,
то так будет всегда для всех индикаторов, которые "заглядывают в будущее" - таких как fractal, ZigZag, и т д
---------------------  
Сама свеча цены - это тоже индикатор заглядывающий в будущее, поэтому закрытие свечи происходит лишь по истечению времени интервала, а не по времени последней сделки.
-------------
В скрипте индикатора  закрытие свечи определяется условием неравенства текущего индекса onCalculate  предыдущему.
Помощь в написании скрипта отправки данных по сделкам из QUIK к нам на сайт, выгрузка данных
 
Цитата
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%D­0 ­%B1%D1%80%D0%BE%D0%BA%D0%B5%D1%80%D1%81%D0%BA%D0%BE%D0%B3%D­0 ­%BE%20%D0%BE%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B­0 ­%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 так:
представляющая собой цифровые данные и иные сведения неконфиденциального
характера о ходе и итогах торгов на различных рынках организатора торговли, а также иная информация,
определяемая правилами проведения торгов на соответствующем рынке, правом на использование которых
обладает организатор торговли.
---------------------
Полагаю, что сделки конкретного клиента имеют конфиденциальный характер и не транслируются брокерам все его клиентам,
а правом на использование этой информации обладает клиент,
так как сделки выполнены за его счет и в его интересах.
Получение значения индикатора не открывая данных графика
 
Цитата
s_mike@rambler.ru написал:
Цитата
Максим написал:
Здравствуйте, подскажите, есть ли возможность получение значений индикатора МАСД не открывая сам график и не рассчитывая самому в скрипте. Постановка задачи: Пройтись по таблице текущие торги и отобрать акции с определенным значением МАСД.
вот этот скрипт умеет что то похожее

http://www.bot4sale.ru/download-categories/2012-06-13-15-10-36/item/market-scaner.html
чушь. Лишь бы пропиариться.
Привязка скрипта на lua к конкретному компьютеру, Ограничение возможности запуска скрипта
 
решал эту задачу иначе - шифровал dll c функциями.
ключ формировался из кода dll.
При запуске dll проверял кто и для чего ее вызывает.
Сколько стаканов можно заказать?, Вопрос в техподдержку.
 
Успех игры на бирже  не в количестве стаканов, а в количестве выпитого из них.
Программисты на LUA, Требуются LUA программисты
 
Цитата
Виктор написал:
Ищу программиста.
Вот по этому ТЗ мне сейчас пишут советника на форекс.Хочу такой же для фьючерсов и фондового рынка на 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 в Квике - это индикаторы, которые заглядывают в будущее.
Такие индикаторы прибыльно торгуют лишь на истории,
и их успехи очевидны лишь на исторических графиках.
--------------------
Реально торгующий на этих индикаторах робот будет просто убыточным.
-------------------------------------
Блажен, кто верует..
 
Обсудим диалог на Lua?
 
рекомендую для общего понимания.
https://www.ibm.com/developerworks/ru/library/l-embed-lua/

Вы можете сделать все, что придумаете с помощью API C для LUA,
так как создание интерфейсов требует хорошего уровня программирования.

Увы, обычно уровень  хотелок у буратин обратен их уровню умения их реализовать.

 
Изменения в работе с колбеками LUA в новой версии
 
Цитата
swerg написал:
Ладно, хрен с ним с этим троллем.
Я на самом деле никак не могу получить ответ на свой вопрос, который давно меня заботит.
Ну вот как это сделано в метатрейдере, в других терминалах? нигде ж нет никакого main(). Есть по сути просто скрипт с колбеками (да? я не ошибаюсь?)
И вот когда в этих системах прекращается вызов этих колбеков?? я никак не могу этот момент найти, или ищу плохо.
Или там после запуска скрипта вызов из него колбеков никогда не прекращается?
Расскажите, а
Вообще-то, решение в виде бесконечного цикла ,
которое обеспечивает работу системы известно давно и широко используется, например в ОС микроконтроллеров (arduino).

Такое решение типично для одноядерных SOC.

Полагаю что проблема КВИКа в том,
что VM LUA встраивалась в уже готовую систему,
вместо того, чтобы дать пользователям нормальный API к функциям торгового терминала.

Кроме того, как неоднократно подчеркивали сами разработчики, они встраивали луа не для разработки торговых роботов , а для буратин и хрен знает зачем.


 
Программисты на LUA, Требуются LUA программисты
 
Ну кто Вам этого урода слепил, к тому и обращайтесь.
Кому интересно в чужом г...не ковыряться .
И сейчас угадаю.Типа -надо делать очевидно очень простые правки (как правило за символическую плату)
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
Anton,  
Цитата
Какая может быть вытесняющая модель без потоков, шедулера (планировщика потоков), синхронизации?
Обыкновенная. Все скрипты есть просто куски текста, так что никаких потоков там нет и быть не может. Дойдут руки у интерпретатора - выполнит команду, нет - так и будут лежать голым текстом.

Да ничего я не придумывал"! Синонимы команд - обычный сервис: кому-то удобнее begin-end, кому-то {} - почему бы не дать такую возможность? А уж в именах объектов и их атрибутов синонимов и вообще может быть выше крыши (я имею в виду базы данных).
Не знаю, что за книгу вы написали и здесь пиарите, но в языках и виртуальных машинах вы ноль без палочки
------------------
Где Вы увидели интерпретатор в реализации луа в квике?
Это VM а не интерпретатор
и там не куски текста а байт код - т е это машинный язык именно VMLua.
------------------------
Пардон, что то я сильно бисер разметал...
Изменения в работе с колбеками LUA в новой версии
 
либо проще
обслуживание колбеков пулом потоков без разделение на виды.
Изменения в работе с колбеками LUA в новой версии
 
добавлю свои пять копеек.
---------------------------
сделал бы для каждого вида колбека отдельный пул потоков.
Открытие файла и память
 
Цитата
s_mike@rambler.ru написал:
Цитата
Старатель написал:
Что интересно, если переменную удалить сразу после использования, то скрипт станет занимать больше памяти.
 
Код
      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
- это все Вам бесплатно
- т е халява.
А дареному коню в зад, то бишь  зубы,  не смотрят. (Народная мудрость)
перестало работать снятие активной заявки
 
Цитата
Владимир написал:
Sergey Gorokhov,Да я всегда спокоен - это просто стиль такой.  ::

В 64-разрядный integer спокойно влезают даже 20-значные числа - более 18 квинтиллионов!
Для справки  :
Разрядность мантиссы в 64 битном вещественном числе составляет 52 бита,
что  позволяет точно отобразить лишь 16 разрядное десятичное целое число .
а не  18 квинтиллионов, как наивно полагает Владимир.
Более быстрый способ, all_trades
 
методы создания торговых роботов, принципиально отличаются от написания программ по понятиям, которые гоняют туда сюда кучу данных.
вот некоторые из аксиом, которые надо усвоить и научится программировать.
-----------------
1) В текущий момент времени робот должен тратить ресурсы лишь на обработку новой информации
2) Если робот не успевает обработать информацию до прихода новой, то информация лишняя и обрабатывать ее не имеет смысла.
3) Применение циклов в системах реального времени - это зло, которое надо избегать.
----------------
Поэтому в конкретный момент времени надо обрабатывать лишь новые сделки.
===============  
Если надо очень быстро то используйте API C for LUA.
будет быстрее чем шарп, а для  уровня решения задач посетителей данного форума еще и проще в понимании.
А уж Буратинам надо писать исключительно на луа.
Более быстрый способ, all_trades
 
Цитата
Костя написал:
Цитата
nikolz написал:
Все смешалось - кони,люди

Зачем нагородили кашу из луа и шарпа?

Все делается без шарпов на луа без проблем.
--------------------------------------------------------------------------------------
Мы не ищем легких путей.  
Создадим себе трудности, чтобы потом искать того, кто их преодолеет для нас..
В ОБЩЕМ проблема не решена

Квиж жутко тормозит  и набиваем массив
Освойте сначала луа а потом пишите на шарпе
нет желания разбираться с вашей кашей.
из строки в числовое значение
 
x='0.08'
print(x..","..type(x))
z=tonumber(x)
print(z..","..type(z))
---------
результат:
0.08,string
0.08,number
Более быстрый способ, all_trades
 
Все смешалось - кони,люди

Зачем нагородили кашу из луа и шарпа?

Все делается без шарпов на луа без проблем.
--------------------------------------------------------------------------------------
Мы не ищем легких путей.  
Создадим себе трудности, чтобы потом искать того, кто их преодолеет для нас..
Более быстрый способ, all_trades
 
Цитата
Костя написал:
Цитата
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.
-------------------
Итак какие результаты у вас получились?
Как убрать нуль после точки?, .0
 
 print(type(x))
x=10; print(type(x))
  x="10"; print(type(x))
 x={}; print(type(x))

результат:
nil
number
string
table
Как убрать нуль после точки?, .0
 
для справки тип данных определяется так:
 print(type(x))
 x=10
 print(type(x))
   x="10"
 print(type(x))
  x={}
 print(type(x))

результат:
nil
number
number
string
table
Обучаюсь, Обучаюсь Lua ,мне дали одно задание,но я его не понимаю.
 
Плохой у Вас учитель.
Более быстрый способ, all_trades
 
исправьте так:
-------------------------------
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
Более быстрый способ, all_trades
 
Цитата
Костя написал:
Цитата
nikolz написал:
local i=#msg.data;
Попробовал ваше  

сработало исключение
@"Lua error: qsfunctions.lua:605: attempt to index a string value (field 'data')"
покажите как вы определили msg которое передаете в вашу функцию.  
Более быстрый способ, all_trades
 
на основе вашей функции, можно сделать примерно так:
-------------------------------
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
Более быстрый способ, all_trades
 
для скрипта надо делать две части
первая часть исполняется один раз и читает данные из архива квика
вторая часть работает в колбеке
Предложение к разработчикам
 
Цитата
Владимир написал:
nikolz,
Цитата
nikolz написал:
Вы еще далеки от понимания реальности фондовых рынков.
А зачем мне понимать их реальности?  :: Есть тикеры, есть цена спроса и предложения и это ЕДИНСТВЕННАЯ реальность, которая меня интересует.

Нет, я не помню игровые автоматы в супермаркетах и беспроигрышную лотерею у вокзалов  - мне всегда хватало мозгофф понять, что это лохотрон. Так что, бывшие напёрсточники теперь называются "маркетмейкеры"? ВОТ ЭТО ВОТ теперь называется ""монстры фондового рынка"? Я же говорю: КАБЗДЕЦ финансовому рынку с такими "трейдерами"! КАКИМ ОБРАЗОМ эта хрень может "сделать ликвидность и уменьшить спред"? Развести лохов на бабки? Да лохи и так все свои бабки благополучно просрут, без этих долбаных "мейкеров"!

А брокеры - это НЕ ТОЛЬКО "всего лишь посредники между биржей и клиентами" - цитата из Вики:
На бирже маркетмейкером может являться, например, брокерская контора, которая по договору с биржей берёт на себя обязательство держать в течение оговорённого времени (скажем, не менее 90 % торгового времени) одновременно выставленные заявки с разницей между ценами покупки и продажи (см. спред) не более оговорённой величины, за это биржа предоставляет маркетмейкеру определённые льготы, например, по оплате комиссионного сбора.

Про HFT роботов: кого и как они там "обгладывают" - меня не интересует: меня они не обглодают. Ну что они могут обглодать за свои сраные доли секунды? Ну, получат они какую-то там "информацию" раньше - и что? Ну, купят что-то на полкопейки дешевле, ну, продадут на три копейки дороже - да и то лишь в том случае, если они по этой информации примут правильные решения. Я если рынок тупо проигнорирует эту инфу? А если они неправильно оценят эту информацию? Где тогда будут эти "пираньи"? Правильно, в зопе!    
Не навязчиво рекомендую кроме вики прочитать ФЗ  "О рынке ценных бумаг"
Еще можно для  расширения кругозора почитать книгу Дж.Сороса "Новая парадигма финансовых рынков". Он ее написал под впечатлением очередного обвала рынков.
Что же относительно Вашего представления о фондовом рынке.
Так на то оно действительно  Ваше.
Но зачем же так агрессивно его излагать?
Получение значения индикатора не открывая данных графика
 
Попросите товарища пройтись по таблице и сказать результат.
Более быстрый способ, all_trades
 
Уточните, Вы пишите скрипт или индикатор.
Кто как решил вопрос уведомления о сделках?
 
Цитата
Nikolay написал:
Сделал небольшое решение для отправки сообщений в чат бота телеграма (Telrgram Bot Api).
https://github.com/nick-nh/qlua/tree/master/telegramQuik

Основа - это некое C# консольное приложение (многопоточный сервер), принимающее данные от lua скрипта и отправляющее уже сообщения в чат телеграм. Я предпочитаю делать так, дабы не связываться с проблемами совместимости библиотек lua.

Сначала сделал передачу данных на внутренний сервер через сокеты, но медленно оказалось.
Переделал на Named Pipes, быстрее намного. Пришлось написать библиотеку Named Pipe клиента для lua.

Пока сделал только отправку сообщений, т.к. это самая частая просьба.
информация к размышлению.
Вообще-то пакет байтов 500 по UDP сокетами передается даже на луа примерно не более чем за 20 ms. Это медленно?
Какая же у вас получилась скорость ?
---------------------------  
Вопросы Новичка
 
Цитата
Anton написал:
Цитата
nikolz написал:
предыдущий оратор
открыл оригинал и посмотрел, уот так уот неожиданно.
Да Вы батенька не только QLUA не знаете
Вы начинаете изучать, а  я должен гадать какую версию  программы Вы взяли и откуда?
Оно мне надо?   Можете не отвечать. Вопрос риторический.
Работа main() при наличии 1 ядра
 
Цитата
Христиан написал:
Здравствуйте, хочу поставить Quik на VPS сервер чтобы работал там круглосуточно, волнует вопрос, как будет работать main() в отдельном потоке при наличии только 1 ядра? Все ли будет работать или нужно минимум 2. Поправьте если я чего-то не понимаю, спасибо
все будет работать без проблем, если хватит памяти и места на диске.
Предложение к разработчикам
 
Цитата
Владимир написал:
Да какие они "маркетмейкеры", если работают аж на миллисекундах? Брокер - это маркетмейкер, это я понимаю. А эти... И вообще, как это биржи существовали в докомпьютерные времена?  ::  
Вы еще далеки от понимания реальности фондовых рынков.
От брокера до маркет мейкера как от земли до луны.
------------------------------
Вот вам немного информации для размышления.
Вы наверное помните еще игровые автоматы в супермаркетах и беспроигрышную лотерею у вокзалов  (лохотрон называется)?
Помните тех активных игроков, которые постоянно играют на автоматах и предлагают бесплатно поиграть прохожим у лохотрона?
Это и есть пример маркет-мейкера.
Маркет-мейкера нанимает биржа, чтобы он делал ликвидность и уменьшал спред.
Т е если игрок  бьет в позицию  маркет-мейкера, то биржа платит маркет-мейкеру.
--------------------------------------
А брокеры - это всего лишь посредники между биржей и клиентами.
Они лишь собирают заявки и выставляют их на биржу потом раздают, что купили тем, кто просил.
При этом втихаря раздают в долг игрокам деньги и акции других игроков.
Т е делают то же самое что и банки, только банки берут деньги под проценты у одних и дают под проценты другим,
а брокеры берут деньги у одних на халяву и дают под проценты другим. Чувствуете разницу?
-------------------------------------  
Теперь про HFT роботов.
Они подобно пираньи . Обгладывают крупных инвесторов. Для этого им надо максимально быстрый доступ к торговой площадке.
Пока до буратин, которые играют на КВИКЕ,  дойдет информация , HFT роботы уже скушают, что всплыло в стакане.
Но, делать на квике HFT робота - это как делать самолет из самоката.  
При этом главное процесс, так как результат лишь будет сниться.  



 
Как убрать нуль после точки?, .0
 
Цитата
Алексей написал:
Цитата
nikolz написал:
 
Цитата
Алексей  написал:
Про string.format понял, работает, но сложно как то получается.

Про math.floor можно для чайника разжевать.
Как сделать проще простую операцию:
function OnAllTrade(alltrade)
price = tonumber(alltrade.price);

Далее я просто записываю в файл:
f:write(" "..price.."\n");

Как проще при этом использовать math.floor? Я похоже не понимаю синтаксис и поиск не помогает. (
 попробуйте так:
-------------------
function OnAllTrade(alltrade)
local price = alltrade.price;
f:write(price.."\n");
К сожалению так не работает. Записывается цена и .0 . Оно просто занимает место в таблице или файле, а таких значений много, что очень не удобно.
тогда так:
function OnAllTrade(alltrade)
local price = alltrade.price;
f:write(tostring(price).."\n");
Возможно ли запустить в индикаторе функцию из dll которая подключается в другом lua-скрипте?
 
Цитата
Виктор написал:
Я подключаю 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 роботы делают профессиональных трейдеров.
------------------------------------------------
Мечтать не вредно, но бесполезно.
Вопросы, не требующие ответов
 
Цитата
TGB написал:
Цитата
Владимир написал:
я бы хотел иметь в виде интерпретатора аналог моего любимого С (или хотя бы 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.
Поэтому можете писать свои библиотеки аналогично.
----------------
Что же касается перехвата всех исключений - то это скорее мечта дилетанта, чем реальность профи.
Как нельзя найти все ошибки, так и невозможно перехватить все исключения. Это аксиома.
Как убрать нуль после точки?, .0
 
Цитата
Алексей написал:
Про string.format понял, работает, но сложно как то получается.

Про math.floor можно для чайника разжевать.
Как сделать проще простую операцию:
function OnAllTrade(alltrade)
price = tonumber(alltrade.price);

Далее я просто записываю в файл:
f:write(" "..price.."\n");

Как проще при этом использовать math.floor? Я похоже не понимаю синтаксис и поиск не помогает. (
попробуйте так:
-------------------
function OnAllTrade(alltrade)
local price = alltrade.price;
f:write(price.."\n");
 
импорт данных в архив
 
Цитата
Andrey Bezrukov написал:
Здравствуйте, nikolz.

Просьба уточнить - правильно ли понимаем, что Вы хотели бы иметь возможность самостоятельно формировать данные свечек как исторические, так и текущего дня в отдельном файле и за тем импортировать их терминал в виде свечек графика QUIK для дальнейшей отладки роботов?
Возможно, для Вашей задачи подойдёт  Редактор архива данных для графиков ?
Да.
Поясню.
Дело в том, что накопление данных на компе в КВИКЕ начинается с момента первого подключения к конкретному инструменту.  
Кроме того, если происходит сбой (пропуск данных) ,то приходится перезаказывать. После этого все, что накоплено на компе, стирается и загружается история с сервера.
---------------
Тестирую робота в реальных торгах.  
При этом  результат работы зависит от длины истории, так как робот обучается.
Невозможность увеличивать историю не позволяет проверить его на различной глубине обучения.
--------------------  
Тестирование алгоритма в других пакетах таких как Амиброкер,
не позволяет полноценно использовать возможности QLUA и терминала QUIK.
неужели OnParam самый быстрый?
 
когда пытаетесь измерять время исполнения колбеков,
то учитывайте минимальный квант винды для задачи,
либо сначала уменьшите его чтобы.
неужели OnParam самый быстрый?
 
Полагаю,что есть единственный способ знать как давно была совершена сделка.
------------------
Ранее уже говорил,
что единственный способ не торговать по вчерашним сделкам,
это синхронизация времени компьютера по серверу реального времени или GNSS
и сравнение времени сделки с точным временем.
-----------------
В итоге мы будем всегда знать на сколько запоздала информация о сделке.
Другого способа не существует.
импорт данных в архив
 
Для тестирования торговых роботов не хватает истории торгов.
Просьба сделать возможность конвертации данных из текстового формата в формат файлов с данными  типа  .dat ,
либо выложить формат этих файлов.

Конвертор напишу и выложу в свободный доступ.
Статус сессии.
 
Статус сессии.
 
Статус сессии.
 
используйте сервер точного времени и не будете месяцами ничего согласовывать.
Биржа тоже его использует.
погрешность будет не более 10 мс. Это меньше, чем задержка интернета.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 28 След.
Наверх