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

 
trader781:

Was ist zu tun, wenn der Stopp/Stop 200 beträgt?

sondern

tp=NormalizeDouble((Preis+(TakeProfit*_Point)),Digits);

auf einen Dollar-Yen ergibt 317.000 zum Kurs von 117.000

erwartetes Ergebnis 117.200

Wenn Punkt()==0,001 (bei USDJPY), dann ist 200*0,001 gleich 0,2

Wenn wir nun 0,2 zu 117,0 addieren, erhalten wir 117,2

Wo ist die "Ungerechtigkeit"?

 
Artyom Trishkin:

Wenn Punkt()==0,001 (bei USDJPY), dann ist 200*0,001 gleich 0,2

Wenn wir nun 0,2 zu 117,0 addieren, erhalten wir 117,2

Und wo ist die "Ungerechtigkeit"?

es wird erwartet, dass 117+(200*_Point) 117,200 ergibt

er wird normalerweise am EURUSD getestet

Vitaly hat es oben beschrieben, vielen Dank.

Ich glaube, ich habe sie gefunden.

Ich denke, es ist gut genug als Zwischenalgorithmus und jetzt ist es notwendig, diese Momente irgendwie zu filtern

https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

117+(200*_Point) wird voraussichtlich eine Ausgabe von 117.200 ergeben

...

Nun, das ist es, was er gibt... Ich habe Ihnen die Berechnung gezeigt. Oder haben Sie mehrere Währungen und übernehmen Daten von einem "nicht einheimischen" Symbol?

Dann verwenden Sie SymbolInfoDouble() und (int)SymbolInfoInteger() anstelle von Point() und Digits()

 
Artyom Trishkin:

Nun, das ist es, was er gibt... Ich habe Ihnen die Berechnung gezeigt. Oder haben Sie eine Mehrfachwährung und übernehmen die Daten von einem "nicht einheimischen" Symbol?

Dann verwenden Sie anstelle von Point() und Digits() SymbolInfoDouble() und (int)SymbolInfoInteger()

Danke, es funktioniert)))

Ich suche derzeit nach einer Möglichkeit, einen Trailing Stop in eine Kette von Aufträgen einzufügen

Ich habe 10 Aufträge in 200er-Schritten zwischen 115.000 und 117.000.

Jedes Los ist um den Wert x größer als das vorherige Los

Ziel ist es, die gesamte Auftragskette mit einem Trailing-Stopp zu versehen, wobei die folgende Berechnung verwendet wird (Durchschnittspreis)+(y*_Point)

Ich habe den Trailing-Stop. Meine Frage ist, wie man ihn mit dem Durchschnittspreis für den gesamten Stapel verbindet und wie er in Abhängigkeit von den Lots berechnet wird

 
trader781:

Danke, es funktioniert)))

Ich suche nach einer Möglichkeit, einen Nachspann in eine Auftragskette einzufügen.

Ich habe 10 Aufträge in 200er-Schritten von 115.000 bis 117.000

Jedes Los ist um den Wert x größer als das vorherige Los

Ziel ist es, die gesamte Auftragskette mit einem Trailing-Stop zu versehen, wobei die folgende Berechnung verwendet wird (Durchschnittspreis)+(y*_Point)

Ich habe einen Trailing-Stopper selbst; die Frage ist, wie man ihn mit dem Durchschnittspreis des gesamten Stapels verbindet und wie er in Abhängigkeit von den Lots berechnet wird

Ein allgemeiner Rat: Lernen Sie das Programmieren von Grund auf. Dann werden Sie solche Fragen nicht haben, denn Programmieren ist keine leichte Aufgabe.

Und zum Kern der Frage: Sie müssen also ALLE Aufträge in einer Schleife durchgehen, nur die "notwendigen" auswählen und sie ändern. Allerdings muss man bei dieser Frage sehr vorsichtig sein, denn die Wahrscheinlichkeit, dass der ausgewählte Auftrag nicht funktioniert, ist sehr hoch.

 
Alexey Viktorov:

Ein allgemeiner Ratschlag: Lernen Sie das Programmieren von Grund auf. Dann wird es solche Fragen nicht geben, denn Programmieren ist nicht einfach.

Und zum Kern der Frage: Sie müssen also ALLE Aufträge in der Schleife durchgehen, nur "notwendige" auswählen und sie ändern. Allerdings muss man bei dieser Frage sehr vorsichtig sein, denn die Wahrscheinlichkeit, dass der ausgewählte Auftrag nicht funktioniert, ist sehr hoch.

Es ist nicht hoch, aber 100%. Im Moment arbeite ich an der letzten und der Rest ist auf Pause, aber das Schema ist ungenau und ich würde es gerne besser machen
 

Guten Tag an alle, ich habe einen EA auf Basis von MAs geschrieben. (Ich selbst entwickle seit einer Weile in MQL4 und habe beschlossen, mit etwas Einfachem zu beginnen. Ich wollte also wissen, was ich falsch gemacht habe. Das Wesen des Expert Advisors ist einfach: Geben Sie einen Alarm aus, wenn zwei oder drei MAs gekreuzt werden (je nach METHODE: Aggressiv = Kreuzung von zwei MAs, konservativ = Kreuzung von 3 MAs) ... Das ist alles. Ich werde selbst auf den Markt gehen. In meinem Expert Advisor habe ich zwei Funktionen vorgeschrieben: Aggressiv - dies ist ein Signal beim einfachen Überkreuzen der beiden schnellsten MAs und Konservativ - beim Überkreuzen der beiden schnellsten MAs sollten Sie auch den langsamsten berücksichtigen (d.h. das Signal in Trendrichtung). Das Problem ist, dass der Expert Advisor nur EINEN Alarm ausgibt (wenn er startet oder den Zeitrahmen wechselt) und bei allen folgenden Signalen schweigt! Ich wäre Ihnen dankbar, wenn Sie mir sagen könnten, was los ist. Ich habe die Funktion für alle Ereignisse gemäß den MQL4-Regeln vorgeschrieben. Natürlich könnte ich alles ohne Funktionen im On Tick-Ereignis registrieren, aber ich möchte Funktionen separat registrieren, damit dieFunktionen leichtaufgerufen werden können und ich möchte mit der Zeit neue "Filter"-Funktionen hinzufügen.

Code

================================================================================================

extern bool Metod=false; // Auswahl der Methode: Konservativ oder Aggressiv.

extern int Time_Frame=1;//Zeitrahmen

input bool Metod=false; //Konservativ-TRUE | Aggressiv-FALSE

extern inttern FastMA_Parametr=5;

extern int int intMA_Parametr=8;

extern int SlowMA_Parametr=18;

extern inttern TrendMA=163;

extern bool DemarkGo=false;

extern inttern Demperiod=4;

int rez;// wenn MA nach unten kreuzt, rez=-1. wenn nach oben, rez=1.

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

// MA initialisieren

double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// FastMA

double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Durchschnittlicher MA

double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); Slow МА


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

int OnInit()

{

rez=0;

return(INIT_SUCCEEDED);

}

//=======================================

//------------------------------------------------------------------------------

void OnDeinit(const int reason)

{



}

//=============================================

//+---------------------Funktion für konservatives Signal bei Metod=true---------------------------------------------+

int konservativ()

//Prüfen Sie auf eine Kreuzung von 3 Linien nach oben

{

if (Metod==true)


{

if(FastMA>MiddiMA&&MiddiMA>SlowMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----. konservativ");

rez=1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

zurück(rez);


}


//Prüfen, ob sich die 3 Linien nach unten kreuzen

if(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)

{

Alert(Symbol(),Time_Frame," ---- DOWN----. konservativ");

rez=-1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

zurück(rez);


}

}

zurück(rez);

}

//=================================================

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Aggressive Funktion, wenn

int Agressiv()

// Prüfen, ob sich 2 Linien nach oben kreuzen, ohne langsam zu sein


{

if (Metod==false)

{

if(FastMA>MiddiMA&&rez<=0)

{

Alert(Symbol(),Time_Frame,"----Up----. aggressiv");

rez=1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);


}


//Prüfen, ob sich 2 Linien nach unten kreuzen, ohne dass eine langsame Linie vorhanden ist

if(FastMA<MiddiMA&&rez>=0)

{

Alert(Symbol(),Time_Frame," ---- DOWN----. Aggressiv");

rez=-1;

Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," SlowMA ",SlowMA," rez ",rez);

}

}

zurück(rez);

}

 
Олег:


Ich denke, das können Sie selbst tun.
Dateien:
6645.mq4  7 kb
 
trader781:
Es ist nicht hoch, aber 100 %. Im Moment ist es der letzte Auftrag und die anderen sind auf Pause, aber das Schema ist nicht präzise und ich würde es gerne besser machen.

Nein, nicht 100 %. Vielleicht meinen Sie aber auch etwas anderes.

Im Allgemeinen läuft der Algorithmus wie folgt ab:

Sie richten eine Schleife ein, die alle Aufträge durchläuft.

Sie wählen den nächsten Auftrag aus, um mit ihm zu arbeiten.

Sie prüfen, ob diese Bestellung erforderlich ist... Wenn nicht, wird die nächste Iteration der Schleife...

Wenn sie "gebraucht" wird, prüfen Sie, ob sie sich für eine Änderung eignet. Vergleichen Sie einfach, wie weit der Kurs von seinem StopLoss-Niveau entfernt ist

Wenn der Abstand ausreichend ist, wird die Bestellung geändert.


Wenn Sie also eine Änderungsfunktion mit einer Schleife für alle Aufträge haben und die Schleife vor ihrem Aufruf auch funktioniert, dann wird der ausgewählte Auftrag geändert...

 
Alexey Viktorov:

Nein, nicht 100 %. Vielleicht meinen Sie aber auch etwas anderes.

Im Allgemeinen läuft der Algorithmus wie folgt ab:

Sie richten eine Schleife ein, die alle Aufträge durchläuft.

Sie wählen den nächsten Auftrag aus, um mit ihm zu arbeiten.

Sie prüfen, ob diese Bestellung erforderlich ist... Wenn nicht, wird die nächste Iteration der Schleife...

Wenn sie "benötigt" wird, prüfen Sie, ob sie für eine Änderung geeignet ist. Vergleichen Sie einfach, wie weit der Kurs von seinem StopLoss-Niveau entfernt ist

Ist sie weit genug entfernt, wird der Auftrag geändert.


Wenn Sie also eine Änderungsfunktion mit einer Schleife für alle Aufträge haben und die Schleife vor ihrem Aufruf auch funktioniert, dann wird der ausgewählte Auftrag geändert...

Der Punkt ist, dass es bei einem bestimmten Los IMMER Verlustaufträge geben wird, die auch auf Kosten der übrigen Aufträge ausgeführt werden müssen. Der Auslöser ist die Schließzeit. Wenn wir auch nur eine schließen, ist die ganze Kette verloren. Daher stellt sich die Frage, wie man den Durchschnittspreis aller ausgewählten Angebote ermitteln kann.
Grund der Beschwerde: