//+------------------------------------------------------------------+ //| adamant.mq4 | //| Akhmetov Kuanysh. 2013 | //| http://advisorsport.blogspot.ru | //+------------------------------------------------------------------+ #property copyright "Akhmetov Kuanysh" #property link "http://advisorsport.blogspot.ru" #property version "1.0" #property description "This Expert Advisor is based on MFI." #property description "The input parameters are optimized for EURUSD M15." //---- input parameters extern int Mfiperiod =8; // set MFI indicator period extern int Mfiup =80; // the upper level of the indicator extern int Mfidown =20; // the lower level of the indicator extern double Lots =0.5; // lot Size лот, если 0, то динамический extern int MagicNumber =4321; // magic number extern int TP =190; // Take Profit extern int SL =50; // Stop Loss extern int Tral_dist =35; // Trailing distance extern int Shag =20; // Step size using Trailing stop extern int MaPeriod =14; extern bool Use_shag =false; // Use Shag or not (Use Step or not) extern bool Use_bezubytok =false; // Use or not breakeven extern double StohUP =80; extern double StohLow =20; extern double RiskPercentage = 50; // % от депо на лот, если динамический extern double stohraznost =2; //-------------------------------------------------------------------- int STOPLEVEL,tip; string txt; void OnInit() { STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL); if (SL < STOPLEVEL) SL = STOPLEVEL; if (TP < STOPLEVEL) TP = STOPLEVEL; Comment(""); } void OnTick() { double Lot = Lots; if (Lots==0) { double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED); double minLot = MarketInfo(Symbol(), MODE_MINLOT); double maxLot = MarketInfo(Symbol(), MODE_MAXLOT); double step = MarketInfo(Symbol(), MODE_LOTSTEP); double account = AccountFreeMargin(); double percentage = account*RiskPercentage/100; Lot = MathRound(percentage/margin/step)*step; if(Lot < minLot) { Lot = minLot; } if(Lot > maxLot) { Lot = maxLot; } } int bay,sel; for (int y=0; y=Mfiup && stoh>stoh2 && stohstoh && stoh0) Trailing_stop(MagicNumber,Symbol(),Tral_dist, Shag,Use_shag, Use_bezubytok); } //+-----------------------------------------------------------------------------------------------------+ void Trailing_stop(int Magic, string Symb, int Dist, int Shag2, bool Isp_shag, bool bezubytok) { Shag2=Shag; double dist=0; double shag=0; if (Digits==3||Digits==5) {dist=Dist*10*Point; shag=Shag2*10*Point;} else if (Digits==2||Digits==4) {dist=Dist*Point; shag=Shag2*Point;} for (int pos=0; posNormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE); if (Isp_shag&&!bezubytok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&& NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE); if (!Isp_shag&&bezubytok&&NormalizeDouble(OrderStopLoss(),Digits)NormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE); if (Isp_shag&&bezubytok&&NormalizeDouble(Ask-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits)&& NormalizeDouble(OrderStopLoss(),Digits)NormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE); } else if (OrderType()==OP_SELL) { if (!Isp_shag&&!bezubytok&&NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE); if (Isp_shag&&!bezubytok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&& NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE); if (!Isp_shag&&bezubytok&&NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&& NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE); if (Isp_shag&&bezubytok&&NormalizeDouble(OrderOpenPrice()-Bid,Digits)>=NormalizeDouble(shag,Digits)&& NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits)&& NormalizeDouble(OrderStopLoss()-Bid,Digits)>NormalizeDouble(dist,Digits)) OrderModify(OrderTicket(),0,Bid+dist,OrderTakeProfit(),0,CLR_NONE); } } } }