Класс Ctrade. Иногда не срабатывают рыночные ордера. В чем причина?
Я цену не устанавливаю.
Класс берет его из Так вот тут мне кажется какая то засада.
Здравствуйте, Александр. Тоже обратил внимание на такую проблему. Цена BID по неведомой мне причине иногда была равна 0.00000. Обошёл её вот такой простой проверкой:
int symb_dig=(int)SymbolInfoInteger(Symb_Pos,SYMBOL_DIGITS); double price_bid=NormalizeDouble(SymbolInfoDouble(Symb_Pos,SYMBOL_BID),symb_dig); if(price_bid>0) trade.Sell(GetLot(),Symb_Pos,price_bid,0,0);
Больше проблема не проявлялась.
С уважением, Владимир.
Здравствуйте, Александр. Тоже обратил внимание на такую проблему. Цена BID по неведомой мне причине иногда была равна 0.00000. Обошёл её вот такой простой проверкой:
Больше проблема не проявлялась.
С уважением, Владимир.
Да Владимир. Похоже 0 как раз и выдается. И это имеет значение для ошибки. Я заметил что вообще системные процедуры SymbolInfoDouble начали выдавать не правильные значения. Это касается не только бида. Но и ласта и др.
Я начал использовать получение этих значений через MqlTick Она по крайней мере работает. Куда сообщать об ошибках. Ведь это системная функция.
MqlTick mqltick; SymbolInfoTick(_Symbol,mqltick);
Да Владимир. Похоже 0 как раз и выдается. И это имеет значение для ошибки. Я заметил что вообще системные процедуры SymbolInfoDouble начали выдавать не правильные значения. Это касается не только бида. Но и ласта и др.
Я начал использовать получение этих значений через MqlTick Она по крайней мере работает. Куда сообщать об ошибках. Ведь это системная функция.
Сюда: https://www.mql5.com/ru/forum/455977
Создаёте лаконичный код, воспроизводящий ошибку, и публикуете с описанием.
- 2023.10.19
- www.mql5.com
Да Владимир. Похоже 0 как раз и выдается. И это имеет значение для ошибки. Я заметил что вообще системные процедуры SymbolInfoDouble начали выдавать не правильные значения. Это касается не только бида. Но и ласта и др.
Александр, с ценой ASK у меня было тоже самое. Причем в более ранних билдах такой проблемы никогда не замечал. Не знаю - с билдами это связано или нет, но проблема иногда проскакивает.
С уважением, Владимир.
Сюда: https://www.mql5.com/ru/forum/455977
Создаёте лаконичный код, воспроизводящий ошибку, и публикуете с описанием.
Это не Вам Петрос. Это Тришкину.
Если бы я мог отправить "Лаконичный код" б..дь. Я бы это сделал. Если бы эта ошибка была постоянной. Я бы это сделал. Я в тестировании 20 лет. Умник. Если больше никто не торгует через МТ5 в России фонду а торгует только Финам. То выбирать не из чего.
Проблема в рыночной заявке. Она через терминал отправляется. Класс Ctrade. Что то не так. Параметров в рыночной заявке нет. Только символ и объем. Объем 1 лот. Я уже подставил специально цену.
Но тоже не работает. Может брокер что то натворил. Все работало год.
Я тут вижу два момента.
1. Торгую (на ФОРТС) рыночными ордерами, цену не ставлю (остаётся нулевая после очистки структуры), CTrade не использую, проблем с исполнением нет.
2. Иногда через SymbolInfoTick() получаю (получал в Открытии, в Финаме пока нет, но и торгую там совсем недавно ) нулевой Bid и/или Ask, приходится проверять и пропускать такие тики.
Я тут вижу два момента.
1. Торгую (на ФОРТС) рыночными ордерами, цену не ставлю (остаётся нулевая после очистки структуры), CTrade не использую, проблем с исполнением нет.
2. Иногда через SymbolInfoTick() получаю (получал в Открытии, в Финаме пока нет, но и торгую там совсем недавно ) нулевой Bid и/или Ask, приходится проверять и пропускать такие тики.
Такую структуру предлагает МQL. Тоесть если Мы отправляем такую структуру но с ценой = 0. то все работает?
//--- объявление и инициализация запроса и результата MqlTradeRequest request={}; MqlTradeResult result={}; //--- параметры запроса request.action =TRADE_ACTION_DEAL; // тип торговой операции request.symbol =Symbol(); // символ request.volume =0.1; // объем в 0.1 лот request.type =ORDER_TYPE_BUY; // тип ордера request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия request.deviation=5; // допустимое отклонение от цены request.magic =EXPERT_MAGIC; // MagicNumber ордера //--- отправка запроса if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки //--- информация об операции PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я цену не устанавливаю.
Класс берет его из Так вот тут мне кажется какая то засада.