编码帮助 - 页 390

 

你好,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:
你好,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。

谢谢你。

 
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

}

 
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
 
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;

}

}

}

}

谢谢你的帮助!

一个问题:为什么你在买入信号出现时关闭买单,在卖出信号出现时关闭卖单?这不应该是倒置的吗?我认为这将防止现在的一些事情发生

 

关于Mql5的简单问题,我们怎样才能在子窗口的顶部隐藏指标值/标签?在Mql4中,我知道是用 "SetIndexLabel(0,NULL);",但我在mt5中找不到。多谢了。

 
airquest:
关于Mql5的简单问题,我们怎样才能在子窗口的顶部隐藏指标值/标签?在Mql4中,我知道它是用 "SetIndexLabel(0,NULL);",但我在mt5中找不到。多谢了。

气象

使用:PlotIndexSetInteger(0,PLOT_SHOW_DATA,false); 为之

 

嗨,Mladen。 我附上了我在最新一期Metatrader之前使用的一个专家。 现在它不工作了。

你能不能用你的魔杖在它上面挥舞一下,让它重新工作。 如果你能做到,我很乐意让任何人使用它....,它是一个好东西(或者曾经是!)。

附加的文件: