Bunu nasıl kodlayacağımı nasıl çözebilirim?
Kodlamanın işin kolay kısmı olduğunu anlamış gibisiniz. . . nasıl kod yazılacağı, değişken türlerinin ne olduğu, kod sözdiziminin ne olduğu öğretilebilir. . . ama burada sorduğun şey problem çözmek. Bunu öğretmek çok daha zor. . .
Sana verebileceğim en iyi tavsiye, ne yapmak istediğini yazmak. . . daha sonra manuel ticaret olsaydı nasıl yapacağınızı yazın. . . daha sonra MT4'te tam bir acemi gösteriyormuşsunuz gibi bu adımı adım adım genişletin. . . o zaman kodlayabileceğiniz bir şeye sahip olacaksınız.
Kodlamanın işin kolay kısmı olduğunu anlamış gibisiniz. . . nasıl kod yazılacağı, değişken türlerinin ne olduğu, kod sözdiziminin ne olduğu öğretilebilir. . . ama burada sorduğun şey problem çözmek. Bunu öğretmek çok daha zor. . .
Sana verebileceğim en iyi tavsiye, ne yapmak istediğini yazmak. . . daha sonra manuel ticaret olsaydı nasıl yapacağınızı yazın. . . daha sonra MT4'te tam bir acemi gösteriyormuşsunuz gibi bu adımı adım adım genişletin. . . o zaman kodlayabileceğiniz bir şeye sahip olacaksınız.
Tamam, bunu yapacağım.
Tavsiyeniz için teşekkürler. Bu kesinlikle bir macera olacak.
Tamam önceki bar yönünde açma sorununu şu şekilde çözdüm
(Çubuk 1 Kapat > Çubuk 1 Açık; OP_BUY)
(Çubuk 1 Kapat < Çubuk 1 Açık; OP_SELL)
Şimdi merak ediyorum, önceki bir siparişin kapanışında bir siparişin açılması için bir kod var mı?
Tamam önceki bar yönünde açma sorununu şu şekilde çözdüm
(Çubuk 1 Kapat > Çubuk 1 Açık; OP_BUY)
(Çubuk 1 Kapat < Çubuk 1 Açık; OP_SELL)
Şimdi merak ediyorum, önceki bir siparişin kapanışında bir siparişin açılması için bir kod var mı?
Bunu mq4'te yazma şeklin bu olamaz.
önceki bir siparişin kapanışında bir siparişin açılması için bir kod olup olmadığını merak etmenize gerek yok
sadece nasıl yapacağınızı bilmeniz yeterli...
EA'nızın son kapatılan ticaretini sipariş geçmişinizde bulmanız ve ardından onun orderopenprice ve ordercloseprice ve ordertype öğelerine bakmanız gerekir.
Teşekkür ederim.
Beni doğru yöne yönlendirmek için bir tür ipucuna ihtiyacım vardı ve verdiğiniz bilgiler muhtemelen bunu benim için yapacak.
Tamam, bu, ilk ticareti açmak için Expert Advisor Builder sitesinde oluşturduğum kod.
//+------------------------------------------------------------------+ //| This MQL is generated by Expert Advisor Builder | //| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ | //| | //| In no event will author be liable for any damages whatsoever. | //| Use at your own risk. | //| | //+------------------- DO NOT REMOVE THIS HEADER --------------------+
#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 = 0.01; extern int Slippage = 3; extern bool UseStopLoss = False; extern int StopLoss = 30; extern bool UseTakeProfit = False; extern int TakeProfit = 60; extern bool UseTrailingStop = True; extern int TrailingStop = 30;
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 + 1); double Buy1_2 = iOpen(NULL, 0, Current + 1);
double Sell1_1 = iClose(NULL, 0, Current + 1); double Sell1_2 = iOpen(NULL, 0, Current + 1);
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+ And this is a loop that's been suggested to me that I'd like to add but am unsure of where to apply it. for(int i=0;i < OrdersHistoryTotal() ;i++) { OrderSelect(i, SELECT_BY_POS) if (OrderMagicNumber() == InstanceID) lastClosedDirection = OrderType() ; } Can anyone tell me where this should be applied?
Tamam, bu, ilk ticareti açmak için Expert Advisor Builder sitesinde oluşturduğum kod.
Ve bu bana önerilen, eklemek istediğim ama nereye uygulayacağımdan emin olamadığım bir döngü.
Tamam, bu, ilk ticareti açmak için Expert Advisor Builder sitesinde oluşturduğum kod.
Üniversitedeyken bilgisayarla ilgili ilk dersimiz öğretim görevlisinin merhaba demesiydi. Sonra "Kitabı al ve devam et" dedi. "Eğer bir sorununuz varsa, laboratuar seansları olacak ve bu laboratuar seanslarında yardım etmesi gereken lisansüstü öğrencilere sorabilirsiniz". Bilgisayar öğretme eğiliminde değilsiniz; kişinin öğrenmesine izin verirsiniz. Kitapta C programlama dilini tanımlayan ilk programlardan biri ekrana "HELLO WORLD" yazmaktır. Size 1000 satırlık bir program verilmemesinin ve üzerinde değişiklik yapmanızın söylenmesinin bir nedeni var!
Bu sözde Uzman Danışman Oluşturucu, EA'lar yapma ve bunları para karşılığında takas etme konusunda ciddi olan herkes için bir sorumluluktur. EA'nızdaki herhangi bir kod satırına bakabilmeniz ve ne yaptığını ve nedenini bilmeniz gerekir. Başkasının kodunu kullanmam. Bakın ve ne yaptıklarına bakın ve elbette benzer bir şey yapın, ancak her satırı kendiniz yazın - eğer bu konuda ciddiyseniz.
Ve EA oluşturucu kodu iyi bir kod IMHO değil.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
İnsanlara EA'larımı oluşturmaları için ödeme yapmayı bitirdim. Sonunda bunu kendim yapmamın zamanı geldi.
ASAR (ATR Durdur ve Geri Al) adında daha fazla geliştirebileceğim bir şablon oluşturmak istiyorum, ancak bu benim ilk EA'm olacağı için nasıl başlayacağımdan emin değilim. Değiştirilmemiş şablon yalnızca ATR lot boyutlandırmasıyla bir ATR takip durağı (ve tersi) olacağından, pazar açılışından pazar kapanışına kadar hafta boyunca kesintisiz olarak çalışacaktır. Bu nedenle, piyasa açılışında açılış ticareti sinyali, basitçe önceki çubuk yönünde açılma olacaktır (bu, önceki piyasa kapanışının son çubuğu olacaktır). Bu, haftanın başında yalnızca bir kez olacağından, bu bir senaryo gerektirir mi?
Bunu nasıl kodlayacağımı nasıl çözebilirim?
Bir kişiyi kodlama sürecinden geçiren örnekler gördüm, ancak bu tür örneklerle ilgili sorun, bir kişiye sunulmayan şeyleri nasıl çözeceğini gerçekten göstermemeleridir. Örneğin, MetaQuotes'un MQL4 kitabı, belirli örnekler eşliğinde temelleri açıklamakta iyidir, ancak okuduğum her şeyde, ilkinin kodlamasını anlamamı sağlayacak bilgilere rastladığımı hatırlamıyorum. şablon için seçtiğim ticaret sinyali.