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

 
Roger:


Zeigen Sie die Funktion selbst.

Wenn es sich um void ClosePartPosBySelect(double Part) handelt, ändern Sie in

void ClosePartPosBySelect()

Aber wie kann man einen Parameter an diese Funktion übergeben? Angenommen:
if (x==2 && y==4) Part=0.5;
else Part=2;

ClosePartPosBySelect(Part);

Kims Funktion ClosePosBySelect() wird so geändert, dass sie einen übergebenen Parameter vom Typ double benötigt, nämlich die Variable Part

 
keekkenen:

zwei Möglichkeiten

Fügen Sie in der Funktion, in der der Wert geändert wird, ein kaufmännisches Komma ein,

z.B. void function( double& Part ){}

Wenn ein Wert innerhalb der Funktion geändert wird, kehrt der neue Wert an die Stelle des Aufrufs zurück

2. Entfernen Sie die Variable aus der Parameterliste der Funktion. Da die Variable global definiert ist, kann ihr Wert an jeder Stelle des Codes geändert werden, ohne sie als Parameter zu übergeben...

Die erste Variante ist besser, da es mehr als eine global deklarierte Variable (und innerhalb einer Funktion) geben kann...


Ich habe den Beitrag überflogen, und die Antwort ist eigentlich schon gegeben worden...

Danke, ich werde es ausprobieren...
 
zelek:

Hallo liebe Fachleute.

Ich würde wirklich gerne einen EA schreiben, der zwei Verkaufs- und Kaufaufträge gleichzeitig öffnet.

Nach einer bestimmten Anzahl von Punkten (Parameter lim) würde der Verlustauftrag geschlossen werden,

und ein gewinnbringender Auftrag wird geschlossen, wenn der Kurs unter den Höchstkurs seit Eröffnung des Auftrags gefallen ist

(eine Art virtueller Trailing-Stop).

Unter Qualen habe ich dies erstellt, aber es funktioniert nicht... funktioniert nicht

Bitte schlagen Sie etwas vor

Wie werden Sie entscheiden, ob es sich um einen Pullback oder eine Umkehrung handelt? Oder werden Sie bei jedem Rückschlag zwei Positionen eröffnen? Es ist eine Pleite...
 
artmedia70:
Wie übergibt man dann einen Parameter an diese Funktion?


Wenn der Parameter global deklariert ist, brauchen Sie ihn nicht zu übergeben, sondern weisen den gewünschten Wert direkt zu. Nur dann muss sie nicht in der Funktion überschrieben werden.
 
Es ist interessant...

Das ist das ganze Jahr 2009... Für die Eingabe werden nur Momentum-Messwerte verwendet:
Auf der TF H1 suchen wir den Momentum-Bewegungsbruch, und auf der TF M5 finden wir den genauen Zeitpunkt für den Einstieg in den Markt. Bei der Eröffnung einer Position prüfen wir den Zeitpunkt der vorherigen Positionseröffnung, um nicht das gesamte Depot zum Zeitpunkt des Einstiegssignals zu öffnen...
Der Zeitpunkt des Markteintritts wird durch die Demarker-Position in den überkauften/überverkauften Zonen der TF M5 und M15 bestätigt...
... Übrigens, ohne Schließfächer war es auch positiv.

... Selbst die Tatsache, dass ich den Test fahrlässigerweise nur mit Demarker durchgeführt habe, lieferte noch interessante Ergebnisse:

Irgendwo steht etwas in dieser Art:

//---------------------------------------------------------
   MomML_0   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,0);
   MomML_1   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,1);
   MomML_2   =iMomentum(NULL,PERIOD_M5,14,PRICE_CLOSE,2);
   
   MomST_0  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,0);
   MomST_1  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,1);
   MomST_2  =iMomentum(NULL,PERIOD_H1,14,PRICE_CLOSE,2);
   
   DeM5     =iDeMarker(NULL,PERIOD_M5, 14,0);
   DeM15    =iDeMarker(NULL,PERIOD_M15,14,0);

//---------------------------------------------------------
//==============================================================================================
   // Поиск пересечений
//==============================================================================================  
//----------------------- Проверка условий для старшего ТФ --------------------    
// ---------- Покупка --------
   MomBuy56M15=false;
   if (
         MomST_0<100 && 
         MomST_1<100 && 
         MomST_2<100 &&
         MomST_0>MomST_1 &&
         MomST_1<MomST_2 &&
         DeM15<0.3
      )                                
         {   
            MomBuy56M15=true;
         }

// ---------- Продажа --------
   MomSell56M15=false;
   if (
         MomST_0>100 && 
         MomST_1>100 && 
         MomST_2>100 &&
         MomST_0<MomST_1 &&
         MomST_1>MomST_2 &&
         DeM15>0.7
      )                                
         {   
            MomSell56M15=true;
         }
//----------------------- Проверка условий для младшего ТФ ---------------------    
// ---------- Покупка --------
   MomBuy56M5=false;
   if (
         MomML_0<100 && 
         MomML_1<100 && 
         MomML_2<100 &&
         MomML_0>MomML_1 &&
         MomML_1<MomML_2 &&
         DeM5<0.3   
      )                                
         {   
            MomBuy56M5=true;
         }

// ---------- Продажа --------
   MomSell56M5=false;
   if (
         MomML_0>100 && 
         MomML_1>100 && 
         MomML_2>100 &&
         MomML_0<MomML_1 &&
         MomML_1>MomML_2 &&
         DeM5>0.7   // ... и тут ...
      )                                
         {   
            MomSell56M5=true;
         }      

//==============================================================================================
   // Вычисление основных торговых критериев
//====================================================================  
   if (
         MomBuy56M15==true &&
         MomBuy56M5 ==true
      )
      
      return(106);                       // Открытие Buy по стратегии 6 
 //====================================================================   
 
   if (
         MomSell56M15==true &&
         MomSell56M5 ==true
      )
      
      return(206);                       // Открытие Sell по стратегии 6 
 //====================================================================   

Ich frage mich, wenn das Ergebnis ähnlich ist, warum dann das Momentum verwenden, das (wie man sagt) gut ist, um den Moment der Erschöpfung des Trends (Ende) anzuzeigen? Wenn das Momentum durchbricht, steigt der Kurs weiter an und bei jedem neuen Momentumbruch werden Positionen eröffnet... Also habe ich beschlossen, die ersten Einträge zu sperren...
Was halten Sie davon?

 

Sie können keinen Null-Balken im Tester verwenden, und zwar aus dem einfachen Grund, dass der Tester trotz der Tatsache, dass er nur gebildet wird (Tester-Ticks), vollständige Informationen über die Preise dieses Balkens hat, weil er (der Balken) eine vollendete Tatsache ist und der Tester in die Zukunft blickt, indem er Daten aus der Kursgeschichte nimmt, nicht das, was er mit Ticks erzeugt... verschieben Sie einen Balken nach links und berücksichtigen Sie Momentums für 1,2,3 statt 0,1,2 und Demo 1 statt 0...

Es ist auch sinnvoll, nur aktuelle m5 zu verwenden und den Zeitraum zu multiplizieren, in dem ältere Preise verwendet werden. 14 * PERIOD_H1 / Zeitraum() und 14 * PERIOD_M15 / Zeitraum()

 
keekkenen:

Sie können keinen Null-Balken im Tester verwenden, und zwar aus dem einfachen Grund, dass der Tester trotz der Tatsache, dass er nur gebildet wird (Tester-Ticks), vollständige Informationen über die Preise dieses Balkens hat, weil er (der Balken) eine vollendete Tatsache ist und der Tester in die Zukunft blickt, indem er Daten aus der Kursgeschichte nimmt, nicht das, was er mit Ticks erzeugt... verschieben Sie einen Balken nach links und berücksichtigen Sie Momentums für 1,2,3 statt 0,1,2 und Demo 1 statt 0...

Es ist auch sinnvoll, nur aktuelle m5 zu verwenden und den Zeitraum zu multiplizieren, in dem ältere Preise verwendet werden. 14 * PERIOD_H1 / Zeitraum() und 14 * PERIOD_M15 / Zeitraum()

Warum ist der Preis bei jedem Tick anders, wenn wir jeden Schlusskurs des Nullbalkens im Tester drucken? Dasselbe auf höheren Zeitskalen, dasselbe ohne Visualisierung. Wo bleibt also die Visualisierung?
 
Nun, wenn sich das Ergebnis (Dynamik) nicht sehr von dem unterscheidet, das man mit einem Null-Balken erhält, gibt es vielleicht keinen Blick, aber es ist besser, sich vor Illusionen zu schützen...
 

Ich habe mir schon den Kopf zerbrochen :) - Hier ist das Problem:

EA arbeitet im halbautomatischen Modus - seine Eingänge sind meine Ausgänge von Positionen, aber ich kann nicht herausfinden - wie die EA zu machen, um nur einen Handel vor meinem Befehl für den nächsten zu machen, dh ich habe einfach nicht eine Start/Start-Taste auf dem Chart :) . Mein init()-Abschnitt ist belegt, und ich kann meinen EA nicht deaktivieren - seine Berechnungen werden für die korrekte Schleppnetzfischerei benötigt

 
keekkenen:
Nun, wenn sich das Ergebnis (Dynamik) nicht sehr stark von dem unterscheidet, das mit einem Null-Balken erzielt wird, gibt es vielleicht kein Peeking, aber es ist besser, sich vor Illusionen zu schützen...
Alle Illusionen mögen Illusionen sein, aber Ende 2008 konnte die ganze Bruderschaft der getriggerten Limits, die treu ihr Depot auffüllten, den Drawdown nicht verkraften, der sich aus den Positionen ergab, die durch die Signale der Indecks eröffnet wurden. :)

Wie kann man solche Probleme lösen?


Vielleicht gibt es eine Möglichkeit, diesen Schlupf zu verringern? Ihre Meinung?

Grund der Beschwerde: