Странное поведение функции

 

Написал функцию для треилингстопа . Работает нормально, только иногда происходят странные на мой взгляд вещи.

int trailingshort()
{
double kij=iIchimoku(Symbol(),0,9,26,52,MODE_KIJUNSEN,1);
double op, msl, mp, otp, pw,olo, kij1;
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(msl>op)
{
mp=op-dp*Point;
if(mp>=Bid) //check about making trailing stop
{

if(kij<op)msl=kij;
else
msl=op;
Print("Proba modify stoploss for short order number=",mb);
ans=OrderModify(mb,op,msl,otp,0); //make modify
if(!ans)
{
err=GetLastError();
errorprint(err); //we can't modify
return;
}
else
{
a=1;
return(a);
}
}
else return;
}
else
{
if(kij<=Ask)
if(OrderClose(mb,olo,Ask,2))
return;
else
{
err=GetLastError();
errorprint(err);
return;
}
kij1=kij+pk*Point;
if(kij1<msl)
{

pw=Ask+spr*Point;
if(kij1>pw) //prepare data and make modify
{
msl=kij1;
Print("make probe modify stoploos for short number=",mb);
ans=OrderModify(mb,op,msl,otp,0);
if(!ans)
{
err=GetLastError();
errorprint(err);
return;
}
else
{
a=1;
return(a);
}
}
else
return;
}
else return;
}
}
else
{
err=GetLastError();
errorprint(err);
}
}

Часть выделенная красным по идее должна выполняться на первом тике ново открытого бара, если сменилось значение киюнсена на предыдущем, закрытом баре, т.к. на протяжении всего открытого бара это значение не меняется. Часто происходит иначе, несмотря на то что значение msl=kij1 происходит обработка данных и проба модификации ордера и печатается полная чушь.

Что может быть причиной такого явления?

 

Вы попробуйте код прикрепить, как код. Тут есть такая возможность.

Это будет знаком уважения к тем, у кого спрашиваете.

 
pitpiter писал (а) >>


Что может быть причиной такого явления?

Неправильный код. Он постоянно пробует модифицировать ордер, даже если ничего не изменилось.

 
Zhunko писал (а) >>

Вы попробуйте код прикрепить, как код. Тут есть такая возможность.

Это будет знаком уважения к тем, у кого спрашиваете.

Здесь код ф-ции, вызывается из эксперта при открытом ордере sell, переменные pk и dp объявляются как extern в эксперте.

Файлы:
trailing.mq4  3 kb