подскажите , может кто имел подобное

 

Написал простой эксперт, в котором использую трейлингстоп :

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 issue
2008.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

Это не влияет на работу треилинга, просто странно что такое происходит.

Файлы:
 
Мож упростить код? Тогда скорее всего будет ясно в чём проблема.
 
Мне кажется у тебя пресловутая проблема сравнения дробных чисел. Прежде всего пронормализуй значение индикатора до 4-х знаков.
 
Roger писал (а) >>
Мне кажется у тебя пресловутая проблема сравнения дробных чисел. Прежде всего пронормализуй значение индикатора до 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).

Успехов.

 
pitpiter писал (а) >>

Написал простой эксперт, в котором использую трейлингстоп :

int trailinglong()...

Тут кнопочка есть "Прикрепить код".