Вы попробуйте код прикрепить, как код. Тут есть такая возможность.
Это будет знаком уважения к тем, у кого спрашиваете.
Zhunko писал (а) >>
Вы попробуйте код прикрепить, как код. Тут есть такая возможность.
Это будет знаком уважения к тем, у кого спрашиваете.
Здесь код ф-ции, вызывается из эксперта при открытом ордере sell, переменные pk и dp объявляются как extern в эксперте.
Файлы:
trailing.mq4
3 kb
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Написал функцию для треилингстопа . Работает нормально, только иногда происходят странные на мой взгляд вещи.
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 происходит обработка данных и проба модификации ордера и печатается полная чушь.
Что может быть причиной такого явления?