ASAR

 

Ich bin fertig damit, Leute für die Erstellung meiner EAs zu bezahlen. Es ist endlich Zeit, dass ich das selbst mache.

Ich würde gerne eine Vorlage erstellen, auf der ich weiter aufbauen kann, die ASAR (ATR Stop And Reverse) heißt, aber ich weiß nicht, wie ich anfangen soll, da dies mein erster EA sein wird. Da es sich bei der unveränderten Vorlage nur um einen ATR-Trailing-Stop (und Reverse) mit ATR-Lot-Sizing handeln würde, würde er die ganze Woche über vom Marktbeginn bis zum Marktschluss nonstop laufen. Das Eröffnungssignal bei Markteröffnung würde also einfach in der Richtung des vorherigen Balkens (der zufällig der letzte Balken des vorherigen Marktschlusses wäre) eröffnet werden. Da dies nur einmal zu Beginn der Woche geschehen würde, wäre dafür ein Skript erforderlich?

Wie kann ich herausfinden, wie ich das codieren kann?

Ich habe Beispiele gesehen, die einen durch den Kodierungsprozess führen, aber das Problem mit solchen Beispielen ist, dass sie einem nicht wirklich zeigen, wie man Dinge herausfindet, die nicht präsentiert werden. Im MQL4-Buch von MetaQuotes werden beispielsweise die Grundlagen gut erklärt und mit konkreten Beispielen unterlegt, aber ich kann mich nicht erinnern, dass ich bei all dem, was ich gelesen habe, auf Informationen gestoßen wäre, die es mir ermöglichen würden, die Codierung des ursprünglichen Handelssignals, das ich für die Vorlage gewählt habe, zu verstehen.

 
ASAR:

Wie kann ich herausfinden, wie man das programmiert?

Es klingt so, als hätten Sie erkannt, dass das Programmieren der einfache Teil ist ... man kann Ihnen beibringen, wie man programmiert, welche Variablentypen es gibt, wie die Codesyntax lautet ... aber wonach Sie hier fragen, ist das Lösen von Problemen. Das ist viel schwieriger zu lehren...

Der beste Rat, den ich Ihnen geben kann, ist, aufzuschreiben, was Sie tun wollen ... dann schreiben Sie auf, wie Sie es tun würden, wenn Sie manuell handeln würden ... dann erweitern Sie dies Schritt für Schritt, als ob Sie einem völligen Neuling in MT4 zeigen würden ... dann werden Sie etwas haben, das Sie codieren können.

 
RaptorUK:

Es klingt, als hätten Sie erkannt, dass das Programmieren der einfache Teil ist ... man kann Ihnen beibringen, wie man programmiert, welche Variablentypen es gibt, wie die Codesyntax lautet ... aber worum Sie hier bitten, ist das Lösen von Problemen. Das ist viel schwieriger zu lehren...

Der beste Rat, den ich Ihnen geben kann, ist, aufzuschreiben, was Sie tun wollen ... dann schreiben Sie auf, wie Sie es tun würden, wenn Sie manuell handeln würden ... dann erweitern Sie dies Schritt für Schritt, als ob Sie einem völligen Neuling MT4 zeigen würden ... dann werden Sie etwas haben, das Sie codieren können.


Okay, das werde ich tun.

Vielen Dank für Ihren Rat. Das wird sicherlich ein Abenteuer.

 

Okay, ich habe das Problem des Öffnens in Richtung des vorherigen Balkens gelöst mit

(Bar 1 Close > Bar 1 Open; OP_BUY)

(Bar 1 Close < Bar 1 Open; OP_SELL)

Jetzt frage ich mich, ob es einen Code für die Eröffnung einer Order nach dem Schließen einer vorherigen Order gibt?

 
ASAR:

Okay, ich habe das Problem des Öffnens in Richtung des vorherigen Balkens gelöst mit

(Bar 1 Close > Bar 1 Open; OP_BUY)

(Bar 1 Close < Bar 1 Open; OP_SELL)

Jetzt frage ich mich, ob es einen Code für die Eröffnung einer Order nach dem Schließen einer vorherigen Order gibt?


Das kann nicht die Art sein, wie Sie es in mq4 schreiben

Sie brauchen sich nicht zu fragen, ob es einen Code für die Eröffnung eines Auftrags nach dem Schließen eines vorherigen Auftrags gibt.

Sie müssen nur wissen, wie man es macht...

Sie müssen in Ihrer Orderhistorie den letzten abgeschlossenen Handel Ihres EAs finden und dann dessen Orderopenprice, Ordercloseprice und Ordertype überprüfen.

 

Ich danke Ihnen.

Ich brauchte nur einen Anhaltspunkt, um mich in die richtige Richtung zu orientieren, und die Informationen, die Sie mir gegeben haben, werden das wahrscheinlich tun.

 

Okay, das ist der Code, den ich auf der Expert Advisor Builder Website für die Eröffnung des ersten Handels generiert habe.

//+------------------------------------------------------------------+
//| 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? 
 
ASAR:

Okay, das ist der Code, den ich auf der Expert Advisor Builder Website für die Eröffnung des ersten Handels generiert habe.

Oh je ... lesen Sie diesen Beitrag und den Rest des Threads:https://www.mql5.com/en/forum/139608
 
ASAR:

Und dies ist eine Schleife, die mir vorgeschlagen wurde, die ich gerne hinzufügen würde, aber ich weiß nicht, wo ich sie anwenden soll.

Was bewirkt dieser Code? Was ist InstanceID? Was werden Sie mit lastClosedDirection tun?
 
Wenn Sie den Code von Expert Advisor Builder verwenden möchten, schlage ich vor, dass Sie in deren Forum Hilfe suchen: http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/forum/viewforum.php?f=4
 
ASAR:

Okay, dies ist der Code, den ich auf der Expert Advisor Builder-Website für die Eröffnung des ersten Handels generiert habe.

Als ich an der Universität war, bestand unsere erste Vorlesung über Computer darin, dass der Dozent "Hallo" sagte. Dann sagte er: "Kaufen Sie das Buch und fangen Sie an", und: "Wenn Sie Probleme haben, können Sie sich an die Studenten wenden, die nach dem Abschluss des Studiums studieren" - und die sind verpflichtet, bei diesen Übungen zu helfen. Man neigt nicht dazu, das Rechnen zu lehren, sondern man lässt den Menschen lernen. Eines der ersten Programme in dem Buch, das die Programmiersprache C definiert, besteht darin, "HELLO WORLD" auf den Bildschirm zu schreiben. Es gibt einen Grund, warum man Ihnen nicht ein 1000-zeiliges Programm gibt und Ihnen sagt, Sie sollen es ändern!

Dieser so genannte Expert Adviser Builder ist eine Belastung für jeden, der ernsthaft EAs erstellen und mit ihnen Geld verdienen möchte. Sie müssen in der Lage sein, sich jede Codezeile in Ihrem EA anzusehen und zu wissen, was er tut und warum. Ich würde nicht den Code eines anderen verwenden. Schauen Sie sich an, was sie tun, und machen Sie etwas Ähnliches, aber schreiben Sie jede Zeile selbst - wenn es Ihnen ernst ist.

Und der EA-Builder-Code ist IMHO kein guter Code.

Grund der Beschwerde: