MoStAsHaR15 Pivot Expert(30AUG05)_v1





//+------------------------------------------------------------------+
//|            MoStAsHaR15 FoReX - Pivot Line Strategy               |
//+------------------------------------------------------------------+
#property copyright "MoStAsHaR15 FoReX © CopyRights 2005"
#property link      "mostashar15@yahoo.com"
//----
extern double Lots=1.0;
extern double TrailingStop=10;
extern double StopLoss=20;
extern int TimeZone=2;
//----
double EMA5_0, EMA6_0, EMA5_1, EMA6_1, ADX, ADXpos_0, ADXneg_0, ADXpos_1, ADXneg_1, OsMA_0, OsMA_1;
double R1=0, R2=0, R3=0, M0=0, M1=0, M2=0, M3=0, M4=0, M5=0, S1=0, S2=0, S3=0;
double day_high=0, day_low=0, yesterday_high=0, yesterday_open=0, yesterday_low=0, yesterday_close=0, today_open=0, today_high=0, today_low=0, P=0, Q=0, nQ=0, nD=0, D=0, rates_h1[2][6], rates_d1[2][6],Bound[13];
double Buy_TP, Sell_TP, Sup, Res, ticket, SL;
int cnt,dif1,dif2;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if(Bars<150)
     {
      Print("bars less than 100");
     }
   if(Buy_TP < 10 || Sell_TP < 10)
     {
      Print("TakeProfit less than 10");
     }
   // Delete Old Pivot Lines to Draw the New Lines
   ObjectDelete("R1 Label");
   ObjectDelete("R1 Line");
   ObjectDelete("R2 Label");
   ObjectDelete("R2 Line");
   ObjectDelete("R3 Label");
   ObjectDelete("R3 Line");
   ObjectDelete("S1 Label");
   ObjectDelete("S1 Line");
   ObjectDelete("S2 Label");
   ObjectDelete("S2 Line");
   ObjectDelete("S3 Label");
   ObjectDelete("S3 Line");
   ObjectDelete("P Label");
   ObjectDelete("P Line");
   ObjectDelete("M5 Label");
   ObjectDelete("M5 Line");
   ObjectDelete("M4 Label");
   ObjectDelete("M4 Line");
   ObjectDelete("M3 Label");
   ObjectDelete("M3 Line");
   ObjectDelete("M2 Label");
   ObjectDelete("M2 Line");
   ObjectDelete("M1 Label");
   ObjectDelete("M1 Line");
   ObjectDelete("M0 Label");
   /// PIVOT POINT CALCULATIONS
   int i=0, j=0;
   if(Period() > 1440)
     {
      Comment("Error - Chart period is greater than 1 day.");
      return(-1);
     }
   ArrayCopyRates(rates_d1, Symbol(), PERIOD_D1);
   yesterday_high=rates_d1[1][3];
   yesterday_low=rates_d1[1][2];
   day_high=rates_d1[0][3];
   day_low=rates_d1[0][2];
//----
   ArrayCopyRates(rates_h1, Symbol(), PERIOD_H1);
   for(i=0;i<=25;i++)
     {
      if (TimeMinute(rates_h1[i][0])==0 && (TimeHour(rates_h1[i][0])-TimeZone)==0)
        {
         yesterday_close=rates_h1[i+1][4];
         yesterday_open=rates_h1[i+24][1];
         today_open=rates_h1[i][1];
         break;
        }
     }
   // Calculate Pivots
   D=(day_high - day_low);
   Q=(yesterday_high - yesterday_low);
   P=(yesterday_high + yesterday_low + yesterday_close)/3;
   R1=(2*P)-yesterday_low;
   S1=(2*P)-yesterday_high;
//----
   R2=P+(yesterday_high - yesterday_low);
   S2=P-(yesterday_high - yesterday_low);
   R3=(2*P)+(yesterday_high-(2*yesterday_low));
   S3=(2*P)-((2* yesterday_high)-yesterday_low);
//----
   M5=(R2+R3)/2;
   M4=(R1+R2)/2;
   M3=(P+R1)/2;
   M2=(P+S1)/2;
   M1=(S1+S2)/2;
   M0=(S2+S3)/2;
//----
   if (Q > 5)
     {
      nQ=Q;
     }
   else
     {
      nQ=Q*10000;
     }
   if (D > 5)
     {
      nD=D;
     }
   else
     {
      nD=D*10000;
     }
   ObjectDelete("M0 Line");
   // Pivot Lines Labeling
   if(ObjectFind("R1 label")!=0)
     {
      ObjectCreate("R1 label", OBJ_TEXT, 0, Time[20], R1);
      ObjectSetText("R1 label", " R1", 8, "Arial", Yellow);
     }
   else
     {
      ObjectMove("R1 label", 0, Time[20], R1);
     }
   if(ObjectFind("R2 label")!=0)
     {
      ObjectCreate("R2 label", OBJ_TEXT, 0, Time[20], R2);
      ObjectSetText("R2 label", " R2", 8, "Arial", Orange);
     }
   else
     {
      ObjectMove("R2 label", 0, Time[20], R2);
     }
   if(ObjectFind("R3 label")!=0)
     {
      ObjectCreate("R3 label", OBJ_TEXT, 0, Time[20], R3);
      ObjectSetText("R3 label", " R3", 8, "Arial", Red);
     }
   else
     {
      ObjectMove("R3 label", 0, Time[20], R3);
     }
   if(ObjectFind("P label")!=0)
     {
      ObjectCreate("P label", OBJ_TEXT, 0, Time[20], P);
      ObjectSetText("P label", "Pivot", 8, "Arial", DeepPink);
     }
   else
     {
      ObjectMove("P label", 0, Time[20], P);
     }
   if(ObjectFind("S1 label")!=0)
     {
      ObjectCreate("S1 label", OBJ_TEXT, 0, Time[20], S1);
      ObjectSetText("S1 label", "S1", 8, "Arial", Yellow);
     }
   else
     {
      ObjectMove("S1 label", 0, Time[20], S1);
     }
   if(ObjectFind("S2 label")!=0)
     {
      ObjectCreate("S2 label", OBJ_TEXT, 0, Time[20], S2);
      ObjectSetText("S2 label", "S2", 8, "Arial", Orange);
     }
   else
     {
      ObjectMove("S2 label", 0, Time[20], S2);
     }
   if(ObjectFind("S3 label")!=0)
     {
      ObjectCreate("S3 label", OBJ_TEXT, 0, Time[20], S3);
      ObjectSetText("S3 label", "S3", 8, "Arial", Red);
     }
   else
     {
      ObjectMove("S3 label", 0, Time[20], S3);
     }
   // Drawing Pivot lines
   if(ObjectFind("S1 line")!=0)
     {
      ObjectCreate("S1 line", OBJ_HLINE, 0, Time[40], S1);
      ObjectSet("S1 line", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("S1 line", OBJPROP_COLOR, Yellow);
     }
   else
     {
      ObjectMove("S1 line", 0, Time[40], S1);
     }
   if(ObjectFind("S2 line")!=0)
     {
      ObjectCreate("S2 line", OBJ_HLINE, 0, Time[40], S2);
      ObjectSet("S2 line", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("S2 line", OBJPROP_COLOR, Orange);
     }
   else
     {
      ObjectMove("S2 line", 0, Time[40], S2);
     }
   if(ObjectFind("S3 line")!=0)
     {
      ObjectCreate("S3 line", OBJ_HLINE, 0, Time[40], S3);
      ObjectSet("S3 line", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("S3 line", OBJPROP_COLOR, Red);
     }
   else
     {
      ObjectMove("S3 line", 0, Time[40], S3);
     }
   if(ObjectFind("P line")!=0)
     {
      ObjectCreate("P line", OBJ_HLINE, 0, Time[40], P);
      ObjectSet("P line", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("P line", OBJPROP_COLOR, DeepPink);
     }
   else
     {
      ObjectMove("P line", 0, Time[40], P);
     }
   if(ObjectFind("R1 line")!=0)
     {
      ObjectCreate("R1 line", OBJ_HLINE, 0, Time[40], R1);
      ObjectSet("R1 line", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("R1 line", OBJPROP_COLOR, Yellow);
     }
   else
     {
      ObjectMove("R1 line", 0, Time[40], R1);
     }
   if(ObjectFind("R2 line")!=0)
     {
      ObjectCreate("R2 line", OBJ_HLINE, 0, Time[40], R2);
      ObjectSet("R2 line", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("R2 line", OBJPROP_COLOR, Orange);
     }
   else
     {
      ObjectMove("R2 line", 0, Time[40], R2);
     }
   if(ObjectFind("R3 line")!=0)
     {
      ObjectCreate("R3 line", OBJ_HLINE, 0, Time[40], R3);
      ObjectSet("R3 line", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("R3 line", OBJPROP_COLOR, Red);
     }
   else
     {
      ObjectMove("R3 line", 0, Time[40], R3);
     }
   // Midpoints Labeling
   if(ObjectFind("M5 line")!=0)
     {
      ObjectCreate("M5 line", OBJ_HLINE, 0, Time[40], M5);
      ObjectSet("M5 line", OBJPROP_STYLE, STYLE_DOT);
      ObjectSet("M5 line", OBJPROP_COLOR, White);
     }
   else
     {
      ObjectMove("M5 line", 0, Time[40], M5);
     }
   if(ObjectFind("M4 line")!=0)
     {
      ObjectCreate("M4 line", OBJ_HLINE, 0, Time[40], M4);
      ObjectSet("M4 line", OBJPROP_STYLE, STYLE_DOT);
      ObjectSet("M4 line", OBJPROP_COLOR, White);
     }
   else
     {
      ObjectMove("M4 line", 0, Time[40], M4);
     }
   if(ObjectFind("M3 line")!=0)
     {
      ObjectCreate("M3 line", OBJ_HLINE, 0, Time[40], M3);
      ObjectSet("M3 line", OBJPROP_STYLE, STYLE_DOT);
      ObjectSet("M3 line", OBJPROP_COLOR, White);
     }
   else
     {
      ObjectMove("M3 line", 0, Time[40], M3);
     }
   if(ObjectFind("M2 line")!=0)
     {
      ObjectCreate("M2 line", OBJ_HLINE, 0, Time[40], M2);
      ObjectSet("M2 line", OBJPROP_STYLE, STYLE_DOT);
      ObjectSet("M2 line", OBJPROP_COLOR, White);
     }
   else
     {
      ObjectMove("M2 line", 0, Time[40], M2);
     }
   if(ObjectFind("M1 line")!=0)
     {
      ObjectCreate("M1 line", OBJ_HLINE, 0, Time[40], M1);
      ObjectSet("M1 line", OBJPROP_STYLE, STYLE_DOT);
      ObjectSet("M1 line", OBJPROP_COLOR, White);
     }
   else
     {
      ObjectMove("M1 line", 0, Time[40], M1);
     }
   if(ObjectFind("M0 line")!=0)
     {
      ObjectCreate("M0 line", OBJ_HLINE, 0, Time[40], M0);
      ObjectSet("M0 line", OBJPROP_STYLE, STYLE_DOT);
      ObjectSet("M0 line", OBJPROP_COLOR, White);
     }
   else
     {
      ObjectMove("M0 line", 0, Time[40], M0);
     }
//---- Indicator Calculations
   ADX=iADX(NULL,60,14,PRICE_CLOSE,MODE_MAIN,0);
   ADXpos_0=iADX(NULL,60,14,PRICE_CLOSE,MODE_PLUSDI,0);
   ADXneg_0=iADX(NULL,60,14,PRICE_CLOSE,MODE_MINUSDI,0);
   ADXpos_1=iADX(NULL,60,14,PRICE_CLOSE,MODE_PLUSDI,1);
   ADXneg_1=iADX(NULL,60,14,PRICE_CLOSE,MODE_MINUSDI,1);
//----
   EMA5_0=iMA(NULL,60,5,0,MODE_EMA,PRICE_CLOSE,1);
   EMA6_0=iMA(NULL,60,8,0,MODE_EMA,PRICE_OPEN,1);
   EMA5_1=iMA(NULL,60,5,0,MODE_EMA,PRICE_CLOSE,1);
   EMA6_1=iMA(NULL,60,8,0,MODE_EMA,PRICE_OPEN,1);
//----
   OsMA_0=iOsMA(NULL,60,12,26,9,PRICE_CLOSE,0);
   OsMA_1=iOsMA(NULL,60,12,26,9,PRICE_CLOSE,1);
   // Determining Bounding Pivot Lines & Take Profit Point
   if((Bid-S3) * (Bid-M0) < 0)
     {
      Sup=S3;
      Res=M0;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-M0) * (Bid-S2) < 0)
     {
      Sup=M0;
      Res=S2;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-S2) * (Bid-M1) < 0)
     {
      Sup=S2;
      Res=M1;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-M1) * (Bid-S1) < 0)
     {
      Sup=M1;
      Res=S1;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-S1) * (Bid-M2) < 0)
     {
      Sup=S1;
      Res=M2;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-M2) * (Bid-P) < 0)
     {
      Sup=M2;
      Res=P;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-P) * (Bid-M3) < 0)
     {
      Sup=P;
      Res=M3;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-M3) * (Bid-R1) < 0)
     {
      Sup=M3;
      Res=R1;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-R1) * (Bid-M4) < 0)
     {
      Sup=R1;
      Res=M4;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-M4) * (Bid-R2) < 0)
     {
      Sup=M4;
      Res=R2;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-R2) * (Bid-M5) < 0)
     {
      Sup=R2;
      Res=M5;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   if((Bid-M5) * (Bid-R3) < 0)
     {
      Sup=S3;
      Res=M0;
      Sell_TP=Sup;
      Buy_TP=Res;
     }
   dif1=(Bid-Sell_TP)/Point;
   dif2=(Buy_TP-Ask)/Point;
//----
   Comment("MoStAsHaR15 FoReX - Pivot Strategy","\nSupport = ",Sup," - Difference = ",dif1," Pips", "\nResistance = ",Res," - Difference = ",dif2," Pips");
   // Checking Account Free Margin       
   int total=OrdersTotal();
   if(total<1)
     {
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
        }
      // Check for long positions (if you have money and no more than 1 order open)
      if(dif2 > 14 && ADX > 20 && ADXpos_0 > ADXpos_1 && ADXpos_0 > ADXneg_0 && (EMA5_0 - EMA6_0)>=(5 * Point) && EMA5_1 > EMA6_1 && OsMA_0 > OsMA_1)
        {
         SL=Ask - StopLoss * Point;
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,Buy_TP,"MoStAsHaR15 FoReX",16384,0,White);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Comment("BUY order opened : ",OrderOpenPrice());
           }
         else Comment("Error opening BUY order : ",GetLastError());
         return(0);
        }
      // Check for short positions (if you have money and no more than 2 orders open)
      if(dif1 > 14 && ADX > 20 && ADXneg_0 > ADXneg_1 && ADXpos_0 < ADXneg_0 && (EMA6_0 - EMA5_0)>=5 * Point && EMA6_1 > EMA5_1 && OsMA_0 < OsMA_1)
        {
         SL=Bid + StopLoss * Point;
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,Sell_TP,"MoStAsHaR15 FoReX",16384,0,White);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Comment("SELL order opened : ",OrderOpenPrice());
           }
         else Comment ("Error opening SELL order : ",GetLastError());
         return(0);
        }
      return(0);
     }
   // Open Trades Management
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // Trailing Stop Managment
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
        }
      return(0);
     }
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:

Movement directional index
Moving average indicator
Moving Average of Oscillator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:


BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.00 Total Net Profit:0.00

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for MoStAsHaR15 Pivot Expert(30AUG05)_v1


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: