HILFE :bei EA Start in der OnInit Funktion nach offenen Orders suchen (anhand von der Magic Nummer). Wenn welche gefunden werden, dann kann der EA darauf reagieren und demendsprechen weiterarbeiten.

 
#property strict
#include <Arrays/ArrayInt.mqh>

input double Lots = 0.01;
input int GridPoints = 300;

input int TpPoints = 400; //TP Punkte
input int SlPoints = 0; //SL Punkte

input string Commentary = ""; //Kommentar
input int Magic = 1; //Magic Nummer

CArrayInt ticketsBuy;
CArrayInt ticketsSell;

double totalLotsBuy = 0;
double totalLotsSell = 0;

int OnInit() {

    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){

}

void OnTick(){

     if(ticketsBuy.Total() == 0){
         executeBuy();
      }else if(OrderSelect(ticketsBuy.At(ticketsBuy.Total()-1) ,SELECT_BY_TICKET)){
           if(OrderCloseTime() > 0) ticketsBuy.Delete(ticketsBuy.Total()-1);
           else if(Bid < OrderOpenPrice() - GridPoints * _Point){
                executeBuy();
                double bePrice = calcBePrice(ticketsBuy);
                double tp = 0;
                switch(ticketsBuy.Total()){
                            case 2: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots); break;
                            case 3: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 2; break;
                            case 4: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 4; break;
                            default: tp = bePrice;
                 }
                 adjustTargetAndStop(ticketsBuy,tp);
           }
  }

  if(ticketsSell.Total() == 0){
        executeSell();
  }else if(OrderSelect(ticketsSell.At(ticketsSell.Total()-1),SELECT_BY_TICKET)){
 

Hallo und herzlich Willkommen, aber bitte:

  1. Code immer mit dem Code-Knopf der Editierzeile (oder Alt+S) verwenden.
  2. Da es fast nichts gibt, was nicht schon für MT4/MT5 programmiert wurde, spart eine Suche (oben links die Lupe) viiiiiel Zeit.
  3. Bei einem EA wird OnInit() nur einmal beim Start ausgeführt, dann OnTick() bei jeden neuen Tick. Wenn das (einmal) das Ziel ist würde auch ein Skript reichen.
  4. Wenn es nur um Info geht, also kein Handel, dann ginge auch ein Indikator.
  5. Lies mal:
    https://www.mql5.com/de/articles/648 Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
    https://www.mql5.com/de/articles/650 Das MQL5-Kochbuch: Entwicklung eines mehrwährungsfähigen Expert Advisors mit unbegrenzter Anzahl von Parametern
    https://www.mql5.com/de/articles/651 Das MQL5-Kochbuch: Schreiben der Historie von Abschlüssen in eine Datei und Erstellen von Bilanzdiagrammen für jedes Symbol in Excel
    https://www.mql5.com/de/articles/211: Orders, Positions und Abschlüsse in MetaTrader 5
    https://www.mql5.com/de/articles/7981: Schnelle Werkzeuge für den manuellen Handel: Arbeiten mit offenen Positionen und Pending-Orders
  6. Such in der CodeBase unter: https://www.mql5.com/en/search#!keyword=open%20positions%20and%20pending&module=mql5_module_codebase

Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
  • www.mql5.com
In diesem Beitrag wird die Umsetzung einer einfachen Herangehensweise an einen mehrwährungsfähigen Expert Advisor beschrieben. Das heißt, Sie werden in der Lage sein, den Expert Advisor für das Testen/den Handel unter identischen Bedingungen aber mit unterschiedlichen Parametern je Symbol einzurichten. Als Beispiel erstellen wir ein Muster für zwei Symbole auf eine Weise, mit der Sie nach Bedarf zusätzliche Symbole hinzufügen können, indem Sie kleine Änderungen am Code vornehmen.
 
schnuky:
#property strict
#include <Arrays/ArrayInt.mqh>

input double Lots = 0.01;
input int GridPoints = 300;

input int TpPoints = 400; //TP Punkte
input int SlPoints = 0; //SL Punkte

input string Commentary = ""; //Kommentar
input int Magic = 1; //Magic Nummer

CArrayInt ticketsBuy;
CArrayInt ticketsSell;

double totalLotsBuy = 0;
double totalLotsSell = 0;

int OnInit() {

    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){

}

void OnTick(){

     if(ticketsBuy.Total() == 0){
         executeBuy();
      }else if(OrderSelect(ticketsBuy.At(ticketsBuy.Total()-1) ,SELECT_BY_TICKET)){
           if(OrderCloseTime() > 0) ticketsBuy.Delete(ticketsBuy.Total()-1);
           else if(Bid < OrderOpenPrice() - GridPoints * _Point){
                executeBuy();
                double bePrice = calcBePrice(ticketsBuy);
                double tp = 0;
                switch(ticketsBuy.Total()){
                            case 2: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots); break;
                            case 3: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 2; break;
                            case 4: tp = bePrice + TpPoints * _Point / (totalLotsBuy / Lots) / 4; break;
                            default: tp = bePrice;
                 }
                 adjustTargetAndStop(ticketsBuy,tp);
           }
  }

  if(ticketsSell.Total() == 0){
        executeSell();
  }else if(OrderSelect(ticketsSell.At(ticketsSell.Total()-1),SELECT_BY_TICKET)){

   Hallo,

   in der OnInit Funktion können die Orders nicht gesucht werden! OnInit Funktion wird nur bei EA Start einmal aufgerufen.

   Nur in OnTick Funktion dürfen die Orders selectiert werden.


 Gruß Igor.

 
Und wo ist das problem? Kannst du mal beschreiben was nicht geht?
 
amando:
Und wo ist das problem? Kannst du mal beschreiben was nicht geht?

   Hallo,

   executeBuy();  und   executeSell(); müssen deklariert werden.


Gruß Igor

Grund der Beschwerde: