Probleme bei der Prüfung auf offenen Handel - Seite 2

 
dazamate:


int start(){
   static datetime Time0;
   if (Time0 == Time[0]) return; Time0 = Time[0];
   // A new bar has started.

WHRoeder, Dieser Code sieht so einfach aus, aber ich kann nicht in meinem Kopf herausfinden, wie er funktioniert. Wird die if-Anweisung nicht immer wahr sein, wenn sie time0 gleich time[0] macht, jedes Mal wenn time0 gleich time[0] ist? Ich sage nicht, dass es nicht funktioniert, aber ich verstehe einfach nicht, wie es so strukturiert funktioniert.

1. Tick: Time0 ist nicht gleich Time[0 ], also wird Return nicht ausgeführt,Time0 wird auf Time[0 ] (Startzeit des aktuellen Taktes) gesetzt, der Rest der Startfunktion wird ausgeführt.

2. und folgende Ticks: Wenn Time0 immer noch gleich der Startzeit des aktuellen Balkens ist, befinden wir uns immer noch auf demselben Balken, Return wird ausgeführt und die Startfunktion wird beendet. Wenn Time0 nicht gleich der Startzeit des aktuellen Balkens ist, befinden wir uns in einem neuen Balken, Return wird nicht ausgeführt, Time0 wird auf Time[0] (Startzeit des neuen aktuellen Balkens) gesetzt und der Rest der Startfunktion wird ausgeführt.

 
dazamate:

Wie würde ich vorgehen, um einen Zähler zu erstellen, wenn ein schwebender Auftrag platziert wird und nicht innerhalb von x Bars ausgelöst wird, dann wird er storniert? Alles, was mir einfällt, ist ein Zähler, der jedes Mal zählt, wenn sich ein neuer Balken bildet, und wenn die Anzahl der gezählten Balken == die angegebene zulässige Anzahl von Balken ist, bevor die schwebenden Aufträge storniert werden. Der Balkenzähler wird jedes Mal zurückgesetzt, wenn ein neuer schwebender Auftrag eröffnet wird? Wie hört sich das an?

Ich würde eine Funktion erstellen, die nach schwebenden Aufträgen sucht, nachschaut, wann jeder Auftrag eröffnet wurde, prüft, wie lange es her ist, und wenn es länger als das Zeitlimit ist, den Auftrag schließt.

 
dazamate:

Ich möchte eine Funktion, die eurusd, usdchf, gbpusd, usdjpy auf 1hr tf scannt zu machen. Es geht zurück zu den letzten 06:00 gmt Kerze Aufzeichnungen der offenen, geht zurück eine weitere 24 Bars auf die prev 06:00 gmt Kerze Aufzeichnungen, die offene zu und zeichnet die 6gmt - 6gmt Bereich für jedes Paar. Dann vergleicht die 6gmt - 6gmt Bereich von allen Paaren und gibt die eine, die am höchsten ist. Ist es möglich, für eine ea zu tun, dass aus, die an 1 Zeit-Chart?

Bei allen Problemen dieser Art muss man sich zuerst eine Lösung überlegen, bevor man über den Code nachdenkt ... IMO. Erstellen Sie ein Flussdiagramm oder schreiben Sie einen Pseudocode . . eine Lösung finden, die zuerst Sinn macht . . dann den Code betrachten.

Um Ihre letzte Frage zu beantworten, ja, es ist möglich, das zu tun, zum Beispiel, um den offenen Wert für eine bestimmte Kerze von einem anderen Paar als dem des EAs zu erhalten, würde ich verwenden ...

iOpen( string symbol, int timeframe, int shift)

Sobald Sie Ihre Werte für die Wut der 4 Paare haben, können Sie leicht den größten Wert bestimmen, indem Sie etwas wie dieses verwenden:

  MathMax( double value4, (MathMax( double value3, (MathMax( double value1, double value2))))) ;

. . . oder Sie könnten die Werte in ein Array packen und ArraySort verwenden . . . es gibt in der Regel mehr als einen Weg, etwas zu tun, zuerst müssen Sie einen Plan haben, wie Sie Ihr Problem lösen werden.

EDIT: Denken Sie daran, dass einige dieser Dinge mit dem Strategy Tester nicht korrekt funktionieren werden.

 
extern int     iOpenHour                = 6;

int start()
  {
  
int b, scannedhour;
datetime bartime;
double dibsclose, dibsopen, prevdayrange;

for(b=0; b<=24; b++)                                   // scans the last 24 bars 
   {
      bartime = iTime("EURUSD", 60, b);                // checks the open time of each bar
      scannedhour = TimeHour(bartime);                 // extracts the hour of that bar
    
      if ( scannedhour == iOpenHour )                  // Check to see if scanned hour = Dibs hour
         {
            dibsclose    = iOpen("EURUSD", 60, b);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen     = iOpen("EURUSD", 60, b-24);  // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange = (dibsclose-dibsopen);       // Calculate the range of the Dibs day
         }                                             // End of if statement
    }                                                  // End of for statement


Comment("Prev Dibs day range is...",prevdayrange, "dibsclose  =  ", dibsclose, "dibsopen  =  ",dibsopen, "Scannedhour=",scannedhour);      


   return(0);
  }

In Ordnung, dies ist mein eigener Versuch, einige Code zu schreiben, die den eurusd 1hr Chart scannen wird, bis es die letzte 06:00 bar findet, zeichnet es offen, geht zurück eine andere 24 Bars, um die offene dieser bar (Beginn der 06:00 Tag) und bekommt offen-open-Bereich von ihnen 2 ausgewählten Bars.

Überraschung: Es funktioniert nicht. Lol ------> http://myfacewhen.com/307/

Sagen Sie mir, was ich verbockt habe. Oder habe ich das einfach falsch angepackt? Ich habe es versucht hehe

 

Ich habe ein Problem entdeckt... 24 Stunden vor b ist b+24 . . die Balken zählen vom aktuellen Balken ( 0 ) nach links.

dibsopen     = iOpen("EURUSD", 60, b-24);  // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)

change to:

dibsopen     = iOpen("EURUSD", 60, b+24);  // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)

Gut gemacht, dass Sie die Kommentare hinzugefügt haben, das ist eine sehr gute Übung ... :-)

 
RaptorUK:

Ich habe ein Problem entdeckt... 24 Stunden vor b ist b+24 . . die Balken zählen vom aktuellen Balken ( 0 ) nach links.

Gut gemacht, dass Sie die Kommentare hinzugefügt haben, das ist eine sehr gute Übung ... :-)


Wow, gut erkannt, ich hätte eine Weile gebraucht, um das herauszufinden, lol. Ich kann nicht glauben, dass ich das alles richtig gemacht habe - dieser dumme Fehler. Ich habe das Gefühl, ich komme jetzt weiter. Ja, ich habe die Kommentare hinzugefügt, um mir zu helfen, den Überblick zu behalten, was ich tue, und um es für euch super einfach zu machen, zu sehen, was ich zu tun versuche. Jetzt werde ich es dazu bringen, die 4 Paare zu vergleichen und das mit dem höchsten Wert auszuspucken und euch wissen lassen, wie es läuft. Danke RaptorUK
 
Gute Arbeit, gut gemacht. Gern geschehen :-)
 
extern int     iOpenHour                = 6;

int start()
  {
                                                            //  Array Categorys ( 1  EURUSD, 2 GBPUSD, 3 USDCHF, 4 USDJPY )
int b[4], scannedhour[4];
datetime bartime[4];
double dibsclose[4], dibsopen[4], prevdayrange[4];

//----------------------------------------------------------------------------------------------
//        EURUSD PREV DAY RANGE CALC

for(b[1]=0; b[1]<=24; b[1]++)                               // scans the last 24 bars on eurusd
   {
      bartime[1] = iTime("EURUSD", 60, b[1]);               // checks the open time of each bar
      scannedhour[1] = TimeHour(bartime[1]);                // extracts the hour of that bar
    
      if ( scannedhour[1] == iOpenHour )                    // Check to see if scanned hour = Dibs hour
         {
            dibsclose[1]    = iOpen("EURUSD", 60, b[1]);    // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[1]     = iOpen("EURUSD", 60, b[1]+24); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[1] = (dibsclose[1]-dibsopen[1]);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement
    

//----------------------------------------------------------------------------------------------
//        GBPUSD PREV DAY RANGE CALC

for(b[2]=0; b[2]<=24; b[2]++)                               // scans the last 24 bars on eurusd
   {
      bartime[2] = iTime("GBPUSD", 60, b[2]);               // checks the open time of each bar
      scannedhour[2] = TimeHour(bartime[2]);                // extracts the hour of that bar
    
      if ( scannedhour[2] == iOpenHour )                    // Check to see if scanned hour = Dibs hour
         {
            dibsclose[2]    = iOpen("GBPUSD", 60, b[2]);    // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[2]     = iOpen("GBPUSD", 60, b[2]+24); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[2] = (dibsclose[2]-dibsopen[2]);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement



//----------------------------------------------------------------------------------------------
//        USDCHF PREV DAY RANGE CALC

for(b[3]=0; b[3]<=24; b[3]++)                               // scans the last 24 bars on eurusd
   {
      bartime[3] = iTime("EURUSD", 60, b[3]);               // checks the open time of each bar
      scannedhour[3] = TimeHour(bartime[3]);                // extracts the hour of that bar
    
      if ( scannedhour[3] == iOpenHour )                    // Check to see if scanned hour = Dibs hour
         {
            dibsclose[3]    = iOpen("USDCHF", 60, b[3]);    // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[3]     = iOpen("USDCHF", 60, b[3]+24); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[3] = (dibsclose[3]-dibsopen[3]);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement


//----------------------------------------------------------------------------------------------
//        USDJPY PREV DAY RANGE CALC

for(b[4]=0; b[4]<=24; b[4]++)                               // scans the last 24 bars on eurusd
   {
      bartime[4] = iTime("USDJPY", 60, b[4]);               // checks the open time of each bar
      scannedhour[4] = TimeHour(bartime[4]);                // extracts the hour of that bar
    
      if ( scannedhour[4] == iOpenHour )                    // Check to see if scanned hour = Dibs hour
         {
            dibsclose[4]    = iOpen("USDJPY", 60, b[4]);    // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[4]     = iOpen("USDJPY", 60, b[4]+24); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[4] = (dibsclose[4]-dibsopen[4]);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement




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



Comment("DIBS RANGE EURUSD:...", prevdayrange[1],        //Display Ranges of each pair
        "DIBS RANGE GBPUSD:...", prevdayrange[2],
        "DIBS RANGE USDCHF:...", prevdayrange[3],
        "DIBS RANGE USDJPY:...", prevdayrange[4]);      


   return(0);
  }
Also habe ich alle Variablen in Arrays umgewandelt und die Prüfungen für jede einzelne ausgeführt. Jetzt hat es aufgehört zu funktionieren. Ist es nicht möglich, mehrere for-Schleifen wie diese zu haben?
 
dazamate:
Also habe ich alle Variablen in Arrays umgewandelt und die Prüfungen für jede einzelne ausgeführt. Jetzt hat es aufgehört zu funktionieren. Ist es nicht möglich, mehrere for-Schleifen wie diese zu haben?
Doch, das ist kein Problem, aber verwenden Sie kein Array im for-Schleifen-Index, Sie können jedes Mal b verwenden, wenn Sie möchten. Es wird für jede der for-Schleifen auf 0 zurückgesetzt, so dass die Wiederverwendung kein Problem ist. was brauchen Sie eigentlich ein Array für zu verwenden? ist es nicht nur für den Bereich Werte?
 
RaptorUK:
Ja, Sie können, kein Problem, aber verwenden Sie kein Array in der for-Schleife Index, können Sie b jedes Mal verwenden, wenn Sie möchten. Es wird für jede der for-Schleifen auf 0 zurückgesetzt, so dass die Wiederverwendung kein Problem ist. was brauchen Sie eigentlich ein Array für zu verwenden? ist es nicht nur für die Bereichswerte?
Ahhh ja, ich sehe, was Sie sagen, ich werde es in Ordnung bringen und sehen, wie ich gehe. Schnelle Antworten Mann ich werde Sie zurückzahlen einige $ $$$ wenn diese ea macht mich reich lol