Типичные ошибки и способы их устранения при работе с торговым окружением - страница 7

 
fxsaber:

Боюсь, что это кривая логика. Но могу и ошибаться, конечно. Было бы интересно услышать логику.

3+ножный арбитраж

 
Комбинатор:

3+ножный арбитраж

Для этой ТС могут использоваться разные логики. Как правило, это асинхронная отправка трех приказов. Но, действительно, бывают варианты, когда сначала отправляется синхронный OrderSend на наиболее вероятный для сильного скачка символ. И если OrderSend закончился открытой позицией - отправляются наименее вероятные два OrderSendAsync.

При таком раскладе может показаться, что требуется механизм определения неполноценности первой "позиции" - маркет-ордера. Но первый OrderSend идет через лимитную заявку по текущей цене или немного хуже. Поэтому он не считается "позицией". Остальные же два - это маркет-ордера, чаще всего. И учет их в качестве "позиций" позволяет избежать ситуаций повторного открытия позиций. При этом никаких негативных воздействий этот учет не несет за собой.

 

В общем, как понимаю - решения не будет. Даже не решения, а логически верного принципа работы с количеством ордеров и позиций.

Я говорю про функцию, использующуюся для любой стратегии, другие говорят - для каждой стратегии - свой костылёк.

 
fxsaber:

Этот пример оказался гораздо круче. Зареджектился TP, выставленный самим брокером! И почти сразу (ждал аж 115 мс - баг MT5, видимо) после реджекта брокер выставил следующий TP, который исполнился. На скрин комментарии к ордерам не попали. Зеленый цвет - ORDER_REASON_TP. И у reject-ордера, соответственно, даже ORDER_POSITION_ID имеется.

Это уже не reject-ордер, а нормально залитый - исполненный. Когда исполнился, тогда и ID позиции получил.

И ещё: тут два ордера, один из которых не был исполнен. Теперь вопрос: сколько позиций (если бы эти ордера были не стоп-приказами, а приказами на открытие позиции), так вот - сколько позиций вам бы вернул ваш подход? Отвечу: на одну больше, что ложь. Зачем тогда так делать?

 
Artyom Trishkin:

Это уже не reject-ордер, а нормально залитый - исполненный. Когда исполнился, тогда и ID позиции получил.

У Вас неверные представления


И ещё: тут два ордера, один из которых не был исполнен. Теперь вопрос: сколько позиций (если бы эти ордера были не стоп-приказами, а приказами на открытие позиции), так вот - сколько позиций вам бы вернул ваш подход? Отвечу: на одну больше, что ложь. Зачем тогда так делать?

Ну давайте по новой. Пусть было две открытые позиции. И выставляем вот такой в будущем реджектнутый маркет-ордера. Функция возвращает 2+1=3. ТС смотрит, что три позы и все OK. Через 16 мс приходит реджект. ТС смотрит, сколько поз - 2+0=2. А надо три! - отправляет очередной маркет-ордер. Далее снова 2+1=3. И ордер исполняется, получая 3+0=3.

 
Artyom Trishkin:

В общем, как понимаю - решения не будет. Даже не решения, а логически верного принципа работы с количеством ордеров и позиций.

Я говорю про функцию, использующуюся для любой стратегии, другие говорят - для каждой стратегии - свой костылёк.

Своего мнения не менял. Функция остается универсальной для 99.9% советников и торговых площадок.

 
fxsaber:

У Вас неверные представления


Ну давайте по новой. Пусть было две открытые позиции. И выставляем вот такой в будущем реджектнутый маркет-ордера. Функция возвращает 2+1=3. ТС смотрит, что три позы и все OK. Через 16 мс приходит реджект. ТС смотрит, сколько поз - 2+0=2. А надо три! - отправляет очередной маркет-ордер. Далее снова 2+1=3. И ордер исполняется, получая 3+0=3.

#896615 - reject, и НЕ имеет ID-позиции.

Ну давайте по-другому. Пусть было две открытые позиции. Получаем сигнал на открытие третьей позиции, отсылаем торговый запрос и получаем вот такой реджектнутый маркет-ордер. При наличии трёх позиций у ТС включается режим отсылки других торговых приказов - по другому символу. Функция возвращает 2+1=3. ТС смотрит, что три позиции и начинает рассчитывать объёмы, тейки/стопы ещё трёх позиций - по другому символу, отправляет торговые приказы на открытие по другому символу. Через 16 мс приходит реджект одного с других символов. ТС смотрит, сколько поз - 2(текущий)+3(2 позиции и один маркет с другого символа)=5. А надо шесть! - отправляет очередной маркет-ордер по текущему символу совсем по иной цене и высчитывает для третьего символа объём и тейки/стопы новых позиций . Далее снова такой же бардак.

А потом репу чешем - а чего это он с ума сошёл???

Или вы думаете, что нужно делать функции только под одну-единственную - вашу - стратегию и логику построения ТС? Ошибаетесь.

 
fxsaber:

Своего мнения не менял. Функция остается универсальной для 99.9% советников и торговых площадок.

Нет. Только для одной логики поведения.

А их тысячи.

 
fxsaber:

Своего мнения не менял. Функция остается универсальной для 99.9% советников и торговых площадок.

Функция должна вернуть то, что от неё просят. Чётко, и безоговорочно, а не решать за пользователя чего ему там потом ещё нужно будет.

Логика, предлагаемая мною, должна быть или такой:

  • Вопрос: сколько есть позиций
  • Ответ: две

... или такой:

  • Вопрос: сколько есть позиций
  • Ответ: погоди чуток - не понятно пока
  • Жду, затем вопрос: сколько есть позиций
  • Ответ: три

А вы предлагаете:

  • Вопрос: сколько есть позиций
  • Ответ: три
  • Хорошо, столько и ждал, считаю дальше и открываю на другом символе ... Спустя время: Что-то фигня какая-то... Вопрос: сколько всё же позиций
  • Ответ: две
  • Вопрос: а почему сказал, что три?
  • Ответ: ну я решил, что тебе потом пригодится наверное
  • Вопрос: сколько по другому символу позиций
  • Ответ: три
  • Да? А уверен? И так профукали денег по другому символу с прошлым ответом ...
 
Artyom Trishkin:

#896615 - reject, и НЕ имеет ID-позиции.

Прочтите номер в третьей слева красной рамке на скрине выше.

Ну давайте по-другому. Пусть было две открытые позиции. Получаем сигнал на открытие третьей позиции, отсылаем торговый запрос и получаем вот такой реджектнутый маркет-ордер. При наличии трёх позиций у ТС включается режим отсылки других торговых приказов - по другому символу. Функция возвращает 2+1=3. ТС смотрит, что три позиции и начинает рассчитывать объёмы, тейки/стопы ещё трёх позиций - по другому символу, отправляет торговые приказы на открытие по другому символу. Через 16 мс приходит реджект одного с других символов. ТС смотрит, сколько поз - 2(текущий)+3(2 позиции и один маркет с другого символа)=5. А надо шесть! - отправляет очередной маркет-ордер по текущему символу совсем по иной цене и высчитывает для третьего символа объём и тейки/стопы новых позиций . Далее снова такой же бардак.

А потом репу чешем - а чего это он с ума сошёл???

Не надо писать и придумывать кривую торговую логику, иначе будете чесать не только репу. Понимаю, что среди криворуких ТЗ, что, наверное, наводнили фриланс, такое не редкость. И поскольку деньги не пахнут, кто-то берется их выполнять по принципу, раз просят дерьмо, сделаю и забуду. Ничего даже близкого к такому не писал и в страшнем сне. Но в сортах кала среди ТЗ, уверен, фрилансеры разбираются куда лучше меня. Поэтому да, для неадекватных ТС может очень сильно пригодиться вариант, предложенный @Комбинатор - делать ноги из ТС, как только обнаружили маркет-ордер с нулевым ID.

Или вы думаете, что нужно делать функции только под одну-единственную - вашу - стратегию и логику построения ТС? Ошибаетесь.

Считаю, что нужно думать, как минимум. А не создавать годную среду для размножения мерзостных ТС. К сожалению, критерия определения днища среди ТЗ сформулировать не в состоянии. Чтобы никого не задевать,  переверну мировосприятие - сам на дне, а известные ТЗ повсплывают по законам физики.


Рецепт, что называется, универсальный:

  1. Встретили маркет-ордер с нулевым ID - выход сразу.
  2. MT5-OrderSend переписывается, чтобы возвращал всегда ненулевой Result.deal - исходник выкладывал в КБ.
  3. После каждого OrderSend или Sleep отправка к п.1.
С таким подходом любая (абсолютные 100%) ТС будет пахать.
Причина обращения: