Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 614

 
yan720:
Ich danke Ihnen für Ihre Antwort. Wenn es Ihnen nichts ausmacht, senden Sie mir bitte den EA, über den Sie sprechen (oder einen Teil davon, der mit dem Kanal ist) - es wäre interessant, eine andere Implementierung zu sehen.

Ich kann mir keinen Reim auf etwas machen, das ich vor ein paar Jahren gemacht habe. Aus irgendeinem Grund funktioniert es nicht, obwohl ich mich daran erinnere, dass es früher funktionierte und handelte. Lassen Sie mich zuerst den Code sortieren, ihn korrigieren und dann veröffentlichen. Vielleicht morgen. Ich möchte mich nur nicht blamieren, wenn es ein paar kindische Fehler gibt.

 
yan720:

Der Grundgedanke ist natürlich der folgende. Und wie bestimmen Sie die Breite des Kanals (in Ihrem Fall den Bereich)? Ich mache es über die Größe der Durchschnittskerze und es ist alles an die Länge des Kanals gebunden, denn das Vorhandensein des Kanals wird nicht an einer starren Anzahl von Balken geprüft, sondern zum Beispiel an einer Länge von 10 bis 30 Balken.

Was mich interessiert, ist die Frage der Auswahl der Breite aus der Länge...

Sie können mehrere externe Parameter für die Kanalbreite in einem Kennzeichen festlegen. Führen Sie für jeden Parameter eine eigene Berechnung durch.

 

Das Gleiche gilt für die Länge.

 
Example2:
Hallo. Der Basket Expert Advisor sollte alle Aufträge schließen, wenn die Bedingung eintritt, aber er schließt den Auftrag zuerst, dann versucht er, ihn erneut zu schließen (der Server gibt eine Fehlermeldung "Ungültiges Ticket" aus) und erst dann geht er weiter. Hier ist ein Beispielcode und der EA selbst.

In Ihrer Funktion CloseOrders(), wenn der Auftrag geschlossen ist, wird der while(cnt<=5 ) Zyklus noch einmal den Code senden, um den Auftrag zu schließen, und ein Fehler wird auftreten, natürlich, dann durch if() beenden. Pause;

                    int cnt=0;
                    while(cnt<=5){
                      Result[0]=OrderClose(OrderTicket(),OrderLots(),MarketInfo("USDCAD",MODE_BID),slip,Blue);
                      if(!Result[0]){
                        Answer=ERRORS(GetLastError());
                        if (Answer==1)continue; cnt++;
                        if (Answer==2)break;
                      }
                    }

In der Funktion ProtectionClose() haben Sie bereits Zeilen mit dem korrekten while exit hinzugefügt.

 if(Result[0])break;
 }continue;
Versuchen Sie hier zu graben.
 
pu6ka:

In Ihrer Funktion CloseOrders(), wenn der Auftrag geschlossen ist, wird der while(cnt<=5) Zyklus noch einmal den Code senden, um den Auftrag zu schließen, und ein Fehler wird auftreten, natürlich, dann durch if() beenden. Pause;

In der Funktion ProtectionClose() haben Sie bereits Zeilen mit dem korrektenwhile-Exit hinzugefügt

Versuchen Sie, hier etwas zu recherchieren.


In dem von mir beschriebenen Fall ist es jedoch die Funktion ProtectionClose(), die den Auftrag abschließt. Ich werde diesen Fehler korrigieren.
 
Example2:

In dem von mir beschriebenen Fall werden die Aufträge jedoch durch die Funktion ProtectionClose() geschlossen. Ich werde diesen Fehler beheben.

Ich habe mich nicht tief in den Code eingegraben, ich konnte ihn nicht im Testprogramm ausführen, es gibt keinen Indikator.

Aber zum Beispiel sind Ihre Funktionen OpenUsdbuy(); OpenSellusd() aufeinander folgend.

OpenSellusd() öffnet GBPUSD, EURUSD, AUDUSD, NZDUSD, usw. Sie werden der erste sein, der sie in umgekehrter Reihenfolge von NZDUSD, AUDUSD usw. schließt.

Nur drei Paare in der Funktion ProtectionClose() haben einen while exit in zwei Varianten: USDCAD, USDCHF und USDJPY.

In anderen Währungen können Sie while() nur mit einem Fehler if(!Ergebnis[...]) beenden.

 
FOReignEXchange:

Es ist möglich, mehrere externe Parameter für die Kanalbreite in einem Indikator festzulegen. Führen Sie für jeden Parameter eine eigene Berechnung durch.

Der Punkt ist, dass ich die Kanalbreite nicht zwangsweise festlegen möchte - der Expert Advisor/Indikator muss das Vorhandensein des Kanals unabhängig von dem Währungspaar und/oder der aktuellen Volatilität erkennen. Dementsprechend setze ich nur die minimale und maximale Länge des Kanals aus externen Parametern fest, und das auch nur während des Debuggens des Algorithmus - danach werden diese Parameter in ihn eingenäht. In diesem Stadium gibt es einige Beschwerden. Obwohl ich die Kanäle im Allgemeinen abfangen kann (das Bild wurde aus dem Arbeitscode entnommen), würde ich gerne andere Lösungen für dieses Problem sehen.

 
pu6ka:

Ich habe mich nicht tief in den Code eingegraben, ich konnte ihn nicht im Testprogramm ausführen, es gibt keinen Indikator.

Aber zum Beispiel sind Ihre Funktionen OpenUsdbuy(); OpenSellusd() aufeinander folgend.

OpenSellusd() öffnet GBPUSD, EURUSD, AUDUSD, NZDUSD, usw. Sie werden der erste sein, der sie in umgekehrter Reihenfolge von NZDUSD, AUDUSD usw. schließt.

Nur drei Paare in der Funktion ProtectionClose() haben einen while exit in zwei Varianten: USDCAD, USDCHF und USDJPY.

In anderen Währungen können Sie while() nur mit einem Fehler beenden if(!Ergebnis[...])


Danke für den Tipp, ich habe vergessen, die Schleife in diesem Fall zu verlassen, es sollte jetzt funktionieren. Wenn Sie möchten, kann ich den Indikator als Dankeschön einfügen.
 
yan720:

Der Grundgedanke ist natürlich der folgende. Und wie bestimmen Sie die Breite des Kanals (in Ihrem Fall den Bereich)? Ich tue es durch die Größe einer durchschnittlichen Kerze und es ist alles mit der Länge des Kanals verbunden, weil das Vorhandensein des Kanals nicht auf eine starre Anzahl von Bars geprüft wird, sondern zum Beispiel auf eine Länge von 10 bis 30 Bars.

Was mich interessiert, ist die Frage der Auswahl der Breite aus der Länge...

Diese Länge von 10 Takten ist die grundlegende Zahl. Ich meine nicht weniger als 10... und wenn es länger ist, ist es Schicksal. Nehmen Sie es mit nach draußen, um zu experimentieren. Der Bereich kann eine durchschnittliche Größe der Kerze sein, das spielt keine Rolle, aber es ist besser, ihn auch außerhalb zu setzen. Vielleicht möchten Sie den maximalen und minimalen Bereich festlegen, also müssen Sie zwei Variablen Max_ und Min_ festlegen. Dann überprüfen Sie bei jedem Balken die durchschnittliche Größe einer Kerze in diesen 10 Balken und wenn es Ihnen passt, zeichnen Sie Trends am oberen und unteren Rand der 10 Balken. Und beim nächsten Balken können Sie bereits 11 Balken prüfen, und wenn die Bedingung nicht verletzt wird, ObjectSet(...); nur OBJPROP_PRICE1 ändert sich für die erste Koordinate , und OBJPROP_PRICE2 und OBJPROP_TIME2 tundasselbe bei jedem Balken. Oder Sie berechnen nichts neu und betrachten den bereits gebildeten Kanal und warten auf den Durchbruch dieses Kanals. Das ist eine Frage des Geschmacks.

Nun, in meinem Fall habe ich eine leichtere Option aus der Laterne vorgeschlagen, um die Kanalhöhe und die Mindestanzahl der Balken zuzuweisen.


yan720:

Der Punkt ist, dass ich die Kanalbreite nicht zwangsweise festlegen möchte - der Expert Advisor/Indikator muss das Vorhandensein des Kanals unabhängig von dem Währungspaar und/oder der aktuellen Volatilität erkennen. Dementsprechend setze ich nur die minimale und maximale Länge des Kanals aus externen Parametern, und das auch nur im Prozess der Fehlersuche im Algorithmus - danach werden diese Parameter in diesen eingenäht. In diesem Stadium gibt es einige Beschwerden. Obwohl ich die Kanäle im Allgemeinen abfangen kann (das Bild wurde aus dem Arbeitscode entnommen), würde ich gerne andere Lösungen für dieses Problem sehen.

Zunächst einmal macht es keinen Unterschied, ob die Parameter in den externen oder in den eingebetteten Programmen enthalten sind. Und zweitens, wenn Sie die Breite des Kanals nicht festlegen, womit werden Sie ihn vergleichen, wenn Sie die von Ihnen angegebenen 10 Balken berechnen? Wie wollen Sie feststellen, ob es ein Kanal ist oder nicht? Und drittens wird die durchschnittliche Kerzengröße imho nicht ausreichen. Wenn alle 10 Balken bullisch sind, aber die durchschnittliche Balkengröße nicht größer ist als der Check. Ist es ein Kanal oder nicht? Es handelt sich zwar um einen Kanal, aber es ist ein schräger Kanal und wir analysieren einen horizontalen Kanal gemäß Ihrer Zeichnung.
 
yan720:

Der Punkt ist, dass ich die Kanalbreite nicht zwangsweise festlegen möchte - der Expert Advisor/Indikator muss das Vorhandensein des Kanals unabhängig vom Währungspaar und/oder der aktuellen Volatilität feststellen. Dementsprechend setze ich nur die minimale und maximale Länge des Kanals aus externen Parametern fest, und das auch nur während des Debuggens des Algorithmus - danach werden diese Parameter in ihn eingenäht. In diesem Stadium gibt es einige Beschwerden. Obwohl ich die Kanäle im Allgemeinen abfangen kann (das Bild stammt aus dem Arbeitscode), würde ich gerne andere Lösungen für dieses Problem sehen.

Nun, es gibt eine Idee, um 2 aufeinanderfolgende Top-Fraktale oder 2 iHighest, die aus, sagen wir, 5-10 Candlesticks bestehen, zu fangen. Wir fangen diesen Fall innerhalb eines bestimmten Längenbereichs ab. Wenn die Werte dieser Spitzen nahe beieinander liegen, finden wir zwischen diesen beiden Spitzen den iLowest.

Suchen Sie in ähnlicher Weise zuerst nach zwei unteren Spitzen und dann nach der oberen Spitze zwischen ihnen.

Dann werden wir von diesen gefundenen Gipfeln aus tanzen. Zunächst ziehen wir Ebenen durch sie. Dann bringen wir dem Code bei, weiter zu denken.

Mit dieser Option werden die externen Parameter wie Channel_width entfernt.

Wie auch immer man es betrachtet, ich denke, wir brauchen zumindest einige Parameter für die Länge.