sam1_Integer Hedge_v2





//+------------------------------------------------------------------+
//|                                        sam1_Integer Hedge_v2.mq4 |
//|                                                         azman818 |
//|                                                   strategy: sam1 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007,HTP"
#property link      "krugger21@fastmail.fm"

//---- input parameters

extern int     levels=7;
extern double  Lot_1=0.1;
extern int     TP=20;
extern int     SL=60;
extern int     pipstep=20;
extern int     JRSX_Period=7;
extern int     JRSX_Timeframe=60;
extern bool    Use_JRSX=false;
extern int     Start_Long=0;
extern bool    Stop_Cycle=true;

extern int     magic=1111;

int            Lot_x=2; 
int            Order_Type=0;
int            level_cnt=0;
int            order_cnt=0; 
double         sum_profit=0;
int            Pending_Stop=0;
bool           level_max=false;
string         str_Stop;
string         str_open;

int            slippage=5;
int            spread;
double         price_B;  
double         price_S;
double         price_BB;  
double         price_SS;  

double         Up_Trap=0;
double         Dn_Trap=0;
double         Close_price;
bool           Order_Close_ON=false;
string         str_close;

int            tick_count=0;  

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()

{

//----

   int Last_Ticket=0; double jrsx_curr=0, jrsx_prev=0;
   
   tick_count++;
   
   if(Stop_Cycle==true) str_Stop = "Last Cycle";
   else str_Stop = "";
             
   if(level_max==true && sum_profit>=Lot_1*500) Close_All();

   Last_Ticket = Check_Ticket();

   if(Last_Ticket!=0) level_cnt = Check_Level(Last_Ticket);
   
   Pending_Stop = Check_Pending();

   if(level_max==true) str_open = "MAX";
   else str_open = order_cnt;

   if(Order_Close_ON==true) { str_close = "Close executing ..."; RefreshRates(); Close_All(); }
   else str_close = "";

   jrsx_curr = iCustom(Symbol(),JRSX_Timeframe,"Turbo_JRSX",JRSX_Period,0,1); 
   jrsx_prev = iCustom(Symbol(),JRSX_Timeframe,"Turbo_JRSX",JRSX_Period,0,2);

   if(Use_JRSX==true)
   {   Comment ("\n previous >> current JRSX  =  ", jrsx_prev, " >> ", jrsx_curr, "   profits = ", sum_profit, "   ", str_close,
                "\n open = ", str_open, "   level = ", level_cnt, "   spread = ", spread, "   pending = ",  Pending_Stop, "     ", TP, " / ", SL, " / ", pipstep,
                "\n ", price_B, "   ", price_S, "   ", price_BB, "   ", price_SS, "   ", Last_Ticket, "    tick = ", tick_count);  
   }
   else 
   {   Comment ("\n", "profits = ", sum_profit, "   ", str_close,
                "\n open = ", str_open, "   level = ", level_cnt, "   spread = ", spread, "   pending = ",  Pending_Stop, "     ", TP, " / ", SL, " / ", pipstep,
                "\n ", price_B, "   ", price_S, "   ", price_BB, "   ", price_SS, "   ", Last_Ticket, "    tick = ", tick_count);  
   }
   
   if(Last_Ticket==0 && Stop_Cycle==false)
   {
     if(Use_JRSX==true)
     {            
       if(jrsx_curr > jrsx_prev) Order_Type = 0;
       if(jrsx_curr < jrsx_prev) Order_Type = 1;
     }
     else
     {
       if(Start_Long==0) Order_Type = 0;
       if(Start_Long==1) Order_Type = 1;
     }  

     Start_Ticket();
   }

   if(Last_Ticket==0 && Stop_Cycle==true) Clean_Pending();

   if(Last_Ticket!=0 && Pending_Stop==0 && level_max==false) Up_Level();

   
//----


   return(0);
}

//+------------------------------------------------------------------+

int Check_Ticket()
{
   int i; datetime time = 0; int ticket;
   
   order_cnt=0;
   sum_profit=0;
   
   for(i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if((OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==0) || (OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==1))
      {
         if(OrderOpenTime() > time) { time = OrderOpenTime(); ticket = OrderTicket(); sum_profit = OrderProfit() + sum_profit; order_cnt++; }
      }
      if(ticket < 0) ticket = 0;
   }
   return(ticket);
}   

//+------------------------------------------------------------------+

int Start_Ticket()
{
   int cmd; double Lots; double stoploss; double takeprofit; color colour;

   Clean_Pending();
   
   level_cnt = 2;

   RefreshRates();
   spread=MarketInfo(Symbol(),MODE_SPREAD);

   price_B=Ask;
   price_S=Bid;
   price_BB=price_S+(pipstep-spread)*Point;
   price_SS=price_B-(pipstep-spread)*Point;

   if(Order_Type==0) Open_Order_Buy(cmd, Lots, price_B, slippage, stoploss, takeprofit, magic, colour);
   if(Order_Type==1) Open_Order_Sell(cmd, Lots, price_S, slippage, stoploss, takeprofit, magic, colour);
   
   if(Order_Type==0) Set_Pending_Order_SellStop(cmd, Lots, price_SS, slippage, stoploss, takeprofit, magic);
   if(Order_Type==1) Set_Pending_Order_BuyStop(cmd, Lots, price_BB, slippage, stoploss, takeprofit, magic);

   return(0);   
}

//+------------------------------------------------------------------+

int Up_Level()
{
   int cmd; double Lots; double stoploss; double takeprofit; color colour;
   
   level_cnt++;

   if(Order_Type==0) Set_Pending_Order_SellStop(cmd, Lots, price_SS, slippage, stoploss, takeprofit, magic);
   if(Order_Type==1) Set_Pending_Order_BuyStop(cmd, Lots, price_BB, slippage, stoploss, takeprofit, magic);

   return(0);   
}

//+------------------------------------------------------------------+

int Check_Level(int Last_Ticket)
{
   int i;
   
   if(levels>9) levels=9;

   RefreshRates();
   spread=MarketInfo(Symbol(),MODE_SPREAD);

   OrderSelect(Last_Ticket,SELECT_BY_TICKET,MODE_TRADES);

   level_cnt = order_cnt;

   if(level_cnt==1)  Lot_x = 2;
   if(level_cnt==2)  Lot_x = 4;
   if(level_cnt==3)  Lot_x = 6;
   if(level_cnt==4)  Lot_x = 12;
   if(level_cnt==5)  Lot_x = 18;
   if(level_cnt==6)  Lot_x = 36;
   if(level_cnt==7)  Lot_x = 54;
   if(level_cnt==8)  Lot_x = 108;
   if(level_cnt==9)  Lot_x = 162;
   if(level_cnt==10) Lot_x = 2;

   if(level_cnt>=levels) level_max = true;

   ObjectDelete("Up_Trap");
   ObjectDelete("Dn_Trap");

   if(OrderType()==0) Order_Type = 0;
   if(OrderType()==1) Order_Type = 1; 

   if(Order_Type==0)
   {
      price_B=OrderOpenPrice();
      price_S=OrderOpenPrice()+spread*Point;
      price_SS=price_S-pipstep*Point;
      price_BB=0;
      Close_price=Bid;
      Up_Trap = OrderTakeProfit();
      Dn_Trap = OrderStopLoss();
      ObjectCreate("Up_Trap", OBJ_HLINE, 0, 0, Up_Trap);
      ObjectSet("Up_Trap", OBJPROP_COLOR, Blue);
      ObjectSet("Up_Trap", OBJPROP_STYLE, STYLE_DOT);
      ObjectCreate("Dn_Trap", OBJ_HLINE, 0, 0, Dn_Trap);
      ObjectSet("Dn_Trap", OBJPROP_COLOR, Red);
      ObjectSet("Dn_Trap", OBJPROP_STYLE, STYLE_DOT);
   }

   if(Order_Type==1)
   {
      price_S=OrderOpenPrice();
      price_B=OrderOpenPrice()-spread*Point;
      price_BB=price_B+pipstep*Point;
      price_SS=0;
      Close_price=Ask;
      Up_Trap = OrderStopLoss() - spread*Point;
      Dn_Trap = OrderTakeProfit() - spread*Point;
      ObjectCreate("Up_Trap", OBJ_HLINE, 0, 0, Up_Trap);
      ObjectSet("Up_Trap", OBJPROP_COLOR, Red);
      ObjectSet("Up_Trap", OBJPROP_STYLE, STYLE_DOT);
      ObjectCreate("Dn_Trap", OBJ_HLINE, 0, 0, Dn_Trap);
      ObjectSet("Dn_Trap", OBJPROP_COLOR, Blue);
      ObjectSet("Dn_Trap", OBJPROP_STYLE, STYLE_DOT);
   }

   if(level_cnt>=levels) level_max = true;    

   
   return(level_cnt);
}   

//+------------------------------------------------------------------+

int Check_Pending()
{
   int i;

   Pending_Stop=0;
 
   for(i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if((OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == 4) || (OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == 5))
      {
         if(OrderType()==4) Pending_Stop = 4; 
         if(OrderType()==5) Pending_Stop = 5; 
      }
   }
   
   return(Pending_Stop);
}   

//+------------------------------------------------------------------+

int Open_Order_Buy(int cmd, double Lots, double price_B, int slippage, double stoploss, double takeprofit, int magic, color colour)
{
   int ticket;

   while(ticket==0) 
   {
      stoploss = price_B - SL*Point;
      takeprofit = price_B + TP*Point;
      while(IsTradeAllowed() == false) Sleep(6000);
      ticket = OrderSend(Symbol(),0,Lot_1,price_B,slippage,stoploss,takeprofit,NULL,magic,0,Green);
      if(ticket < 0) ticket = 0;
   }

   return(0);
}

//+------------------------------------------------------------------+

int Open_Order_Sell(int cmd, double Lots, double price_S, int slippage, double stoploss, double takeprofit, int magic, color colour)
{
   int ticket;
   
   while(ticket==0) 
   {
      stoploss = price_S + SL*Point;
      takeprofit = price_S - TP*Point;
      while(IsTradeAllowed() == false) Sleep(6000);
      ticket = OrderSend(Symbol(),1,Lot_1,price_S,slippage,stoploss,takeprofit,NULL,magic,0,Red);
      if(ticket < 0) ticket = 0;
   }

   return(0);
}

//+------------------------------------------------------------------+

void Clean_Pending()
{  
   for(int i=0;i<OrdersTotal();i++)
   { 
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if((OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == 4) || (OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == 5))
      {
         int ticket = OrderTicket();
         while(IsTradeAllowed() == false) Sleep(6000);
         OrderDelete(ticket,CLR_NONE);
      }
   }   
}

//+------------------------------------------------------------------+

int Set_Pending_Order_BuyStop(int cmd, double Lots, double price_BB, int slippage, double stoploss, double takeprofit, int magic)
{
   int ticket;
   
   while(ticket==0) 
   {
      if(MathMod(level_cnt,2)==0) {stoploss = price_BB - (SL-pipstep)*Point; takeprofit = price_BB + (TP+pipstep)*Point;}
      else {stoploss = price_BB - SL*Point; takeprofit = price_BB + TP*Point;}
      while(IsTradeAllowed() == false) Sleep(6000);
      ticket = OrderSend(Symbol(),4,Lot_1*Lot_x,price_BB,slippage,stoploss,takeprofit,NULL,magic,0,CLR_NONE);
      if(ticket < 0) ticket = 0;
   }
   
   return(0);
}

//+------------------------------------------------------------------+

int Set_Pending_Order_SellStop(int cmd, double Lots, double price_SS, int slippage, double stoploss, double takeprofit, int magic)
{
   int ticket;
   
   while(ticket==0) 
   {
      if(MathMod(level_cnt,2)==0) {stoploss = price_SS + (SL-pipstep)*Point; takeprofit = price_SS - (TP+pipstep)*Point;}
      else {stoploss = price_SS + SL*Point; takeprofit = price_SS - TP*Point;}
      while(IsTradeAllowed() == false) Sleep(6000);
      ticket = OrderSend(Symbol(),5,Lot_1*Lot_x,price_SS,slippage,stoploss,takeprofit,NULL,magic,0,CLR_NONE);
      if(ticket < 0) ticket = 0;
   }

   return(0);
}

//+------------------------------------------------------------------+

int Close_All()
{
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==0)
      {
         while(IsTradeAllowed() == false) Sleep(6000);
         OrderClose(OrderTicket(), OrderLots(), Bid, slippage, CLR_NONE);
      }   
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==1)
      {
         while(IsTradeAllowed() == false) Sleep(6000);
         OrderClose(OrderTicket(), OrderLots(), Ask, slippage, CLR_NONE);
      }   
   }
   
   level_cnt=0;
   
   level_max=false;
   
   return(0);
}

//+------------------------------------------------------------------+






Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:




Custom Indicators Used:
Turbo_JRSX

Order Management characteristics:
Checks for the total of open orders

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

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 2009-12-01 to 2010-01-17 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 sam1_Integer Hedge_v2


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

Pair: Period: