Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1044

 
LRA:

int Flags=FILE_WRITE+FILE_TXT+FILE_COMMON;

int Info = FileOpen(fName,Flags);

FileWrite(Info,What's Up); Sull'altro terminale, leggere. Cursore su FileOpen e F1 - ottenere aiuto

Grazie, darò un'occhiata!
 

Ciao a tutti.

Il mio array di serie temporali non viene aggiornato nella stringa di definizione dell'evento trade (quando appare una nuova candela), o meglio il suo valore non cambia quando appare una nuova candela.

if(T[i]!=iTime(NULL,TF[i],1))

T[i] viene impostato per la prima volta al lancio dell'Expert Advisor e poi, quando appare una nuova candela, il valore viene aggiornato.

Il parametro I è impostato sulla base dei parametri di ingresso.

Ciò che è interessante, la versione in cui ho usato diversi TF per lavorare, e ho dovuto usare un ciclo for a causa di questo, tutto ha funzionato bene, ma qui fallisce - non viene aggiornato, e questo è tutto...(

 
Igemon:

Ciao a tutti.

Il mio array di serie temporali non viene aggiornato nella stringa di definizione dell'evento trade (quando appare una nuova candela), o meglio il suo valore non cambia quando appare una nuova candela.

T[i] viene impostato per la prima volta quando si lancia l'Expert Advisor e poi, quando appare una nuova candela, il valore viene aggiornato.

Il parametro I è impostato sulla base dei parametri di ingresso.

Ciò che è interessante, ho usato diversi TF per lavorare nella versione in cui dovevo usare un ciclo for e funzionava bene, ma ora non riesce - semplicemente non si aggiorna...(

A quanto pare non è stato tirato fuori dal circuito correttamente...

Ecco una funzione personalizzata per definire una nuova barra

bool NewBar(int tf, datetime &lastbar)
{
   datetime curbar = iTime(_Symbol, tf, 0);
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}//******************************************************************|

Variabili di input:

tf - periodo del grafico o valore del periodo per determinare l'occorrenza di una nuova barra.

lastbar - una variabile passata per riferimento per memorizzare il tempo dell'ultima barra.

void OnTick()
{
// хотим определить наступление нового дня
 static datetime lastDay, lastHour;
 bool newDay, newHour;
 newDay = NewBar(PERIOD_D1, lastDay);
 if(newDay)
 Print("наступил новый день");
// и нового часа
 newHour = NewBar(PERIOD_H1, lastHour);
 if(newHour)
 Print("наступил новый час");
}
 
AlexeyVik
bool NewBar(int tf, datetime &lastbar)
{
   datetime curbar = iTime(_Symbol, tf, 0);
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}//******************************************************************|

La prima volta che viene chiamato dall'EA, segnala immediatamente una nuova barra. Corretto aggiungendo chiamate di funzioni a OnInit()

Quando viene chiamato per la prima volta dallo script, segnala immediatamente una nuova barra, poi è sempre falso. Corretto aggiungendo RefreshRates() all'inizio della funzione

 
LRA:

La prima volta che viene chiamato dall'EA, segnala immediatamente una nuova barra. Corretto aggiungendo chiamate di funzioni a OnInit()

Quando viene chiamato per la prima volta dallo script, segnala immediatamente una nuova barra, poi è sempre falso. Corretto aggiungendo RefreshRates() all'inizio della funzione

1. Al primo richiamo vero, è abbastanza normale, se non ci sono state barre, quella che è apparsa sarà la nuova. Se necessario, se la strategia lo richiede, è possibile rifiutare una nuova barra e altre in questo modo. A colpo d'occhio, senza pensare, ne introduco altri due.

static datetime lastDay = iTime(_Symbol, PERIOD_D1, 0);, lastHour = iTime(_Symbol, PERIOD_H1, 0);

o

if(lastbar != curbar && lastbar > 0)

2. Perché lo script dovrebbe definire una nuova barra? Questo è sciocco fino a che punto?

 

Ma perché non funziona qui...(((( Penso che vada bene(

extern int TFrame=1;

datetime T[6];
int TF[6]={1,5,15,30,60,240};
int i=TFrame-1;

int OnInit()
   {
   T[0]=iTime(NULL,1,1);
   T[1]=iTime(NULL,5,1);
   T[2]=iTime(NULL,15,1);
   T[3]=iTime(NULL,30,1);
   T[4]=iTime(NULL,60,1);
   T[5]=iTime(NULL,240,1);
   for(int q=0;q<=5;q++)
      Print(T[q]);
   return(INIT_SUCCEEDED);
   }
 
void OnTick()
   {
   while(1==1)
      {
      if(T[i]!=iTime(NULL,TF[i],1))
 

Igemon:

void OnTick()
   {
   while(1==1)
      {
      if(T[i]!=iTime(NULL,TF[i],1))
Mi scusi, Ygemon, ma perché questa imprudenza? Quale persona gentile ti ha consigliato di farlo?
 
Buona giornata a tutti. Qualcuno potrebbe consigliarmi: come posso assicurarmi che l'EA funzioni correttamente, cioè che esegua un dato algoritmo quando il terminale viene riavviato o quando internet è disconnesso?
 
artmedia70:
Mi scusi, Ygemon, ma perché questa imprudenza? Quale persona gentile ti ha consigliato di farlo?
Cosa c'è che non va? Non ho messo il resto del codice, perché lì è tutto normale. Il ciclo è necessario per non dipendere dai tick, quando si definiscono gli eventi, per non riavviare il PC è dormire a 100 mlsec