Ситуация такая. Билд 199. Пишу эксперта. Вот кусок кода:
res = OrderSend( Symbol(), OP_SELL, LotsOptimized(), Bid, _Slp, Ask+_StopLoss*Point, 0, "", 0, 0, Red); if(res < 0) { Print("OrderSend SELL ", Symbol(), " at ", Bid, " failed with error # ",GetLastError()); return; } else Print(Symbol(), " sold at "+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)+" for "+Bid);Параметры: double _StopLoss = 300.0; int _Slp = 40. Инструмент - золото. Тестер выдает ругательство с ошибкой 130 (ERR_INVALID_STOPS) и не позволяет открыть позицию. Увеличение размера стопа ни к чему не приводит.
В то же время на билде 200 позиция открывается без ругательств.
Что бы это значило? В чем моя ошибка?
Попробуте так
res = OrderSend( Symbol(), OP_SELL, LotsOptimized(), Bid, _Slp, NormalizeDouble(Ask+_StopLoss*Point,Digits), 0, "", 0, 0, Red); if(res < 0) { Print("OrderSend SELL ", Symbol(), " at ", Bid, " failed with error # ",GetLastError()); return; } else Print(Symbol(), " sold at "+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)+" for "+Bid);
2 Rosh: да, у меня стоп-лосс даже больше 200, тем более что он отсчитывается от Ask, а не от Bid...
Данные взяты с сервера Альпари (минутки с июня 2004), тестирование проводится офф-лайн. MarketInfo() возвращает стоп 200 пипсов. Все остальные параметры (Digits, Point) - тоже правильные...
Там есть такая тонкость, скажем так. При продаже по рынку стоп должен быть не ближе StopLevel пунктов от цены закрытия, то есть от Ask. Я не помню, чему равен MarketInfo("Gold",MODE_STOPLEVEL) у Альпари.
Да, Rosh, конечно. Продаем по Bid, а стоп отсчитываем от Ask = Bid+Spread:
так как стоп-лосс при шорте исполняется как покупка, т.е. по цене
Ask, то получается, что спред откусывает 100 пипсов от неблагоприятного
движения цены; таким образом, отсчитывая стоп от Bid, мы обманываем
себя и получаем реальное расстояние до стоп-лосса, равное Bid-Spread.
(Очень весело наблюдать, как очередной новичок кричит об обмане
клиента со стороны ДЦ: цена, мол, не коснулась SL, а стоп-лосс срабооооотал!)
В то же время, если покупаем (по Ask), то стоп-лосс нужно отсчитывать
от Bid, т.к. он исполняется как продажа, по Bid.
Я правильно понимаю?
А насчет ошибки 130 я разобрался. Оказывается, я до этого попробовал
оптимизацию и выставил начальные значения параметров, которые
не соответствовали зашитым в коде эксперта. Обнаружил я это
случайно.
Мне кажется, что
это уже не фича тестера, а баг: я уже не оптимизирую, а просто прогоняю на истории, но параметры почему-то остаются как установленные когда-то в оптимизаторе...
...
А насчет ошибки 130 я разобрался. Оказывается, я до этого попробовал оптимизацию и выставил начальные значения параметров, которые не соответствовали зашитым в коде эксперта. Обнаружил я это случайно.
Мне кажется, что это уже не фича тестера, а баг: я уже не оптимизирую, а просто прогоняю на истории, но параметры почему-то остаются как установленные когда-то в оптимизаторе...
С параметрами еще такая штука бывает (билд 198): выставляем начальные параметры, оптимизируем, берем параметры из оптимизатора (двойной клик на лучшем знанении). После этого компилим экперта и видим, что параметры вернулись к начальным! Не к тем, которые в коде, и не к тем, которые взяты из оптимизатора, а к изначально выставленным в тестере!
С параметрами еще такая штука бывает (билд 198): выставляем начальные параметры, оптимизируем, берем параметры из оптимизатора (двойной клик на лучшем знанении). После этого компилим экперта и видим, что параметры вернулись к начальным! Не к тем, которые в коде, и не к тем, которые взяты из оптимизатора, а к изначально выставленным в тестере!
Вот как, совместными усилиями два бага обнаружили (правда, в 198-м). Ну а вообще пора бы на 199-й или 200-й перейти... Там-то такой есть или нет?
Вот как, совместными усилиями два бага обнаружили (правда, в 198-м). Ну а вообще пора бы на 199-й или 200-й перейти... Там-то такой есть или нет?
199-й пропускаем лучше сразу 200-й заливать!
См. https://www.mql5.com/ru/forum/51438
Кстати, почему LiveUpdate не поддерживает докачку?
PS. Знакомый аватар...вы случайно не ..он?
Кстати, почему LiveUpdate не поддерживает докачку?
PS. Знакомый аватар...вы случайно не ..он?
1. Вероятно, потому, что на Альпари 199-го билда не было просто, он был только здесь. 200-й апдейт у меня получился сразу.
2. Я не реинкарнируюсь. На форуме Альпари у меня такой же ник, но с аватарчиками экспериментирую.
...
А насчет ошибки 130 я разобрался. Оказывается, я до этого попробовал оптимизацию и выставил начальные значения параметров, которые не соответствовали зашитым в коде эксперта. Обнаружил я это случайно.
Мне кажется, что это уже не фича тестера, а баг: я уже не оптимизирую, а просто прогоняю на истории, но параметры почему-то остаются как установленные когда-то в оптимизаторе...
С параметрами еще такая штука бывает (билд 198): выставляем начальные параметры, оптимизируем, берем параметры из оптимизатора (двойной клик на лучшем знанении). После этого компилим экперта и видим, что параметры вернулись к начальным! Не к тем, которые в коде, и не к тем, которые взяты из оптимизатора, а к изначально выставленным в тестере!
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Параметры: int _StopLoss = 300; int _Slp = 40. Инструмент - золото. Тестер выдает ругательство с ошибкой 130 (ERR_INVALID_STOPS) и не позволяет открыть позицию. Увеличение размера стопа ни к чему не приводит.
В то же время на билде 200 позиция открывается без ругательств.
Что бы это значило? В чем моя ошибка?