Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода) - страница 30

 
в мт4 чето не могу сжать график по вертикали уровней фибоначи не видно график ограничен 8000 пипсов ))) как решить ?
 

Странно на Фортсе получилось. Вот основная часть закрытия позиции.

  if(Trade.PositionClose(mSymbol))
  {
     // --- Введем задержку пока не получим номер сделки, но не более 2-х секунд
    int cnt = 0;
    ulong deal = 0;
    while(((deal = Trade.ResultDeal()) == 0) && cnt < 20) {Sleep(100); ++cnt;}
    
    if(deal == 0)
    {
      ulong ttOrder = Trade.ResultOrder();
      if(HistoryOrderSelect(ttOrder))
      {
        ENUM_ORDER_STATE state = ENUM_ORDER_STATE(HistoryOrderGetInteger(ttOrder, ORDER_STATE));
        LOG("После закрытия позиции № сделки=0, Order=" + string(ttOrder) + " state=" + EnumToString(state));
      }
      return false;
    }
  }

Вот выдержка из журнала эксперта, т.е. попал в секцию, где deal (тикет сделки) равен нулю после 20 итераций проверки ResultDeal():


JL    0    10:08:04.462    e-MultiPattern-0.15 (RTS-9.21,M5)    cStoploss::sortSL12 Дистанция контртренд=0 BID=172690.0, закроем Short
JM   0    10:08:06.695    e-MultiPattern-0.15 (RTS-9.21,M5)     ** 333-cMyTrade::ClosePosition. После закрытия позиции № сделки=0, Order=16868286 state=ORDER_STATE_FILLED

Вот выдержка из журнала терминала:

IG    0    10:08:04.465    Trades    '733618': exchange buy 2 RTS-9.21 at market
KN    0    10:08:04.480    Trades    '733618': accepted exchange buy 2 RTS-9.21 at market
OQ    0    10:08:04.481    Trades    '733618': exchange buy 2 RTS-9.21 at market placed for execution

FG    0    10:08:04.517    Trades    '733618': order #16868286 buy 2 / 2 RTS-9.21 at market done in 52.326 ms
JN    0    10:08:04.517    Trades    '733618': deal #3413752 buy 2 RTS-9.21 at 172780 done (based on order #16868286)

Подскажите, кто хорошо разбирается в работе СБ и торговой логике МТ5. В журнале терминала размещение ордера и создание сделки произошло в один момент -  04.517 секунд.

А советник в цикле while так и не увидел тикет сделки и вышел по истечении 20 итераций в 06.695 секунд. Почему структура имеет тикет ордера, а тикет сделки не имеет?

Как гарантированно получить тикет сделки, особенно если используешь частичное закрытие?

 
Vasiliy Pushkaryov #:

Странно на Фортсе получилось. Вот основная часть закрытия позиции.

Вот выдержка из журнала эксперта, т.е. попал в секцию, где deal (тикет сделки) равен нулю после 20 итераций проверки ResultDeal():+

Если ResultDeal равен нулю, то он будет и через миллион итераций в цикле равен нулю, т.к. это неизменный параметр.

Вот выдержка из журнала терминала:

Подскажите, кто хорошо разбирается в работе СБ и торговой логике МТ5. В журнале терминала размещение ордера и создание сделки произошло в один момент -  04.517 секунд.

В Терминале есть событийный сервис, в котором пашет свой OnTradeTransaction. Как только туда приходит событие, там идет распечатка в лог. Событийная модель не подразумевает реал-тайм, поэтому не надо верить времени в логах на 100%.

Почему структура имеет тикет ордера, а тикет сделки не имеет?

Потому что выставленный маркет-ордер - это и есть результат OrderSend.

Как гарантированно получить тикет сделки, особенно если используешь частичное закрытие?

Этого не объяснить запросто, т.к. там подводных камней очень много. Написал решение, которое позволяет пользователям работать без каких-либо проблем. Но разбор внутренней реализации - это для особых ценителей.

 
Сделать нормальный тестер для мт4 и через пару лет мт5 забудут все
 
Dmitry Fedoseev #:

И ведь на полном серьезе?.. 

Ветка "Юмор" здесь

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

Совершенно согласен, что необходим (прежде всего, разработчикам) компилятор кода MQL4 в код MQL5. 

 
Vladimir Baskakov #:
Сделать нормальный тестер для мт4 и через пару лет мт5 забудут все

Баскаков, а дочка MT5 использует, зараза... 

 
Я ей индикатор полгода назад пообещал, так и не сделал. 
 
fxsaber #:

Если ResultDeal равен нулю, то он будет и через миллион итераций в цикле равен нулю, т.к. это неизменный параметр.

Потому что выставленный маркет-ордер - это и есть результат OrderSend.

Не совсем понятно. В справке по структуре MqlTradeResult написано

Если закрытие вернуло тикет ордера, но нет тикета сделки - это произошел тип операции TRADE_ACTION_PENDING ?

Или TRADE_ACTION_DEAL, а тикет сделки может "опоздать" и не попасть в структуру?

Т.е. это лучше тогда по ордеру через HistorySelect-функции проводить поиск сделки?

 

И еще, простите, наболело. Разработчикам: прекратите нести безумные и ничем не оправданные затраты на сопровождение MT4, у вас уже этим половина высококлассных специалистов занимается. 

Сделайте один раз компилятор MQL4-MQL5 и сконцентрируйтесь на главном. Добейтесь стабильного первого места финальной версии среди конкурентов. 

 
Vasiliy Pushkaryov #:

Не совсем понятно. В справке по структуре MqlTradeResult написано

Если закрытие вернуло тикет ордера, но нет тикета сделки - это произошел тип операции TRADE_ACTION_PENDING ?

Или TRADE_ACTION_DEAL, а тикет сделки может "опоздать" и не попасть в структуру?

Т.е. это лучше тогда по ордеру через HistorySelect-функции проводить поиск сделки?

Хотя метод PositionClose(Symbol) в СБ присваивает тип операции TRADE_ACTION_DEAL.

Получается тикет сделки должен быть, но его часто нет.