Доработал фреймворк
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 цикла, пока не заполнится умная заявка.
Жду отзывов )
Я бы, наверное, поняла код если бы каждая строчка была прокомментирована. Жаль что нет комментов что на каждой строчке происходит.
И под опционы на этом языке можно писать?
А комментарии добавлю, в планах )
Пример, скорее, функциональный, но можно рискнуть на неликвиде/опционах )
В данном случае цикл работает до первой сделки, после которой сразу скидывает всё, что дали.
Робот сам снимет остаток и выставит купленное на продажу.
Традиционных лимитников нет. В этом вся фишка, что заявки не теряются.
Можно добавить ещё умных заявок и работать по разным бидам.
Каждая заявка помнит, сколько она набрала, и сколько надо скидывать. А если ей дать отрицательное значение, она войдёт в шорт (даже из логна с любым остатком). А если в шорте передадите 0, шорт закроется, причём тем объёмом, которым заявка успеет войти, когда будет переворачивать лонг.
«Обратите внимание, что вам вернётся столько значений, сколько задано в параметрах графика. Не добавляйте на график слишком много значений, это может замедлить работу программы.» — имеется ввиду, что если на графике одна ЕМА, то Indicator при каждом обращении будет всасывать из Квика все доступные значения этого мувинга или что-то другое? Какова система нумерации бидов и офферов в стакане (feed.bids[1])?
Теперь по бидам/офферам. Для удобства они нумеруются от лучших цен (центр стакана). Индекс 1 — лучший бид и оффер, 2 — вторые бид и оффер от центра. И так далее.
repeat
order:update(feed.bids[1].price+feed.sec_price_step, 3)
Trade()
until order.filled
Ошибки и пожелания можно публиковать сразу в GitHub:
github.com/hacktrade/hacktrade/issues?state=open
Тогда не потеряются )