//+------------------------------------------------------------------+ //| 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: