Invalid Price - страница 2

 
TraSer:

Может я чего-то не понимаю, но по-моему у меня так.

7-я строка снизу.

Попробовал сделать немного иначе

Результат тот же.

Могу ещё добавить, что ошибка происходит в тот момент, когда на одном таймфрейме открываются 2 сделки. Но это ничего не объясняет, поскольку i при этом разное. Может разработчикам написать?

Да, вижу строку семь снизу.

            MqlTick last_tick;
            if(SymbolInfoTick(Symbol(),last_tick))
               m_symbol.NormalizePrice(last_tick.ask);
            else
               Print("SymbolInfoTick() failed, error = ",GetLastError());
            m_trade.Buy((int)MathFloor((AccountInfoDouble(ACCOUNT_EQUITY)*oneLot)/
               SymbolInfoDouble(Instruments[i].instrument, SYMBOL_TRADE_CONTRACT_SIZE)/
               SymbolInfoDouble(Instruments[i].instrument, SYMBOL_ASK)), 
               Instruments[i].instrument);

Но это как пустой звук (бездумное действие). Сами то понимаете зачем Вы это делаете?


То есть цену Вы НИКАК в торговом запросе НЕ НОРМАЛИЗУЕТЕ (самый лучший вариант - это применять  торговый класс CSymbolInfo и ЕГО метод  NormalizePrice.)

Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo
Документация по MQL5: Стандартная библиотека / Торговые классы / CSymbolInfo
  • www.mql5.com
Стандартная библиотека / Торговые классы / CSymbolInfo - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
А не акциями ли Вы торгуете? И пытаетесь по рынку купить?
 
Да, акциями и по рынку. Спасибо за помощь! Заработало!
 

Доброго времени суток!

Новую тему открывать нет смысла, по ошибке [Invalid price] их и так много.

Раньше как то решал, проверками, обновлениями и т.п.

Но сейчас лада дать не могу, вроде все проверяется, но валидатор выдает при модификации лимитного ордера

test on EURUSD,H1 (hedging)

2019.04.01 00:03:00 failed modify order #2 buy limit 0.95 EURCHF at 1.11316 sl: 0.00000 tp: 0.00000 -> 1.11616, sl: 0.00000 tp: 0.00000 [Modification failed due to order or position being close to market]

2019.04.01 23:00:00 failed modify order #4 buy limit 0.95 EURCHF at 1.11672 sl: 0.00000 tp: 0.00000 -> 1.11972, sl: 0.00000 tp: 0.00000 [Modification failed due to order or position being close to market]

2019.04.01 23:20:00 failed modify order #5 sell limit 0.95 EURCHF at 1.12318 sl: 0.00000 tp: 0.00000 -> 1.12020, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:21:00 failed modify order #5 sell limit 0.95 EURCHF at 1.12318 sl: 0.00000 tp: 0.00000 -> 1.12020, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:23:30 failed modify order #4 buy limit 0.95 EURCHF at 1.11972 sl: 0.00000 tp: 0.00000 -> 1.11963, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:24:30 failed modify order #4 buy limit 0.95 EURCHF at 1.11972 sl: 0.00000 tp: 0.00000 -> 1.11964, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:25:00 failed modify order #4 buy limit 0.95 EURCHF at 1.11972 sl: 0.00000 tp: 0.00000 -> 1.11965, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:27:00 failed modify order #4 buy limit 0.95 EURCHF at 1.11968 sl: 0.00000 tp: 0.00000 -> 1.11965, sl: 0.00000 tp: 0.00000 [Invalid price]

Функция:

void LimitOrder(string symb, double price_sell=0, double price_buy=0) {
//---
  m_sym.RefreshRates();
   
  for (int i=0; i<OrdersTotal(); i++) {
    ulong ticket=OrderGetTicket(i);
    if (StringLen(symb) && OrderGetString(ORDER_SYMBOL)==symb) {
      if (m_ord.Magic()==MagicNumber) {
      
        int    freeze_level=(int)SymbolInfoInteger(symb, SYMBOL_TRADE_FREEZE_LEVEL);
        double ask=SymbolInfoDouble(symb, SYMBOL_ASK);
        double bid=SymbolInfoDouble(symb, SYMBOL_BID);
        double point=SymbolInfoDouble(symb, SYMBOL_POINT);
        
        if (m_ord.OrderType()==ORDER_TYPE_BUY_LIMIT) {
        
          if ((ask-price_buy)>freeze_level*point && m_ord.PriceOpen()!=price_buy) {
          
            m_trade.OrderModify(ticket, m_sym.NormalizePrice(price_buy), 0, 0, m_ord.TypeTime(), 0);
          }
        }
        if (m_ord.OrderType()==ORDER_TYPE_SELL_LIMIT) {
        
          if ((price_sell-bid)>freeze_level*point && m_ord.PriceOpen()!=price_sell) {
          
            m_trade.OrderModify(ticket, m_sym.NormalizePrice(price_sell), 0, 0, m_ord.TypeTime(), 0);
          }
        }
      }
    }
  }
}


Убрал стопы и профиты, а ошибки вылетают.

Что блин еще проверить над?

И так две трети эксперта проверки занимают.

 
Anatoliy Lukanin #:

Доброго времени суток!

Новую тему открывать нет смысла, по ошибке [Invalid price] их и так много.

Раньше как то решал, проверками, обновлениями и т.п.

Но сейчас лада дать не могу, вроде все проверяется, но валидатор выдает при модификации лимитного ордера

test on EURUSD,H1 (hedging)

2019.04.01 00:03:00 failed modify order #2 buy limit 0.95 EURCHF at 1.11316 sl: 0.00000 tp: 0.00000 -> 1.11616, sl: 0.00000 tp: 0.00000 [Modification failed due to order or position being close to market]

2019.04.01 23:00:00 failed modify order #4 buy limit 0.95 EURCHF at 1.11672 sl: 0.00000 tp: 0.00000 -> 1.11972, sl: 0.00000 tp: 0.00000 [Modification failed due to order or position being close to market]

2019.04.01 23:20:00 failed modify order #5 sell limit 0.95 EURCHF at 1.12318 sl: 0.00000 tp: 0.00000 -> 1.12020, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:21:00 failed modify order #5 sell limit 0.95 EURCHF at 1.12318 sl: 0.00000 tp: 0.00000 -> 1.12020, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:23:30 failed modify order #4 buy limit 0.95 EURCHF at 1.11972 sl: 0.00000 tp: 0.00000 -> 1.11963, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:24:30 failed modify order #4 buy limit 0.95 EURCHF at 1.11972 sl: 0.00000 tp: 0.00000 -> 1.11964, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:25:00 failed modify order #4 buy limit 0.95 EURCHF at 1.11972 sl: 0.00000 tp: 0.00000 -> 1.11965, sl: 0.00000 tp: 0.00000 [Invalid price]

2019.04.01 23:27:00 failed modify order #4 buy limit 0.95 EURCHF at 1.11968 sl: 0.00000 tp: 0.00000 -> 1.11965, sl: 0.00000 tp: 0.00000 [Invalid price]

Функция:


Убрал стопы и профиты, а ошибки вылетают.

Что блин еще проверить над?

И так две трети эксперта проверки занимают.

напечататйте при ошибке  Аск,  m_sym.NormalizePrice(price_buy)   и Фриз левел  для изменения Бай  и все станет понятно, выскакивает ошибка. 
Вообше не стесянейтесь все печать если что -то не рабоатет или работает не так. 

 
Dmitiry Ananiev #:

напечататйте при ошибке  Аск,  m_sym.NormalizePrice(price_buy)   и Фриз левел  для изменения Бай  и все станет понятно, выскакивает ошибка. 
Вообше не стесянейтесь все печать если что -то не рабоатет или работает не так. 

  Здравствуйте, в тестере ошибок нет, только в валидаторе, а модификация в тестере дает принт.

  -buylimit--Ask--- 1.03211

  -buylimit--price_buy--- 1.03168

  -buylimit--freeze_level--- 0.0

  //---

  -selllimit--Bid--- 1.03181

  -selllimit--price_sell--- 1.03223

  -selllimit--freeze_level--- 0.0

Причина обращения: