Menu
Brokers
MT4 Forex Brokers
MT5 Forex brokers
PayPal Brokers
Skrill Brokers
Oil Trading Brokers
Gold Trading Brokers
Web Browser Platform
Brokers with CFD Trading
ECN Brokers
Bitcoin FX Brokers
PAMM Forex Brokers
With Cent Accounts
With High Leverage
Cryptocurrency Brokers
Forums
All threads
New threads
New posts
Trending
Search forums
What's new
New threads
New posts
Latest activity
Log in
Register
Search
Search titles only
By:
Search titles only
By:
Menu
Install the app
Install
Reply to thread
Forums
Trading Platforms
MetaTrader Expert Advisors
why close order fail and how to limit order n.o.?
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Message
[QUOTE="univetsity, post: 18238, member: 9442"] I am an newbie in MQL4,just tested an EA of myself,but the report looks like the EA couldnot close orders and would open order on each bar till freemargin become 0,then it will stop all orders. I dont know how to limit open order no. :( who can help me?TKS appreciation!:p the code as follow: //+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright ?2005, MetaQuotes Software Corp. | //| [url]http://www.metaquotes.net/[/url] | //+------------------------------------------------------------------+ #define MAGICMA 20110309 extern double Lots = 1; extern double MaximumRisk = 0.02; extern double DecreaseFactor = 10; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>0) return(buys); else return(sells); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //---- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1); Print(MarketInfo(Symbol(), MODE_LOTSIZE)); Print(MarketInfo(Symbol(), MODE_MINLOT)); Print(MarketInfo(Symbol(), MODE_LOTSTEP)); Print(MarketInfo(Symbol(), MODE_MAXLOT)); //---- calculate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); //this is an smart technical design,but losses stands lossing profit,not money may cause problems. //modify them follow as:accountfreemargin()-orderprofit() } //---- return lot size if(lot<1) lot=1; return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double m1,m2,m3,m4,ticket1,ticket2; int res; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0); m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0); m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1); m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1); //---- sell conditions if (m1<m3-0.0002) { ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0,"My order #1",MAGICMA,0,Red); return; } if (m2<m4-0.0001) { ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0,"My order #2",MAGICMA,0,Yellow); return; } //---- buy conditions if ( m1>m3+0.0002) { ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0,"My order #1",MAGICMA,0,Blue); return; } if (m2>m4+0.0001) { ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0,"My order #2",MAGICMA,0,Green); return; } //---- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double m1,m2,m3,m4; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0); m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0); m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1); m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1); //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //---- check order type if(OrderType()==OP_BUY) { if(m1<m3+0.0002) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); break; } if(m2<m4+0.0001) { OrderClose(OrderTicket(),OrderLots(),Bid,3,White); break; } } if(OrderType()==OP_SELL) { if(m1>m3-0.0002) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan); break; } if(m2<m4-0.0001) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon); break; } } } //---- } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { //---- check for history and trading if(Bars<55 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //---- } //+------------------------------------------------------------------+ [/QUOTE]
Insert quotes…
Verification
Post reply
Top
Bottom
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.
Accept
Learn more…