[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 660

 
Craft:


Anatoly, vielen Dank, es ist schade, dass man hier kein Symbol einfügen kann, wie in Skype mit einer Schleife. Alles ist einfach und elegant. Ich weiß aus der Kommunikation mit anderen technischen Analyseprogrammen, dass es so sein sollte, aber ich bin noch aus der Übung in der Arbeit mit mql. Danke für den Tipp mit der Markierung in der Methode - ich werde es herausfinden.

Für meinen letzten Tipp, wie man mehrere Order-Platzierungen auf einem Balken durch diesen EA zu vermeiden? Ich habe bereits Tipps von freundlichen Menschen erhalten, aber sie haben nicht geholfen.

Ich habe versucht, Ihr Problem zu lösen, und das ist das Ergebnis. Aber das Wichtigste zuerst.

Wer ist schuldig und was ist zu tun? Oder woher kommen die Beine...

In Ihrem Expert Advisor werden verschiedene Einstellungen des CCI-Indikators für die Eröffnung einer Position (bzw. für die Schließung der vorherigen) verwendet. Sie haben verschiedene Einstellungen für den Kauf und verschiedene Einstellungen für den Verkauf. Soweit ich das verstanden habe, ist das der Trick. In Aufwärtstrends ist es zum Beispiel profitabler, weniger empfindliche Einstellungen für Käufe zu verwenden, um Gewinne "wachsen" zu lassen (d.h. es ist sinnvoll, die Position zu halten (d. h. es ist sinnvoll, eine Position in einem Trend länger zu halten). Beim Verkaufen (Aufwärtstrend) sind sensiblere Einstellungen erforderlich, um einen schnellen Ein- und Ausstieg zu ermöglichen, z. B. wenn versucht wird, eine Korrektur zu erwischen (und daher mit einer gegenläufigen Position kürzer im Markt zu bleiben). Alles ist sehr logisch und die Idee macht Sinn, aber es gibt einen feinen Punkt über dieses System - was zu tun, wenn zwei entgegengesetzte Signale gleichzeitig auftreten, weil Unterschiede in den Einstellungen (in der Tat, für das Terminal ist es zwei Indikatoren)?

Über die blauen Pfeile...

Der Expert Advisor erhält auf einem Balken gleichzeitig ein Kauf- und ein Verkaufssignal, und wie ich oben geschrieben habe, wenn Sie eine Position eröffnen, sollte die andere geschlossen werden. In diesem Fall wird das Kaufsignal gegeben und das Verkaufssignal geschlossen, da zum Zeitpunkt des Kaufsignals noch keine Verkäufe stattgefunden haben, eröffnet der Berater den Kauf. Beim nächsten Tick wird das gegenteilige Signal generiert, nämlich ein Verkaufssignal, so dass der gerade eröffnete Kauf geschlossen wird. Eine weitere Beobachtung: Ist Ihnen aufgefallen, dass nur der Kauf (viele blaue Pfeile) "wackelt"? Die Implementierung der Kauf-/Verkaufsmethoden ist, soweit ich es verstanden habe, aus dem Tutorial übernommen, aber es gibt eine Besonderheit, dass nach Abschluss der Operation die start()-Methode durch den Operator return verlassen wird, d.h. für einen Tick kann es nur eine Öffnung/Schließung geben. Wenn ich also ein "Doppelsignal" erhalte, werden alle Geschäfte geschlossen (der Block, der schließt, wird zuerst beschrieben), dann wird der Block, der die Geschäfte öffnet, und darin wird der Kauf zuerst beschrieben!!!, und nach dem Kauf wird der Start() verlassen, so dass der Berater keine Zeit hat, zu den Verkäufen zu kommen :))) und schleift, bis er einen "normalen" Einzelauftrag erhält.

Über Lösungsmethoden...

Es gibt mehrere Möglichkeiten, dieses Problem zu lösen.
1. Die altmodische.
Für den Anfang können Sie die Idee "abtöten" und einfach die gleichen Parameter für Käufe und Verkäufe festlegen, und das Problem wird von selbst verschwinden.

2. Kompliziert.
Der Algorithmus zur Bestimmung des Haupttrends sollte in den Expert Advisor geschrieben werden, und dementsprechend sollten verschiedene "Gewichtungen" der Trades festgelegt werden. Wenn also entgegengesetzte Signale eintreffen, sollte dasjenige bevorzugt werden, das ein größeres "Gewicht" hat (d. h. dasjenige, das sich im Trend befindet).

3. unbenannt.
Beim Empfang von multidirektionalen Signalen...
Nichts tun.

if(Opn_B && Opn_S)return;

Dies ist genau die Option in der unten angehängten Datei.
Ich hoffe, ich habe alles gut erklärt.
Viel Glück :)))

Dateien:
11_3_1.mq4  13 kb
 

Volframs Beitrag wurde gelöscht, weil er sich in mehreren Threads vervielfältigt hat.

Wolfram, Sie haben eigens zu diesem Zweck einen eigenen Thread erstellt. Sie haben bereits eine Antwort erhalten, ist das nicht genug?

P.S. Lassen Sie mich Ihnen ein Geheimnis verraten, Wolfram: Das Fehlen eines offensichtlichen Interesses an Ihrer Idee deutet implizit darauf hin, dass sie es nicht wert ist, beachtet zu werden. Dementsprechend war niemand bereit, sie "gegen Bezahlung" umzusetzen.

 
ToLik_SRGV:

2. Kompliziert.
Wir sollten den Algorithmus zur Bestimmung des Haupttrends in den Expert Advisor integrieren und somit den Trades unterschiedliche "Gewichte" zuweisen. Wenn also entgegengesetzte Signale eintreffen, sollte dasjenige bevorzugt werden, das ein größeres "Gewicht" hat (d. h. dasjenige, das sich im Trend befindet).

3. unbenannt.
Beim Empfang von anders gerichteten Signalen ...
Nichts tun.

Dies ist genau die Option in der unten angehängten Datei.
Ich hoffe, ich habe alles gut erklärt.
Viel Glück :)))

Darf ich auch meinen Meilenstein hinzufügen... :)

Ich habe auch mit einem Lehrbuch angefangen. Sie können es einfacher machen: Es genügt, den Kaufabschluss bei einem Verkaufssignal und den Verkaufsabschluss bei einem Kaufsignal zu entfernen, d.h. kein Swing-Trading zu verwenden, das in Sergey Kovalevs Tutorial implementiert wurde... Das Verfolgen der Positionen sollte nicht durch die Karte, sondern durch den Zauberkünstler erfolgen. Zunächst habe ich das getan und in aller Ruhe meine Ideen getestet. Dann habe ich meine eigenen Funktionen für die Arbeit geschrieben...

ZS: Ich habe mir den Code nicht angesehen, daher kann ich mich bei diesem EA irren...

 

Ich kann nicht herausfinden, wie man die Extrema einer Funktion findet

Ich habe ein Datenfeld, das Werte speichert:

wie man die Bruch-Extrema findet, indem man ein Datenfeld mit 250 Elementen verwendet und nur die Nummern der Elemente speichert, in denen sich diese Extrema befinden

 

Leute, ich habe folgende Frage:

Die Trenderkennungsfunktion besagt ausdrücklich, dass, wenn der AC auf dem ersten Balken größer ist als der AC auf dem zweiten Balken (d.h. ansteigend), der Trend aber abwärts gerichtet ist (andere Indizes zeigen nach unten), in diesem Fall Null zurückgegeben wird, d.h. kein Abwärtstrend... Aber der EA ignoriert es hartnäckig, woran mag das liegen?


Die Funktion der Trendumkehr:

int Trend_BBOsMA (string sy, int tf)
{
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB    =iCustom(sy,tf,"BB_MA",13,13,0,1),
   OsMA  =iOsMA  (sy,tf,9,21,5,PRICE_CLOSE,1),
   AC1   =iAC(sy,tf,1),
   AC2   =iAC(sy,tf,2),
   AC3   =iAC(sy,tf,3);
   
   if (BB>0 && OsMA>0 && AC1>AC2) return(1);
   if (BB<0 && OsMA<0 && AC1<AC2) return(-1);
   else return(0);
}

Prüfung auf eröffnende Aktien (anfangs Trendprüfung, auf die er nicht reagiert: trH1 und trM15 ) - weitere Experimente mit Bedingungen, bitte nicht beachten, aber der Code funktioniert...

//============================================================================================== 
   // Доливка 1
//==============================================================================================  
//------------------------- Покупка 1 ------------------------   
   if (AddPose1 &&
         trH1==1 &&                  // Если часовой и 
         trM15==1 &&                 // пятнадцатиминутный тренды восходящие
         Mom5_1>Mom5_2 &&              // найден разворот
         Mom5_2<=Mom5_3 &&             // Моментума
//         Mom5_2<=100.0 &&
//         DeM5_1<=0.6 &&                  // и Демаркер в зоне перепроданности
//         AC1>AC2 &&                    // Ускорение вверх ----------------------- ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos(NULL, OP_BUY, 511)>=4*60
      )
         {
            Magic=511;          // Задаём магик... 
            Lots=GetSizeLot();
            divider=1;
//            if (trH1==10 || trM15==10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL);
            New_Comm="Buy_M5_Стратегия_1_Доливка1";   // Задаём комментарий для позиции
            OpenPosition(NULL, OP_BUY, Lots_New, 0, 0, Magic, New_Comm);
         }
//------------------------- Продажа 1 ------------------------   
   if (AddPose1 && 
         trH1==-1 &&                 // Если часовой и 
         trM15==-1 &&                // пятнадцатиминутный тренды нисходящие
         Mom5_1<Mom5_2 &&              // найден разворот
         Mom5_2>=Mom5_3 &&             // Моментума
//         Mom5_2>=100.0 &&
//         DeM5_1>=0.4 &&                  // и Демаркер в зоне перекупленности
//         AC1<AC2 &&                    // Ускорение вниз ------------------------ ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos(NULL, OP_SELL, 511)>=4*60
      )
         {
            Magic=511;          // Задаём магик... 
            Lots=GetSizeLot();
            divider=1;
//            if (trH1==-10 || trM15==-10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL);
            New_Comm="Sell_M5_Стратегия_1_Доливка1";   // Задаём комментарий для позиции
            OpenPosition(NULL,OP_SELL,Lots_New,0,0,Magic,New_Comm);
         }
//==============================================================================================

Vielleicht sieht jemand etwas, das ich nicht sehen kann? Danke.

 
Auf dem Screenshot ist der BB_MA-Indikator nicht zu sehen. Außerdem gibt es im oberen Code keine Überprüfung der Trendrichtung. Die Variable BB wird immer einen Wert enthalten. Soweit ich weiß, ist der Indikator BB_MA ein gleitender Durchschnitt. Um die Richtung des gleitenden Durchschnitts zu bestimmen, sollte man 2 Werte auf verschiedenen Kerzen haben, zum Beispiel auf der ersten und zweiten Kerze, und diese Werte miteinander vergleichen. Daher können wir sagen, dass der obere Code seine Aufgabe nur teilweise erfüllt.
 
IgorM:

Ich kann nicht herausfinden, wie man die Extrema einer Funktion findet

Ich habe ein Datenfeld, das Werte speichert:

wie man die Bruch-Extrema findet, indem man ein Datenfeld mit 250 Elementen verwendet und nur die Elementnummern speichert, an denen sich diese Extrema befinden


Wir erstellen eine Schleife, in der wir die Werte des Arrays durchlaufen. Wir vergleichen den Wert in der vorherigen Zelle des Arrays mit dem Wert in der aktuellen Zelle. Ist der Wert höher, wird zur nächsten Iteration der Schleife übergegangen. Kurz gesagt, wir setzen die Schleife so lange fort, wie der Wert in jeder nachfolgenden Zelle des Arrays erhöht wird. Sobald der Wert kleiner wird als der vorherige, speichern wir die Nummer der vorherigen Zelle in einem vorher deklarierten Array, da ein Trendbruch stattgefunden hat - wir haben den Höhepunkt gefunden. Jetzt geht der Trend nach unten. Nun wird so lange gesucht, bis die nächste Zelle einen höheren Wert als die vorherige hat. Sobald dies geschieht, wird die Nummer der vorherigen Zelle in einem vordefinierten Array gespeichert, da eine Trendumkehr stattgefunden hat - wir haben den Boden der Talsohle gefunden. Sie können Zahlen in verschiedene Felder einfügen, um Spitzenwerte aus den Tiefstwerten herauszufiltern. Kurz gesagt, nachdem wir alle Array-Werte durchlaufen haben, erhalten wir sortierte Daten (wir suchen nach Zellnummern in einem/zwei anderen Arrays)
 
drknn:

Wir richten eine Schleife ein, in der wir die Werte des Arrays durchlaufen. Der Wert in der vorherigen Zelle des Arrays wird mit dem Wert in der aktuellen Zelle verglichen. Ist der Wert höher, wird zur nächsten Iteration der Schleife übergegangen. Kurz gesagt, wir setzen die Schleife so lange fort, wie der Wert in jeder nachfolgenden Zelle des Arrays erhöht wird. Sobald der Wert kleiner wird als der vorherige, speichern wir die Nummer der vorherigen Zelle in einem vorher deklarierten Array, da ein Trendbruch stattgefunden hat - wir haben den Höhepunkt gefunden. Jetzt geht der Trend nach unten. Nun wird so lange gesucht, bis die nächste Zelle einen höheren Wert als die vorherige hat. Sobald dies geschieht, wird die Nummer der vorherigen Zelle in einem vordefinierten Array gespeichert, da eine Trendumkehr stattgefunden hat - wir haben den Boden der Talsohle gefunden. Sie können Zahlen in verschiedene Felder einfügen, um Spitzenwerte aus den Tiefstwerten herauszufiltern. Kurz gesagt, nachdem wir alle Werte des Arrays durchlaufen haben, erhalten wir sortierte Daten (Zahlen von Zellen in einem/zwei anderen Arrays)

Jep, also müssen wir versuchen, während - das ist bis zum ersten Gipfel, und dann ........ - Ich kann es nicht herausfinden.
 
drknn:
Auf dem Screenshot ist der BB_MA-Indikator nicht zu sehen. Außerdem gibt es im oberen Code keine Überprüfung der Trendrichtung. Die Variable BB wird immer einen Wert enthalten. Soweit ich verstanden habe, ist der BB_MA Indikator ein gleitender Durchschnitt. Um die Richtung des gleitenden Durchschnitts zu bestimmen, sollte man 2 Werte auf verschiedenen Kerzen haben, zum Beispiel auf der ersten und zweiten Kerze, und diese Werte miteinander vergleichen. Wir können also sagen, dass der obere Code seinen Zweck nur teilweise erfüllt.

Nein, BB_MA ist die Abkürzung für Bears&Bulls_MA. Es addiert die Werte von Bullen und Bären und zeigt sie als Histogramm an, ähnlich wie McDuck oder etwas Ähnliches. Wenn das Histogramm über Null liegt, ist es immer aufwärts gerichtet, wenn es darunter liegt, ist es abwärts gerichtet...

Daher ist es wichtig, die Richtung des Trends zu überprüfen:

if (BB>0 && OsMA>0 && AC1>AC2) return(1);

für UP und

if (BB<0 && OsMA<0 && AC1<AC2) return(-1);

für DOWN, gut und

 else return(0);

für Wohnung.

D.h. die Funktion gibt 1 zurück, wenn Bears&Bulls_MA über Null liegt, OsMA über Null liegt und der Wert des ersten AC-Balkens größer ist als der Wert des zweiten AC-Balkens,

und umgekehrt für den Abwärtstrend. Nun, für die Wohnung, alle anderen Unterschiede in den Diagrammen (für jetzt..., später, wenn ich es sortieren, werde ich die Überprüfung der Bewegung mit Beschleunigung/Verzögerung und Umkehr verbinden).

Positionen sollten nureröffnet werden, wenn es einen eindeutigen "Trend nach oben" oder "Trend nach unten" gibt... Im Grunde genommen funktionierte alles, bis ich AC hinzufügte, um die Geschwindigkeit der Währungsbewegung zu kontrollieren und so die (teilweise) Eröffnung von Positionen am Ende der Bewegung, bei Erschöpfung oder Korrektur des Trends auszuschließen.

Bis jetzt funktioniert es nicht... und es ist AC.

 
IgorM:

Ja, so müssen wir es eine Weile versuchen - bis zum ersten Höhepunkt und dann ........ - Ich kann es nicht herausfinden.

Nein - die Schleife sollte durch for ausgeführt werden. Ich werde versuchen, ein Drehbuch zu verfassen. Die Idee ist tatsächlich realisierbar.
Grund der Beschwerde: