leonytham Posted June 5, 2013 Report Posted June 5, 2013 (edited) dear friend, i am a martingale fans, and found a clean martingale+hedging EA. but like martingale 'way' --- gamble, i would like to increase trading frequent. This Martingale EA, is a price action EA, immediately open 2 orders (one is buy, one is sell). The TP order will closed and waiting for the losing order(s) to close before restart the cycle. anybody, could help to: 1) add IMMEDIATELY reopen new-TP-order. (current version only open new TP-order AFTER ALL orders closed) example 8:15am = 0.1buy + 0.1sell + 0.2sell + 0.4sell, when 8.20am TP for sell, now have 0.1buy. can add IMMEDIATELY reopen new-TP-order, that is... example 8:15am = 0.1buy + 0.1sell + 0.2sell + 0.4sell, when 8.20am TP for sell, now have 0.1buy AND NEWLY opened 0.1sell. 2) add profit_target_all_buy (total dollar OP_BUY reach and close the OP_BUY only) 3) add profit_target_all_sell (total dollar OP_SELL reach and close the OP_SELL only) 4) add stop_loss_total_in_order (when balance below DEFINED-SL, then close ALL orders) ========================================================== //+------------------------------------------------------------------+ //| Martingale.mq4 | //| @abc | //| http://abc.com | //+------------------------------------------------------------------+ #property copyright "abc" #property link "http://abc.com" extern int TakeProfit = 8; extern int PipStep = 8; extern double Lots = 0.1; extern double Multiply = 2.0; extern int MaxTrade = 11; string EAName = "Martingale"; string EAComment = "Martingale"; int magicbuy = 123; int magicsell = 321; double SetPoint = 0; // Variabel SetPoint for broker 4 or 5 digits int Slippage = 3; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- SetBroker(); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int iTrade=0; Comment(EAName,"\nServer Time: ",Hour(),"\nPairs : ",Symbol(),"\nEquity : ",AccountEquity(),"\nBalance : ",AccountBalance()); // Tampilkan Nama EA di layar /* -- 0 opening order? starting FIRST order --*/ if(OrdersTotal()==0) { OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, magicbuy); OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, magicsell); } /* -- Martingale function starts --*/ if(OrdersTotal()>=1) { GoMartingale(); } //---- return(0); } //+------------------------------------------------------------------+ /*--managing 4 or 5 digits broker--*/ void SetBroker() { if (Digits==3 || Digits==5) // Instruct 4 digits broker {SetPoint=Point*10;} else // Instruct 4 digits broker {SetPoint=Point;} } /*-- Function to start Martingale --*/ void GoMartingale() { int iCount = 0; double LastOP = 0; double LastLots = 0; bool LastIsBuy = FALSE; int iTotalBuy = 0; int iTotalSell = 0; int Spread=0; Spread= MarketInfo(Symbol(), MODE_SPREAD); for(iCount=0;iCount<OrdersTotal();iCount++) { OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES); if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==magicbuy) { if(LastOP==0) {LastOP=OrderOpenPrice();} if(LastOP>OrderOpenPrice()) {LastOP=OrderOpenPrice();} if(LastLots<OrderLots()) {LastLots=OrderLots();} LastIsBuy=TRUE; iTotalBuy++; /* Maximum trades */ if(iTotalBuy==MaxTrade) {return(0);} } if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==magicsell) { if(LastOP==0) {LastOP=OrderOpenPrice();} if(LastOP<OrderOpenPrice()) {LastOP=OrderOpenPrice();} if(LastLots<OrderLots()) {LastLots=OrderLots();} LastIsBuy=FALSE; iTotalSell++; /* Maximum trades */ if(iTotalBuy==MaxTrade) {return(0);} } } if(LastIsBuy) { if(Bid<=LastOP-(Spread*SetPoint)-(PipStep*SetPoint)) { OrderSend(Symbol(), OP_BUY, Multiply*LastLots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, magicbuy); ModifyTP(); LastIsBuy=FALSE; return(0); } } else if(!LastIsBuy) { if(Ask>=LastOP+(Spread*SetPoint)+(PipStep*SetPoint )) { OrderSend(Symbol(), OP_SELL, Multiply*LastLots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, magicsell); ModifyTP(); return(0); } } } /*-- Align Take Profit to SAME point--*/ void ModifyTP() { int iCount=0; double NewTP=0; /*- Taking LAST Take Profit point -*/ for(iCount=0;iCount<OrdersTotal();iCount++) { OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES); if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==magicbuy) { if(NewTP==0) {NewTP=OrderTakeProfit();} if(NewTP>OrderTakeProfit()) {NewTP=OrderTakeProfit();} } if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==magicsell) { if(NewTP==0) {NewTP=OrderTakeProfit();} if(NewTP<OrderTakeProfit()) {NewTP=OrderTakeProfit();} } } for(iCount=0;iCount<OrdersTotal();iCount++) { OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES); if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==magicbuy) { OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0); } if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==magicsell) { OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0); } } } Edited June 5, 2013 by leonytham
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now