Используйте правильную нормализацию уровней stop loos и take profit: CSymbolInfo::NormalizePrice
Благодарствую!
Добавлю этот момент. А можно еще поинтересоваться когда может возникнуть ошибка 130, если в коде прописан минимальный стоп = спред на 3?
Или какой минимальный стоп установить в эксперте чтобы проходил проверку?
Ставил 2,3 спреда не проходит.
Благодарствую!
Добавлю этот момент. А можно еще поинтересоваться когда может возникнуть ошибка 130, если в коде прописан минимальный стоп = спред на 3?
Или какой минимальный стоп установить в эксперте чтобы проходил проверку?
Ставил 2,3 спреда не проходит.
Перенесено в раздел: MQL4 и MetaTrader 4
Для себя выбрал варианты из ветки: https://www.mql5.com/ru/forum/76084
1. Как вариант самому ввести ограничение на минимальный размер стопа. Например в OnInit() проверять если пользователь указал стоп меньше 2-х пунктов выдать предупреждение и вернуть код возврата INIT_PARAMETERS_INCORRECT.
Еще вариант вообще не давать пользователю возможность управлять размером стопа, а вычислять его динамически в эксперте исходя из торговых условий.
2. Я делал так
if ((StopLimit<10 && StopLimit!=0) || (StopLoss<10 && StopLoss!=0)) { Alert("Error in parameters. Too small size of a parametr of 'Stop loss' or 'Stop Loss limit'"); return(INIT_PARAMETERS_INCORRECT); }
В советнике есть возможность регулировать стоп 3-мя способами. Вручную задать размер стопа (StopLoss) или установить его равным нулю.
Если StopLoss равен нулю то его размер вычисляется исходя из рыночных условий но ограничивается переменной StopLimit.
А в OnInit() проверяются эти параметры на корректность, так как менее 10 пунктов ставить стоп нет смысла.
3. Ставить стопы 0 и далее модифицировать.
4. тут размещенный код:
double ask=SymbolInfoDouble(symToWorkmodify,SYMBOL_ASK); double bid=SymbolInfoDouble(symToWorkmodify,SYMBOL_BID); double point=SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT); int spread=(ask-bid)/point;
тоже не подходит для маркета, ведь говорят что бывает Форекс-брокеры с нулевым спредом, значит получаем ноль. Ну а ноль умноженная на X дает ноль, в этом случае "2 * spread = stopLevel = 0".
для избежания подобного рода ошибки:
stopLevel=MathMax(2.0*spread,1.0);
5. для модификации стоп-лосса и тейка
if(op_type==OP_BUY) { SL=NormalizeDouble(OrderOpenPrice()-MathMax(StopLoss,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits); TP=NormalizeDouble(OrderOpenPrice()+MathMax(TakeProfit,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits); }
и проблем ни в работе ни в проверке модераторами не возникает.
П.С. Остановился на следующем варианте:
1. Установка фиксированного минимального стопа в советнике (скажем 40п - 5-ти знак)
2. Предупреждение в OnInit() о фиксированном минимальном стопе и код возврата INIT_PARAMETERS_INCORRECT.
3. Выставление ордеров со стопами 0 и дальнейшей модификацией.
- 2016.03.14
- www.mql5.com
код возврата INIT_PARAMETERS_INCORRECT
Так нельзя, не проходит даже предварительную проверку.
test on EURUSD,H1 2016.04.01 00:00:00 HedgeMartin EURUSD,H1: initialization failed (32767)there are no trading operations
Так нельзя, не проходит даже предварительную проверку: код возврата INIT_PARAMETERS_INCORRECT.
Конечно не пройдёт. Даже если параметр поставить заведомо глупый и проверив это удалить сов с графика с распечаткой причины удаления тоже не пройдёт.
бывают такие брокеры где нельзя в функции ордер сенд сразу проставлять тейки и стопы, с начало надо отправлять ордер с нулевыми параметрами а потом модифицировать его... была как то такая промблема - с тех пор только так и делаю - с начало ордерсенд с нулями потом модификация на стопы и тейки ...
бывают такие брокеры где нельзя в функции ордер сенд сразу проставлять тейки и стопы, с начало надо отправлять ордер с нулевыми параметрами а потом модифицировать его... была как то такая промблема - с тех пор только так и делаю - с начало ордерсенд с нулями потом модификация на стопы и тейки ...
Отправил такой вариант:
1. Установка фиксированного минимального стопа в советнике (4п - 4-х знак)
2. Предупреждение в OnInit() о фиксированном минимальном стопе.
3. Выставление ордеров со стопами 0 и дальнейшей модификацией.
Ручная проверка раз в неделю, обычно в четверг. На этой неделе была во вторник. Ждемс )
На этой неделе было 2 проверки, еще одна в четверг. Пока советник застыл в статусе "Проверяется". У некоторых советников с маркета заметил что вместо стопов позиции закрываются по профиту в пунктах. Так тоже не будет ошибки 130.
Сегодня была проверка, другого эксперта. В нем минстоп стоит 20п по 5-ти знаку. Видимо этого мало. В предыдущем эксперте минстоп был 40.
Поставлю 30, плюс вывод в лог стоплевела, чтобы потом на него можно было ориентироваться.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую всех! При проверке в маркете ошибка 130.
В коде стопы ставит не ближе чем спред на 3:
Попросил модератора прислать более подробный скрин, хотя бы примерно такой:
Тогда была опечатка в программе и видно ненормализованный тейк, хотя нормализация есть:
Получил следующий ответ:
При тесте у трех брокеров ошибок нет. Картинки в файле.
Подскажите, пожалуйста кто чем может? :-)