double SL=OrderStopLoss();
if((NormalizeDouble(Bid,Digits)-NormalizeDouble(SL*Point,Digits))>=TrSt*Point)
сейчас EURUSD в районе 1.33, пусть у вас 5-знак, Point = 0.00001
тогда SL*Point даст 0.00001 или 0.00002 в лучшем случае. Естественно условие верно и ордер будет модифицирован
double SL=OrderStopLoss();
if((NormalizeDouble(Bid,Digits)-NormalizeDouble(SL*Point,Digits))>=TrSt*Point)
сейчас EURUSD в районе 1.33, пусть у вас 5-знак, Point = 0.00001
тогда SL*Point даст 0.00001 или 0.00002 в лучшем случае. Естественно условие верно и ордер будет модифицирован
Если я правильно понял то более верный спооб будет :
if((NormalizeDouble(Bid,Digits)-NormalizeDouble(SL,Digits))>=NormalizeDouble(TrSt*Point,Digits))
К сожелению нет возможности сразу проверить(
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Traling Stop встроен в код программы и реализован так:
//------- Проверка дистанции преследования на допустимость -----
double TrSt=Tral_Stop; //где Tral_Stop Дистанция отставания Traling Stop
int Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Min_Dist>TrSt)
TrSt=Min_Dist;
//--------------------------------------------------------------
..................................................
//------ Проверка на необходимость модификации ордера BUY --------------
if(OrderSelect(tic,SELECT_BY_TICKET)==true)
{
int Ticket=OrderTicket();
double SL=OrderStopLoss();
double TP=OrderTakeProfit();
double Price=OrderOpenPrice();
if((NormalizeDouble(Bid,Digits)-NormalizeDouble(SL*Point,Digits))>=TrSt*Point)
{
SL=NormalizeDouble(Bid-StopLoss*Point,Digits);
string Text="BUY ";
MODIFY_ORDER(Text,Ticket,Price,SL,TP);
}
}
else
{
Print("OrderSelect() вернул ошибку - ",GetLastError(),"ticket=",Ticket);
}
Для SELL аналогино.
........................................................................................................
//+-----------Функция модификации ордера----------------------------------------------------+
void MODIFY_ORDER(string TEXT,int TICKET,double PRICE,double StLo,double TaPr)
{
if(OrderCloseTime()>0)
return;
else
{
Alert("Модификация ",TEXT,TICKET,". Ждем ответ..");
bool Ans=OrderModify(TICKET,PRICE,StLo,TaPr,0);
if(Ans==true)
Alert("Ордер ",TEXT,TICKET," модифицирован");
else
{
Print("OrderModify() вернул ошибку - ",GetLastError(),"ticket=",TICKET,"price=",PRICE,"Stop Loss=",StLo,"Take Profit=",TaPr);
}
}
return;
}
При тестировании Traling Stop долго мучает один ордер изменяя Stop Loss на один пункт то вперед то назад, пока не перейде к следующему. и с ним то же самое. Что не так подскажите.