_Turtle Channel System-x4lots





//+------------------------------------------------------------------+
//|                              Donchain counter-channel system.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "by djindyfx"
#property link      ""


extern double Lots    =1.0;                  
extern int    Slippage=3;                    
extern int    Magic   =20051006;             
// Optimalization parameters:
extern int    LngPeriod=20;              
extern int    ShtPeriod=10;
extern int Entry_Stop=100;
//extern int    TimeFrame    =PERIOD_D1;       // Time frame of the Donchain indicator.
// Privete variables
datetime last_trade_time;                    // in order to execute maximum only one trade a day.
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ReportStrategy(int Magic)
  {
   int    totalorders=HistoryTotal();
   double StrategyProfit=0.0;
   int    StrategyOrders=0;
   for(int j=0; j<totalorders;j++)
     { if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber()==Magic))
        {
         if((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
           {
            StrategyOrders++;
            StrategyProfit+=OrderProfit();
           }
        }
     }
   totalorders=OrdersTotal();
   for(j=0; j<totalorders;j++)
     { 
     if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) && (OrderMagicNumber()==Magic))
        {
         if((OrderType()==OP_BUY) ||(OrderType()==OP_SELL))
           {
            StrategyOrders++;
            StrategyProfit+=OrderProfit();
           }
        }
     }
   Comment("Executed ", StrategyOrders, " trades with ", StrategyProfit," of profit");
   return;
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double stop_short;
   double stop_long;
   double ELong;
   double EShort;
   
//----
   bool entry_short;
   bool entry_long;
   bool are_we_long    =false;
   bool are_we_short   =false;
   bool are_we_PendShort = false;
   bool are_we_PendLong = false;
   int  orders_in_trade=0;
   int  active_order_ticket;
//---- 
   
   //Channels for Entry and Stop
   // Entry Channel
   ELong=High[iHighest(NULL,0,MODE_HIGH,LngPeriod,0)]; 
   EShort=Low[iLowest(NULL,0,MODE_LOW,LngPeriod,0)];
   
   // Stop Channel
   stop_long=Low[iLowest(NULL,0,MODE_LOW,ShtPeriod,0)];
   stop_short=High[iHighest(NULL,0,MODE_HIGH,ShtPeriod,0)]; 
   
   ReportStrategy(Magic);
   // Check current trades:
   int TotalOrders=OrdersTotal();
   
   for(int j=0;j<TotalOrders;j++)
   {
      OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      {
         are_we_long =are_we_long  || OrderType()==OP_BUY;
         are_we_short=are_we_short || OrderType()==OP_SELL;
         are_we_PendShort=are_we_PendShort || OrderType()==OP_SELLSTOP;
         are_we_PendLong=are_we_PendLong || OrderType()==OP_BUYSTOP;
         orders_in_trade++;
         active_order_ticket=OrderTicket();
         
         /*
         // Lower channel:
         stop_long=Low[iLowest(NULL,0,MODE_LOW,ShtPeriod,0)];
         // Upper channel:
         stop_short=High[iHighest(NULL,0,MODE_HIGH,ShtPeriod,0)]; 
         */
         
         if(are_we_long && OrderType()==OP_BUY)
         {
            // We have long position. Check stop loss:
            OrderSelect(active_order_ticket, SELECT_BY_TICKET);
            if(OrderStopLoss() < stop_long)
               OrderModify(active_order_ticket,OrderOpenPrice(),stop_long,OrderTakeProfit(),0,Blue);
         //----
         }
         
         if(are_we_short && OrderType()==OP_SELL)
         {
           // We have long position. Check stop loss:
            OrderSelect(active_order_ticket, SELECT_BY_TICKET);
            if(OrderStopLoss() > stop_short)
               OrderModify(active_order_ticket,OrderOpenPrice(),stop_short,OrderTakeProfit(),0,Blue);
         //----
         }
         
         if(are_we_PendLong && OrderType() ==OP_BUYSTOP)
         {
            OrderSelect(active_order_ticket, SELECT_BY_TICKET);
            if((TimeCurrent()- OrderOpenTime())>360*60*60)
               OrderDelete(active_order_ticket);
         }
         
         if(are_we_PendShort && OrderType()==OP_SELLSTOP)
         {
            OrderSelect(active_order_ticket, SELECT_BY_TICKET);
            if((TimeCurrent() -OrderOpenTime())>360*60*60)
               OrderDelete(active_order_ticket);
         }        
      } //not true
    
   }// end for
   if (orders_in_trade > 0)
      return(0);
     
   //Do not execute new trade for a next 24 hours.
  if((TimeCurrent() - last_trade_time)<24*60*60) return(0);
  
  double y = iMA(NULL,0,150,0,MODE_SMA,PRICE_CLOSE,0);
/*
   // Upper channel:
   ELong=High[iHighest(NULL,0,MODE_HIGH,LngPeriod,0)]; 
   // lower channel:
   EShort=Low[iLowest(NULL,0,MODE_LOW,LngPeriod,0)];
*/   
   double ELong1=ELong+50*Point;
   double ELong2=ELong+100*Point;
   double ELong3=ELong+150*Point;
   
   double EShort1=EShort-50*Point;
   double EShort2=EShort-100*Point;
   double EShort3=EShort-150*Point;
   
   //if(entry_long && entry_short)
      //Alert("Short and long entry. Probably one of the is wrong.");
     if (ELong==Ask && Ask>y)
     {
      OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,stop_long/*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick);
      Sleep(2000);
      OrderSend(Symbol(), OP_BUYSTOP, Lots, ELong1, Slippage,stop_long/*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick); 
      Sleep(2000);
      OrderSend(Symbol(), OP_BUYSTOP, Lots, ELong2, Slippage,stop_long /*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick); 
      Sleep(2000);
      OrderSend(Symbol(), OP_BUYSTOP, Lots, ELong3, Slippage,stop_long /*Bid-Entry_Stop*Point*/,0, "", Magic,0, FireBrick); 
      last_trade_time=TimeCurrent();
     }
     
     if(EShort==Bid && Bid<y)
     {
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      Sleep(2000);
      OrderSend(Symbol(),OP_SELLSTOP,Lots,EShort1,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      Sleep(2000);
      OrderSend(Symbol(),OP_SELLSTOP,Lots,EShort2,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      Sleep(2000);
      OrderSend(Symbol(),OP_SELLSTOP,Lots,EShort3,Slippage,stop_short/*Ask+Entry_Stop*Point*/,0,"",Magic,0,FireBrick);
      last_trade_time=TimeCurrent();

     }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices 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 can change open orders parameters, due to possible stepping strategy
It automatically opens orders when conditions are reached

Other Features:

BackTest : EURUSD on H1

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

BackTest : USDJPY on H1

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

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:1.01 Total Net Profit:220.60

BackTest : USDCAD on H1

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

BackTest : EURUSD on H1

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

BackTest : GBPUSD on H1

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

BackTest : USDCAD on H1

From 2009-01-01 to 2010-01-01 Profit Factor:0.34 Total Net Profit:-9920.24

BackTest : EURUSD on H1

From 2010-03-01 to 2010-03-27 Profit Factor:1.69 Total Net Profit:4183.00

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-04-16 Profit Factor:0.07 Total Net Profit:-9900.30

BackTest : EURUSD on H1

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

BackTest : EURUSD on H1

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

Request Backtest for _Turtle Channel System-x4lots


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

Pair: Period: