Kodlama yardımı - sayfa 390

 

Merhaba MT4 kodlayıcıları,

Birinin bana yardım edip edemeyeceğini merak ediyorum. Bir EA'ya "Gövde hareketli ortalama 2 katı nmc" göstergesini uygulamaya çalışıyorum.

Karşılaştığım sorun, Göstergenin rapor günlüğüne göre MT4'e tekrar tekrar yüklenmesi, ayrıca EA'nın bir ticaret açmamasıdır. Bildiğim kadarıyla iCustom gösterge çağrısıyla ilgili bir sorun temel neden olabilir.

Yapmaya çalıştığım şey bu:

EA, Hull hareketli ortalama 2 katı nmc yeşil olduğunda ve Hull hareketli ortalama 2 katı nmc kırmızı olduğunda kısa olduğunda UZUN gitmelidir.

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

Yardımınız için şimdiden teşekkür ederim.

 
tfi_markets:
Merhaba MT4 kodlayıcıları,

Birinin bana yardım edip edemeyeceğini merak ediyorum. Bir EA'ya "Gövde hareketli ortalama 2 katı nmc" göstergesini uygulamaya çalışıyorum.

Karşılaştığım sorun, Göstergenin rapor günlüğüne göre MT4'e tekrar tekrar yüklenmesi, ayrıca EA'nın bir ticaret açmamasıdır. Bildiğim kadarıyla iCustom gösterge çağrısıyla ilgili bir sorun temel neden olabilir.

Yapmaya çalıştığım şey bu:

EA, Hull hareketli ortalama 2 katı nmc yeşil olduğunda ve Hull hareketli ortalama 2 katı nmc kırmızı olduğunda UZUN gitmelidir.

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

Yardımınız için şimdiden teşekkür ederim.

tfi_markets

Bir parametreyi kaçırıyorsunuz (birincisi, TimeFrame parametresi). iCustom() çağrısını şu şekilde değiştirin:

iCustom(Symbol(),0,"Gövde hareketli ortalama 2 katı nmc", "", HMAPeriod, HMAPrice,HMASpeed,0,2,0);

ve tamam çalışacak

 

Merhaba Mladen,

yardımın için çok teşekkürler!

Önerinizi uyguladım, hata gitti, bu çok iyi. Ancak EA ne yazık ki hala bir ticaret açmıyor. Sıralama mantığını gözden geçirirseniz sevinirim, acaba burada yanlış bir şey mi yapıyorum?

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

}

}

 

Biri bana, her pip karı 10 birim para birimi olacak şekilde farklı çiftler için lot büyüklüğü hesaplama kodu konusunda yardımcı olabilir mi? Örneğin, "ProfitPerPip = 10" ise EURUSD için lot 1.00 olacaktır.

Teşekkür ederim.

 
tfi_markets:
Merhaba Mladen,

yardımın için çok teşekkürler!

Önerinizi uyguladım, hata gitti, bu çok iyi. Ancak EA ne yazık ki hala bir ticaret açmıyor. Sıralama mantığını gözden geçirirseniz sevinirim, acaba burada yanlış bir şey mi yapıyorum?

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

En basit yol, trend arabelleğini (tampon 3) kontrol etmektir.

Bunun gibi bir şey:

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

En basit yol, trend arabelleğini (tampon 3) kontrol etmektir.

Bunun gibi bir şey:

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

}

Merhaba Mladen,

kusura bakmayın sizi tekrar rahatsız edeceğim şimdiden önerileriniz için çok teşekkür ederim

Ben şu şekilde uyguladım ama ne yazık ki trend değişimini tam olarak yakalayamamış görünüyor,

ve satın alma siparişlerini açarken çılgınca çalışıyor, lütfen ekteki ekran görüntüsüne bakın.

Açılış emirleri için kod:

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;

}

}

}

}

Şimdiden teşekkür ederim!

Dosyalar:
hma-error.jpg  108 kb
 
tfi_markets:
Merhaba Mladen,

kusura bakmayın sizi tekrar rahatsız edeceğim şimdiden önerileriniz için çok teşekkür ederim

Ben şu şekilde uyguladım ama ne yazık ki trend değişimini tam olarak yakalayamamış görünüyor,

ve satın alma siparişlerini açarken çılgınca çalışıyor, lütfen ekteki ekran görüntüsüne bakın.

Açılış emirleri için kod:

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;

}

}

}

}

Şimdiden teşekkür ederim!

Bir soru : neden alış sinyali geldiğinde alış emirlerini kapatıyor ve satış sinyali geldiğinde sat emirlerini neden kapatıyorsunuz? Bunun tersine çevrilmesi gerekmez mi? Ve şimdi bazı şeylerin olmasını engelleyeceğini düşünüyorum

 

Mql5 hakkında basit bir soru, alt pencerenin üstündeki gösterge değerlerini/etiketlerini nasıl gizleyebiliriz? mql4'te "SetIndexLabel(0,NULL);" ile olduğunu biliyorum, ancak mt5 için bulamıyorum. Çok teşekkürler.

 
airquest:
Mql5 hakkında basit bir soru, alt pencerenin üstündeki gösterge değerlerini/etiketlerini nasıl gizleyebiliriz? mql4'te "SetIndexLabel(0,NULL);" ile olduğunu biliyorum, ancak mt5 için bulamıyorum. Çok teşekkürler.

hava görevi

Kullanın: PlotIndexSetInteger(0,PLOT_SHOW_DATA,false); bunun için

 

Merhaba Mladen. Metatrader'ın son sayısından önce kullandığım bir uzmanı ekledim. Şimdi çalışmıyor.

Sihirli değneğinizi onun üzerine örebilir ve tekrar çalışmasını sağlayabilirsiniz. Yapabilirseniz, herkesin kullanması beni mutlu eder .... bu iyi bir şey (Ya da öyleydi!)

Neden: