В вашем случае сообщение "Открыта продажа" будет появляться вне зависимости от результата открытия позиции. Лучше сделать так:
ticket1=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,MIN1+0.9*(MAX-MIN1),Bid-200*Point); if(ticket1 > 0) Alert ("Открыта продажа"); else Print("Ошибка №", GetLastError());
MIN1+0.9*(MAX-MIN1)а здесь что ?
В вашем случае сообщение "Открыта продажа" будет появляться вне зависимости от результата открытия позиции. Лучше сделать так:
Ошибок никаких не выдаёт в журнале. Такое впечатление, что строки
ticket1=OrderSend(Symbol(),OP_SELL,Lot,Bid,5,MIN1+0.9*(MAX-MIN1),Bid-200*Point);вообще нету.
Ошибок никаких не выдаёт в журнале. Значит проблемма не в самом ордере, а где-то за пределами кода. На одних терминалах советник работает, а на одних сделки игнорируютсяч!
У вас их и не будет, так как вы их даже не анализируете. Напишите код, который я показал, и увидите номер ошибки. По номеру ошибки уже можно будет ее лечить.
ERR_INVALID_STOPS 130 Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера). Попытку можно повторять только в том случае, если ошибка произошла из-за устаревания цены. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
Вот такую вот ошибку выдаёт.
Проверял на советнике,где вот часть кода, которая открывает позиции
if ((Bid-MIN)>30*Point && (Bid-MIN)<40*Point && N==0 && Order<=0) { OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Bid-20*Point,Ask+30*Point); N=1; Order=1; t_Close=0; Stop_Buy=Ask-20*Point; if (OrderSelect(ticket,SELECT_BY_POS)==true) ticket=OrderTicket(); if(ticket > 0) Alert ("Открыта покупка"); else Print("Ошибка №", GetLastError()); }
Со стопами вроде всё нормально, а выдаёт ошибку 130.
Пробовал ставить стопы так
OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-20*Point,Ask+30*Point);
Всё равно ошибка 130.
А теперь параллельно выведите в том же Print следующую информацию:
Print("Ошибка №", GetLastError(), ", стоплевел = ", MarketInfo(Symbol(), MODE_STOPLEVEL), ", спрэд = ", MarketInfo(Symbol(), MODE_SPREAD));
Скорее всего вы пытаетесь на пятизнаках выставить стоп в 20 пунктов, что на четырехзнаках эквивалентно 2-ум.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Дамы и господа!
Скажите, кто-нибудь сталкивался с такой проблеммой. Советник нормально работает на одном терминале и открывает позиции, а на другом не открывает позиции, либо же открывает не все позиции. Во всех случаях советнику разрешено торговать и смайлик в правом вернем углу улыбается. Странная вещь какая-то.
Вот, допустим, часть кода
Сообщение, что открыта продажа появляется, а сделка не открывается, хотя всё находится в одном блоке. На тестре всё без ошибок работает, а вот в on-line не все сделки открываются, хотя сообщение об открытие появляется.
Кто-нибудь сталкивался с такой проблеммой? Подскажите, пожалуйста, в чём дело.