leonytham Posted April 5, 2010 Report Share Posted April 5, 2010 hi, there. i am newbies in writing mql4 expert advisor.. recently i'm writing about grid concept EA, however face some order management source code problems: 1) EA supposes to open only 4 orders, HOWEVER, at each tick, the EA is opening many and many same 4 orders.. 2) After an order is closed due to take profit point hit, EA will triggered to open a same new order, HOWEVER, no new order is opened after TP is hit.. Please do give your opinion how to resolve above 2 problems.. attached below is the FULL source code for this Order Triggered Order EA. (If possible, please give a FULL WORKING source code?) :) Thank you very much, sir. ========================================================================== //+------------------------------------------------------------------+ //| Order triggered order EA.mq4 | //| [email protected] | //+------------------------------------------------------------------+ #property copyright "[email protected]" #property link "http://" #property show_inputs extern double Lot = 0.1; extern int Take_Profit = 10; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //SECTION 1: // (1) When EA activated, 4 orders will be opened ONCE only, // that is 1 instant OP_BUY, 1 instant OP_SELL, 1 pending OP_BUYLIMIT and 1 pending OP_SELLLIMIT. // (2) Problem at SECION 1: After EA activated, these 4 orders are opened MANY MANY times // (everytime new tick, 4 new orders are opened AGAIN) // (3) Your opinion : How to write the code in SECTION 1 so that once EA runs, it ONLY opens 4 orders? //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, 0, Bid+1*Take_Profit*Point, "Long at 1.3400", 1000, NULL, Lime); OrderSend(Symbol(), OP_BUYLIMIT, Lot, Ask-1*Take_Profit*Point, 3, 0, Bid, "Long at 1.3390", 1001, NULL, CLR_NONE); OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, 0, Ask-1*Take_Profit*Point, "Short at 1.3400", 9000, NULL, Red); OrderSend(Symbol(), OP_SELLLIMIT, Lot, Bid+1*Take_Profit*Point, 3, 0, Ask, "Short at 1.3410", 9001, NULL, CLR_NONE); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //SECTION 2: // (1) At SECTION 2, when ANY ONE of above 4 orders is closed (due to take profit), EA will triggered to: // (a) RE-OPEN SAME with previous order properties. // (b) The process at (a) will repeat UNLIMITED times // (Hit_TP_&_closed -> Reopen_same_order... Hit_TP_&_closed -> Reopen_same_order...) // // (Example: Say EURUSD market price is at 1.3400, then price move down to 1.3390 and hit the OP_BUYLIMIT. // After a while, market price retraced to 1.3400, so take profit is achived, so earlier OP_BUYLIMIT is closed now. // At this moment, EA is triggered to send a NEW same with previous order: // OP_BUYLIMIT 0.1Lot at order price 1.3390, TP at 1.3400 and magic number 1001 // =>same properties with earlier order. // The EA will repeat the same, as long as TP is hit) // // (2) Problem at SECION 2: When one of the order TP is hit, there is NO new same properties order is Re-opened. // (3) Your opinion : How to write the code in SECTION 2 so that the TP hit can trigger to send a new same // properties order? // That is when market price hit one TP, EA will be triggered to Re-open one new same properties order. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// for(int i=3;i>=0;i--) // Check the last 3 closed orders in history {OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderMagicNumber()==1000) //previous OP_BUY order OrderSend(Symbol(), OP_BUYLIMIT, Lot, Ask-Take_Profit*Point, 3, 0, Bid, "Repeating-Long at 1.3400", 1000, NULL, CLR_NONE); if (OrderMagicNumber()== 1001) //previous OP_BUYLIMIT order OrderSend(Symbol(), OP_BUYLIMIT, Lot, Ask-Take_Profit*Point, 3, 0, Bid, "Repeating-Long at 1.3390", 1001, NULL, CLR_NONE); if(OrderMagicNumber()==9000) //previous OP_SELL order OrderSend(Symbol(), OP_SELLLIMIT, Lot, Bid+Take_Profit*Point, 3, 0, Ask, "Repeating-Short at 1.3400", 9000, NULL, CLR_NONE); if (OrderMagicNumber()== 9001) //previous OP_SELLLIMIT order OrderSend(Symbol(), OP_SELLLIMIT, Lot, Bid+Take_Profit*Point, 3, 0, Ask, "Repeating-Short at 1.3410", 9001, NULL, CLR_NONE); return(0); }} //+------------------------------------------------------------------+ Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.