Разговоры на завалинке.

mobidik

-----
Макар, согласно твоего кода, скажем, на открытии нового бара, по времени в 12:15:09 был получен сигнал на бай и установлена позиция с экспирацией в 5 минут. В 12:20:03 происходит открытие нового бара, на котором получаем сигнал на бай. Получили - должны выполнить - ставим позицию. Замечу, что у тебя жестко задано: только одна позиция на бар по типу. Теперь в рынке одновременно две позиции на бай, первая закроется через 6 сек, в 12:20:09(!). Спустя это время, выполняется проверка на вход по мартину - есть закрытая убыточная позиция на бай, при этом, время бара закрытой позиции должно соответствовать времени текущего, нулевого, бара - условие выполняется, но вот не задача, новую позицию на бай на текущем баре мы не можем установить, т.к., только одна позиция по типу разрешена на текущем баре, а она уже есть. Проходит время, текущий бар закрылся. По прежнему, находим последнюю убыточную закрытую позицию, но её время закрытия по бару уже не соответствует текущему бару - условие на установку позиции по мартину не выполняется. Вот и произошла потеря открытия ордера по мартину.
Так, что, нет никаких задержек со стороны брокера и OrdersHistoryTotal() работает исправно. Как писал ранее, чудес не бывает, а вот ошибки с логикой построения кода - присутствуют.
 

MakarFX

Элитный участник
Макар, согласно твоего кода, скажем, на открытии нового бара, по времени в 12:15:09 был получен сигнал на бай и установлена позиция с экспирацией в 5 минут. В 12:20:03 происходит открытие нового бара, на котором получаем сигнал на бай. Получили - должны выполнить - ставим позицию. Замечу, что у тебя жестко задано: только одна позиция на бар по типу. Теперь в рынке одновременно две позиции на бай, первая закроется через 6 сек, в 12:20:09(!). Спустя это время, выполняется проверка на вход по мартину - есть закрытая убыточная позиция на бай, при этом, время бара закрытой позиции должно соответствовать времени текущего, нулевого, бара - условие выполняется, но вот не задача, новую позицию на бай на текущем баре мы не можем установить, т.к., только одна позиция по типу разрешена на текущем баре, а она уже есть. Проходит время, текущий бар закрылся. По прежнему, находим последнюю убыточную закрытую позицию, но её время закрытия по бару уже не соответствует текущему бару - условие на установку позиции по мартину не выполняется. Вот и произошла потеря открытия ордера по мартину.
Так, что, нет никаких задержек со стороны брокера и OrdersHistoryTotal() работает исправно. Как писал ранее, чудес не бывает, а вот ошибки с логикой построения кода - присутствуют.
Там нет двух позиций одновременно. При работе по сигналам проблем и вопросов нет.
Проблема возникала только, если открывать без сигнала сразу после убытка, т.е. ордер закрылся с убытком и на следующем баре открывать в том же направлении с увеличенным лотом.
Так вот закрытые ордера в БО появляются не сразу и на открытии нового бара убытка нет.
 

mobidik

-----
Проблема возникала только, если открывать без сигнала сразу после убытка, т.е. ордер закрылся с убытком и на следующем баре открывать в том же направлении с увеличенным лотом.
Так вот закрытые ордера в БО появляются не сразу и на открытии нового бара убытка нет.
Вот именно, что время открытия нового бара, что на демо, что на реале, не равно по секундам 0! А время экспирации задается с точностью до секунды. Это в тестере все красиво и чётко...
 

ZenFX

Почетный гражданин
Если там не изменилось количество ордеров, тогда как он закрылся то... на ))).
А по БО, там чо, там же не лот вообще... а сумма ) в деньгах, как этот момент то тоже был упущен ))).
Мартин этот считаем только тогда когда изменилось количество ордеров, если оно не изменилось значит и ничего не было... )
 

MakarFX

Элитный участник
Вот именно, что время открытия нового бара, что на демо, что на реале, не равно по секундам 0! А время экспирации задается с точностью до секунды. Это в тестере все красиво и чётко...
Я знаю, но это не мое условие, а условие ТЗ.
 

mobidik

-----
Кстати, раз речь зашла об открытии ордера сразу после закрытия - у тебя это не предусмотрено по коду, при этом, в настройках указано, что такое есть, переменная NextTrade:
C-подобный:
NextTrade   = false; // Martin order true-next bar, false-next signal

   if(NextTrade&&nexttrade)
     {
      Тут проверка для мартина
     }

Других точек входа для мартина я не вижу. Т.е., если стоит NextTrade = false - условие не выполниться.
 

ZenFX

Почетный гражданин
Ну чо в итоге то кривой код, недоделки переделки... всё как обычно ). Мартин это сложно))), лот получить умножить и нормализовать, это конечно же, нереально вообще, причем если там в истории ордеров копаться искать там последний и предпоследний ордер, ты чо там с MQL5 то будешь делать тада ))).
 
Последнее редактирование:

MakarFX

Элитный участник
Ты тоже давай там не выдумывай
Разговор был как раз об этом. Нужно найти закрытый ордер и не важно по тикету или нет, главное чтобы он был последним закрытым.
if (OrderSelect(_orderTicket, SELECT_BY_TICKET)) - не поможет, если ордера нет в истории, даже если Вы знаете номер тикета.
 

mobidik

-----
Разговор был как раз об этом. Нужно найти закрытый ордер и не важно по тикету или нет, главное чтобы он был последним закрытым.
if (OrderSelect(_orderTicket, SELECT_BY_TICKET)) - не поможет, если ордера нет в истории, даже если Вы знаете номер тикета.
Макар, так ты сам же, выше скрин приложил из справки: "Если время закрытия ордера не равно 0, то ордер является закрытым", соответственно, если время закрытия равно 0 - ордер открыт...
С другой стороны, тут лучше запоминать именно тикет последнего закрытого убыточного ордера. Сперва определил его, выполнил установку по мартину и запомнил тикет ордера на основании которого была установлена позиция по мартину, все. Новую позицию по мартину можно установить только при условии, что тикет убыточной больше за ранее запомненный. И тут не важно, ставил ты позицию на текущем баре или нет, какой тип был и какой нужен - есть убыток - поставил - запомнил и ждем следующего закрытия...
 

MakarFX

Элитный участник
Макар, так ты сам же, выше скрин
У меня открытие ордера происходит если нет открытых. Когда включен NextTrade, перед открытием ордера проверяется последний закрытый и если он убыточный, то лот увеличивается.
Что мне даст в данном случае номер тикета, только false если ордера нет в истории, значить открытие будет не сразу, а это не просто не по ТЗ, на этом был акцент.
 

MakarFX

Элитный участник
Вот именно, что время открытия нового бара, что на демо, что на реале, не равно по секундам 0!
У Вас есть код советника, там прописано ожидание следующего бара для открытия, даже если ордер закрылся на первой секунде сов ждет следующего бара.
 

mobidik

-----
Если использовать тикет убыточной позиции как маркер - нужно переписывать код.
С твоей стороны, все упирается в то, что есть закрытый ордер, а вот ф-ция OrdersHistoryTotal() его не видит, брокер делает задержку - так? Докажи, что указанная ф-ция не видит последний закрытый ордер и я сниму шляпу, пардон, котелок перед тобой. Иначе, что-то не верно с алгоритмом кода.
 

MakarFX

Элитный участник
Если использовать тикет убыточной позиции как маркер - нужно переписывать код.
С твоей стороны, все упирается в то, что есть закрытый ордер, а вот ф-ция OrdersHistoryTotal() его не видит, брокер делает задержку - так? Докажи, что указанная ф-ция не видит последний закрытый ордер и я сниму шляпу, пардон, котелок перед тобой. Иначе, что-то не верно с алгоритмом кода.
Это было в журнале, который мне давал заказчик, там где мартин не срабатывал, запись о закрытии появлялась позже открытия новой сделки.
А там где запись появлялась сразу - мартин срабатывал.
 

MakarFX

Элитный участник
Если использовать тикет убыточной позиции как маркер - нужно переписывать код.
С твоей стороны, все упирается в то, что есть закрытый ордер, а вот ф-ция OrdersHistoryTotal() его не видит, брокер делает задержку - так? Докажи, что указанная ф-ция не видит последний закрытый ордер и я сниму шляпу, пардон, котелок перед тобой. Иначе, что-то не верно с алгоритмом кода.
1706050514057.png
 
Верх