А это нормально ?

Страницы: 1
RSS
А это нормально ?, Нужно остановить скрипт, чтобы обновился totalnet ?
 
Я что-то после qpile пребываю в легком шоке. Сегодня целый день убил, чтобы понять, почему робот продолжает входить в позицию, хотя уже одна заявку улетела. В цикле на вход, помимо торгового условия есть проверка на наличие позиции по фьючерсу. Код на получение позиции такой (подсмотрел тут на форуме))):

function GetTotalNet(stroka)
  local i = 0
  local futures = {}
     while futures.sec_code ~= stroka do
        futures = getItem("futures_client_holding", i)
        i = i+1
     end
  return futures.totalnet
end

Далее в майне вызываем эту функцию и присваиваем переменной значение local total_net=GetTotalNet(тут пишем код бумаги).
Т.е. если total_net=0 и еще другие условия, то входим в позицию. На купиле это работало. Тут же я долго не мог понять, почему скрипт набирает позицию до упора, пока не выскочит сообщение "превышен лимит по инструменту". Логическим путем пришел к выводу, что после посылки лимитированной заявки (которая уходит по рынку) и ее исполнения, нужно остановить скрипт, чтобы позиция успела обновиться в таблице. В конце цикла на вход ставлю паузу в 5 секунд. Только тогда все заработало как нужно.
Это нормально ? Или у меня код кривой на получение позиции и можно как-то ускорить процесс ?
 
Вот такой вариант?
1. в начале скрипта run=false;
2. Получили с колбэка сигнал на совершение транзакции, присваиваем переменной run=true;
3. Этот же колбэк блокируется на первой строчке if run then return end;
4. Колбэк на проверку изменения позиции разблокируется на первой строчке if not run then return end;
5. Пришло подтверждение изменения позиции, run=false;
Обычный флаг.
Неплохо бы ещё учитывать ответ колбэка на результат отправки транзакции.
 
Цитата
В конце цикла на вход ставлю паузу в 5 секунд. Только тогда все заработало как нужно
Этот момент немного не понятен.
А если поставить 1..2 секунды? откуда именно 5? неужели к вам так долго приходит ответ и изменение позиций? (в терминале вы ведь видите изменение?)

Как быстро ваш робот выставляет столько заявок, что "Превышен лимит по инструменту"?

Дело в том, что в отличии от QPILE в QLua при отправке транзакции ваш скрипт сразу продолжает работать как только отправит транзакцию, не дожидаясь ответа на неё.

Это опять же к вопросу необходимости добавления синхронного метода отправки транзакции для написания скриптов QLIPE-стайл
 
Цитата
swerg пишет:
А если поставить 1..2 секунды? откуда именно 5? неужели к вам так долго приходит ответ и изменение позиций? (в терминале вы ведь видите изменение?)
Да это так, на всякий случай. Можно и 2 секунды поставить. Главное, максимально быстро отправить заявку, а том хоть 10 секунд пусть скрипт отдыхает. Подумал, что можно проще сделать. Ввести переменную poza. Как только зявку ушла, не дожидаясь ее исполнения, переводить ее в true. Вышли из позиции, соответственно, переводим ее в false. Без колбэков. Пока немного трудновато понять логику событийного программирования после qpile. Учитывая еще то, что я не профессиональный программист. Имею только базовые знания из институтского курса.
Тут еще вылезла другая проблема. Мой брокер (Сбербанк КИБ) не разрешает переворачивать позицию в одной заявке, если ГО в 2 раза меньше чистой позиции.Пример. На счете 30 тыс. ГО по фьючу РТС 22 тыс. Чтобы мне перевернуться из лонга в шорт, я должен сначала одной заявкой продать лонг, а другой заявкой открыть шорт. Это что вручную при вводе заявки, что на qpile. На qpile понятно. В синхронном режиме посылаешь в одном цикле сначала одну заявку, тут же следом в этом же цикле вторую. И все срабатывает. Но это очень долго. Цена может улететь. И вот тут уже придется разбираться с колбэками. Как вариант, с тем, что предложил green_X5
 
Цитата
Сергей Парахин пишет:
Чтобы мне перевернуться из лонга в шорт, я должен сначала одной заявкой продать лонг, а другой заявкой открыть шорт.
Это ограничение не брокера, но биржи.
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: 1
Читают тему
Наверх