<HELP> for explanation

Блог им. hacktrade

Спредовый робот на HackTrade

Доработал фреймворк HackTrade до версии 1.4.

Теперь можно удобно работать со стаканом
Обратите внимание, что по умной заявке сначала открывается позиция лучшим бидом, потом позиция приводится к 0 лучшим оффером.
Подход не стандартный, но оцените удобство: если снять заявку, робот поставит новую, чтобы добить недостающий объём.


Пример робота (исходник):

dofile("../hacktrade.lua")

function Robot()

    feed = MarketData{
        market="QJSIM",
        ticker="SBER",
    }

    order = SmartOrder{
        account="NL0011100043",
        client="74924",
        market="QJSIM",
        ticker="SBER",
    }
    
    
    while working do
      repeat
        order:update(feed.bids[1].price, 3)
        Trade()
      until order.filled      
      repeat
        order:update(feed.offers[1].price, 0)
        Trade()
      until order.filled
    end
end

Посморите на реализацию конечного автомата: 2 цикла, пока не заполнится умная заявка.
Жду отзывов )
 

А Как называется язык на котором написан робот?
avatar

Lika

Lika, Lua (терминал QUIK)
hacktrade, а разве у него не должны подсвечиваться функциональные слова как в MQL4?
Я бы, наверное, поняла код если бы каждая строчка была прокомментирована. Жаль что нет комментов что на каждой строчке происходит.
И под опционы на этом языке можно писать?
avatar

Lika

Lika, воспользуйтесь любой средой разработки или специализированным редактором: studio.zerobrane.com/

А комментарии добавлю, в планах )
если бы в комплекте с роботом шла еще и машина времени, что бы в 2006 год вернутся…
avatar

Lafert

Lafert, в терминале QUIK пока нет такой функции, написал в техподдержку )

Пример, скорее, функциональный, но можно рискнуть на неликвиде/опционах )
hacktrade, Поскольку пока не очень подробная документация, сходу не понял как, к примеру, выставить лимитную заявку на покупку по биду, но не ждать пока заполнится весь выставленный объем, а сразу после первой сделки выставить купленный объем на продажу по офферу, сняв перед этим неисполненный остаток лимитной заявки с бида. При этом надо учесть, что с момента получения программой информации о первой сделке по биду и фактическим снятием остатка из торговой системы, туда могли налить еще вплоть до полного исполнения. Т.е. если выставлять на оффер купленный объем по информации о первой сделки по биду, то мы можем продать не все, что купили. Получается, что надо дождаться снятия первой заявки с бида, еще подождать сколько-то времени на случай возможного прихода запоздавшей информации о сделках и уже потом выставлять оффер. Это все в умных заявках как-то учитывается?
avatar

Vkt

Vkt, всё просто

repeat
…
until order.position != 0

repeat
…
until order.filled
В данном случае цикл работает до первой сделки, после которой сразу скидывает всё, что дали.
Робот сам снимет остаток и выставит купленное на продажу.

Традиционных лимитников нет. В этом вся фишка, что заявки не теряются.

Можно добавить ещё умных заявок и работать по разным бидам.
hacktrade, если я все правильно понял, то это вообще крутая фишка! Т.е. можно наштамповать умных ордеров order1, order2… orderN и каждый умный ордер будет внутри себя отслеживать свою собственную позицию даже если после первой сделки по биду налили еще, он просто станет продавать больше по офферу пока не закроет свою собственную позицию до 0? При этом остальные умные ордера будут делать тоже самое?
avatar

Vkt

Vkt, всё точно! именно так и работает )

Каждая заявка помнит, сколько она набрала, и сколько надо скидывать. А если ей дать отрицательное значение, она войдёт в шорт (даже из логна с любым остатком). А если в шорте передадите 0, шорт закроется, причём тем объёмом, которым заявка успеет войти, когда будет переворачивать лонг.
hacktrade, супер, респект! Но еще больше вопросов появилось :)
«Обратите внимание, что вам вернётся столько значений, сколько задано в параметрах графика. Не добавляйте на график слишком много значений, это может замедлить работу программы.» — имеется ввиду, что если на графике одна ЕМА, то Indicator при каждом обращении будет всасывать из Квика все доступные значения этого мувинга или что-то другое? Какова система нумерации бидов и офферов в стакане (feed.bids[1])?
avatar

Vkt

Vkt, да, при каждом обращении к графику достаются все значения, это ограничение терминала. Лучше укажите точно, сколько свечек в графике; не загружайте все доступные.

Теперь по бидам/офферам. Для удобства они нумеруются от лучших цен (центр стакана). Индекс 1 — лучший бид и оффер, 2 — вторые бид и оффер от центра. И так далее.
hacktrade, понятно, спасибо! А вот интерсено, свои заявки вычитаются из данных стакана, будет ли корректно фронтранится лучший бид:
repeat
order:update(feed.bids[1].price+feed.sec_price_step, 3)
Trade()
until order.filled
avatar

Vkt

Vkt, собственные заявки пока не вычитаются. В ближайших планах. Пока только вручную.
hacktrade, ясно, ждем реализации планов!
avatar

Vkt

hacktrade, можно сделать замыкание для индикаторы/графики, которое на старте считывает все данные, а после добавлять только текущий активный или закрытый бар. Прирост по времени обеспечен.

Можно ли получиь значение маржи из таблицы Quik. Или другие значения из таблиц?
avatar

legion73

legion73, данное значение получить можно только стандартным вызовом getItem.
hacktrade, Спасибо за ответ.Буду разбираться. Есть у меня на вашей 1-ой версии робот. Хорошо работает с индикаторами.
legion73, ого! раз есть практический кейс, буду особенно рад услышать ваши отзывы по надёжности и функционалу.

Ошибки и пожелания можно публиковать сразу в GitHub:
github.com/hacktrade/hacktrade/issues?state=open

Тогда не потеряются )

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UP