Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 134

 

Il y a un problème avec l'Expert Advisor dans le testeur. Je fais des tests sur des données d'une minute. Je calcule moi-même la stochastique pour le TF supérieur en utilisant les données minute.

L'historique des procès-verbaux a été téléchargé depuis 2001. Dans l'onglet "Graphiques", définissez le nombre maximum de barres dans l'historique, et affichées.

L'ensemble de l'historique sur le graphique défile.

Le problème est que, comme il s'est avéré avec l'impression de débogage, quelle que soit la date à partir de laquelle je démarre le testeur, le nombre maximum de barres

dans la variable Bars sur la première barre du test (au début) est toujours 1001 ou 1002. La valeur de Bars augmente de 1 à chaque barre suivante.

Par conséquent, il est impossible de compter les TF les plus élevées au départ.

Il existe une solution. Nous devrions ajouter une interdiction de négocier avant que les barres n'atteignent la valeur souhaitée.

Peut-on résoudre ce problème d'une autre manière ? Cette valeur de départ des barres dans le testeur augmente-t-elle d'une manière ou d'une autre ?

 
Igor733:

Il y a un problème avec l'Expert Advisor dans le testeur. Je fais des tests sur des données d'une minute. Je calcule moi-même la stochastique pour le TF supérieur en utilisant les données minute.

L'historique des procès-verbaux a été téléchargé depuis 2001. Dans l'onglet "Graphiques", définissez le nombre maximum de barres dans l'historique, et affichées.

L'ensemble de l'historique sur le graphique défile.

Le problème est que, comme il s'est avéré avec l'impression de débogage, quelle que soit la date à laquelle je démarre le testeur, le nombre maximum de barres

dans la variable Bars sur la première barre du test (au début) est toujours 1001 ou 1002. La valeur de Bars augmente de 1 à chaque barre suivante.

Il est donc impossible de calculer la TF la plus élevée dès le départ.

Il existe une solution. Nous devrions ajouter une interdiction de négocier avant que les barres n'atteignent la valeur souhaitée.

Peut-on résoudre ce problème d'une autre manière ? Cette valeur de départ des barres dans le testeur augmente-t-elle d'une manière ou d'une autre ?

Non, ce n'est pas le cas. Utilisez votre propre solution.
 
Quel pourrait être le problème. Lorsque j'écris un EA, je dois le tester plusieurs fois pour suivre les changements. Après un nombre aléatoire de tests, le testeur de stratégie n'accepte pas les modifications apportées au code. Cela va parfois jusqu'à l'absurde. Vous pouvez simplement supprimer un morceau de code et le hibou fonctionnera dans le testeur en suivant l'algorithme écrit précédemment. La même chose se produit avec l'analyse des calculs dans le CSV. Après un certain nombre de tests, une merde aléatoire est analysée dans le CSV.

P.S. J'ai appuyé sur le bouton de compilation.
 

J'ai vraiment besoin de comprendre l'algorithme de calcul de la moyenne mobile lissée. Il y a plusieurs raisons pour lesquelles la fonction iMA ne convient pas.

Comme j'ai compris l'information de https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma

Le premier élément est calculé comme la somme des prix de clôture divisée par la période.

Les suivants sont calculés selon la formule SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N.

Prenons une période de 5 et les cours de clôture de l'EUR/USD H1 pour la période du 24.02.2017 19:00 au 24.02.2017 23.00 (GMT+2) soit les 5 dernières bougies

Les prix de clôture sont 1.05681 ; 1.05702 ; 1.05639 ; 1.05612 ; 1.05592.

Par conséquent, 1er élément - 1.056452 ; 2ème élément - 1.056852 3ème élément - 1.05676 4ème élément - 1.056632 5ème élément - 1.056489

Mais sur le graphique SMMA 5, la clôture est de 1,05706, c'est-à-dire que la différence est déjà dans le 3e chiffre.

Qu'est-ce que je compte mal ?

Et comment dois-je calculer correctement afin d'obtenir 1.05706 ?

 
zsu1970:

J'ai vraiment besoin de comprendre l'algorithme de calcul de la moyenne mobile lissée. Il y a plusieurs raisons pour lesquelles la fonction iMA ne convient pas.

Comme j'ai compris l'information de https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma

Le premier élément est calculé comme la somme des prix de clôture divisée par la période.

Les suivants sont calculés selon la formule SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N.

Prenons une période de 5 et les cours de clôture de l'EUR/USD H1 pour la période du 24.02.2017 19:00 au 24.02.2017 23.00 (GMT+2) soit les 5 dernières bougies

Les prix de clôture sont 1.05681 ; 1.05702 ; 1.05639 ; 1.05612 ; 1.05592.

Par conséquent, 1er élément - 1.056452 ; 2ème élément - 1.056852 3ème élément - 1.05676 4ème élément - 1.056632 5ème élément - 1.056489

Mais sur le graphique SMMA 5, la clôture est de 1,05706, c'est-à-dire que la différence est déjà dans le 3e chiffre.

Qu'est-ce que je compte mal ?

Et comment dois-je calculer correctement afin d'obtenir 1.05706 ?

Examinez l'indicateur lui-même, il aura plus de sens.
 
Aleksey Maryaskin:
Messieurs les développeurs ! Bonne journée à tous. Je suis intéressé par une question sur la façon de créer un modèle de conseiller expert (script) lors de sa création. Peut-on l'éditer quelque part et comment le fait-on ?
Un lien direct ici ne passera probablement pas... Vous pouvez chercher sur Google "Je publierai le cours MQL4 dans ce fil de discussion" (sans les guillemets). Cherchez-y le mot "template" (je pense que c'est sur la 2ème page).
 
Vitaly Muzichenko:
Regardez l'indicateur lui-même, il aura plus de sens.
J'ai regardé. C'est la même chose que sur le lien que j'ai donné.

double SMMA(int période)
{

//remplir le tableau avec les prix de clôture
int k=période ;
for(int i=1 ; i<=period ; i++)
{
H1_Close[i]=Close[k];
// Print("H1_Close [",i,"] ",H1_Close[i]," Close [",k,"] ",Close[k]) ;
k-- ;
}
//calculer le premier élément comme étant le prix de clôture moyen
double Summ=0 ;
for (int i=1 ; i<=period;i++)
Summ=Summ+H1_Close[i] ; //SUM1 = SUM(CLOSE, N)
double TmpSMMA=Summ/période ; //SMMA1 = SUM1/N
//calculer le i-ième élément comme SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N
for(int i=2;i<=period;i++)
TmpSMMA=(TmpSMMA*(période-1)+H1_Close[i])/période ;
}
Le résultat est toujours très différent des données de l'indicateur dans le terminal. POURQUOI ?
 
zsu1970:

J'ai vraiment besoin de comprendre l'algorithme de calcul de la moyenne mobile lissée. Il y a plusieurs raisons pour lesquelles la fonction iMA ne convient pas.

Comme j'ai compris l'information de https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma

Le premier élément est calculé comme la somme des prix de clôture divisée par la période.

Les suivants sont calculés selon la formule SMMA (i) = (SMMA (i - 1) * (N - 1) + CLOSE (i)) / N.

Prenons une période de 5 et les cours de clôture de l'EUR/USD H1 pour la période du 24.02.2017 19:00 au 24.02.2017 23.00 (GMT+2) soit les 5 dernières bougies

Les prix de clôture sont 1.05681 ; 1.05702 ; 1.05639 ; 1.05612 ; 1.05592.

Par conséquent, 1er élément - 1.056452 ; 2ème élément - 1.056852 3ème élément - 1.05676 4ème élément - 1.056632 5ème élément - 1.056489

Mais sur le graphique SMMA 5, la clôture est de 1,05706, c'est-à-dire que la différence est déjà dans le 3e chiffre.

Qu'est-ce que je compte mal ?

Et comment dois-je calculer correctement afin d'obtenir 1.05706 ?

Il y a donc un algorithme de calcul dans l'inclusionnik.

 
Alexey Viktorov:
Il y a un algorithme de calcul dans l'inluder.

Il me semble donc que je fais tout comme dans les calculs, mais le résultat ne sort pas. Jour 4 Je n'arrive pas à comprendre.
J'ai écrit le code de la fonction dans la réponse de Vitaly Muzichenko , mais je n'arrive pas à comprendre quelle est l'erreur
 
zsu1970:
Il semble donc que je fasse tout comme dans les calculs, mais le résultat ne sort pas. C'est le quatrième jour que je suis assis ici et je n'arrive pas à comprendre.
J'ai écrit le code de la fonction dans la réponse de Vitaly Muzichenko , mais je n'arrive pas à comprendre quelle est l'erreur
Vous mettez les prix tout de suite, ou vous les obtenez et les collez ensuite dans le calcul ?
Raison: