MA_cross_Method_PriceMode





//============================================================================================
//
//
//
//
//
//============================================================================================
extern int    MA1_Period=3;                              // Ïåðèîä 1-é ÌÀ
extern int    MA2_Period=13;                             // Ïåðèîä 2-é ÌÀ
extern int    MA1_Method=0;                              // Ìåòîä âû÷èñëåíèÿ ÌÀ1 (SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int    MA2_Method=3;                              // Ìåòîä âû÷èñëåíèÿ ÌÀ2 (SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int    MA1_Price=0;                               // Ìåòîä âû÷èñëåíèÿ öåíû ÌÀ1 
extern int    MA2_Price=4;                               // Ìåòîä âû÷èñëåíèÿ öåíû ÌÀ2
extern int    MA1_Shift=0;                               // Âðåìåííîé ñäâèã ÌÀ1
extern int    MA2_Shift=0;                               // Âðåìåííîé ñäâèã ÌÀ2
extern double Lot = 0.1;                                 // Ôèêñèðîâàííûé ëîò
extern int    slippage = 0;                              // Îòêëîíåíèå öåíû äëÿ ðûíî÷íûõ îðäåðîâ 
int New_Bar;                                             // 0/1 Ôàêò îáðàçîâàíèÿ íîâîãî áàðà
int Time_0;                                              // Âðåìÿ íà÷àëà íîâîãî áàðà
int PosOpen;                                             // Íàïðàâëåíèå ïåðåñå÷åíèÿ
int PosClose;                                            // Íàïðàâëåíèå ïåðåñå÷åíèÿ
int total;                                               // Êîëè÷åñòâî îòêðûòûõ îðäåðîâ
double MA1_0;                                            // Òåêóùåå çíà÷åíèå 1-é ÌÀ (ðîçîâ)
double MA1_1;                                            // Ïðåäûäóùåå çíà÷åíèå 1-é ÌÀ (ðîçîâ)
double MA2_0;                                            // Òåêóùåå çíà÷åíèå 2-é ÌÀ (ãîëóáàÿ)
double MA2_1;                                            // Ïðåäûäóùåå çíà÷åíèå 2-é ÌÀ (ãîëóáàÿ)
int orderBuy;                                            // 1 = ôàêò íàëèèÿ îðäåðà Buy
int orderSell;                                           // 1 = ôàêò íàëèèÿ îðäåðà Sell 
//============================================================================================
int init()  
   {

   }  
//============================================================================================
int start()  
   {
   orderBuy=0;
   orderSell=0; 
   double price;  
   int openOrders=0;
   int total=OrdersTotal();                                  // Îáùåå êîëè÷åñòâî îðäåðîâ
   for(int i=total-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)     // Âûáèðàåì îðäåð
         {
         if(OrderType()==OP_BUY)                             // Åñëè ñòîèò îðäåð íà ïîêóïêó
            {
            orderBuy=1;
            if(CrossPositionClose()==1)                      // Çàêðûâåì îðäåð, åñëè óäîâëåòâîðÿåò
               {                                             // óñëîâèþ CrossPositionClose()=1
               price=MarketInfo(Symbol(),MODE_BID);
               OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE);
               }
            }
         if(OrderType()==OP_SELL)                            // Åñëè ñòîèò îðäåð íà ïîêóïêó
            {
            orderSell=1;
            if(CrossPositionClose()==2)                      // Çàêðûâåì îðäåð, åñëè óäîâëåòâîðÿåò
               {                                             // óñëîâèþ CrossPositionClose()=2
               price=MarketInfo(Symbol(),MODE_ASK);
               OrderClose(OrderTicket(),OrderLots(),price,slippage,CLR_NONE);
               }
            }
         }
      }
   
   New_Bar=0;                                                // Äëÿ íà÷àëà îáíóëèìñÿ
   if (Time_0 != Time[0])                                    // Åñëè óæå äðóãîå âðåìÿ íà÷àëà áàðà
      {
      New_Bar= 1;                                            // À âîò è íîâûé áàð
      Time_0 = Time[0];                                      // Çàïîìíèì âðåìÿ íà÷àëà íîâîãî áàðà
      } 
   
   MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 0);    // Òåêóùåå    çíà÷åíèå 1-é ÌÀ
   MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1);    // Ïðåäûäóùåå çíà÷åíèå 1-é ÌÀ
   MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 0);    // Òåêóùåå    çíà÷åíèå 2-é ÌÀ
   MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1);    // Ïðåäûäóùåå çíà÷åíèå 2-é ÌÀ
   
   if (CrossPositionOpen()==1 && New_Bar==1)                 // Äâèæåíèå ñíèçó ââåðõ = îòêð. Buy
      {
      OpenBuy();
      }      
   if (CrossPositionOpen()==2 && New_Bar==1)                 // Äâèæåíèå ñâåðõó âíèç = îòêð. Sell
      {
      OpenSell();
      }    
   return;
   }  
//============================================================================================
int CrossPositionOpen()
   {
   PosOpen=0;                                                 // Âîò ãäå ñîáàêà çàðûòà!!:)
   if ((MA1_1<=MA2_0 && MA1_0>MA2_0) || (MA1_1<MA2_0 && MA1_0>=MA2_0))   // Ïåðåñå÷åíèå ñíèçó ââåðõ  
      {
      PosOpen=1;
      }                  
   if ((MA1_1>=MA2_0 && MA1_0<MA2_0) || (MA1_1>MA2_0 && MA1_0<=MA2_0))   // Ïåðåñå÷åíèå ñâåðõó âíèç
      {
      PosOpen=2;
      }             
   return(PosOpen);                                          // Âîçâðàùàåì íàïðàâëåíèå ïåðåñå÷åí.
   }
//============================================================================================
int CrossPositionClose()
   {
   PosClose=0;                                                // Âîò ãäå ñîáàêà çàðûòà!!:)
   if ((MA1_1>=MA2_0 && MA1_0<MA2_0) || (MA1_1>MA2_0 && MA1_0<=MA2_0))   // Ïåðåñå÷åíèå ñâåðõó âíèç        {
      {
      PosClose=1;
      }                  
   if ((MA1_1<=MA2_0 && MA1_0>MA2_0) || (MA1_1<MA2_0 && MA1_0>=MA2_0))   // Ïåðåñå÷åíèå ñíèçó ââåðõ
      {
      PosClose=2;
      }             
   return(PosClose);                                          // Âîçâðàùàåì íàïðàâëåíèå ïåðåñå÷åí.
   }
//============================================================================================
int OpenBuy() 
   {
   if (total==1)
      {
      OrderSelect(0, SELECT_BY_POS,MODE_TRADES);              // Âûäåëèì îðäåð
      if (OrderType()==OP_BUY) return;                        // Åñëè îí buy, òî íå îòêðûâàåìñÿ
      }
   OrderSend(Symbol(),OP_BUY, Lot, Ask, slippage, 0, 0, "Buy: MA_cross_Method_PriceMode", 1, 0, CLR_NONE);// Îòêðûâàåìñÿ
   return;
   }
//============================================================================================
int OpenSell() 
   {
   if (total==1)
      {
      OrderSelect(0, SELECT_BY_POS,MODE_TRADES);              // Âûäåëèì îðäåð
      if (OrderType()==OP_SELL) return;                       // Åñëè îí sell, òî íå îòêðûâàåìñÿ
      }
   OrderSend(Symbol(),OP_SELL, Lot, Bid, slippage, 0, 0, "Sell: MA_cross_Method_PriceMode", 2, 0, CLR_NONE);
   return;
   }
//============================================================================================
int MAMethod(int MA_Method)
   {
      switch(MA_Method)
        {
         case 0: return(0);                                   // Âîçâðàùàåò MODE_SMA=0
         case 1: return(1);                                   // Âîçâðàùàåò MODE_EMA=1
         case 2: return(2);                                   // Âîçâðàùàåò MODE_SMMA=2
         case 3: return(3);                                   // Âîçâðàùàåò MODE_LWMA=3
        }
   }
//============================================================================================
int MAPrice(int MA_Price)
   {
      switch(MA_Price)
        {
         case 0: return(PRICE_CLOSE);                         // Âîçâðàùàåò PRICE_CLOSE=0        
         case 1: return(PRICE_OPEN);                          // Âîçâðàùàåò PRICE_OPEN=1
         case 2: return(PRICE_HIGH);                          // Âîçâðàùàåò PRICE_HIGH=2
         case 3: return(PRICE_LOW);                           // Âîçâðàùàåò PRICE_LOW=3
         case 4: return(PRICE_MEDIAN);                        // Âîçâðàùàåò PRICE_MEDIAN=4
         case 5: return(PRICE_TYPICAL);                       // Âîçâðàùàåò PRICE_TYPICAL=5
         case 6: return(PRICE_WEIGHTED);                      // Âîçâðàùàåò PRICE_WEIGHTED=6
        }
   }
//============================================================================================





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It Closes Orders by itself
It automatically opens orders when conditions are reached

Other Features:

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.90 Total Net Profit:-102.79

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.42 Total Net Profit:-1432.40

BackTest : USDCAD on H1

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

BackTest : USDCHF on H1

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

BackTest : USDJPY on H1

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

Request Backtest for MA_cross_Method_PriceMode


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

Pair: Period: