mfi_expert_advisor_2

Author: Akhmetov Kuanysh
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Indicators Used
Money flow indexStochastic oscillatorMoving average indicator
0 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

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---