- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- Начальный размер депозита -- какой?
- Вопросы от начинающих MQL4 MT4 MetaTrader 4
Перед использованием цен, нужно эти цены обновить вызвав метод RefreshRates класса CSymbolInfo.
Также нужно использовать метод NormalizePrice класса CSymbolInfo.
Перед использованием цен, нужно эти цены обновить вызвав метод RefreshRates класса CSymbolInfo.
Также нужно использовать метод NormalizePrice класса CSymbolInfo.
Спасибо большое, данная ошибка пропала. Но появилась очередная ошибка с invalid_stop
double Stop = acc.Balance() * PercentStop; double SellPrice=mysymbol.NormalizePrice(mysymbol.Bid()); stloss = mysymbol.NormalizePrice(mysymbol.Ask() + Stop); //--- Stop Loss tprofit = mysymbol.NormalizePrice(mysymbol.Ask() - Stop * StTkDiff); stopPrice = mysymbol.NormalizePrice(mysymbol.Ask() - Stop); if(mytrade.Sell(1,_Symbol,SellPrice,stloss,tprofit)) { Alert("Ордер на продажу был успешно размещен, Ticket#:",mytrade.ResultOrder(),"!!"); openPrice = SellPrice; k = 0; } else { Alert("Ордер на продажу объема:",mytrade.RequestVolume(), ", sl:", mytrade.RequestSL(), ", цена:", mytrade.RequestPrice(), " не выполнен -ошибка:",mytrade.ResultRetcodeDescription()); return; }
Так это ж склейка - разве на ней торговля разрешена?
Так это ж склейка - разве на ней торговля разрешена?
Да, фишка в том, что проходят 4 ордера, а дальше вылетают эти ошибки.
Да, фишка в том, что проходят 4 ордера, а дальше вылетают эти ошибки.
А Вы когда объекту класса CSimbolInfo присваиваете имя - Вы после этого вызываете метод Refresh?
Добавлено: хотя внутри метода Name уже есть вызов Refresh:
//+------------------------------------------------------------------+ //| Set name | //+------------------------------------------------------------------+ bool CSymbolInfo::Name(const string name) { m_name=name; //--- if(!CheckMarketWatch()) return(false); //--- if(!Refresh()) { m_name=""; Print(__FUNCTION__+": invalid data of symbol '"+name+"'"); return(false); } //--- succeed return(true); }
А Вы когда объекту класса CSimbolInfo присваиваете имя - Вы после этого вызываете метод Refresh?
Я объект создал. И с каждым новым вызовом функции OnTick() вызываю метод Refresh. Просто самое интересное, что в коде открытия позиции всё присваивается в режиме реального времени и почему тогда первые ордера проходят, а другие нет.. Вначале пишет, что invalid_price, затем это пересекается еще и с invalid_stop. Хотя точно такой же код открытия позиции я уже давно оптимизирую на других советниках и там всё нормально.
P.s. можно ли как-нибудь узнать, почему конкретна эта ошибка вылетает? Не просто - invalid_price, а конкретнее, в чем проблема?
P.s.2 А, тут про другой рефреш.. Но всё же..
Я объект создал. И с каждым новым вызовом функции OnTick() вызываю метод Refresh. Просто самое интересное, что в коде открытия позиции всё присваивается в режиме реального времени и почему тогда первые ордера проходят, а другие нет.. Вначале пишет, что invalid_price, затем это пересекается еще и с invalid_stop. Хотя точно такой же код открытия позиции я уже давно оптимизирую на других советниках и там всё нормально.
P.s. можно ли как-нибудь узнать, почему конкретна эта ошибка вылетает? Не просто - invalid_price, а конкретнее, в чем проблема?
Я думаю это наложение запрета на торговлю на склейке. Больше мыслей нет.
Я думаю это наложение запрета на торговлю на склейке. Больше мыслей нет.
Понял.. Просто я уже который раз с этим mql5 сижу и не понимаю, в чем может быть ошибка, если всё логично всегда. Просто в склейке проходят хоть какие-то ордера, значит запрета нету.. Ну, буду думать еще.. Спасибо за мысли)
Я в итоге понял, там Минимальное изменение цены 10, а расчет sl или tp не было кратно 10, вот он и ворчал. В итоге NormalizePrice не помогало и я в самом расчете Sl еще добавлял :
mysymbol.Name("RTS Splice"); double tickSize = mysymbol.TickSize(); stloss = mysymbol.NormalizePrice(mysymbol.Ask() + (int)(Stop/tickSize)*tickSize); //--- Stop Loss tprofit = mysymbol.NormalizePrice(mysymbol.Ask() - (int)(Stop * StTkDiff/tickSize)*tickSize); stopPrice = mysymbol.NormalizePrice(mysymbol.Ask() - (int)(Stop/tickSize)*tickSize);
Я в итоге понял, там Минимальное изменение цены 10, а расчет sl или tp не было кратно 10, вот он и ворчал. В итоге NormalizePrice не помогало и я в самом расчете Sl еще добавлял :
А какое значение возвращает метод TickSize по данному символу? 10 или 1?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования