Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 154

 
nidves in primo luogo, fai un messaggio corretto con il codice, è molto difficile da capire, e in secondo luogo, vorrei vedere la struttura del file delle notizie, altrimenti non è chiaro quali dati vengono utilizzati dove.
 

La prima cosa che salta all'occhio è che stai usando l'EA come un normale script. Leggete il manuale per vedere come sono diversi. È lo script, non l'Expert Advisor, che è adatto al tuo compito!

In secondo luogo,perché usate questo design?

  for (count=1; count<=countstr; count++)
  {
   //----
   //----  
  if (count>=countstr) break;
  }

E la radice del vostro problema.

void CreatFile()
   {
    string Filepatch="Analyse news\\"+"Symbol"+"_"+IntegerToString(periodMT)+".csv";
    Comment("Creat a new file");
    int file=FileOpen(Filepatch, FILE_WRITE|FILE_CSV);
    FileWrite(file, "Symbol","Period","News","Data Time","Open","High","Low","Close");
    
    int  bar_index=iBarShift(symbolMT,periodMT,DateNews[count-1]); 
//Чему равен в этот момент count? 
//Для чего нужен был массив событий если в обработку попадает только одно событие?
//Функция iBarShift (так как вы используете) возвращает либо номер бара по времени либо ближайший номер бара если в истории есть пропуски 
//Внимательно почитайте описание 
    int  countBar=bar_index;
    
    for(count=1; count<=countstr; count++)
    {
    countBar--;
    
    FileWrite(file,symbolMT,periodMT,NameNews[count-1],DateNews[count-1],
    
    DoubleToStr(iOpen(symbolMT,periodMT,countBar))

    );
    }
    FileClose(file);
    ExpertRemove();
   }

Bene, l'ultimo che hai incasinato molto in un semplice programma, descrivi cosa vuoi da questo programma e proviamo a scrivere lo script passo dopo passo in modo carino!

 
Vitaly Gorbunov:

La prima cosa che salta all'occhio è che stai usando l'EA come un normale script. Leggete il manuale per vedere come sono diversi. È lo script, non l'Expert Advisor, che è adatto al tuo compito!

In secondo luogo,perché usate questo design?

E la radice del vostro problema.

E infine, stai facendo troppo rumore in un programma semplice, descrivi cosa vuoi da questo programma e proviamo a scrivere lo script passo dopo passo!

Vitaly, grazie per la tua risposta!

1)Riguardo allo script, ti capisco, ci proverò.

2)Bene, tutto è semplice, interrompo il ciclo for.

3) Voglio creare un Expert Advisor o uno script che scarichi le quotazioni per determinati strumenti + timeframes, notizie specifiche per data e ora specifiche.

Il risultato finale della scrittura del file dovrebbe essere come questo

SimboloPeriodoNotizieDateTimeAprireAltoBassoChiudere
GBPUSD5Indice dei prezzi al consumo di riferimento del Canada (CPI) (m/m)26.01.2018 16:30:000.000000000.000000000.000000000.00000000
GBPUSD5Indice dei prezzi al consumo di riferimento del Canada (CPI) (m/m)21.12.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Indice dei prezzi al consumo di riferimento del Canada (CPI) (m/m)17.11.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Indice dei prezzi al consumo di riferimento del Canada (CPI) (m/m)20.10.2017 15:30:000.000000000.000000000.000000000.00000000

E così su diversi strumenti+tempi+notiziee date.

C'è un'altra sfumatura. Se i dati sono scaricati sul timeframe 60 minuti, allora le quotazioni dovrebbero corrispondere ai timeframe 16:00 e 15:00.

Se il timeframe delle notizie è 14:45, allora le quotazioni dovrebbero corrispondere all'ora:

1 minuto - 14:45

5 minuti - 14:45

15 minuti - 14:45

30 minuti - 14:30

60 minuti - 14:00

Spero di essere stato chiaro. Grazie

 

Guardate di nuovo questo ciclo! Il conteggio delle variabili viene cambiato solo dall'istruzione for stessa, quindi if è semplicemente superfluo in questo ciclo.

Definiamo ora come elaboreremo i dati. Mi sembra che sarebbe più logico leggere dal file delle notizie i parametri delle notizie, elaborare i dati e scriverli nel file delle citazioni. Raccogliere un array di notizie che poi devono passare attraverso un array di nuovo per un record non sembra razionale, inoltre, molto spesso nel trattamento degli array può fare un sacco di errori associati agli indici.

 
Vitaly Gorbunov:

Guardate di nuovo questo ciclo! Il conteggio delle variabili viene cambiato solo dall'istruzione for stessa, quindi if è semplicemente superfluo in questo ciclo.

Definiamo ora come elaboreremo i dati. Mi sembra che sarebbe più logico leggere dal file delle notizie i parametri delle notizie, elaborare i dati e scriverli nel file delle citazioni. Raccogliere un array di notizie, che poi di nuovo a correre attraverso un array per un record non sembra razionale, inoltre, molto spesso nel trattamento di array può fare un sacco di errori associati a indici.

Voglio dire, creare i file con le citazioni in anticipo e aggiungere i parametri delle notizie al file?

 
nidves:

Intendi creare i file di quotazione in anticipo e aggiungere i parametri delle notizie al file?

Tu non mi capisci, noi leggiamo dal file delle notizie, lo elaboriamo e lo scriviamo immediatamente nel file delle citazioni e così via fino a quando tutto il file delle notizie è elaborato!
 
Vitaly Gorbunov:
Tu non mi capisci, noi leggiamo dal file delle notizie, lo elaboriamo e lo scriviamo immediatamente nel file delle citazioni e così via fino a quando tutto il file delle notizie è elaborato!
È quello che sto cercando di fare, solo attraverso gli array. Come scriveresti questo codice?
 
nidves:
È quello che sto cercando di fare, solo attraverso gli array. Come scrivereste tale codice?
Perché usare un array dove non è necessario? Più semplice è il codice, meno errori si possono fare!
 
Vitaly Gorbunov:
Perché dovrei usare l'array dove non è necessario? Più semplice è il codice, meno errori si possono fare!

Sto imparando a lavorare con gli array attraverso questo codice. Dopo tutto, il compito non è complicato in linea di principio.

OpenSymbol  [count-1]=iOpen(symbolMT,periodMT,numberBar);

Le virgolette "Open" sono già memorizzate nell'array di cui sopra. Pertanto, ho bisogno solo di estrarre la citazione della data di cui ho bisogno dall'array.

 
nidves:

Sto imparando a lavorare con gli array attraverso questo codice. Dopo tutto, il compito non è complicato in linea di principio.

Le virgolette "Open" sono già memorizzate nell'array di cui sopra. Pertanto, ho solo bisogno di estrarre la citazione della data di cui ho bisogno da questo array.

Ora vado in estate e sarò lì lunedì. Se sei interessato, aggiungimi come amico e chiacchiereremo senza sporcare il forum.