MA的EA 为何不开单呢? 新评论 [删除] 2011.03.17 11:10 我用MT4自带的MA.MQL4测试2011.03.03-03.12 GBP/USD H1 只成交了两个单: 1 2011.03.03 03:00 buy 1 1.00 1.6326 0.0000 0.0000 0.00 50000.00 2 2011.03.03 05:00 close 1 1.00 1.6313 0.0000 0.0000 -170.00 49830.00 3 2011.03.03 06:00 buy 2 1.00 1.6324 0.0000 0.0000 0.00 49830.00 4 2011.03.03 07:00 close 2 1.00 1.6317 0.0000 0.0000 -110.00 49720.00 后面一直显示error 131 请高手看看是什么原因呢? 模拟账号是50,000USD 杠杆是100.谢谢 而且定义Lots=0.1 但之后的单子都是1 不知是何原因? //+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright ?2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #define MAGICMA 20050610 extern double Lots = 0.1; extern double MaximumRisk = 0.02; extern double DecreaseFactor = 3; extern double MovingPeriod = 12; extern double MovingShift = 6; //+------------------------------------------------------------------+ //| 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/1000.0,1); Print(MarketInfo(Symbol(), MODE_LOTSIZE)); Print(MarketInfo(Symbol(), MODE_MINLOT)); Print(MarketInfo(Symbol(), MODE_LOTSTEP)); Print(MarketInfo(Symbol(), MODE_MAXLOT)); //---- calcuulate 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); } //---- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma; int res; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //---- sell conditions if(Open[1]>ma && Close[1]<ma) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); return; } //---- buy conditions if(Open[1]<ma && Close[1]>ma) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue); return; } //---- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma; //---- go trading only for first tiks of new bar if(Volume[0]>1) return; //---- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //---- 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(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White); break; } if(OrderType()==OP_SELL) { if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White); break; } } //---- } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { //---- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //---- } //+------------------------------------------------------------------+ DatabasePrepare Reading price, volume, spread, and time by bar index Finding the maximum and minimum values in a timeseries 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我用MT4自带的MA.MQL4测试2011.03.03-03.12 GBP/USD H1 只成交了两个单:
1 2011.03.03 03:00 buy 1 1.00 1.6326 0.0000 0.0000 0.00 50000.00
2 2011.03.03 05:00 close 1 1.00 1.6313 0.0000 0.0000 -170.00 49830.00
3 2011.03.03 06:00 buy 2 1.00 1.6324 0.0000 0.0000 0.00 49830.00
4 2011.03.03 07:00 close 2 1.00 1.6317 0.0000 0.0000 -110.00 49720.00
后面一直显示error 131 请高手看看是什么原因呢?
模拟账号是50,000USD 杠杆是100.谢谢
而且定义Lots=0.1 但之后的单子都是1 不知是何原因?