Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 319

 
Vitaly Muzichenko:

limite - il numero di barre sul grafico, in modo che quando si scorre la storia, l'indicatore sarà visualizzato fino alla fine della storia.


Grazie mille! :)

 

Ciao, potresti dirmi come scrivere il parametro - apply to - Median Price nell'indicatore, in questo caso Moveng

Descriverò il problema, l'indicatore ha un array[][] che registra i dati per calcolare la MA - i dati sono stati registrati a prezzi HL/2, non il default

 

Ciao, sto cercando di scrivere un oggetto di classe CDecisionForest in un file bin (è dalla libreria Alglib), ma non riesco a capire come. Ho provato a usare FileWriteStruct, ma il compilatore dà un errore sul mio argomento di classe:

'df' - structures containing objects are not allowed

È effettivamente possibile scriverlo o devo smontare l'oggetto, scriverlo in parti e poi riassemblarlo?
 
Vitaly Muzichenko:

limite - numero di barre sul grafico, in modo che quando si scorre la storia, l'indicatore sarà visualizzato fino alla fine della storia.


Caro signore, la prego di spiegare.

Non ho avuto successo usando le informazioni del tuo link.

Quando dichiaro il valore limite da solo, appare la finestra "Array out of range".

Il debugger punta alle stringhe con gli array nel ciclo for.

for(int i=0; i<limit; i++) {
    RSI[i] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,i);
  }

for(int i=0; i<limit; i++) {
    BandsMn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_MAIN,i);
    BandsUp[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_UPPER,i);
    BandsDn[i]=iBandsOnArray(RSI,0,BB_Period,BB_Dev,0,MODE_LOWER,i);
  }

Forse c'è un modo più semplice per fare tutto?
Non ho bisogno del disegno.

Solo i valori delle barre attuali e precedenti.

 
Ras al Ghul:

Caro signore, potrebbe spiegarmi?

Usando le informazioni del vostro link, non ho ottenuto successo.

Quando dichiaro il valore limite da solo - appare la finestra "Array out of range".

Il debugger punta alle stringhe con gli array nel ciclo for.

Forse si può fare in un modo più semplice?
Non ho bisogno di disegnare.

Solo i valori della barra corrente e di quella precedente.

Come si calcola il limite?

In realtà, il limite è calcolato nel calcolo inverso dell'indicatore - dall'inizio della storia alla sua fine (ai dati attuali):

   if(rates_total<нужное_количество_баров_для_верного_расчёта) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) {
      limit=rates_total-нужное_количество_баров_для_верного_расчёта-1;
      // здесь, при необходимости очистки мусора в буферах, их инициализация пустыми значениями
      }
   //---
   for(int i=limit; i>=0; i--) {
      // тут цикл просчёта индикатора
      }
Il concetto"necessary_number of_bars_for_the_fidelity_calculation" indica il numero minimo di barre su cui l'indicatore sarà calcolato correttamente. Per un frattale 2X2 ci sono sei barre - due a sinistra, una al centro, due a destra e una all'estrema destra che dovrebbero essere completamente formate perché il frattale non venga ricalcolato.
 

Salve, potreste dirmi come aumentare la dimensione di un array unidimensionale in un indicatore

A condizione che abbia un indice del buffer per chiamare

E la dimensione dell'array supera il numero di barre

 

Bloccato, mi sembra, in un posto così semplice. Che dire dell' int globale chekcount=0; int count=0; nel caso in cui io voglia eseguire diverse funzioni counter() in parallelo?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???

int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;

   return(chekcount);
  }

 
Nauris Zukas:

Bloccato, mi sembra, in un posto così semplice. Cosa fare con global int chekcount=0; int count=0; se voglio eseguire diverse funzioni counter() in parallelo?

Basta usare una classe, o fare copie di funzioni con nomi diversi.

 
Vitaly Muzichenko:

Usare solo una classe, o fare copie di funzioni con nomi diversi.

Quindi non è così semplice... Grazie!

 

Qualcuno può riscrivere questa funzione usando una classe, se non è difficile?

void OnTimer()
  {
Print("counter(10)= ",counter(10));
Print("counter(14)= ",counter(14)); // !!!
  }

int chekcount=0; //???
int count=0; //???
int counter(int Pause=10)
  {
   count++;
   if(count>=chekcount+Pause)
      chekcount=count;
   return(chekcount);
  }