Мож упростить код? Тогда скорее всего будет ясно в чём проблема.
Мне кажется у тебя пресловутая проблема сравнения дробных чисел. Прежде всего пронормализуй значение индикатора до 4-х знаков.
Roger писал (а) >>
Мне кажется у тебя пресловутая проблема сравнения дробных чисел. Прежде всего пронормализуй значение индикатора до 4-х знаков.
Мне кажется у тебя пресловутая проблема сравнения дробных чисел. Прежде всего пронормализуй значение индикатора до 4-х знаков.
Скорее всего.
2 pitpiter Нормализуйте до количества значащих цифр в цене либо каждое из значений, используемых в сравнении (kij=NormalizeDouble(kij-pk*Point,Digits); pw=NormalizeDouble(Bid-spr*Point,Digits);), либо их разницу d = NormalizeDouble((kij-pk*Point)-(Bid-spr*Point),Digits);), но тогда сравнивайте с нулем или лучше с размером пункта if(d<0.5*Point).
Успехов.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Написал простой эксперт, в котором использую трейлингстоп :
int trailinglong()
{
double op, msl, mp, otp, pw,olo ;
double kij=iIchimoku(Symbol(),0,9,26,52,MODE_KIJUNSEN,1);
int mb, err ;
int a=0;
int spr=MarketInfo(Symbol(),MODE_STOPLEVEL);
bool ans;
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true)
{
op=OrderOpenPrice();
msl=OrderStopLoss();
mb=OrderTicket();
otp=OrderTakeProfit();
olo=OrderLots();
if(kij>=Bid)
if(OrderClose(mb,olo,Bid,2))
return(a);
else
{
err=GetLastError();
errorprint(err);
return(a);
}
else
{
kij=kij-pk*Point;
pw=Bid-spr*Point;
if(kij<pw)
if(kij>msl) //prepare data and make modify
{
Print("kij= ",kij);
Print("msl= ",msl);
Print("make probe modify soploss for long number=",mb);
ans=OrderModify(mb,op,kij,otp,0);
if(!ans)
{
err=GetLastError();
errorprint(err);
return(a);
}
else
{
a=1;
return(a);
}
}
else
return(a);
else
{
Print("stoploss < stoplevel ");
return(a);
}
}
}
else
{
err=GetLastError();
errorprint(err);
}
}
приклеиваю также код .Функция вызывается из тела эксперта при открытой позиции BUY, pk - это параметр, объявляемый как extern в теле эксперта - любое целое число, ф-ция errorprint печатает сообщение о ошибке, ее код также приклеиваю .
Теперь вопрос может ли исполняться часть функции выделенная красным при msl==kij. У меня это происходит и получаю такое сообщение
2008.09.11 13:16:55 TAMA_0011 EURUSD,M5: No error but have not issue2008.09.11 13:16:55 TAMA_0011 EURUSD,M5: make probe modify stoploss for long number=43362
2008.09.11 13:16:55 TAMA_0011 EURUSD,M5: msl= 1.3926
2008.09.11 13:16:55 TAMA_0011 EURUSD,M5: kij= 1.3926
Это не влияет на работу треилинга, просто странно что такое происходит.