mfi_expert_advisor_2

Author: Akhmetov Kuanysh
Profit factor:
0.00
16 Views
0 Downloads
0 Favorites
mfi_expert_advisor_2
//+------------------------------------------------------------------+
//|                                                      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<OrdersTotal(); y++)
   {  if (OrderSelect(y, SELECT_BY_POS))
      {  
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
         tip=OrderType();
         if (tip==0) bay++;
         if (tip==1) sel++;
      }   
   }
   
   Comment(txt,"\nÁàëàíñ ",DoubleToStr(AccountBalance(),2),"\nÝêâèòè ",DoubleToStr(AccountEquity(),2),"\nBuy ",bay,"\nSel ",sel); 
  
  
  
         double    tp=0,sl=0;
         
         double    mfi,stoh,stoh2;
         
                
         mfi=iMFI(Symbol(),0,Mfiperiod,1);
         stoh=iStochastic(Symbol(),0,5,3,3,MODE_SMA,0,MODE_MAIN,1);
         stoh2=iStochastic(Symbol(),0,5,3,3,MODE_SMA,0,MODE_SIGNAL,2);
             
         
         if (Digits==3||Digits==5) {tp=TP*10*Point; sl=SL*10*Point;}
         else if (Digits==2||Digits==4) {tp=TP*Point; sl=SL*Point;}
   
               int kolpos=0;
               for (int pos=0; pos <OrdersTotal(); pos++)
               {
               OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
               if (OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
                  kolpos++;
               }
   
         if (kolpos==0)  
            {
                 int i=10;
                 i = stoh-stoh2;
                 if (mfi>=Mfiup && stoh>stoh2 && stoh<StohUP && Ask<iMA(Symbol(),0,MaPeriod,0,0,0,0))
                     OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),20,Bid-sl,Ask+tp,NULL,MagicNumber,0,clrGreen);
                 if (mfi<=Mfidown && stoh2>stoh && stoh<StohUP && Ask<iMA(Symbol(),0,MaPeriod,0,0,0,0))
                     OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),20,Ask+sl,Bid-tp,NULL,MagicNumber,0,clrRed);
                  
                  
                  
                  
                    
                 
      }
      

    // if there is an open order that included a stop treiling
      if (OrdersTotal()>0)
          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; pos<OrdersTotal(); pos++)
      {
      OrderSelect(pos, SELECT_BY_POS,MODE_TRADES);
      if (OrderMagicNumber()==Magic||OrderSymbol()==Symb)
         {
         if (OrderType()==OP_BUY)
            {
            if (!Isp_shag&&!bezubytok&&NormalizeDouble(Ask-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(Ask-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
            OrderModify(OrderTicket(),0,Ask-dist,OrderTakeProfit(),0,CLR_NONE);
            if (!Isp_shag&&bezubytok&&NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits)&&
            NormalizeDouble(Ask-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(OrderOpenPrice(),Digits)&&
            NormalizeDouble(Ask-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);
            }
         }
      }
   
}

Comments