Test des systèmes de prévision en temps réel - page 52

 
grasn >> :

toujours inférieur à 1,55 :o) Voyons voir.

Très probable ^_^, du moins si l'on regarde les options.

Options visuelles du CME

 
grasn писал(а) >>

(1) Comment initialiser correctement un tableau multidimensionnel (toutes ses dimensions). Ce code, tel que je le comprends, sera correct pour un tableau unidimensionnel et la première dimension trouvée dans le tableau multidimensionnel :

double memRow[];

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

Mais que faire avec plus de dimensions ?

(2) Comment étendre dynamiquement des tableaux univariés et multivariés ?

Dans ce cas, le tableau memRow[] doit augmenter d'une certaine valeur à chaque itération, quoi qu'il en soit, laissons la valeur 1 pour la simplicité. De même, pour le tableau 2D, il doit croître dans deux directions par i et j - memRow[i][j]

(1) C'est correct et c'est exactement la même chose pour les dimensions multiples. L'initialisation place une valeur dans tous les éléments du tableau, quelle que soit sa dimension.

(2) Hélas, ça ne marchera pas. Dans MKL4, vous ne pouvez modifier la dimensionnalité que de la première dimension d'un tableau multidimensionnel. Peut-être cela sera-t-il corrigé dans MKL5.

 
NEKSUS_ >> :

Très probable ^_^, du moins si l'on regarde les options.

Options visuelles du CME

D'où viennent ces belles données ?

 
dentraf >> :

Où avez-vous obtenu de si belles données ?

Les données sont très ordinaires, et que ce soit joli ou pas, cela dépend de l'auteur ^_^.

 

grasn, si la programmation en MQL4 n'est pas une fin en soi, alors ne serait-il pas préférable d'écrire les parties les plus importantes du projet, surtout si elles nécessitent des tableaux multidimensionnels pour une implémentation normale, en C et de les attacher en tant que DLL ? Il fonctionnera plus rapidement et sera plus facile à déboguer, et le code source sera plus lisible (sans les problèmes liés aux tableaux, à l'indexation indirecte et autres, que nous devrons inventer dans MQL, pour contourner ses limitations).

 
grasn >> :

Je prédis les réalisations (trajectoires), mais lorsque je prends des décisions de trading, je me concentre sur les caractéristiques de "fréquence", par exemple la valeur moyenne des +/- trajectoires les plus probables sur l'horizon de prévision. Ces derniers sont plus fiables en ce qui concerne les objectifs, mais le chemin du prix vers ces niveaux peut être très alambiqué. Je travaille bien sûr sur la deuxième approche pour estimer les zones d'inversion locales. Quant au MM en tant que tel - ce n'est pas si simple, il doit s'agir d'une tâche sérieuse distincte.

C'est exactement pour cette raison, qui est le sujet de la conversation, que je suis en train de traduire le code de MathCAD en MT. Il sera statistiquement judicieux de prévoir une période d'essai d'au moins 6 mois (à vue de nez). Donc, je posterai l'état un peu plus tard.


Au fait, j'ai une question de programmation, car je suis coincé (je ne suis pas un grand programmeur) :

(1) Comment initialiser correctement un tableau multidimensionnel (toutes ses dimensions). Ce code, tel que je le comprends, sera correct pour un tableau unidimensionnel et la première dimension trouvée dans le tableau multidimensionnel :

double memRow[];

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


Mais que faire avec plus de dimensions ?


(2) Comment étendre dynamiquement des tableaux univariés et multivariés ?



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

{

...

memRow[];

...

}


Dans ce cas, le tableau memRow[] doit augmenter d'une certaine valeur à chaque itération, quoi qu'il en soit, laissons la valeur 1 pour la simplicité. De même, pour le tableau 2D, il doit croître dans deux directions par i et j - memRow[i][j].


Apparemment, l'accès à un tableau multidimensionnel devra être implémenté comme une fonction.


Par exemple, vous avez un tableau unidimensionnel a[n]


puis supposons que nous voulons l'utiliser comme un tableau tridimensionnel i,k,j


alors l'élément (i,k,j) sera adressé dans le tableau a, comme a[i*3+k*2+j]


Et ainsi de suite...

 

à Yurixx

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

(2) Hélas, cela ne marchera pas. Dans MKL4, vous ne pouvez modifier la dimensionnalité que de la première dimension d'un tableau multidimensionnel. Peut-être que cela sera corrigé dans MKL5.

Heureux de vous voir dans notre havre de paix :o). Et c'est bien qu'il soit tranquille, contrairement aux branches voisines, où les passions humaines se déchaînent, sur une place égale. Un petit résumé pour une meilleure compréhension. Supposons qu'il existe une telle construction :

double memRow[];

...

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

j=1

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

{

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

{

ArrayResize(memRow, j+1);

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

...

}

}


Comme je l'ai compris, il va dynamiquement augmenter le tableau memRow[] lorsque certaines conditions se déclenchent. C'est-à-dire que je ne connais pas la longueur du tableau à l'avance. Est-ce que j'ai bien compris ?


au marketeur

Si la programmation en MQL4 n'est pas une fin en soi, alorsne serait-il pas préférable d'écrire les parties les plus importantes du projet, surtout si elles nécessitent des tableaux multidimensionnels pour une implémentation normale, en C et de les attacher en tant que DLL ? Il fonctionnera plus rapidement et sera plus pratique à déboguer, et le code source sera plus lisible (sans les trucs compliqués avec un tas de tableaux, l'indexation indirecte et d'autres trucs, que nous devrons inventer dans MQL, pour contourner ses limitations).

Ma programmation en C/C++ est encore pire qu'en MQL. Et je n'ai pas programmé dans l'ensemble depuis environ 15 ans. Maintenant, je veux obtenir le premier résultat, sur la base duquel je vais tirer quelques conclusions. Bien sûr, je n'obtiendrai aucune performance, mais le système commencera en quelque sorte à fonctionner en mode automatique. Du moins, je l'espère. :о)


Mais vous avez raison bien sûr, dans le futur je remplacerai certaines fonctions par des dll, et peut-être tout le système.


à sol

Apparemment, l'appel à un tableau multidimensionnel devra être implémenté comme une fonction.

Par exemple, vous avez un tableau unidimensionnel a[n]

puis, supposons que nous voulions l'utiliser comme un tableau tridimensionnel i,k,j

alors l'élément (i,k,j) sera adressé dans le tableau a, comme a[i*3+k*2+j]

Et ainsi de suite...

C'est une idée intéressante, mais à chaque itération conduisant à un changement de dimension de la matrice, il faudrait en fait réassembler (ou reconstruire) l'ensemble du tableau. Mais c'est probablement faisable. Merci pour cette idée.

 
grasn писал(а) >>

Supposons qu'il existe une telle construction :

double memRow[];

...

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

j=1

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

{

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

{

ArrayResize(memRow, j+1);

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

...

}

}

Comme je l'ai compris, il va dynamiquement augmenter le tableau memRow[] quand une certaine condition se déclenche. C'est-à-dire que je ne connais pas la longueur du tableau à l'avance. Est-ce que j'ai bien compris ?

Un petit conseil. N'augmentez pas le tableau d'un élément dans la boucle. Conservez le nombre d'éléments utilisés (remplis) dans une variable supplémentaire, et augmentez le tableau d'une douzaine d'éléments (vous pouvez facilement l'estimer pour votre tâche), lorsque vous manquez d'espace. De cette façon, vous pouvez obtenir un gain de performance significatif. // Bien que je ne sois pas familier avec la façon dont la mémoire est allouée pour les tableaux dans le terminal. Si la mémoire est allouée avec une certaine réserve en cas d'agrandissement du tableau, alors ArrayResize(memRow, j+1) sera exécuté très rapidement.

 
lea >> :

Un conseil. N'augmentez pas le tableau d'un élément dans la boucle. Conservez le nombre d'éléments utilisés (remplis) dans une variable supplémentaire et augmentez le tableau d'une douzaine d'éléments (estimation pour votre propre tâche) lorsque vous manquez d'espace. De cette façon, vous pouvez obtenir un gain de performance significatif. // Bien que je ne sois pas familier avec la façon dont la mémoire est allouée pour les tableaux dans le terminal. Si la mémoire est allouée avec une certaine réserve en cas d'agrandissement du tableau, alors ArrayResize(memRow, j+1) sera exécuté très rapidement.

Merci, je vais essayer, mais je ne peux pas estimer ce qui est le plus optimal. D'autre part, pour un petit tableau, je ne connaîtrai pas non plus sa dimension et, en outre, dans cette mise en œuvre, je devrai doubler le tableau, d'abord le petit, puis le grand, où les valeurs calculées sont accumulées. Mais il est temps d'expérimenter, merci pour le conseil.

 

à Yurixx

Je suggère de jouer au bon vieux dés à coudre, vous pouvez utiliser n'importe quelle stratégie et chercher n'importe où :o) Prévisions sur EURUSD M15 pour 300 échantillons (du lundi au mercredi inclus) :

Option 1:



Entropie du processus : 13,84



Variante 2:


Entropie du processus : 13,01



Option 3:


Entropie du processus : 14,36


Quel dé à coudre ramassez-vous ? :о)

Dossiers :
process_2.rar  5 kb
Raison: