Serving Traders Since 2005
|
|
|
|||||||
| MetaTrader Expert Advisors Post and discuss the MetaTrader expert advisors here. |
![]() |
|
|
LinkBack | Thread Tools | Display Modes |
|
||||
|
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.
the code as follow: //+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright ?2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #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()*MaximumRis k/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)==fals e) { 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(); //---- } //+------------------------------------------------------------------+ |
|
||||
|
You better attach the .mq4 file to the post. The copy-pasted code is very hard to read.
__________________
Please, read the Forum Rules and the Signature Rules to avoid termination of your account. |
![]() |
| Bookmarks |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Error opening SELL order:130 | pepe | MetaTrader Expert Advisors | 7 | 18th January 2011 21:18 |
| USD Core Durable Goods Order | oxygen.60 | Fundamental Analysis | 0 | 24th November 2010 16:13 |
| Need help in writing ea - Time factor to close order | peterngkl@gmail.com | MetaTrader Expert Advisors | 0 | 26th August 2009 15:49 |