Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1953

 

Guten Tag.

Angesichts des mangelnden Verständnisses dafür, wie ".Search()" in der Standardbibliothek.

Ich verwende die Standardklasse - CiTime() - Die Klasse ist eine Klasse für den Zugriff auf die Zeitreihe der Balkeneröffnung.

int OnInit()
  {
//..
 TimeFrac=new CiTime();
   if(CheckPointer(TimeFrac)==POINTER_INVALID || !TimeFrac.Create(symbol_Name,TimeFr_Frac_D1))
      return INIT_FAILED;
   TimeFrac.Refresh();  
   TimeFrac.Sort();
//..

Wenn ich versuche, das gewünschte Datum zu finden (die Klasse ist dieselbe, aber der Zeitraum ist anders)

 int k = TimeFrac.Search(  Time.GetData(i)    );

Es wird ein Fehler gemacht:

'GetData' - Parameterumwandlung nicht erlaubt.

Versucht zu ersetzen

Time.GetData(i)

zu

datetime Time_GetData  =  Time.GetData(i);

Funktioniert nicht...

Ich habe auf die Hilfe verwiesen. Es heißt dort

int  Search( 
   CObject*  element      // образец 
   ) const

Und ein Beispiel für eine wilde Bewerbung.

Es stellt sich heraus, dass die Suche nach einem "Datum" in einer Standardklasse durch ein bekanntes "Datum" aus derselben Klasse nicht möglich ist!?!?

Nur ein Klassenelement.

CObject

Ich konnte kein funktionierendes Beispiel dafür finden, wie man nach einem Datum in dieser Klasse sucht.

An wen kann ich mich wenden, wenn ich Hilfe benötige???

Ich danke Ihnen.

 
Hallo zusammen, bitte sagt mir, was los ist, es funktioniert aus irgendeinem Grund nicht.
double Minus_profit(){
time=TimeCurrent();
 for (int i=0; i<OrdersHistoryTotal(); i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
       if (OrderSymbol() == Symbol() && OrderMagicNumber()==Magic){
        if (OrderType() == OP_BUY || OrderType() ==OP_SELL){
         if (OrderCloseTime()>=time){
          if (OrderProfit()+OrderSwap()+OrderCommission()<=0){
              time=OrderCloseTime();
              profit+=OrderProfit();swap+=OrderSwap(); ;comis+=OrderCommission();
              result=profit+swap+comis;   
   }}}}}}return(result);
}
 
Alexander Avksentyev #:
Hallo zusammen, bitte sagt mir, was los ist, es funktioniert aus irgendeinem Grund nicht.
double Minus_profit(){
time=TimeCurrent();   // это текущее время
 for (int i=0; i<OrdersHistoryTotal(); i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
       if (OrderSymbol() == Symbol() && OrderMagicNumber()==Magic){
        if (OrderType() == OP_BUY || OrderType() ==OP_SELL){
         if (OrderCloseTime()>=time){                  // условие не выполнимо, что бы время закрытия ордера в истории
          if (OrderProfit()+OrderSwap()+OrderCommission()<=0){     // было больше/позже чем текущее
              time=OrderCloseTime();
              profit+=OrderProfit();swap+=OrderSwap(); ;comis+=OrderCommission();
              result=profit+swap+comis;   
   }}}}}}return(result);
}
 

Frage. Für 4k.

doubleMarketInfo(

)

MODE_LOTSIZE

15

Kontraktgröße in der Basiswährung des Instruments

Verstehe ich das richtig, ist dies der Wert von 1 (einem) Lot? und geteilt durch den Leverage, der Wert des Lots einschließlich des Leverage in der ersten Währung des Instruments

MODE_MARGINREQUIRED

32

Höhe der freien Mittel, die benötigt werden, um 1 Los zum Kauf zu eröffnen

Gibt es ein Analogon zu dem letzten in 5, falls ja, habe ich es nicht gefunden.

MarginFree-Fonds sind eindeutig. Wenn wir sie durch den Wert eines Lots teilen, erhalten wir, wie viele Lots wir ohne Hebelwirkung eröffnen können, und multipliziert mit der Hebelwirkung, wie viele mit Hebelwirkung. Ist das richtig oder nicht?

Zy. Ist dies korrekt für eine 5

double   Free   =AccountInfoDouble(ACCOUNT_MARGIN_FREE);                 // Свободн средства
double   One_Lot=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_CONTRACT_SIZE);// Стоимость 1 лота без плеча
double   Step   =SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);       // Шаг изменен размера
long     Laverage=AccountInfoInteger(ACCOUNT_LEVERAGE); // Плечо
double   One_Lot_Lav=ND((One_Lot/Laverage)*Ask);      // Стоимость лота с плечом для бай
Lts=MathFloor(Free*Prots/One_Lot_Lav/Step)*Step;// Для открытия
 

Hallo,

ich bin noch relativ neu in der Programmierung von MQL4/5 und hoffe ihr könnt mir helfen meine Kenntnisse schnell zu verbessern. Programmierkenntnisse habe ich, allerdings bin ich nicht wirklich gut.

Ich nutze die Funktion icustom um auf Berechnungen eines Indikators (geschützt, kein Code zugriff) zuzugreifen und dann dort weitere Berechnungen durchzuführen/ Alerts.

Ich möchte nun folgende Aufgabe durchführen:

Speichere den Wert in einer Variable und gebe diese im Fenster meine Indikators auf dem Screen aus.

  • Ich vermute das ich ein Object erzeugen muss und dann dort die Variable drin ausgebe?
  • Als Schritt 1 will ich einfach dort den aktuellen Wert der Variable ausgeben, welcher sich minuten-weise ändert
  • Einfach nur um zu sehen, dass ich meine Werte richtig ausgeben kann

Schritt 2 wäre die Werte zu speichern in einem Array (das ist der Buffer?)

  • Ich möchte die sich minutenweise änderten Werte in einem Array speichern, sodass ich zum Beispiele sehen kann ob der Chart nach unten oder nach oben geht. Ich würde dann eben die Werte vergleichen und sehen ob die Zahlen größer werden oder kleiner werden...


Danke euch vielmals.

Svenja

 

 Ich möchte gerne diese hellblauen und pinken Mini-Barriers erzeugen und an meinen Chart plotten.

 Es sind jeweils die Last Low 1 & 2, Last High 1& 2 werte.

 Jeweils die letzten 2 Werte Current & Previous!

 Da ich die Werte leider nicht direkt aus dem geschützten Indikator rausholen kann, muss ich sie wohl leider nun selbst berechnen, in die entsprechenden Variablen speichern und an meinen Graf plotten.

Würde mich hier über Hilfe freuen.

Vielen Dank.

Svenja

Dateien:
example.jpg  5 kb
 

Also:

  1. MT4 und MT5 sind nicht gleich und Programme lassen sich nicht übertragen - hier bist Du im MT4 Thread!
  2. Es gibt Skripts, die laufen nur einmal durch, Indikatoren die Puffer anbieten, die auf dem Chart gezeichnet werden und Expert Advisors (EA), die handel können/dürfen
  3. Programmnieren kann und wird Dir hier niemand beibringen, für ein eigenes Projekt gibt es, wie es W. Roeder so schön zusammenfasst 4 Optionen: suchen, lernen, bitten oder zahlen: https://www.mql5.com/en/forum/429880#comment_41310126.
  4. In der Menüzeile eines Posts gibt es Sprachkürzel mit denen man sich einen Beitrag übersetzen lassen kann!
  5. Bedenke, es gibt fast nichts, was nicht schon für MT4/MT5 programmiert wurde => Lerne zu suchen, oben rechts die Lupe oder hier: https://www.mql5.com/de/search
  6. Hier noch ein Link für Anfänger und Neulinge: https://www.mql5.com/en/forum/212020#comment_5504054
    (Übrigens bei Artikeln kriegt man die deutsche Übersetzung, wenn man in der Url de einträgt: Eng: https://www.mql5.com/en/articles/496 => Deu: https://www.mql5.com/de/articles/496 // Quickstart for newbies
  7. Mein persönlicher Tipp wäre nimm Dir Beispiele aus der CodeBas, den Artikeln oder im lokalen Ordner (zB,\Experts\Examples\..) und verstehe, wie es dort gemacht wird - ist viel schneller, als alle Fehler selbst mal ausprobieren!
  8. Übrigens: Im Editor den Kursor auf eine MQ-Funktion stellen und F1 drücken, es erscheint die Hilfe zu genau dieser Funktion - manche haben auch Beispiele, fertig zum Kopieren und anpassen.
  9. Wenn ein eigenes Programm nicht tut, was es soll gibt es den Debugger, er kann sehr viel spart viel Zeit:
    https://www.metatrader5.com/de/metaeditor/help/development/debug
    https://www.mql5.com/de/articles/654  // Zur Fehlerbehebung von MQL5-Programmen (Debugging)
    https://www.mql5.com/de/articles/35 // Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen
    https://www.mql5.com/de/articles/2041 // Die Fehlerverarbeitung und Protokollierung in MQL5
    https://www.mql5.com/de/articles/272
    https://www.mql5.com/de/articles/150 //Fehler finden und Protokollierung
  10. Wenn Du schon anfängst, dann warum MT4? Wird nicht mehr weiterentwickelt, kann nicht so viel und ist langsamer - hier ein Vergleich:


Looking for somw someone who can add alerts to this indicator. - How to ask questions the Smart Way
Looking for somw someone who can add alerts to this indicator. - How to ask questions the Smart Way
  • 2022.08.01
  • www.mql5.com
How to ask questions the smart way. (20 04 ) only ask questions with yes/no answers if you want “yes” or “no” as the answer. Beg at: coding help - mql4 programming forum make it no repaint please. ) we are willing to help you when you post your attempt (using code button ) and state the nature of your problem
 

MyEA cannot be pushed to black chart graphics windows. Who can give me advice? Thanks in advance. greeting Khai

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

//|                                                       MyEA.mq4   |

//|                        Copyright 2024, MetaQuotes Software Corp. |

//|                                             https://www.metaquotes.net|

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

#property strict


// Externe Eingabeparameter

input int TP = 200;         // Take Profit in Punkten

input int SL = 100;         // Stop Loss in Punkten

input int Distance = 200;   // Abstand zwischen den Trades

input int Period_MA = 14;   // Periode für die Moving Average-Indikatoren


// Indikatoren

input ENUM_MA_METHOD Method_MA = MODE_SMA; // Methode für Moving Average

input ENUM_APPLIED_PRICE AppliedPrice_MA = PRICE_CLOSE; // Preis für Moving Average


// Globale Variablen

double maBuffer[];

double maPrevious[];

double maCurrent[];

int lastTradeBar = 0;


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

//| Experteninitialisierungsfunktion                                  |

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

int OnInit()

{

    // Indikatoren initialisieren

    ArraySetAsSeries(maBuffer, true);

    ArraySetAsSeries(maPrevious, true);

    ArraySetAsSeries(maCurrent, true);


    // Chart-Indikatoren anhängen

    SetIndexBuffer(0, maBuffer);

    SetIndexBuffer(1, maPrevious);

    SetIndexBuffer(2, maCurrent);


    // Indikatoren berechnen

    SetIndexStyle(0, DRAW_LINE);

    SetIndexBuffer(0, maBuffer);

    SetIndexStyle(1, DRAW_LINE);

    SetIndexBuffer(1, maPrevious);

    SetIndexStyle(2, DRAW_LINE);

    SetIndexBuffer(2, maCurrent);


    // Indikator-Puffer definieren

    SetIndexLabel(0, "MA Buffer");

    SetIndexLabel(1, "Previous MA");

    SetIndexLabel(2, "Current MA");


    // Experteninitialisierung erfolgreich

    return (INIT_SUCCEEDED);

}


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

//| Expertenstartfunktion                                            |

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

void OnStart()

{

    // Endlosschleife für den Handel

    while (!IsStopped())

    {

        // Aktuelle Balkenindex

        int currentBar = Bars - 1;


        // Nur neuen Trade eröffnen, wenn genügend Bars vorhanden sind

        if (currentBar > lastTradeBar)

        {

            // Moving Averages berechnen

            CalculateMovingAverages();


            // Trend prüfen und Handelsentscheidung treffen

            if (IsTrendUp() && IsDistanceMet(currentBar))

            {

                // Long Trade eröffnen

                OpenTrade(currentBar);

            }

        }


        // Auf nächsten Tick warten

        Sleep(1000);

    }

}


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

//| Funktion zum Berechnen der Moving Averages                       |

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

void CalculateMovingAverages()

{

    // Moving Averages für den aktuellen Balken berechnen

    maCurrent[0] = iMA(NULL, 0, Period_MA, 0, Method_MA, AppliedPrice_MA, 0);

    // Moving Averages für den vorherigen Balken berechnen

    maPrevious[1] = iMA(NULL, 0, Period_MA, 1, Method_MA, AppliedPrice_MA, 0);

    // Moving Averages für den vorvorherigen Balken berechnen

    maPrevious[2] = iMA(NULL, 0, Period_MA, 2, Method_MA, AppliedPrice_MA, 0);

}


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

//| Funktion zur Überprüfung des Trends                              |

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

bool IsTrendUp()

{

    return (maCurrent[0] > maPrevious[1] && maPrevious[1] > maPrevious[2]);

}


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

//| Funktion zur Überprüfung, ob der Abstand zwischen den Trades    |

//| erfüllt ist                                                     |

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

bool IsDistanceMet(int currentBar)

{

    return (currentBar - lastTradeBar >= Distance);

}


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

//| Funktion zum Öffnen eines Trades                                 |

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

void OpenTrade(int currentBar)

{

    double entryPrice = Ask; // Zum Marktpreis eröffnen

    double stopLoss = entryPrice - SL * Point;

    double takeProfit = entryPrice + TP * Point;


    // Long-Trade eröffnen

    int ticket = OrderSend(Symbol(), OP_BUY, 1.0, entryPrice, 3, stopLoss, takeProfit, "Long Trade", 0, 0, clrGreen);


    // Überprüfen, ob der Trade erfolgreich eröffnet wurde

    if (ticket > 0)

    {

        Print("Long Trade erfolgreich eröffnet: Ticket = ", ticket, ", Preis = ", entryPrice);

        lastTradeBar = currentBar; // Letzten Trade-Bar aktualisieren

    }

    else

    {

        Print("Fehler beim Öffnen des Long Trades: Fehlercode = ", GetLastError());

    }

}


 
  1. Wir können hier deutsch reden :)
  2. Du weißt aber schon, dass a) AutoTrading in der Menüzeile des Terminals aktiviert sein muss:



    und b) "Algo-Handel erlauben" im Fenster nach dem Aufruf im ersten Tab "Allgemein" (vor den Parametern) auch aktiviert werden muss:



 
Alexey Viktorov #:

Der Wert der Variablen in einem EA ist für einen anderen EA nicht verfügbar. Die Hauptsache ist, dass entweder die Symbole oder die Magie oder beides unterschiedlich sind.

Hallo Alexey,

ich habe in einem alten "Thread" - nennt man das so? - die obige Antwort gefunden, nachdem ich seit Tagen versuche, mit meinem EA weiterzukommen.

Darf ich Dich / Sie um Hilfe bitten? Sie scheinen sich mit MQL5 sehr gut auszukennen - ich bin Anfänger auf diesem Gebiet. Ich habe bisher keine eindeutigen Antworten gefunden und bin selbst bei kleinen Dingen immer wieder irritiert (z.B. verschiedenen Server-Zeiten bei 2 verschiedenen Brokern... mal plus eine Stunde zur MESZ und mal minus eine Stunde...). Ich habe gelesen, dass man die Serverzeit im MT5 nicht ändern kann - also muss ich wohl damit leben...

Zu meiner Hauptfrage:

Ich habe einen funktionierenden EA. Diesen möchte ich parallel auf z.B. dem DAX und der NQ laufen lassen. Dazu habe ich verschiedene Dateinamen (also EADAX und EANQ) vergeben und auch verschiedene Magic Numbers. Hat bisher alles nichts geholfen: für die NQ-Position wird z.B. die Schließzeit der letzten Position des DAX übernommen... Daher meine grundsätzliche Verständnisfrage: werden irgendwelche Werte (z.B. die von Variabeln) irgendwo quasi "zentral" gespeichert und bei Verwendung von 2 Versionen eines EA auf verschiedenen CHarts/Symbolen von beiden EA-Versionen genutzt und daher "überschrieben"?

Vielen lieben Dank für die Hilfe

Matthias