Sormak! - sayfa 122

 

Merhaba, MQL4 programlamada yeniyim ve bir sorum var. Şu anda bir EA yazıyorum. Bu mum çubuğunun rengini, önceden belirlenmiş kriterlerimi karşıladığında değiştirmek istiyorum. Şamdanın üstünde veya altında bir "Hata" veya "Kontrol" işareti işaretleyebilmesi de iyi olacaktır. Merak ediyorum, mümkün mü? Biri bana yardım edebilir mi? Teşekkürler.

 
Dosyalar:
 

Ekranda Hareketli ortalamayı çizmek için EA ile yardım

Merhaba, MT4'ü nasıl programlayacağımı öğrenmeye çalışıyorum ve ekranda hareketli bir ortalamayı nasıl çizeceğimi çözemiyorum. İstediğim diğer tüm satırları ve şeyleri alabilirim, ancak hareketli ortalama yok.

Biri beni örnek bir koda yönlendirebilir mi?

Yardımlarınız için şimdiden teşekkür ederiz.

 

Hareketli ortalama, Metatrader'da standart göstergedir.

Yani, bu göstergeyi burada bulun

ve tabloya ekleyin.

Bu konuyu da okuyun https://www.mql5.com/en/forum/178706

Dosyalar:
 
newdigital:
Hareketli ortalama, Metatrader'da standart göstergedir.

Yani, bu göstergeyi burada bulun

Bu konuyu da okuyun https://www.mql5.com/en/forum/178706

Hayır, sorumu yanlış anladın. Bir göstergenin nasıl ekleneceğini biliyorum, orada sorun yok. Göstergeyi bir EA içinden çağırmak için koda ihtiyacım var, böylece ea'mı yüklediğimde göstergeyi ekranıma otomatik olarak çizecek.

Umarım bu sefer temizimdir?

 
jwhite1319:
Hayır, sorumu yanlış anladın. Bir göstergenin nasıl ekleneceğini biliyorum, orada sorun yok. Göstergeyi bir EA içinden çağırmak için koda ihtiyacım var, böylece ea'mı yüklediğimde göstergeyi ekranıma otomatik olarak çizecek. Umarım bu sefer temizimdir?

2 MA'yı grafikte çizen bir kod örneği:

ExtCountedBars=IndicatorCounted();

if (ExtCountedBars<0) return(-1);

if (ExtCountedBars>0) ExtCountedBars--;

int pos=Barlar-ExtCountedBars-1;

süre(konum>=0)

{

ExtMapBuffer1[konum] = iMA(Symbol(),0,MAslow_period,MAslow_shift,MAslow_type,MAslow_price,pos);

ExtMapBuffer2[konum] = iMA(Symbol(),0,MAfast_period,MAfast_shift,MAfast_type,MAfast_price,pos);

konum--;

}

Umarım yardımcı olur.

FerruFx

 

Hesap büyüdükçe bu EA artış lotlarını yapmama yardım edebilecek biri olup olmadığını merak ediyordum.. Bu yüzden sabit lotlar yerine bir yüzde kullanacak. Veya hesap her ikiye katlandığında ikiye katlayın.. Şimdiden teşekkürler

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 1.0;

extern int Slippage = 3;

extern bool UseStopLoss = True;

extern int StopLoss = 200;

extern bool UseTakeProfit = False;

extern int TakeProfit = 60;

extern bool UseTrailingStop = True;

extern int TrailingStop = 200;

int BarCount;

int Current;

bool TickCheck = False;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit() {

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

//+------------------------------------------------------------------+

//| Variable Begin |

//+------------------------------------------------------------------+

double Buy1_1 = iClose(NULL, 0, Current + 0);

double Buy1_2 = iOpen(NULL, 0, Current + 3);

double Sell1_1 = iClose(NULL, 0, Current + 0);

double Sell1_2 = iOpen(NULL, 0, Current + 0);

//+------------------------------------------------------------------+

//| Variable End |

//+------------------------------------------------------------------+

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Signal End(Exit Sell) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;

//+------------------------------------------------------------------+

//| Signal End |

//+------------------------------------------------------------------+

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

//+------------------------------------------------------------------+
 

kod ile yardım

2 MA'yı grafikte çizen bir kod örneği:

Umarım yardımcı olur.

Mükemmel. Tam ihtiyacım olan şey. Teşekkürler, FerruFx!

 

araç çubukları kayboluyor.

MT4'ü her kapattığımda araç çubuklarımın neden kaybolduğunu bilen var mı? MT'yi tekrar açtığımda araç çubuklarını gözden geçirmem ve yeniden yüklemem gerekiyor....

 

derleme sorunu

Belki bana yardım edebilirsin.

Bazen yeni bir gösterge derlediğimde, MT4 göstergelerimin çoğunu derlemeye karar veriyor ama hepsini değil. Bu olduğunda göstergelerimden bazıları Gezgin penceresinde GÖRÜNMEZ, bu yüzden onları bir tabloya sürükleyemem. Bunun neden olabileceğine dair bir fikriniz var mı?

"_TRO_" ile başlayan tüm göstergelerimin derlenip Navigator penceresinde görünmesini sağlamak için bazı göstergeleri farklı bir klasöre taşımam gerekiyor. Adın önündeki "_" soruna neden olabilir mi?