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

 
grasn >> :

Un peu plus tard, je serai en mesure de donner une estimation de la probabilité de réalisation de la prévision. Question - de quelle corrélation parlez-vous ?

Je veux dire quelque chose qui vous permet d'évaluer la qualité d'un système de prédiction en une sorte de points. Ainsi, vous pourriez prendre deux systèmes, évaluer chaque système en points, comparer les scores et dire "celui-ci est XX meilleur que celui-là".

D'une manière générale, il serait intéressant de réfléchir à la manière dont une telle estimation pourrait être réalisée avec plus de précision...

Le coefficient de corrélation est la première chose qui m'est venue à l'esprit. Comme ça.

Nous remontons dans l'histoire pour quelques années.

Chaque heure, le système construit une prévision et compte sa corrélation avec l'historique.

Ensuite, la corrélation moyenne est le score du système.

Et sur quelles techniques vous basez-vous pour estimer la probabilité de réalisation de la prévision ?


 

J'ai toujours voulu essayer un paramètre curieux - l'espérance mathématique à chaque section temporelle, mais je n'ai jamais eu assez de temps. Le calcul est assez simple, il s'agit de la somme des produits des niveaux de prix par les fréquences d'occurrence correspondantes. La probabilité est tirée de l'état initial de probabilité du système.


Je n'ai pas du tout testé le paramètre, donc je ne peux rien dire. Mais juste pour l'intérêt sportif : 15 min, EURUSD, prévision à un jour à partir du moment présent

Vecteur d'état (un peu déplacé).


Attente sur les sections de temps (1 échantillon - 15 minutes)




Niveaux probables (ou peu probables) :



 

à Lord_Shadows

Переименовали ветку. Теперь уже не игра, а тестирование, и кончились прогнозы.

Les prédictions n'ont pas encore commencé, dans le sens où nous ne faisons que nous réchauffer :o))) rejoignez-nous :o)


à shtoba

Je veux dire quelque chose qui vous permet d'évaluer la qualité du système de prédiction en termes de quelques points. En général, il serait intéressant de réfléchir à la manière de réaliser une telle estimation.

Un tel classement a été inventé depuis longtemps pour les championnats - en fait, il s'agit du nombre de points gagnés. Je peux ajouter - sans appliquer aucun MM - que seul le modèle fonctionne. L'essentiel est de savoir à quoi servent ces points. Quel est l'intérêt ?

Si l'on se réfère à l'historique sur quelques années, on fait tourner le système toutes les heures, il construit la prévision et calcule sa corrélation avec l'historique. Ensuite, la valeur moyenne de la corrélation est une sorte de score du système.

Le marché ne se répète jamais, et si vous calculez la corrélation des prévisions par 3 périodes, vous trouverez beaucoup de situations "similaires". Mais le coefficient ne dit rien.

Et quelles méthodes utilisez-vous pour estimer la probabilité de mise en œuvre des prévisions ?

De deux façons :

(1) Une prédiction est faite à chaque comptage et sa performance est évaluée. Ensuite, les fréquences sont calculées, si cela s'avère, une analyse plus complexe est effectuée, afin de relier la fréquence à la situation actuelle indépendamment du modèle avec la prévision

(2) La deuxième méthode, plus théorique, se situe dans le modèle lui-même.

 

HAPPY VOICE DAY !!!! :о)))

J'ai littéralement manqué le niveau 1.3331, le reste est bon. Maintenant, une situation curieuse sur l'EURUSD. Voici le calcul de la "carte" de l'entropie de l'information :

Si nous prenons à cœur le principe de l'entropie maximale, nous devrions nous attendre à un repli vers le niveau d'environ 1,3445, mais d'un autre côté, le modèle dynamique montre une possibilité essentielle de monter vers 1,3756 (je rappelle que je considère le niveau de prix comme un niveau statistique, autour duquel le prix va se "concentrer"). Ainsi, le plus raisonnable n'est pas de commencer à trader le lundi, mais d'attendre environ 10-20 lectures de 15 minutes chacune :o)


Qu'en pensez-vous, chers collègues ? Qui a des projets/objectifs pour lundi ?


PROBLÈME :

(1) J'ai commencé à apprendre MQL et j'ai créé un script très cool :o) "récupérer des données" pour MathCAD :

extern int diapason = 7000;


int start()
{
double process[];

GetHistoryProcess(process, diapason);
CreateFlowData(process);

return(0);
}


void GetHistoryProcess(double signal[], int window)
{
int n;
int i;

double y[];

ArrayResize(y, window);
ArrayInitialize(y, 0.0);

ArrayResize(signal, window);
ArrayInitialize(signal, 0.0);

i=0;

for(n=0; n<=window-1; n++)
{
y[i]=(High[window-n-1]+Low[window-n-1])/2.0;
i=i+1;
}

ArrayCopy(signal, y, 0, 0, WHOLE_ARRAY);

return(0);
}


void CreateFlowData(double process[])
{
int i;
int N;
int Handle;

string FILE="data.csv";

N=ArraySize(process);
Handle=FileOpen(FILE, FILE_CSV|FILE_WRITE,";");

if(Handle<0)
{
if(GetLastError()==4103)
{
Alert("Нет файла с именем ",FILE);
}
else
{
Alert("Ошибка при открытии файла ",FILE);
}

return;
}

for(i=0; i<=N-1; i++)
{
FileWrite(Handle, process[i]);
}

FileClose(Handle);

return(0);
}


Au début, je n'arrivais pas à comprendre pourquoi les prédictions ne se réalisaient pas du tout, puis j'ai trouvé la solution : j'avais oublié de " retourner " les données :o). J'ai entré extern en pensant avoir une interface à l'initialisation, où je peux entrer la plage d'historique souhaitée (elle change aussi) sans compilation. Donc il n'y a pas d'interface, ça ne fonctionne pas pour les scripts ? Prenons l'exemple de certains experts, ça marche là.


(2) Je n'arrive pas à trouver comment "écrire dans le futur" la série temporelle prévue (par exemple). Pendant le calcul, le traitement et l'analyse des données, le temps s'est déplacé de quelques décomptes, par exemple ? En gros, je veux charger 100 échantillons dans le futur depuis une date historique (ou zéro), c'est-à-dire que certaines données doivent être chargées dans l'historique avant la barre actuelle, et d'autres plus loin. Ça ne marche pas.

 
grasn >> :

Au début, je n'arrivais pas à comprendre pourquoi les prédictions ne se réalisaient pas du tout, puis j'ai trouvé la solution : j'avais oublié de " retourner " les données :o). J'ai entré extern, pensant que pendant l'initialisation il y aura une interface, où je peux entrer la gamme historique désirée (elle change aussi) sans compilation. Donc il n'y a pas d'interface, ça ne fonctionne pas pour les scripts ? Prenons l'exemple de certains experts, ça marche là.

Il ne fonctionne pas pour les scripts, seulement pour les indicateurs et les Expert Advisors. Faites votre exportation comme un indicateur si vous voulez gérer les variables externes.


(2) Je n'arrive pas à comprendre comment (par exemple) je dois "écrire la série chronologique prévue dans le futur". Pendant le calcul, le traitement et l'analyse des données, le temps s'est déplacé de quelques unités, disons ? En gros, je veux charger 100 échantillons dans le futur depuis une date historique (ou zéro), c'est-à-dire que certaines données doivent être chargées dans l'historique avant la barre actuelle, et d'autres plus loin. Ça n'a pas l'air de fonctionner.

Il n'y a pas d'avenir dans MT. Toutes les séries sont placées dans des tableaux, et vice versa. L'indice 0 correspond à l'heure actuelle (ou la plus récente disponible), l'indice 1 correspond à la barre en arrière, etc. Alors pour le futur, nous avons besoin des index -1, -2, etc., mais il n'y a pas de tels index négatifs dans mql.

Mais il y a d'autres problèmes. Regardez la fonction SetIndexShift pour les indicateurs (définit le décalage de la ligne de l'indicateur par rapport au début du graphique). Ce n'est qu'un changement visuel. Les index sont tels qu'ils étaient et restent.


Il y a aussi SetIndexDrawBegin (Définit le numéro de série de la barre du début des données, à partir duquel le dessin de la ligne de l'indicateur doit commencer), il peut être utilisé pour couper le dessin à gauche pour une barre spécifiée.

 

Pour que tout soit synchrone dans le temps - marquez les valeurs de vos séries non pas avec des indices, mais avec le temps et synchronisez avec le graphique MT par Time [bar].

Mais il y a un problème - l'axe du temps sur le graphique peut être non-uniforme. S'il n'y a pas de barres dans la série initiale sur le graphique (il n'y a pas de connexion avec le serveur ou il y a un trou pour une autre raison) - alors les barres seront toujours dessinées de manière continue, et le temps sautera par-dessus ces trous. C'est tout à fait naturel pour le "passé".

 
grasn >> :

... Entré extern, pensant qu'à l'initialisation il y aura une interface où je pourrai entrer la plage historique souhaitée (elle change aussi) sans compiler. Il n'y a donc pas d'interface, ça ne fonctionne pas pour les scripts ? Prenons l'exemple de certains experts, cela fonctionne là.....

Insérez #property show_inputs dans le script et votre externe apparaîtra lors de l'exécution du script.

 

à Shtoba, granit77

Chers collègues, merci pour votre aide. :о) Je ne suis pas très satisfait de ces indicateurs :o). Je ne sais pas comment les utiliser. Pour le trading, ce sont des niveaux de statut locaux, selon le concept de modélisation du marché - le prix se "concentre" près d'eux. Sur l'image, ils sont rouges (plus précisément, je ne les ai pas encore calculés, je prépare un astrolabe :o)) :

Théoriquement, ils peuvent être représentés dans MT sous forme de lignes ("tendance" par exemple, le type semble être OBJ_TREND). Seule une question très simple se pose, comment recalculer les comptes de temps (0, 1, 2, ....). (15 minutes chacun)) au temps "futur". Jusqu'à présent, j'ai trouvé la solution suivante : nous prenons le nombre de secondes TimeCurrent( ), nous y ajoutons la prévision et ce nombre doit être converti en temps d'une manière ou d'une autre. Comment dois-je m'y prendre ?

PS : Mais nous avons encore quelque chose dans cette entropie. Le prix n'a pas atteint le niveau, mais il a commencé à bouger et si nous concluons un accord, nous serons toujours dans le plus : o)

 

 
grasn >> :
... Seule une question très simple se pose, comment recalculer les comptes de temps (0, 1, 2, ....). (15 minutes chacun)) au temps "futur"...
FutureTime=Time[0]+N*Period()*60;
где N - номер бара в будущее от нулевого.