/*[[ Name := 100x Author := Copyright c 2003 Arthur Aseev Link := mailto:aarthur@mail.ru Notes := I?inoie noioanoee Lots := 1.0 Stop Loss := 200 Take Profit := 0 Trailing Stop := 5 ]]*/ vars: cnt(0); if TotalTrades <1 then { if iRSI(15,2)>iRSI(14,1) then { SetOrder(OP_SELL,Max(0.1,Floor(FreeMargin/500.)/10.),Ask,0,Ask+StopLoss*Point,0,Blue); Alert("Sell - ",Symbol,"\n","Date - ",TimeToStr(CurTime),"\n","Balance - ",Balance); }; if iRSI(15,2)>iRSI(14,1) then { SetOrder(OP_BUY,Max(0.1,Floor(FreeMargin/500.)/10.),Bid,0,Bid-StopLoss*Point,0,Red); Alert("Buy - ",Symbol,"\n","Date - ",TimeToStr(CurTime),"\n","Balance - ",Balance); }; Exit; }; if TrailingStop<5 then { print("Invalid trailing stop"); Exit; }; /* Проверяем ранее открытые позиции. Трейлинг стоп работает через модификацию Stop Loss. */ for cnt=1 to TotalTrades begin /* это длинная позиция? */ If Ord(cnt,VAL_TYPE)=OP_BUY then /* длинная позиция */ { /* сначала проверим - есть ли профит у этой сделки больше чем уровень трейлинг стопа? проверяем Bid, так как позиция BUY */ If (Bid-Ord(cnt,VAL_OPENPRICE))>(TrailingStop*Point) then { /* да, позиция имеет прибыль больше чем значение трейлинг стопа (например 30 пунктов). теперь надо проверить, можно ли поставить стоп лучше чем он был ранее? */ If Ord(cnt,VAL_STOPLOSS)<(Bid-TrailingStop*Point) then { /* меняем стоплосс на уровень Bid-Trailing Stop */ ModifyOrder(Ord(cnt,VAL_TICKET),Ord(cnt,VAL_OPENPRICE), Bid-TrailingStop*Point,Ord(cnt,VAL_TAKEPROFIT),Red); Exit; /* дело сделали - выходим. */ }; }; }; /* это короткая позиция? */ If Ord(cnt,VAL_TYPE)=OP_SELL then { /* сначала проверим - есть ли профит у этой сделки больше чем уровень трейлинг стопа? проверяем Ask, так как позиция SELL */ If (Ord(cnt,VAL_OPENPRICE)-Ask)>(TrailingStop*Point) then { /* да, позиция имеет прибыль больше чем значение трейлинг стопа (например 30 пунктов). теперь надо проверить, можно ли поставить стоп лучше чем он был ранее? */ If Ord(cnt,VAL_STOPLOSS)>(Ask+TrailingStop*Point) or Ord(cnt,VAL_STOPLOSS)=0 then /* обязательное условие!!! */ { /* меняем стоплосс на уровень Ask+Trailing Stop */ ModifyOrder(Ord(cnt,VAL_TICKET),Ord(cnt,VAL_OPENPRICE), Ask+TrailingStop*Point,Ord(cnt,VAL_TAKEPROFIT),Red); Exit; }; }; }; end; /* конец */