//+------------------------------------------------------------------+ //| | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ /* This EA is to enter and manage 3 orders at Market price. */ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" int v_ticket1 = 0; int v_ticket2 = 0; int v_ticket3 = 0; int v_orders_placed = 0; //flag when all orders are placed int v_filled = 0; //flag when order is filled int v_TP1_filled = 0; //flag when TP1 is hit to move BE+1 stops int v_Stops_moved = 0; //flag when stops moved to BE+1 int type = 0; //This represents type of order 1=long 2=short (see function #2, #3) datetime v_expire; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0) ; } //+------------------------------------------------------------------+ //| EXPERT START FUNCTION //+-----------------------------------------------------------------+ int start() { Print ("LONG EA STARTING"); f_Place_Orders(); // 1 - PLACE ORDERS f_Check_if_TP1_filled(); // 2 - CHECK IF TP1 FILLED f_Move_Stops_BE_1(); // 3 - MOVE STOPS TO BE + 1 } //=============================================================================================================== //================================================================================================================ int f_Place_Orders() // 1 - PLACE ORDERS { if (v_orders_placed == 0) { Print ("1 FUNCTION - f_Place_Orders - STARTING"); //+------------------------------------------------------------------+ /// LONG + //+------------------------------------------------------------------+ v_ticket1 = OrderSend(Symbol(),OP_BUY,0.05,Ask,3,Ask - 15*Point,Ask+20*Point,"Long Trade1",0,v_expire,Green); v_ticket2 = OrderSend(Symbol(),OP_BUY,0.05,Ask,3,Ask - 15*Point,Ask+40*Point,"Long Trade2",0,v_expire,Green); v_ticket3 = OrderSend(Symbol(),OP_BUY,0.05,Ask,3,Ask - 15*Point,Ask+100*Point,"Long Trade3",0,v_expire,Green); v_orders_placed = 1; // SET VARIABLE THAT ORDERS HAVE BEEN PLACED type = 1; //Long Order Types Print ("All Pending Orders Placed"); } Print ("1 FUNCTION - f_Place_Orders - ENDING"); return; } //=============================================================================================================== //================================================================================================================ int f_Check_if_TP1_filled() // 2 - CHECK IF TP1 FILLED { if (type ==1 && v_TP1_filled == 0) // LONG has been filled { Print ("2 FUNCTION - f_Check_if_TP1_filled - STARTING"); OrderSelect(v_ticket1, SELECT_BY_TICKET); //Select first LONG order if( OrderCloseTime()!=0 && OrderProfit() > 0 ) // Checking if TP1 is hit v_TP1_filled = 1; Print ("2 FUNCTION - TP1 LONG IS HIT"); Print ("2 FUNCTION - f_Check_if_TP1_filled - ENDING"); } return; } //================================================================================================================ int f_Move_Stops_BE_1() // 3 - MOVE STOPS TO BE + 1 { if (type ==1 && v_TP1_filled == 1 && v_Stops_moved == 0) // LONG TP1 has been filled { //+------------------------------------------------------------------+ /// LONG + //+------------------------------------------------------------------+ Print ("3 FUNCTION - f_Move_Stops_BE_1 - STARTING"); OrderSelect(v_ticket2,SELECT_BY_TICKET); double Ticket2_Entry = OrderOpenPrice(); double Ticket2_BE_1 = NormalizeDouble((OrderOpenPrice()+1* Point),4); OrderModify(v_ticket2,Ticket2_Entry,Ticket2_BE_1,OrderTakeProfit(),0,Blue); OrderSelect(v_ticket3,SELECT_BY_TICKET); double Ticket3_Entry = OrderOpenPrice(); double Ticket3_BE_1 = NormalizeDouble((OrderOpenPrice()+1* Point),4); OrderModify(v_ticket3,Ticket3_Entry,Ticket3_BE_1,OrderTakeProfit(),0,Blue); v_Stops_moved = 1; Print ("3 FUNCTION - Moved LONG Stops BE+1"); Print ("5 FUNCTION - f_Move_Stops_BE_1 - ENDING"); } return; }