Это не только на писание но еще и отладка. 1) фреймворк HackTrade избавил от необходимости следить за взаимодействия скрипта с квиком.
"работает в QUIK без лишних усилий робот работает быстро (можно делать роботов на тиках) поддерживаются графики «умные заявки» избавляют от бесконечной отладки"
Владимир написал: Задача создание робота с обычным блокнотом превращается в куда более тривиальную задач
пишу в SciTe по одной причине нажатием на одну кнопку идет исполнение луа кода и проверка на лексические ошибки, подменяя данные от терминала Quir проверяешь логику и т.д. А что блокнот может?
Владимир написал: Нет, я больше опытом не обмениваюсь: два раза попробовал - хватит.
У вас и так выложено, все гениальное в простом вот эта штука, у вех на глазах t={ [0]=0, [1]={}} если добавить что #t не видит и не считает t[0] все становится на место. Как я раньше не заметил.
Nikolay написал: По смыслу - простая система. По реализации - очень сложная.
Эта да, у меня был рабочий вариант динамически выставлялись ордера тоже контр тренд не плоха набирала пока не попадала под тренд. Вариант пробный был на небольшой депозит порядка 10 уровней. Но в наших условиях надо на открытии рынка ставить с хорошим спредом и депозитом, чтоб можно было усреднить если что пошло не так.
Владимир написал: А "для ускорения получения сигнала" данные нужно брать данные из ТТТ: BID, OFFER, SEC_PRICE_STEP или что там ещё надо. Быстрее не получится.
Нет так беру правда цикл гоняю в разных варинтах сейчас 10 мс. но мне столько ненужно 1 сек. "за глаза" - это чтоб ошибки повыскакивали. Пока все ок! Сбросил еще на один терминал у др. брокера.
Владимир написал: По моему опыту, только с тем, что написал сам
Не Все тут программисты, для этого и обмениваемся опытом. Если все выбросить что останется, только Ваш скрипт, а торговать с кем будите?
Цитата
VPM написал: И что ещё за "выигрыш в 100%"? Относительно ЧЕГО и за какое время?
Это не мое, когда разбирался сохранил, может кто то знает выскажутся.
Продолжение вот: "Сетка – типичная модель-ориентированная система. Она подразумевает, что некие условия рынка удерживают цену в определенном интервале. Например, ограничение не позволяет паре EUR/CHF опуститься ниже 1,20. Но и подняться слишком высоко цена также не может,
учитывая факт, что Национальный банк Швейцарии должен будет в конечном итоге выкупить назад все франки,
которые они продали ради поддержки определенного значения. Все это необходимые условия для применения Сетки. Без них это было бы обычной рулеткой, и пополнило бы список иррациональных трейдерских методов.
Волатильность – ключевое условие для метода Сетки. Чем ее меньше, тем меньше доход. Для того чтобы компенсировать его снижение, нужно вкладывать больше средств и сжимать сетку."
Сетка – это очень простая система. Она выставляет отложенные и краткосрочные ордера в фиксированных значениях выше и ниже текущей цены. Прибыль получается при отклонениях рынка. Ордера открываются и закрываются в случае, когда цена пересекает значения сетки в любом направлении. Гипотетически степень выигрыша здесь приближается к 100%, но на практике такого уровня добиться невозможно.
Трейдеры обычно используют виртуальный механизм хеджирования, который открывает и закрывает позицию вместо того, чтобы открывать новую в противоположном направлении. Это увеличивает общую прибыль и позволяет контролировать потери. Так что процент выигрыша здесь колеблется на практике в районе 60%.
Владимир написал: у таблиц Луа для адресации используются не индексы, а имена.
Да видимо лучше индексировать trans_id, так как "умная заявка" формирует под себя уникальный trans_id.
Цитата
Владимир написал: Я бы такое говно НЕМЕДЛЕННО выбросил на помойку! Шоб не умничало.
Это всегда успеется. А с чем работать? Пока красота! К движку вопросов нет реализация класс. Проблем мы пока только от моей стратегии. Да решил не менять оставить сетку в силу того что подход скальперский много сигналов и сделок.
"Заявка в фреймворке HackTrade представляет собой динамическую лимитную заявку с изменяемой ценой. При этом также может меняться количество и даже направление. Главное, то нужно запомнить, "умная заявка" будет пытаться набирать указанное количество лотов по заданной цене. Даже если вы снимите заявку торговой систем, SmartOrder породит новую и продолжить добирать заданное ранее количество (представьте, что SmartOrder - это заявка, которая гарантированно набирает зданный объём)."
Цитата
VPM написал: trans_id формирует сам скрипт и уж кто-кто, а он его знает.
Порядок в фильтрации колбеков по одному параметру trans_id.
Вот полный код:
function OnOrder(order) local key = order.trans_id local executor = SmartOrder.pool[key] -- There isn't order if was executed imidiately! Нет заказа, если он был выполнен немедленно! if executor ~= nil and executor.order ~= nil then executor.order.filled = order.qty - order.balance if (order.flags % 2) == 0 then executor.order.active = false end end end
а дальше в main()
for trans_id, smartorder in pairs(SmartOrder.pool) do smartorder:process() end
Nikolay написал: Но с ним можно сделать достаточно небольшое число алгоритмов
Ну на первую скидку хорошо реализуется 3 барные паттерны Price Action, VSA, PivotPoint, посчитать имбаланс и прочее. ТТТ сразу синхронизирует.
Цитата
Nikolay написал: Если не считать того, что он берет данные с графиков
Мне кажется ни чего не мешает в ф. Robot() получить getDataSourceInfo().
Нет основной вопрос эта функция Trade() ведь останавливает поток и крутит исполнение ордеров в цикле. Все тоже взаимодействие с терминалом, знаменитые колбеки (OnInit чего стоит ) В любом случае надо проверять как фильтруются ведь "просьба трудящихся" никуда не делась. Да и цикл что если по какой-то причине не исполняется ордер надо выходить!
Не погоняю посмотрю может что - то соображу. Буду рад любым замечаниям.
Nikolay, Ваши работы видел, не которые пробовал что то сей час в анализе использую, а главное учился. за что Вам отдельный земной поклон.
Но сложность вот в чем использую в основном индикаторы на луа пишу их через замыкание, их же на прямую использую в торговом роботе. Стратегий пул. То есть переключаю между состоянием рынка. это в том числе работы J.Ehlers. Вы сними знакомы. Да еще этим же скриптом провожу тест, задаю период, синхронизирую данные 4 окон прогоняю 1 минутным, цель - получить в основном два показателя ProfitFfaktor и % прибыльных сделок. На основании этих показателей принимаю решение чем и как торговать.
Цитата
Nikolay написал: Я придерживаюсь принципа, что если есть шанс получить критическую проблему даже 0.1%, то значит этим надо заниматься.
Да я с этим замучился, в программировании у меня базовые знания инженера мой первый персональный "ЕС 1841" сов. разработка. и работы я свои не пишу, а скорее собираю как "конструктор" находя интересные вещи в том числе и Ваши. Но если движок худой то остальным и заниматься бессмысленно. Вот и вспомнил старые работы.
Провел аж 5 сделок это при том что я ему АТР убил в расчета, и слетел но винить надо меня я не доправил код. Новый запуск. Да на "пиво" то заработал. О чудеса!
Nikolay написал: Сказать, что его можно отпускать в работу на реальном счете - наверно нет.
Поднял старую наработку, на что ругался и что заметил поправил. Запустил в реал, разрешил аж 6 контрактов, стратегия "сетка" написана еще на "первобытном языке" ну разбираться пока не хочется. Задача проверить движок, ведь что меня смутило ранее.
Цитата
Nikolay написал: Слишком много нюансов при реальной работе через брокера.
Согласен полно, но если он позволит мне заниматься торговлей а не шарить по движкам получая очередные оплеухи, я ему все прощу.
VPM написал: Сделаю период Вашим метом 1сек, цикл 1сек, запрос обновления информации 1сек, т.е. попробую синхронизовать.Добавлю флаг по направлениям. может поможет.
"Велосипед" пока оставим. Просматривая старые наработки наткнулся на "суперкар".
К сожалению автор не поддерживает разработку. Написана аж в 14 далеком году. Изменения с тех пор прошли в qlua, на что следует обратить внимание: 1) язык Фреймворк на писан lua 5.1, qlua 5.3, 5.4; 2) "по просьбам трудящихся" колбеки прилетают по нескольку раз на одно событие.
Тем не мене это "суперкар" по утверждению автора носится может по тикам! Мне столько не нужно.
Написан просто шикарно, со всей мощностью языка lua (мета таблицы, сопрограмма), кратко, лаконично.
Судите сами: минимальный робот в HackTrade состоит из 3-х элементов: 1) Исполнения основного модуля 2) Определения основной функции 3) Вызова функции Trade, для осуществления торговых действий
код; dofile("hacktrade.lua") function Robot() Trade() end
Главное полностью отвечает моему подходу "отдельно мухи, отдельно котлеты" Есть супер движок, к нему цепляем свои стратегии и "курим бамбук"!
Да, набирает позицию автоматом, предварительно нужно определить количество контрактов или лот при выставлении ордера.
"Самое сложное в роботе на qlua для Квика это написать логику отслеживания заявок и сделок по инструменту". Скажем дружно, огромное, человеческое спасибо автору!
Владимир написал: А отложенные вообще не вижу смысли использовать
Нет смысл то есть на случай аварийных ситуаций (разрыв связи, терминал подвис). Я вот у себя боролся с провайдером постоянно канал падал уже о сервере задумывался.
Но ведь задержки не от скрипта, если убрать sleep он повесит терминал. Задержки от брокера возможно с биржи когда исполняются огромное количество ордеров и явно наши не в приоритете. Да и отложенные не использую по этой причине, не знаешь какое проскальзывание получишь.
Но Ваш подход мне более менее понятен похож на сетку, но мне думается более правильно по смыслу назвать подстричь рынок.
Сделаю период Вашим метом 1сек, цикл 1сек, запрос обновления информации 1сек, т.е. попробую синхронизовать. Добавлю флаг по направлениям. может поможет.
В полусекундном обработчике обслуживается стек заявок:
А цикл main тоже 500 mc. или меньше нужно? Их нужно синхронизировать?
Цитата
Владимир написал: Таймер устанавливается на три минуты, по истечении которых заявку можно снимать. Если рынок находится рядом с заявкой, таймер переустанавливается ещё на три минуты.
Заявки у Вас все таки лимитные, т.е. раскидываете по уровням?
Цитата
Владимир написал: При подаче заявки в QUIK заводится новый элемент стека активных заявок для контроля за их исполнением.
Исполнение понятно получаем в OnTrade, а Контроль Активных заявок по времени. Правильно я понял?
Цикл main крутится 250 mc. Сигнал допустим Buy сформировался на tf 15 минут или выше, т.е. сигнал на покупку существует 15 минут. Есть меньший tf 1 мин. отслеживаю появление новой свечи newbar=I>I1 or false; I1=I; Отсекаю сигнал появлением newbar. Позицию пишу из OnTrade, т.е. появление в массиве pos={} сделки считаю заявку исполненной еще раз блокирую исполнение приказа.
Но появляются случаи когда на сигнал пролетают еще приказы видимо связано с ответом от OnTrade(). Явно чего то не хватает в отслеживании конкретного приказа? Не хочется зависеть от капризов OnTrade!
Владимир написал: давно уже все свечи считаю сам, от 10-секундных до часовых
Нашел в Ваших сообщениях пример, считаете средневзвешенную взял на заметку и реализовал у себя 30 сек. Пока не знаю зачем, Понравился подход в реализации.
Владимир написал: оптимальное количество зависит от размера кошелька - чем больше, тем лучше
Нет это так не работает - зависимости не линейные.
Цитата
Владимир написал: Я бы с удовольствием имел в портфеле 500-1000 тикеров
А зачем ведь можно просто регулировать количество в открытой позиции. qty * price = Стоимость позиции. Да и управлять можно только qty. Главное чтоб рынок пропускал.
Владимир написал: А диверсификация нужна всегда - тупо для страховки: что бы такого ужасного ни произошло с парой-тройкой тикеров, на состоянии всего портфеля это мало повлияет.
Нет такое я тоже пользую в портфеле Акций. Я не говорю что совсем не нужно я говорю про оптимальное количество к вопросу о количестве в портфеле
Цитата
Владимир написал: понадобилось множество частых сделок с небольшой прибылью в каждой
А что тут придумаешь в место рыночных лимитные ордера. Не знаю насчет отложенных.
Нашел. Кажется не дополученные данные на графике при загрузке терминала. Видимо чудесное nil в ценообразовании. Подберу костыли. Вернул CreateDataSource пусть будет ведь есть оператор or. Честно удивила скромной нагрузкой.
Цитата
Владимир написал: все свечи считаю сам, от 10-секундных до часовых
Нет мне столько не нужно да и расчеты только вернул в терминал. Меня еще интересует синхронизация данных с разных интервалов. Гоняю тесты он написан у меня своеобразно младшим индексирую данные со старших, пытаюсь более точно отследить событие. Слепил из того что было. Ну и наглядность вывожу метки.
Суть такая убрал расчеты алгоритмов анализирующих Рынок назад в терминал. Индикаторы написаны через "замыкание", кушали в мега байтах - назад в килобайты. Проще синхронизация в разных таймфревов (подход 4 окон). А главное все можно рассмотреть на графике.
"Такого не было ни когда и вот опять" мое произведение уронило терминал.
Уж и не знаю кто здесь главнее мой скрипт, данная функция, или терминал.
Ziveleos, Огромное Вам спасибо! Очень ценно глубокомысленно талантливо!
Владимир, "Скальперский" это шаблон в подходах к организации торговле и удержанию позиции.
Что читать, не читать дело личное. Я лишь уточняю свой подход. John F.Ehlers (так правильно) опубликовал свой подход в четырех книгах в алгоритмах. Я одно время увлекся написав себе индикаторы, не которые до сих пор применяю в своих подхода. Отлично работает его "мгновенная линия тренда".
Это уже кому интересно, может посмотреть готовую реализацию не которых идей в свободном доступе у Николая.
Спасибо за предметное развитие темы и поддержку. Не с логий норм у меня (пока). Николай дал свои наработки для примера, Попробовал по своему разумению. Не прошла фильтрация (от разработчиков)? опубликовал даже поругал, Ответ 0 or nil?
Из Ваших публикаций на форуме, делаю краткий вывод: 1) Стратегия "скальперская" 2) Широкая диверсификация нужна на покрытие риска (> кол. тикеровв ) ну и конечно для заработка. 3) теперь понятна, грусть о потерянном рынке и подход "с высокой колокольне на все".
Я отошёл от таких подходов. Интересует средний срок и инвест. подход (Горизонт прогнозирования или цели). Именно о них я и рассуждаю в своих высказываниях. Именно здесь расхождение понятиях. Да и не считаю среднии, а фильтрую (Линия мгновенного тренда). отставание 1-3 периода данных в отличии 0.5 Периода. Это подходы Дхона Элерса. Надеюсь правильно на писал.