编码帮助 - 页 390 1...383384385386387388389390391392393394395396397...786 新评论 tfi_markets 2014.11.07 11:46 #3891 你好,MT4编码员。 我想知道是否有人能帮助我。我试图在一个EA中实现"Hull moving average 2 strict nmc " 指标。 我面临的问题是,根据报告日志,该指标被反复加载到MT4中,此外,EA没有打开交易。据我所知,iCustom指标 调用的问题可能是根本原因。 这是我尝试做的事情。 当Hull移动平均线2严格nmc为绿色时,EA应该做多,当Hull移动平均线2严格nmc为红色时,EA应该做空。 extern int HMAPeriod = 35; extern int HMAPrice = 0; // PRICE_CLOSE extern double HMASpeed = 2; [/CODE] [CODE] // Forex TSD Hull Moving Average double hma0 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 0); double hma1 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 1); double hma2 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 2); Buy = (hma0 > hma1 && hma1 > hma2); Sell = (hma0 < hma1 && hma1 < hma2); 谢谢你的帮助。 Coding help 关于MT4自带的EA--Moving Average问题 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Mladen Rakic 2014.11.07 12:30 #3892 tfi_markets: 你好,MT4编码人员。 我想知道是否有人能帮助我。我试图在一个EA中实施"Hull moving average 2 strict nmc " 指标。我所面临的问题是,根据报告日志,该指标被反复加载到MT4中,此外,EA没有打开交易。据我所知,iCustom指标调用的问题可能是根本原因。这是我尝试做的事情。当Hull移动平均线2严格nmc为绿色时,EA应该做多,当Hull移动平均线2严格nmc为红色时,EA应该做空。 extern int HMAPeriod = 35; extern int HMAPrice = 0; // PRICE_CLOSE extern double HMASpeed = 2; [/CODE] [CODE] // Forex TSD Hull Moving Average double hma0 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 0); double hma1 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 1); double hma2 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 2); Buy = (hma0 > hma1 && hma1 > hma2); Sell = (hma0 < hma1 && hma1 < hma2); 提前感谢您的帮助。 tfi_markets 你缺少一个参数(第一个,TimeFrame参数)。将iCustom()的调用改为这样。 iCustom(Symbol(),0, "Hull moving average 2 strict nmc", "", HMAPeriod, HMAPrice,HMASpeed,0,2,0)。 这样就可以正常工作了 tfi_markets 2014.11.07 18:26 #3893 嗨,Mladen。 非常感谢您的帮助! 我已经执行了您的建议,错误已经消失了,这非常好。但不幸的是,EA仍然没有打开交易。如果您能审查一下订单逻辑,我将非常感激,也许我在这里做错了什么? int Extra_Pips=1; extern int HMA_Period=21; extern int HMA_Price=PRICE_CLOSE; //0 extern double HMA_Speed= 2; //+------------------------------------------------------------------+ //| ORDER Logic / Indicators | //+------------------------------------------------------------------+ if(openedOrders<=0) { // Forex TSD Hull Moving Average double hma0 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,0); double hma1 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,1); double hma2 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,2); //+------------------------------------------------------------------+ //| BUY | //+------------------------------------------------------------------+ if(hma0>hma1 && hma1>hma2) { // Wait some pips double pipsExtra1=Extra_Pips*Point; // Get distance from cross signal OpenBuy(); return(0); } //+------------------------------------------------------------------+ //| SELL | //+------------------------------------------------------------------+ if(hma0<hma1 && hma1<hma2) { // Wait some pips double pipsExtra2=Extra_Pips*Point; // Get distance from cross signal OpenSell(); return(0); } } Coding help I will write a Any questions from newcomers madopter 2014.11.07 19:51 #3894 谁能帮助我计算不同货币对的手数,使每个点的利润为10个单位的货币?例如,如果 "ProfitPerPip = 10",那么欧元兑美元的手数将是1.00。 谢谢你。 Mladen Rakic 2014.11.07 21:18 #3895 tfi_markets: 嗨,Mladen。 非常感谢您的帮助!我已经执行了您的建议,错误已经消失,这非常好。但不幸的是,EA仍然没有打开交易。如果您能审查一下订单逻辑,我将非常感激,也许我在这里做错了什么? int Extra_Pips=1; extern int HMA_Period=21; extern int HMA_Price=PRICE_CLOSE; //0 extern double HMA_Speed= 2; //+------------------------------------------------------------------+ //| ORDER Logic / Indicators | //+------------------------------------------------------------------+ if(openedOrders<=0) { // Forex TSD Hull Moving Average double hma0 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price,HMA_Speed,0,2,0); double hma1 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,1); double hma2 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,2); //+------------------------------------------------------------------+ //| BUY | //+------------------------------------------------------------------+ if(hma0>hma1 && hma1>hma2) { // Wait some pips double pipsExtra1=Extra_Pips*Point; // Get distance from cross signal OpenBuy(); return(0); } //+------------------------------------------------------------------+ //| SELL | //+------------------------------------------------------------------+ if(hma0<hma1 && hma1<hma2) { // Wait some pips double pipsExtra2=Extra_Pips*Point; // Get distance from cross signal OpenSell(); return(0); } } tfi_markets 最简单的方法是检查 趋势缓冲区(缓冲区3)。 像这样: double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1); double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2); if (trendc!=trendp) { if (trendc == 1) // code for buy if (trendc == -1) // code for sell } tfi_markets 2014.11.08 10:04 #3896 mladen: tfi_markets最简单的方法是检查趋势缓冲区(缓冲区3)。 像这样: double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1); double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2); if (trendc!=trendp) { if (trendc == 1) // code for buy if (trendc == -1) // code for sell } 嗨,Mladen, 对不起,我不得不再次打扰您,非常感谢您到目前为止的建议。 我已经按以下方法实施了,但不幸的是,它似乎不能正确捕捉趋势变化。 而且在开立买单时,它还会乱跑,请看后面的截图。 打开订单的代码。 if(openedOrders<=0) { // Forex TSD Hull Moving Average double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1); double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2); if(trendc!=trendp) { if(trendc==1) // code for buy OpenBuy(); return(0); } if(trendc==-1) // code for sell { OpenSell(); return(0); } } //+------------------------------------------------------------------+ //| Open Buy | //+------------------------------------------------------------------+ void OpenBuy() { double lbStop = 0; if(lStopLoss>0) lbStop = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)-lStopLoss *pPoint*pipMultiplier,digit); double lbTake = 0; if(lTakeProfit>0) lbTake = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)+lTakeProfit*pPoint*pipMultiplier,digit); if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; } // // // if(!EcnBroker) dummyResult=OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,lbStop,lbTake,ExpertName,MAGIC,0,clOpenBuy); else { int buyTicket= OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenBuy); if(buyTicket>= 0) bool buyOrderMod=OrderModify(buyTicket,OrderOpenPrice(),lbStop,lbTake,0,CLR_NONE); if(buyOrderMod==false) { int ErrorCode = GetLastError(); string ErrDesc = ErrorDescription(ErrorCode); string ErrAlert=StringConcatenate("Modify Buy Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts==true) Alert(ErrAlert); string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",buyTicket," Stop: ",lbStop," Profit: ",lbTake); Print(ErrLog); } } } //+------------------------------------------------------------------+ //| Open Sell | //+------------------------------------------------------------------+ void OpenSell() { double lsStop = 0; if(sStopLoss>0) lsStop = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)+sStopLoss *pPoint*pipMultiplier,digit); double lsTake = 0; if(sTakeProfit>0) lsTake = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)-sTakeProfit*pPoint*pipMultiplier,digit); if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; } //+------------------------------------------------------------------+ //| ECN Broker | //+------------------------------------------------------------------+ if(!EcnBroker) dummyResult=OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,lsStop,lsTake,ExpertName,MAGIC,0,clOpenSell); else { int sellTicket = OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenSell); if(sellTicket >= 0) bool sellOrderMod=OrderModify(sellTicket,OrderOpenPrice(),lsStop,lsTake,0,CLR_NONE); if(sellOrderMod==false) { int ErrorCode = GetLastError(); string ErrDesc = ErrorDescription(ErrorCode); string ErrAlert=StringConcatenate("Modify Sell Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts==true) Alert(ErrAlert); string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",sellTicket," Stop: ",lsStop," Profit: ",lsTake); Print(ErrLog); } } } [/CODE] Code for closing orders: [CODE] void CheckForClose() { RefreshRates(); double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1); double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2); for(int i=0;i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!= MAGIC) continue; if(OrderSymbol() != s_symbol) continue; if(trendc_c!=trendp_c) // Check Trend { if(OrderType()==OP_BUY) { if(trendc_c==1) //is BUY? { bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy); if(buyClose==false) { int ErrorCode = GetLastError(); string ErrDesc = ErrorDescription(ErrorCode); string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts == true) Alert(ErrAlert); string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket()); Print(ErrLog); } } break; } } if(trendc_c!=trendp_c) // Check trend { if(OrderType()==OP_SELL) { if(trendc_c==-1) // is SELL? { bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell); if(sellClose == false) { ErrorCode = GetLastError(); ErrDesc = ErrorDescription(ErrorCode); ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts==true) Alert(ErrAlert); ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket()); Print(ErrLog); } } break; } } } } 谢谢你的建议! 附加的文件: hma-error.jpg 108 kb Coding help 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Limiting one entry per Mladen Rakic 2014.11.08 10:31 #3897 tfi_markets: 你好,姆拉登。对不起,我不得不再次打扰你,非常感谢你到目前为止的建议。 我已经实施了如下措施,但不幸的是,它似乎不能正确捕捉趋势变化。 而且在开立买单时,它还在狂奔,请看所附截图。 打开订单的代码。 if(openedOrders<=0) { // Forex TSD Hull Moving Average double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1); double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2); if(trendc!=trendp) { if(trendc==1) // code for buy OpenBuy(); return(0); } if(trendc==-1) // code for sell { OpenSell(); return(0); } } //+------------------------------------------------------------------+ //| Open Buy | //+------------------------------------------------------------------+ void OpenBuy() { double lbStop = 0; if(lStopLoss>0) lbStop = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)-lStopLoss *pPoint*pipMultiplier,digit); double lbTake = 0; if(lTakeProfit>0) lbTake = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)+lTakeProfit*pPoint*pipMultiplier,digit); if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; } // // // if(!EcnBroker) dummyResult=OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,lbStop,lbTake,ExpertName,MAGIC,0,clOpenBuy); else { int buyTicket= OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenBuy); if(buyTicket>= 0) bool buyOrderMod=OrderModify(buyTicket,OrderOpenPrice(),lbStop,lbTake,0,CLR_NONE); if(buyOrderMod==false) { int ErrorCode = GetLastError(); string ErrDesc = ErrorDescription(ErrorCode); string ErrAlert=StringConcatenate("Modify Buy Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts==true) Alert(ErrAlert); string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",buyTicket," Stop: ",lbStop," Profit: ",lbTake); Print(ErrLog); } } } //+------------------------------------------------------------------+ //| Open Sell | //+------------------------------------------------------------------+ void OpenSell() { double lsStop = 0; if(sStopLoss>0) lsStop = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)+sStopLoss *pPoint*pipMultiplier,digit); double lsTake = 0; if(sTakeProfit>0) lsTake = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)-sTakeProfit*pPoint*pipMultiplier,digit); if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; } //+------------------------------------------------------------------+ //| ECN Broker | //+------------------------------------------------------------------+ if(!EcnBroker) dummyResult=OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,lsStop,lsTake,ExpertName,MAGIC,0,clOpenSell); else { int sellTicket = OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenSell); if(sellTicket >= 0) bool sellOrderMod=OrderModify(sellTicket,OrderOpenPrice(),lsStop,lsTake,0,CLR_NONE); if(sellOrderMod==false) { int ErrorCode = GetLastError(); string ErrDesc = ErrorDescription(ErrorCode); string ErrAlert=StringConcatenate("Modify Sell Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts==true) Alert(ErrAlert); string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",sellTicket," Stop: ",lsStop," Profit: ",lsTake); Print(ErrLog); } } } [/CODE] Code for closing orders: [CODE] void CheckForClose() { RefreshRates(); double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1); double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2); for(int i=0;i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!= MAGIC) continue; if(OrderSymbol() != s_symbol) continue; if(trendc_c!=trendp_c) // Check Trend { if(OrderType()==OP_BUY) { if(trendc_c==1) //is BUY? { bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy); if(buyClose==false) { int ErrorCode = GetLastError(); string ErrDesc = ErrorDescription(ErrorCode); string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts == true) Alert(ErrAlert); string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket()); Print(ErrLog); } } break; } } if(trendc_c!=trendp_c) // Check trend { if(OrderType()==OP_SELL) { if(trendc_c==-1) // is SELL? { bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell); if(sellClose == false) { ErrorCode = GetLastError(); ErrDesc = ErrorDescription(ErrorCode); ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc); if(ShowAlerts==true) Alert(ErrAlert); ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket()); Print(ErrLog); } } break; } } } } 谢谢你的帮助! 一个问题:为什么你在买入信号出现时关闭买单,在卖出信号出现时关闭卖单?这不应该是倒置的吗?我认为这将防止现在的一些事情发生 airquest 2014.11.08 11:40 #3898 关于Mql5的简单问题,我们怎样才能在子窗口的顶部隐藏指标值/标签?在Mql4中,我知道是用 "SetIndexLabel(0,NULL);",但我在mt5中找不到。多谢了。 Mladen Rakic 2014.11.08 12:14 #3899 airquest: 关于Mql5的简单问题,我们怎样才能在子窗口的顶部隐藏指标值/标签?在Mql4中,我知道它是用 "SetIndexLabel(0,NULL);",但我在mt5中找不到。多谢了。 气象 使用:PlotIndexSetInteger(0,PLOT_SHOW_DATA,false); 为之 pking25 2014.11.08 17:24 #3900 嗨,Mladen。 我附上了我在最新一期Metatrader之前使用的一个专家。 现在它不工作了。 你能不能用你的魔杖在它上面挥舞一下,让它重新工作。 如果你能做到,我很乐意让任何人使用它....,它是一个好东西(或者曾经是!)。 附加的文件: manualordermanager_v8.mq4 13 kb manualordermanager_v8.ex4 16 kb 1...383384385386387388389390391392393394395396397...786 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好,MT4编码员。
我想知道是否有人能帮助我。我试图在一个EA中实现"Hull moving average 2 strict nmc " 指标。
我面临的问题是,根据报告日志,该指标被反复加载到MT4中,此外,EA没有打开交易。据我所知,iCustom指标 调用的问题可能是根本原因。
这是我尝试做的事情。
当Hull移动平均线2严格nmc为绿色时,EA应该做多,当Hull移动平均线2严格nmc为红色时,EA应该做空。
extern int HMAPeriod = 35;
extern int HMAPrice = 0; // PRICE_CLOSE
extern double HMASpeed = 2;
[/CODE]
[CODE]
// Forex TSD Hull Moving Average
double hma0 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 0);
double hma1 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 1);
double hma2 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 2);
Buy = (hma0 > hma1 && hma1 > hma2);
Sell = (hma0 < hma1 && hma1 < hma2);
谢谢你的帮助。
你好,MT4编码人员。
我想知道是否有人能帮助我。我试图在一个EA中实施"Hull moving average 2 strict nmc " 指标。
我所面临的问题是,根据报告日志,该指标被反复加载到MT4中,此外,EA没有打开交易。据我所知,iCustom指标调用的问题可能是根本原因。
这是我尝试做的事情。
当Hull移动平均线2严格nmc为绿色时,EA应该做多,当Hull移动平均线2严格nmc为红色时,EA应该做空。
extern int HMAPeriod = 35;
extern int HMAPrice = 0; // PRICE_CLOSE
extern double HMASpeed = 2;
[/CODE]
[CODE]
// Forex TSD Hull Moving Average
double hma0 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 0);
double hma1 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 1);
double hma2 = iCustom(Symbol(), 0, "Hull moving average 2 strict nmc", HMAPeriod, HMAPrice, HMASpeed, 0, 2, 2);
Buy = (hma0 > hma1 && hma1 > hma2);
Sell = (hma0 < hma1 && hma1 < hma2);
tfi_markets
你缺少一个参数(第一个,TimeFrame参数)。将iCustom()的调用改为这样。
iCustom(Symbol(),0, "Hull moving average 2 strict nmc", "", HMAPeriod, HMAPrice,HMASpeed,0,2,0)。
这样就可以正常工作了
嗨,Mladen。
非常感谢您的帮助!
我已经执行了您的建议,错误已经消失了,这非常好。但不幸的是,EA仍然没有打开交易。如果您能审查一下订单逻辑,我将非常感激,也许我在这里做错了什么?
int Extra_Pips=1;
extern int HMA_Period=21;
extern int HMA_Price=PRICE_CLOSE; //0
extern double HMA_Speed= 2;
//+------------------------------------------------------------------+
//| ORDER Logic / Indicators |
//+------------------------------------------------------------------+
if(openedOrders<=0)
{
// Forex TSD Hull Moving Average
double hma0 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,0);
double hma1 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,1);
double hma2 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(hma0>hma1 && hma1>hma2)
{
// Wait some pips
double pipsExtra1=Extra_Pips*Point; // Get distance from cross signal
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(hma0<hma1 && hma1<hma2)
{
// Wait some pips
double pipsExtra2=Extra_Pips*Point; // Get distance from cross signal
OpenSell();
return(0);
}
}
谁能帮助我计算不同货币对的手数,使每个点的利润为10个单位的货币?例如,如果 "ProfitPerPip = 10",那么欧元兑美元的手数将是1.00。
谢谢你。
嗨,Mladen。
非常感谢您的帮助!
我已经执行了您的建议,错误已经消失,这非常好。但不幸的是,EA仍然没有打开交易。如果您能审查一下订单逻辑,我将非常感激,也许我在这里做错了什么?
int Extra_Pips=1;
extern int HMA_Period=21;
extern int HMA_Price=PRICE_CLOSE; //0
extern double HMA_Speed= 2;
//+------------------------------------------------------------------+
//| ORDER Logic / Indicators |
//+------------------------------------------------------------------+
if(openedOrders<=0)
{
// Forex TSD Hull Moving Average
double hma0 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price,HMA_Speed,0,2,0);
double hma1 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,1);
double hma2 = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,2,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(hma0>hma1 && hma1>hma2)
{
// Wait some pips
double pipsExtra1=Extra_Pips*Point; // Get distance from cross signal
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(hma0<hma1 && hma1<hma2)
{
// Wait some pips
double pipsExtra2=Extra_Pips*Point; // Get distance from cross signal
OpenSell();
return(0);
}
}
tfi_markets
最简单的方法是检查 趋势缓冲区(缓冲区3)。
像这样:
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
if (trendc!=trendp)
{
if (trendc == 1) // code for buy
if (trendc == -1) // code for sell
}
tfi_markets
最简单的方法是检查趋势缓冲区(缓冲区3)。
像这样:
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
if (trendc!=trendp)
{
if (trendc == 1) // code for buy
if (trendc == -1) // code for sell
}
嗨,Mladen,
对不起,我不得不再次打扰您,非常感谢您到目前为止的建议。
我已经按以下方法实施了,但不幸的是,它似乎不能正确捕捉趋势变化。
而且在开立买单时,它还会乱跑,请看后面的截图。
打开订单的代码。
if(openedOrders<=0)
{
// Forex TSD Hull Moving Average
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
//+------------------------------------------------------------------+
//| Open Buy |
//+------------------------------------------------------------------+
void OpenBuy()
{
double lbStop = 0; if(lStopLoss>0) lbStop = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)-lStopLoss *pPoint*pipMultiplier,digit);
double lbTake = 0; if(lTakeProfit>0) lbTake = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)+lTakeProfit*pPoint*pipMultiplier,digit);
if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; }
//
//
//
if(!EcnBroker)
dummyResult=OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,lbStop,lbTake,ExpertName,MAGIC,0,clOpenBuy);
else
{
int buyTicket= OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenBuy);
if(buyTicket>= 0)
bool buyOrderMod=OrderModify(buyTicket,OrderOpenPrice(),lbStop,lbTake,0,CLR_NONE);
if(buyOrderMod==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert=StringConcatenate("Modify Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",buyTicket," Stop: ",lbStop," Profit: ",lbTake);
Print(ErrLog);
}
}
}
//+------------------------------------------------------------------+
//| Open Sell |
//+------------------------------------------------------------------+
void OpenSell()
{
double lsStop = 0; if(sStopLoss>0) lsStop = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)+sStopLoss *pPoint*pipMultiplier,digit);
double lsTake = 0; if(sTakeProfit>0) lsTake = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)-sTakeProfit*pPoint*pipMultiplier,digit);
if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; }
//+------------------------------------------------------------------+
//| ECN Broker |
//+------------------------------------------------------------------+
if(!EcnBroker)
dummyResult=OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,lsStop,lsTake,ExpertName,MAGIC,0,clOpenSell);
else
{
int sellTicket = OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenSell);
if(sellTicket >= 0)
bool sellOrderMod=OrderModify(sellTicket,OrderOpenPrice(),lsStop,lsTake,0,CLR_NONE);
if(sellOrderMod==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert=StringConcatenate("Modify Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",sellTicket," Stop: ",lsStop," Profit: ",lsTake);
Print(ErrLog);
}
}
}
[/CODE]
Code for closing orders:
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
if(trendc_c!=trendp_c) // Check Trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==1) //is BUY?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_SELL)
{
if(trendc_c==-1) // is SELL?
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
谢谢你的建议!
你好,姆拉登。
对不起,我不得不再次打扰你,非常感谢你到目前为止的建议。
我已经实施了如下措施,但不幸的是,它似乎不能正确捕捉趋势变化。
而且在开立买单时,它还在狂奔,请看所附截图。
打开订单的代码。
if(openedOrders<=0)
{
// Forex TSD Hull Moving Average
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
//+------------------------------------------------------------------+
//| Open Buy |
//+------------------------------------------------------------------+
void OpenBuy()
{
double lbStop = 0; if(lStopLoss>0) lbStop = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)-lStopLoss *pPoint*pipMultiplier,digit);
double lbTake = 0; if(lTakeProfit>0) lbTake = NormalizeDouble(MarketInfo(s_symbol,MODE_ASK)+lTakeProfit*pPoint*pipMultiplier,digit);
if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; }
//
//
//
if(!EcnBroker)
dummyResult=OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,lbStop,lbTake,ExpertName,MAGIC,0,clOpenBuy);
else
{
int buyTicket= OrderSend(s_symbol,OP_BUY,LotsOptimized(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenBuy);
if(buyTicket>= 0)
bool buyOrderMod=OrderModify(buyTicket,OrderOpenPrice(),lbStop,lbTake,0,CLR_NONE);
if(buyOrderMod==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert=StringConcatenate("Modify Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",buyTicket," Stop: ",lbStop," Profit: ",lbTake);
Print(ErrLog);
}
}
}
//+------------------------------------------------------------------+
//| Open Sell |
//+------------------------------------------------------------------+
void OpenSell()
{
double lsStop = 0; if(sStopLoss>0) lsStop = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)+sStopLoss *pPoint*pipMultiplier,digit);
double lsTake = 0; if(sTakeProfit>0) lsTake = NormalizeDouble(MarketInfo(s_symbol,MODE_BID)-sTakeProfit*pPoint*pipMultiplier,digit);
if(AccountFreeMargin()<(100*Lots)) { Print("We have no money. Free Margin = ",AccountFreeMargin()); return; }
//+------------------------------------------------------------------+
//| ECN Broker |
//+------------------------------------------------------------------+
if(!EcnBroker)
dummyResult=OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,lsStop,lsTake,ExpertName,MAGIC,0,clOpenSell);
else
{
int sellTicket = OrderSend(s_symbol,OP_SELL,LotsOptimized(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,0,0,ExpertName,MAGIC,0,clOpenSell);
if(sellTicket >= 0)
bool sellOrderMod=OrderModify(sellTicket,OrderOpenPrice(),lsStop,lsTake,0,CLR_NONE);
if(sellOrderMod==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert=StringConcatenate("Modify Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Bid: ",MarketInfo(s_symbol,MODE_BID)," Ticket: ",sellTicket," Stop: ",lsStop," Profit: ",lsTake);
Print(ErrLog);
}
}
}
[/CODE]
Code for closing orders:
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
if(trendc_c!=trendp_c) // Check Trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==1) //is BUY?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_SELL)
{
if(trendc_c==-1) // is SELL?
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
谢谢你的帮助!
一个问题:为什么你在买入信号出现时关闭买单,在卖出信号出现时关闭卖单?这不应该是倒置的吗?我认为这将防止现在的一些事情发生
关于Mql5的简单问题,我们怎样才能在子窗口的顶部隐藏指标值/标签?在Mql4中,我知道是用 "SetIndexLabel(0,NULL);",但我在mt5中找不到。多谢了。
关于Mql5的简单问题,我们怎样才能在子窗口的顶部隐藏指标值/标签?在Mql4中,我知道它是用 "SetIndexLabel(0,NULL);",但我在mt5中找不到。多谢了。
气象
使用:PlotIndexSetInteger(0,PLOT_SHOW_DATA,false); 为之
嗨,Mladen。 我附上了我在最新一期Metatrader之前使用的一个专家。 现在它不工作了。
你能不能用你的魔杖在它上面挥舞一下,让它重新工作。 如果你能做到,我很乐意让任何人使用它....,它是一个好东西(或者曾经是!)。