Test di sistemi di previsione in tempo reale - pagina 52

 
grasn >> :

ancora meno di 1,55 :o) Vediamo

Molto probabile ^_^, almeno se si guardano le opzioni

Opzioni visive ECM

 
grasn писал(а) >>

(1) Come inizializzare correttamente un array multidimensionale (tutte le sue dimensioni). Questo codice, come ho capito, sarà corretto per un array unidimensionale e la prima dimensione trovata in quello multidimensionale:

double memRow[];

ArrayResize(memRow, N);
ArrayInitialize(memRow, 0.0);

Ma cosa fare con più dimensioni?

(2) Come estendere dinamicamente gli array univariati e multivariati?

In questo caso, l'array memRow[] dovrebbe aumentare di qualche valore ad ogni iterazione, non importa quale, lasciamo che sia 1 per semplicità. Allo stesso modo, per l'array 2D, dovrebbe crescere in due direzioni di i e j - memRow[i][j]

(1) Questo è corretto ed è esattamente lo stesso per dimensioni multiple. L'inizializzazione mette un valore in tutti gli elementi dell'array, indipendentemente dalla dimensione.

(2) Ahimè, non funzionerà. In MKL4 potete cambiare solo la dimensionalità della prima dimensione di un array multidimensionale. Forse questo sarà corretto in MKL5.

 
NEKSUS_ >> :

Molto probabile ^_^, almeno se si guardano le opzioni

Opzioni visive ECM

Da dove vengono dati così belli?

 
dentraf >> :

Dove hai trovato dei dati così belli?

I dati sono molto ordinari, e se sono belli o no dipende dall'autore ^_^

 

grasn, se la programmazione in MQL4 non è fine a se stessa, allora non sarebbe meglio scrivere le parti più importanti del progetto, specialmente se richiedono array multidimensionali per la normale implementazione, in C e allegarle come DLL? Funzionerà più velocemente e più conveniente per il debug, e il codice sorgente sarà più leggibile (senza i problemi con un sacco di array, indicizzazione indiretta e altre cose, che dovremo inventare in MQL, per aggirare le sue limitazioni).

 
grasn >> :

Prevedo le realizzazioni (traiettorie), ma quando prendo decisioni di trading, mi concentro sulle caratteristiche di "frequenza", ad esempio il valore medio di +/- le traiettorie più probabili sull'orizzonte di previsione. Questi sono più affidabili per quanto riguarda gli obiettivi, ma il percorso del prezzo a questi livelli può essere molto contorto. Naturalmente sto lavorando sul secondo approccio per stimare le zone di inversione locali. Per quanto riguarda MM in quanto tale - non è così semplice, deve essere un compito serio a parte.

Proprio per questo motivo, che è l'oggetto della conversazione, sono in procinto di tradurre il codice da MathCAD a MT. Avrà senso statisticamente avere un periodo di test di almeno 6 mesi (a occhio). Quindi, posterò lo stato un po' più tardi.


A proposito, ho una domanda di programmazione, perché sono bloccato (non sono un gran programmatore):

(1) Come inizializzare correttamente un array multidimensionale (tutte le sue dimensioni). Questo codice, come ho capito, sarà corretto per un array unidimensionale e la prima dimensione trovata in quello multidimensionale:

double memRow[];

ArrayResize(memRow, N);
ArrayInitialize(memRow, 0.0);


Ma cosa fare con più dimensioni?


(2) Come estendere dinamicamente gli array univariati e multivariati?



for(i=0; i<=N-1; i++)

{

...

memRow[];

...

}


In questo caso, l'array memRow[] dovrebbe aumentare di qualche valore ad ogni iterazione, non importa quale, lasciamo che sia 1 per semplicità. Allo stesso modo, per l'array 2D, dovrebbe crescere in due direzioni di i e j - memRow[i][j].


A quanto pare l'accesso a un array multidimensionale dovrà essere implementato come una funzione.


Per esempio, avete un array unidimensionale a[n]


allora supponiamo di volerlo usare come un array tridimensionale i,k,j


allora l'elemento (i,k,j) sarà indirizzato nell'array a, come a[i*3+k*2+j]


E così via...

 

a Yurixx

(1) Все правильно и для нескольких измерений точно так же. Инициализация прописывает одно значение во все элементы массива независимо от размерности.

(2) Ahimè, non funzionerà. In MKL4 potete cambiare solo la dimensionalità della prima dimensione di un array multidimensionale. Forse sarà risolto in MKL5.

Sono contento di vederti nel nostro rifugio sicuro :o). Ed è bene che sia tranquillo a differenza dei rami vicini, dove le passioni umane infuriano, su un posto pari. Un piccolo riassunto per una comprensione più chiara. Supponiamo che esista un tale costrutto:

double memRow[];

...

<какая то первая инициализация массива>

j=1

for(int i=0; i<=N-1; i++)

{

if(<какое то условие>)

{

ArrayResize(memRow, j+1);

<запись значений в расширенный массив>

...

}

}


Come ho capito aumenterà dinamicamente l'array memRow[] quando si innesca qualche condizione. Cioè non conosco in anticipo la lunghezza dell'array. Ho capito bene?


a marketeer

Se la programmazione in MQL4 non è fine a se stessa, alloranon sarebbe meglio scrivere le parti più importanti del progetto, specialmente se richiedono array multidimensionali per la normale implementazione, in C e allegarle come DLL? Funzionerà più velocemente e più conveniente per il debug, e il codice sorgente sarà più leggibile (senza roba intricata con un mucchio di array, indicizzazione indiretta e altre cose, che dovremo inventare in MQL, per aggirare le sue limitazioni).

La mia programmazione in C/C++ è ancora peggio che in MQL. E non ho programmato nel complesso per circa 15 anni. Ora voglio ottenere il primo risultato, in base al quale trarrò alcune conclusioni. Naturalmente, non otterrò alcuna prestazione, ma il sistema inizierà in qualche modo a lavorare in modalità automatica. Almeno lo spero. :о)


Ma hai ragione naturalmente, in futuro sostituirò alcune funzioni della dll e forse l'intero sistema.


a sol

A quanto pare, l'appello a un array multidimensionale dovrà essere implementato come una funzione.

Per esempio, avete un array unidimensionale a[n]

allora supponiamo di volerlo usare come un array tridimensionale i,k,j

allora l'elemento (i,k,j) sarà indirizzato nell'array a, come a[i*3+k*2+j]

E così via...

È un'idea interessante, ma ad ogni iterazione che porta ad un cambio di dimensione della matrice richiederebbe effettivamente il riassemblaggio (o la ricostruzione) dell'intero array. Probabilmente però è fattibile. Grazie per l'idea.

 
grasn писал(а) >>

Supponiamo che esista un tale costrutto:

double memRow[];

...

<какая то первая инициализация массива>

j=1

for(int i=0; i<=N-1; i++)

{

if(<какое то условие>)

{

ArrayResize(memRow, j+1);

<запись значений в расширенный массив>

...

}

}

Come ho capito aumenterà dinamicamente l'array memRow[] quando si innesca qualche condizione. Cioè non conosco in anticipo la lunghezza dell'array. Ho capito bene?

Un piccolo consiglio. Non aumentare l'array di 1 elemento nel ciclo. Tenete il numero di elementi usati (riempiti) in una variabile aggiuntiva, e aumentate l'array di una dozzina di elementi (potete facilmente stimarlo per il vostro compito), quando finite lo spazio. In questo modo, è possibile ottenere un significativo guadagno di prestazioni. // Anche se non ho familiarità con il modo in cui viene allocata la memoria per gli array nel terminale. Se la memoria è allocata con qualche riserva per il caso di allargamento dell'array, allora ArrayResize(memRow, j+1) sarà eseguito molto rapidamente.

 
lea >> :

Un consiglio. Non aumentare l'array di 1 elemento nel ciclo. Tieni il numero di elementi usati (riempiti) in una variabile aggiuntiva e aumenta l'array di una decina di elementi (puoi stimarlo per il tuo compito) quando non c'è abbastanza spazio. In questo modo, è possibile ottenere un significativo guadagno di prestazioni. // Anche se non ho familiarità con il modo in cui viene allocata la memoria per gli array nel terminale. Se la memoria è allocata con qualche riserva per il caso di allargamento dell'array, allora ArrayResize(memRow, j+1) sarà eseguito molto rapidamente.

Grazie, lo proverò, ma non posso valutare cosa sia più ottimale. D'altra parte, per un piccolo array non conoscerò nemmeno la sua dimensionalità e inoltre in questa implementazione dovrò raddoppiare l'array, prima - quello piccolo, e poi quello grande, dove si accumulano i valori calcolati. Ma è tempo di sperimentare, grazie per il consiglio.

 

a Yurixx

Suggerisco di giocare ai buoni vecchi ditali, puoi usare qualsiasi strategia e guardare ovunque :o) Previsione su EURUSD M15 per 300 campioni (da lunedì a mercoledì inclusi):

Opzione 1:



Entropia del processo: 13,84



Variante 2:


Entropia del processo: 13,01



Opzione 3:


Entropia del processo: 14,36


Quale ditale stai raccogliendo? :о)

File:
process_2.rar  5 kb
Motivazione: