Problemi di controllo degli scambi aperti - pagina 3

 
extern int     iOpenHour                = 6;

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

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

for(b=0; b<=24; b++)                               // scans the last 24 bars on eurusd
   {
      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[1] = (dibsclose-dibsopen);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement
    

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

for(b=0; b<=24; b++)                               // scans the last 24 bars on eurusd
   {
      bartime = iTime("GBPUSD", 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("GBPUSD", 60, b);    // Get the open value of that bar (Close of 6gmt day) 
            dibsopen    = iOpen("GBPUSD", 60, b+24); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[2] = (dibsclose-dibsopen);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement



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

for(b=0; b<=24; b++)                               // scans the last 24 bars on eurusd
   {
      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("USDCHF", 60, b);    // Get the open value of that bar (Close of 6gmt day) 
            dibsopen     = iOpen("USDCHF", 60, b+24); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[3] = (dibsclose-dibsopen);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement



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

for(b=0; b<=24; b++)                               // scans the last 24 bars on eurusd
   {
      bartime = iTime("USDJPY", 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("USDJPY", 60, b);    // Get the open value of that bar (Close of 6gmt day) 
            dibsopen     = iOpen("USDJPY", 60, b+24); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[4] = (dibsclose-dibsopen);   // Calculate the range of the Dibs day
         }                                                  // End of if statement
    }                                                       // End of for statement


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



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


   return(0);
  }

Ok, l'ho sistemato in modo che il prevdayrange sia l'unico array. Ora per qualche motivo la sezione USDJPY del codice non funziona. È la stessa delle altre 4 istruzioni con la coppia cambiata in iopen's e il valore corretto dell'array...

Ecco cosa fa ---> http://clip2net.com/s/13WDY

Come si mettono gli spazi nella funzione di commento e si può fare in modo che venga stampato alla riga successiva?

 
dazamate:

Ok, l'ho sistemato in modo che il prevdayrange sia l'unico array. Ora per qualche motivo la sezione USDJPY del codice non funziona. È la stessa delle altre 4 istruzioni con la coppia cambiata in iopen's e il valore corretto dell'array...

Ecco cosa fa ---> http://clip2net.com/s/13WDY

Come si mettono gli spazi nella funzione di commento e si può fare in modo che stampi alla riga successiva?


Il primo elemento in un array è 0, se un array ha 4 elementi l'ultimo sarà 3 non 4 ;-) https://docs.mql4.com/basis/variables

Commento()

Comment("This adds some spaces ", "   ", "this adds a carriage return", "\n");
 

Va bene, questo codice sta facendo più o meno quello che dovrebbe fare, tranne che quando si apre una nuova candela delle 6:00 non aggiorna le informazioni. Se la candela corrente è una candela delle 6:00 voglio che scansioni quella barra aperta e vada indietro di 24 barre e scansioni quella barra aperta e faccia tutti i calcoli e se la barra corrente non è una barra delle 6:00 allora continua a fare un passo indietro di una barra finché non trova l'ultima candela delle 6:00. Sembra che vada indietro bene, ma non sembra gradire che la candela corrente sia la 6:00. Non riesco a capirlo. Le leggende possono individuare il problema?


Il codice sta diventando troppo esteso per essere postato qui, quindi ho dovuto caricare il codice sorgente

File:
hothand.mq4  11 kb
 
dazamate:

Sembra fare un passo indietro ok, ma non sembra gradire se la candela corrente è quella delle 6:00. Non riesco a capirlo. Le leggende possono individuare il problema?


Sta usando lo Strategy Tester? Se lo fosse...

WHRoeder 2011.07.18 18:30

Limitazione del Tester: Non è possibile ottenere i dati della barra zero nel tester per altri timeframes o coppie. Provate:

 

No Raptor questo era su un grafico dal vivo, dovrei cambiare


for(b=0; b<=24; b++) to for(b=-1; b<=24; b++)
Sto solo pensando ad alta voce, non sono sicuro che questo possa risolvere qualcosa
 
dazamate:

No Raptor questo era su un grafico dal vivo, dovrei cambiare


Sto solo pensando ad alta voce, non sono sicuro che questo risolverebbe qualcosa
Ah, OK, guarderò di nuovo il tuo codice...
 
Proverò il tuo codice al prossimo cambio d'ora perché non vedo nulla di ovvio... sei sicuro che stavi controllando alle 6 del mattino ora del server? l'ora locale del PC non è necessariamente la stessa ora del server, l'ora del server è quella che viene usata nel tuo codice e sui tuoi grafici.
 

Tutto sembra funzionare bene, ma non prende la barra delle 6:00 a meno che non sia dietro la barra attuale, se questo ha senso.


Grazie per il tuo tempo Raptor

 
dazamate:

Tutto sembra funzionare bene, ma non prende la barra delle 6:00 a meno che non sia dietro la barra corrente, se questo ha senso.


Grazie per il tuo tempo Raptor

Sì, penso di aver capito cosa stai dicendo, non si aggiorna quando l'ora passa dalle 05:59 alle 06:00...

Sto usando MBT per i test e il tempo del server per la barra H1 corrente è 04:00 quindi ho impostato iOpenHour a 5, vediamo cosa succede tra 20 minuti.

 

OK, ho lo stesso problema, nessun aggiornamento quando la candela corrente ha aperto alle 05:00 . . . . interessante.

Motivazione: