Скачать MetaTrader 5

некорректно работает MODE_HISTORY (возможно)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
mt4trade
399
mt4trade  

Коллеги, простой вопрос. Нужно определить, есть ли закрывшийся ордер определенного типа на предыдущем баре.

На открытии бара делаю примерно так:

nlTTotal=OrdersHistoryTotal()-1;
for (nlCnt=nlTTotal; nlCnt>=0; nlCnt--)
{ blOrderSelect=OrderSelect(nlCnt, SELECT_BY_POS, MODE_HISTORY);
  { if (blOrderSelect && OrderType()==OP_BUY) dtlBuyCloseTime=OrderCloseTime(); 
    if (dtlBuyCloseTime>=Time[1]) // ордер закрыт на предыдущем баре или позже
    { fSetArrow(Time[0],High[0]+100*Point,TimeToStr(Time[0]),254,Orange); // ставим галку
    }
  }
}

Но штука в том, что тестер почти всегда находит ордер только ЧЕРЕЗ бар:

  

 Модель в тестере пробовал и все тики и контрольные точки - одинаково.

И то, это работает если поставишь  if (dtlBuyCloseTime>=Time[2])  

Что это - глюки тестера, неправильная работа MODE_HISTORY или у меня баг ??

Причем ведь бывают и нормальные срабатывания, но реже!

Как победить, кто подскажет?

Alexandr Bryzgalov
31366
Alexandr Bryzgalov  

На вид по коду всё правильно, возможно стрелку перерисовывает другая часть кода.

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

ЗЫ: скорее всего где-то в коде идёт перерисовка стрелочки.

mt4trade
399
mt4trade  
sanyooooook: На вид по коду всё правильно, возможно стрелку перерисовывает другая часть кода.
Исключено. Код написан так, что стрелочки могут нарисоваться многократно, но НЕ перерисоваться.
sanyooooook: Перезагрузи терминал, если останется то же самое то причина в коде. Делай распринтовку, смотри время закрытия ордеров в результатах и сравнивай с временем баров.

Перезагрузил терминал, перезагрузил историю котировок, включая минутки, посмотрел в Результатах тестера времена закрытия ордеров, сверил их с сохраненными в примечаниях к стрелкам. Времена закрытия совпадают. В общем дело похоже в том, что в пул history ордер попадает как-то странно. Иногда "вовремя", иногда только через бар!

sanyooooook, не мог бы написать свой код чтобы проверить этот баг?

И еще кто может подключится. 

Комбинатор
16102
Комбинатор  

Ошибка в коде.

Вначале стрелка рисуется где надо. Но на следующем баре перерисовывается на бар дальше, т.к. все подходит по условиям.

TarasBY
1739
TarasBY  
mt4trade:

Коллеги, простой вопрос. Нужно определить, есть ли закрывшийся ордер определенного типа на предыдущем баре.

Предыдущий бар можно отследить так: 

    if (iBarShift (NULL, 0, dtlBuyCloseTime) == 1) // ордер закрыт на предыдущем баре
mt4trade
399
mt4trade  
TheXpert: Ошибка в коде. Вначале стрелка рисуется где надо. Но на следующем баре перерисовывается на бар дальше, т.к. все подходит по условиям.
Код написан так, что стрелочки могут нарисоваться многократно, но НЕ перерисоваться. Попробуйте сами.
Комбинатор
16102
Комбинатор  
Мне вообще абсолютно по барабану. Я ошибку сказал. Дальше делай что хочешь, фикси, упирайся, обвиняй разработчиков.
Alexandr Bryzgalov
31366
Alexandr Bryzgalov  

вот так попробуй

nlTTotal=OrdersHistoryTotal()-1;
for (nlCnt=nlTTotal; nlCnt>=0; nlCnt--)
{ blOrderSelect=OrderSelect(nlCnt, SELECT_BY_POS, MODE_HISTORY);
  { if (blOrderSelect && OrderType()==OP_BUY) 
    {
       dtlBuyCloseTime=OrderCloseTime(); 
       if (dtlBuyCloseTime>=Time[1]) // ордер закрыт на предыдущем баре или позже
       { fSetArrow(Time[0],High[0]+100*Point,TimeToStr(Time[0]),254,Orange); // ставим галку
       }
    }
  }
}
mt4trade
399
mt4trade  
TarasBY: Предыдущий бар можно отследить так: if (iBarShift (NULL, 0, dtlBuyCloseTime) == 1) // ордер закрыт на предыдущем баре"
Это не поможет, так как пока в пуле OrderSelect`а как бы нет самого ордера, хоть он и закрылся на предыдущем баре. Соответственно, время его закрытия неизвестно.
Alexandr Bryzgalov
31366
Alexandr Bryzgalov  

в твоей версии переменная

dtlBuyCloseTime

держит значение и так как условие подходит стрелка перерисовывается.

PapaYozh
3768
PapaYozh  
mt4trade:
Код написан так, что стрелочки могут нарисоваться многократно, но НЕ перерисоваться. Попробуйте сами.

TheXpert  прав.

Когда время закрытия ордера попадает в 0-й бар, стрелка рисуется правильно. После появления нового бара, время закрытия попадает на 1ый бар, и стрелка переносится с 1-го на 0-ой бар.  А после этого движется вместе с графиком.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий