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

 
fxsaber:

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

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

А я не об этом ли и говорю?

Странное иногда восприятие информации у людей :)

Только не выход сразу при ордере с нулевым ID, а его обработка на этом же тике - некое заданное ожидание.

Остальное - всё, о чём я и говорил. Оказывается это днище :)))

 

На подумать об адекватности своих ТЗ. Реальная ситуация, случающаяся ежедневно на MT4

  1. Ничего не открыто.
  2. Выставили BuyLimit и далее никаких OrderSend.
  3. Через какое-то время обнаруживаете 3 BUY-позиции и BuyLimit.
  4. Через какое-то время обнаруживаете 2 BUY-позиции и BuyLimit.
  5. Через какое-то время обнаруживаете 5 BUY-позиций.
  6. Через какое-то время обнаруживаете 1 BUY-позицию.
  7. Через какое-то время п.1.

Это самое простое. Поэтому в предложенном шаблоне присутствует

// Находит позицию соответствующего типа
bool PositionsScan( const string Symb, const ENUM_POSITION_TYPE Type );
Ну а какого уровня устойчивости ТС писать и для кого - каждый решает сам.
 
fxsaber:

  1. Ничего не открыто.
  2. Выставили BuyLimit и далее никаких OrderSend.
  3. Через какое-то время обнаруживаете 3 BUY-позиции и BuyLimit.
  4. Через какое-то время обнаруживаете 2 BUY-позиции и BuyLimit.
  5. Через какое-то время обнаруживаете 5 BUY-позиций.
  6. Через какое-то время обнаруживаете 1 BUY-позицию.
  7. Через какое-то время п.1.

Значит BuyLimit - выставленный советником. Остальные - вручную.

Любая ТС может различать своё и чужое.

Разговор был о своих позициях.

 
Artyom Trishkin:

Значит BuyLimit - выставленный советником. Остальные - вручную.

Любая ТС может различать своё и чужое.

Разговор был о своих позициях.

Ничего вручную или другим советником. Выставляется только один BuyLimit. Все упомянутые BUY-позиции имеют тот же мэджик, что и BuyLimit.

 
fxsaber:

Ничего вручную или другим советником. Выставляется только один BuyLimit. Все упомянутые BUY-позиции имеют тот же мэджик, что и BuyLimit.

Значит - частичное исполнение.

 
Artyom Trishkin:

Значит - частичное исполнение.

Только это.

 
fxsaber:

повлиять на КБ, чтобы прекратили постить код с багами, думаю, стоило бы.

 
Artyom Trishkin:

Только не выход сразу при ордере с нулевым ID, а его обработка на этом же тике - некое заданное ожидание.

Да, выходить сразу - плохое решение.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам".
 
Ivan Ivanov:


2018.02.20 15:20:35.845    Trades     order #66745055 buy 0.01 / 0.01 EURUSDeur at market done in 610.625 ms

2018.02.20 15:20:35.935    Trades     deal #5461453 buy 0.01 EURUSDeur at 1.23403 done (based on order #66745055)

2018.02.20 15:20:35.845    TestBUY (EURUSDeur,M15)    retcode=10009 deal=0 order=66745055

Если запрос выполнен (10009) , то почему deal=0

Добрый день!

У меня аналогичный вопрос ко всем и , в первую очередь, к fxsaber.
На первый взгляд, вопрос примитивный, но никак не могу найти на него ответ.
Вот здесь https://www.mql5.com/ru/forum/6343/page939 мне сказали "Попробуй поискать, fxsaber когда-то бился над этой проблемой. Что получилось я не знаю, не интересовался." поэтому решил спросить Вас.

Вопрос такой. Открываю позицию и хочу вывести на печать содержание MqlTradeResult вот так:

        MqlTradeRequest request={0};
        MqlTradeResult  result={0};
        
        request.action   = TRADE_ACTION_DEAL;    // type of trade operation
        request.symbol   = Pair1;                // symbol
        request.volume   = lots;                 // volume of lot
        request.type     = oper;                 // order type
        request.price    = priceOpen;            // price for opening
        request.deviation= Slippage;             // allowed deviation from the price
        request.magic    = magic;   
 //============================================================     
        if(OrderSend(request,result))       
        Print ("retcode = " +IntegerToString (result.retcode) + "; ");        
        Print ("deal = " +IntegerToString (result.deal) + "; ");
        Print ("order = " +IntegerToString (result.order) + "; "); 
        Print ("volume = " +DoubleToString (result.volume) + "; ");  
        Print ("price = " +DoubleToString (result.price) + "; ");

retcode, order и volume выводятся, а deal и price всегда нули.
Подскажите, пожалуйста, что делаю не так и как получить доступ (для начала хотя бы вывести через Print) к содержимому структуры  result?

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2018.10.29
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
Причина обращения: