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

 
SGarnov:

Anzahl der Stopps in einer Reihe für ein Währungspaar.

Ich denke, dass, um die Geschichte zu verstehen, die Expert Advisor zunächst beschriftet Aufträge mit ID, aber es hat sie nicht in der Geschichte zu finden, dachte ich, dass OrderMagikNumber() wird für sie zu suchen. Vielleicht, aufgrund der Tatsache, dass in der Geschichte, die EA stoppt "sehen" Stops aus verschiedenen Währungspaaren? Ich habe nicht versucht, mit einem Währungspaar zu arbeiten und es wird nutzlos sein.

Muss ich den Quellcode erneut freigeben? Alles, was es zu tun gilt, ist, "die Suche nach Stop-Trades aus der Historie zu korrigieren und sie zu den neu platzierten Takes hinzuzufügen".

Und wenn es mehr als zwei Stopps auf einem Paar gibt, wie setzen Sie die Arbeit des EAs auf diesem Paar fort?

Und übrigens OrderMagicNumber() setzt die EA und manuell platzierte Orders ohne Magier
 
MakarFX:

Und wenn es mehr als zwei Stopps auf einem Paar in einer Reihe gibt, wie reaktivieren Sie den EA auf diesem Paar?

Ich mache das mit einem neuen Pendel, das ich selbst einstelle.
 
SGarnov:
Einneues Pendel, das ich selbst aufgehängt habe.
Muss ich Punkte aus früheren Verlusten dazuzählen oder einen neuen Verlustzählzyklus beginnen?
 
MakarFX:
Ist es notwendig, Punkte aus früheren Verlusten oder aus einem neuen Verlustzyklus hinzuzufügen?

Nein. Sie müssen die vorherigen nicht hinzufügen. nur wenn der EA zu arbeiten beginnt.

Der Expert Advisor wird immer nur 4 Varianten von Ereignissen implementieren, wenn der Stop-Loss-Koeffizient 2 ist.

A) Take Profit + 1 Stop, der Expert Advisor hört auf zu arbeiten

B) Nehmen Sie + 1 Stop, der EA wird aufhören zu arbeiten

C) Take + 2 stoppt EA funktioniert nicht mehr

D) 3 stoppt EA arbeitet nicht mehr

 
SGarnov:

Guten Tag. Hilfe mit dem EA. Nach der Strategie, wenn ein Stop ausgelöst, dann sollte der EA hinzufügen (die Anzahl der Punkte), um die nächste Reihe takeaway
aus der Geschichte von ID, aber es tut es nicht aus irgendeinem Grund.

Was ist an dem Code falsch?

Wenn Sie einen minimalen Gewinn erzielen wollen, reicht es aus, den Spread auf den Stop und den Take Profit auf einen bestimmten Wert zu erhöhen. Genauer gesagt, der Betrag der arithmetischen Reihe * Spread (wie viele Spreads verloren gehen, um wie viel erhöht wird). Erhöhen Sie nur die Reichweite nicht wesentlich über die tägliche Reichweite hinaus.

Die beste Option - in OrderMagic oder Comment, speichern Sie den ursprünglichen Wert der Haltestelle in Punkten, oder die Anzahl der Ausfälle in einer Reihe. Im Allgemeinen sollte sich der Expert Advisor alle seine Aufträge/Positionen merken und das Terminal (und den Server) nicht unnötig abfragen

 
Maxim Kuznetsov:

Damit es mit einem minimalen Gewinn funktioniert, reicht es aus, den Spread auf den Stop und den Take zu addieren. Genauer gesagt, der Betrag der arithmetischen Reihe * Spread (wie viele Spreads verloren gehen, um wie viel sie erhöht werden). Erhöhen Sie nur die Reichweite nicht wesentlich über die tägliche Reichweite hinaus.

Die beste Option - in OrderMagic oder Comment, speichern Sie den ursprünglichen Wert der Haltestelle in Punkten, oder die Anzahl der Ausfälle in einer Reihe. Im Allgemeinen sollte sich der Expert Advisor alle seine Aufträge/Positionen merken und das Terminal (und den Server) nicht unnötig abfragen

Der Code sollte eigentlich funktionieren, aber ich sehe ihn nicht in der Historie. Können Sie mir helfen?
 

Ich bitte um die Hilfe der Gemeinschaft...
Wie deklariert und erstellt man globale MQL5-Objekte richtig?

Wenn ich es auf diese Weise mache:

int OnInit()
{
   CIsNewBar* NB_M1=new CIsNewBar(_Symbol,PERIOD_M1);  // Эта строка потом будет в цикле для разных символов
}

void OnTick()
{
    if (NB_M1.IsNewBar())  // (1) Если появился новый бар M1
        {....}
    ......
}

Der Compiler beschwert sich über die Zeile in OnTick(): 'NB_M1' - nicht deklarierter Bezeichner, was logisch ist, da eine lokale Variable in OnInit() erstellt wird.

Wenn Sie die globale Deklaration vor OnInit() einfügen:

CIsNewBar* NB_M1;

es kompiliert ohne Fehler und der Experte arbeitet. Es scheint, dass das Objekt zweimal erstellt wird - während der globalen Deklaration und in OnInit().
Aber der Compiler gibt diese Warnung aus

Deklaration von 'NB_M1' versteckt globale Variable -> pro Zeile in OnInit()

siehe vorherige Deklaration von 'NB_M1'

Bedeutet dies, dass eine lokale Variable (innerhalb einer Funktion) in OnInit() erstellt wird, die eine globale Variable mit demselben Namen versteckt?
Und wenn ja, wie kann diese lokale Variable von einer anderen Funktion, OnTick(), "gesehen" werden?




 
SGarnov:

Nein. Sie müssen die vorherigen nicht hinzufügen. nur wenn der EA zu arbeiten beginnt.

Der Expert Advisor wird immer nur 4 Optionen implementieren, wenn der Stop-Loss-Wert gleich 2 ist.

A) Nehmen

B) Take + 1 Haltestelle

C) Nehmen Sie + 2 Haltestellen

D) 3 Haltestellen

advisor funktioniert nicht mehr

Ich verstehe, ich werde es versuchen.
 

Ich weiß noch nicht, an wen diese Nachricht gerichtet ist. Ich kann keinen undurchsichtigen Bereich erstellen. Die Funktionen OBJ_BITMAP_LABEL, OBJ_RECTANGLE_LABEL sind dazu gedacht, neue Objekte zu dekorieren oder zu erstellen. Aber sie haben nicht die Möglichkeit der Intransparenz. Vielleicht habe ich die Sprache nicht gut genug studiert, oder es ist ein Fehler der Ersteller. Die Objekte, die im Vordergrund erstellt werden, erscheinen über das Bedienfeld. Der umgekehrte Weg ist möglich, würde aber den Procyc überlasten. Wenn jemand weiß, wie man das macht, bitte sagen Sie es mir.

 
MakarFX:
Ich verstehe, ich werde es versuchen.

Um es einfacher zu machen, nehmen Sie meinen Quellcode, es hat Logik, die funktioniert, außer für das Problem, das ich beschrieben habe, ich verstehe es nicht ganz, mein Kopf kocht, aber ich komme nicht weiter.

Grund der Beschwerde: