コーディングのヘルプ - ページ 390

 

こんにちは、MT4コーダーです。

どなたか助けていただけないでしょうか。Hull moving average 2 strict nmc " インジケータをEAに実装しようとしています。

私が直面している問題は、レポートログによると、インディケータがMT4に何度もロードされ、さらにEAが取引を開始しないことです。私が知る限り、iCustom indicatorの 呼び出しの問題が根本的な原因である可能性があります。

私が試しているのは、このようなことです。

EAは、ハル移動平均2 strict nmcが緑の時にLONGになり、ハル移動平均2 strict nmcが赤の時にShortになるはずです。

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コーダーです。

どなたか助けて頂けないでしょうか。Hull moving average 2 strict nmc " インジケータをEAに実装しようとしています。

私が直面している問題は、レポートログによると、インディケータがMT4に何度も読み込まれ、さらにEAがトレードを開始しないことです。私が知る限り、iCustom indicatorの呼び出しの問題が根本的な原因である可能性があります。

私が試しているのは、このようなことです。

EAは、Hull moving average 2 strict nmcが緑の時にLONGになり、Hull moving average 2 strict nmcが赤の時にShortになるはずです。

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

パラメータが 1つ足りません(最初のパラメータ、TimeFrameパラメータ)。iCustom()コールを次のように変更します。

iCustom(Symbol(),0, "Hull moving average 2 strict nmc", "", HMAPeriod, HMAPrice,HMASpeed,0,2,0);

とすればOKです。

 

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

}

}

 

どなたか、1pipの利益が10単位の通貨となるような、異なるペアのロットサイズを計算するコードを教えていただけませんか?例えば、"ProfitPerPip = 10 "の場合、EURUSDのロットは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:
こんにちは、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;

}

}

}

}

よろしくお願いします。

質問:なぜ、買いのシグナルが出たら買い注文を決済し、売りのシグナルが出たら売り注文 をするのでしょうか?逆でなくていいのでしょうか?そうすることで、今起こっているいくつかのことを防ぐことができると思います。

 

Mql5の素朴な疑問なのですが、サブウィンドウの上に表示されるインジケータの値やラベルを隠すにはどうしたらいいのでしょうか?mql4では、"SetIndexLabel(0,NULL); "でできることは知っていますが、mt5では見つけることができません。ありがとうございました。

 
airquest:
Mql5の素朴な疑問ですが、サブウィンドウの上に表示されるインジケータの値やラベルを隠すにはどうしたらいいのでしょうか?mql4では、"SetIndexLabel(0,NULL); "とありますが、mt5では見つけられませんでした。ありがとうございました。

エアクエスト

PlotIndexSetInteger(0,PLOT_SHOW_DATA,false); を使用します。

 

Mladenさん、こんにちは。 メタトレーダーの最新号が出る前に使っていたエキスパートを添付します。 今、それは動作しません。

あなたの魔法の杖で、もう一度使えるようにしていただけませんか? もし可能なら、どなたにも使っていただけると嬉しいです。