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

 
Igor Makanu:

Voici un exemple de la façon de le faire dans un indicateur. La question portait sur le conseiller expert.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Nord-Ouest, 2019.03.28 03:54

Bonjour à tous !

J'ai perdu deux heures mais je n'ai rien trouvé.

Pouvez-vous m'expliquer comment, dans mq4, dans l'EA, on peut correctement

construire un indicateur à partir des données d'un autre indicateur en utilisant des fonctions intégrées

et il devrait être affiché dans les tests dans la sous-fenêtre comme il se doit,

par exemple MA sur les données RSI ?


Mais, en général, c'est presque juste. Il est plus facile d'écrire un indicateur et d'en tirer des valeurs que de remplir un tableau pour iMAOnArray. Mais pourquoi deux boucles ?

 
Alexey Viktorov:

Mais pourquoi deux cycles ?

à ne pas vérifier pour la première exécution de l'indicateur ou le chargement des données historiques

il est parfois plus compact et plus efficace d'utiliser le contrôle de condition dans les while/for plutôt que de faire un if supplémentaire et d'utiliser ensuite les opérateurs de boucle une fois la condition remplie

si vous "collez" le code de calcul iMAOnArray() dans une boucle remplissant le tableau avec des données RSI, cela entraînera des calculs incorrects des éléments non encore remplis du tableau rsiBuffer[].

note, j'ai utilisé dans l'exemple le calcul iMAOnArray() pour tous les éléments du tableau (total = 0). J'ai étudié cette question il y a quelques mois, mais hélas, il n'y a pas d'informations spécifiques sur la façon d'utiliser correctement iMAOnArray() et le paramètrehttps://docs.mql4.com/ru/indicators/imaonarray dans celui-ci

int total, // nombre d'éléments


Sujet iMAOnArray() https://www.mql5.com/ru/forum/303372/page2#comment_10617854




Alexey Viktorov:

Voici un exemple de la façon de le faire dans un indicateur. La question portait sur le conseiller expert.

Etes-vous sûr que c'était la question ?

Nord-Ouest:

Vous pouvez le voir dans la sous-fenêtre pendant les tests,

)))))

iMAOnArray - Технические индикаторы - Справочник MQL4
iMAOnArray - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
В отличие от iMA(...), функция iMAOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее...
 
Igor Makanu:

à ne pas vérifier pour la première exécution de l'indicateur ou le chargement des données historiques

Il est parfois plus compact et plus efficace d'utiliser le contrôle de condition dans le code while/ for que de créer un if supplémentaire et d'utiliser des opérateurs de boucle une fois la condition remplie.


Vous êtes sûr que c'est ce que vous vouliez demander ?

)))))

)))) Ce n'est pas la première fois que je suis pris en défaut d'attention. Je ne suis même pas arrivé à la fin de l'indicateur.

Mais à propos du supplément si

if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;

on peut l'écrire comme suit

limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated+1;
Vous n'utilisez pas de telles fiches ?
 

Igor Makanu:

...J'ai étudié cette question il y a quelques mois, mais hélas il n'y a pas d'informations spécifiques sur la façon d'utiliser correctement iMAOnArray() et son paramètrehttps://docs.mql4.com/ru/indicators/imaonarray.

int total, // nombre d'éléments

Le nombre d'éléments est important lorsque vous n'avez pas besoin d'une simple moyenne. Je ne me souviens plus quels types de MA utilisent leur valeur précédente dans leurs calculs à vue d'œil. Dans ce cas, le nombre d'éléments aura une incidence sur le résultat. D'une manière générale, il est résolu dans mql5 en un demi tic et il ne m'intéresse plus.

 
Alexey Viktorov:
Vous n'utilisez pas de telles entrées ?

Je l'utilise, mais j'écris généralement mes codes "en deux passes" - quand j'écris à partir de rien, j'utilise des constructions claires pour le "parsing phonétique" (c'est-à-dire essentiellement pour la lecture à haute voix), avec les conditions if() c'est plus facile de tout dire ;)))

alors, oui, je peux "arranger le code" un peu et faire des constitutions similaires, mais habituellement je l'utilise dans ma bibliothèque d'exemples prêts à l'emploi (codes)

SZS : J'ai vu quelque part des informations sur l'augmentation de la productivité des programmes C#. Je suis sûr qu'il était recommandé d'essayer d'éviter d'utiliser foreach() et cet opérateur ? comme l'opérateur if() est plus productif, mais je pense que ce n'est pas critique - je l'utilise comme bon me semble


Alexey Viktorov:

Le nombre d'éléments est important lorsque vous n'avez pas besoin d'une simple moyenne. Je n'arrive pas à me rappeler quelles IA utilisent leur valeur précédente dans leurs calculs au premier coup d'œil. Dans ce cas, le nombre d'éléments aura une incidence sur le résultat. D'une manière générale, il est résolu dans mql5 en une demi-seconde et cela ne m'intéresse pas.

C'est un problème plus profond, j'ai cherché à la fois sur ce forum et sur le forum anglais, il y avait une discussion et des exemples d'utilisation, le paramètre total = 0 ou total !=0 peut rendre le calcul de iMAOnArray() différent - dans une discussion avec Igor (lien ci-dessus), j'ai décidé d'utiliser iMAOnArray() uniquement avec le paramètre total = 0 - la même solution était utilisée dans d'anciennes discussions

 
Igor Makanu:

Il y a un problème plus profond, j'ai cherché à la fois sur ce forum et sur le forum anglais, il y avait une discussion et des exemples d'utilisation, à partir du paramètre total = 0 ou total !=0 le calcul de iMAOnArray() peut être différent - dans la discussion avec Igor (lien ci-dessus), j'ai décidé d'utiliser iMAOnArray() seulement avec le paramètre total = 0 - dans les anciennes discussions la même solution était utilisée

C'est vrai. Si vous ne prenez pas tous les éléments du tableau et essayez d'obtenir même EMA sans erreur, ce sera difficile.

Moyenne mobile exponentielle (EMA)

La moyenne mobile lissée exponentiellement est déterminée en ajoutant à la valeur de la moyenne mobile précédente une certaine partie du prix de clôture actuel. Avec les moyennes mobiles lissées exponentiellement, le dernier cours de clôture a plus de poids. Une moyenne mobile exponentielle en pourcentage P sera de la forme suivante :

EMA = (CLOSE (i) * P) + (EMA (i - 1) * (100 - P))

Où :

CLOSE (i) - prix de clôture de la période en cours ;
EMA (i - 1) - valeur de la moyenne mobile de la période précédente;
P - part de la valeur du prix d'utilisation.

Par conséquent, si vous lisez l'EMA de période 30 à partir d'un tableau de 30 éléments, vous obtiendrez une simple MA au lieu d'une EMA.

 
Alexey Viktorov:

Bien. Si vous ne prenez pas tous les éléments d'un tableau et que vous essayez d'obtenir même EMA sans erreur, ce sera difficile.

Par conséquent, si vous calculez l'EMA de la période 30 à partir d'un tableau de 30 éléments, vous obtiendrez une simple MA au lieu d'une EMA.

J'ai vérifiéiMAOnArray() - les résultats sont imprévisibles, parfois 2 * période MA peut être utilisé, parfois plus est nécessaire. Si total = 0, vous pouvez l'utiliser une fois pour le calcul, mais si vous l'utilisez trop souvent, le terminal se bloque.

J'utilise rarement iMAOnArray()

 
Maxim Kuznetsov:

if (response == 0) {

   Print("Что-то пошло не так");

  // потом уже добавите диагностику из WinAPI

   return false;

}

et avant le retour normal, imprimez le résultat aussi

Print(" всё хорошо, результат:" toStr);

return toStr;

et exécuter tout le code dans un timer, par exemple une fois par minute. Entraînez-vous sur une ressource qui est sûre de ne pas être interdite et qui donne des temps différents mais prévisibles, afin que vous puissiez vérifier.

----
par télépathie - s'il y a vraiment un problème,
soit l'initialisation est mauvaise (je ne me souviens pas si WinSOCK doit être initialisé pour InternetOpenW ou non)
Ou une ressource n'est pas libérée.

tous ajoutés ! Rien ne s'affiche dans Print !!!

 

Comment faire pour que la variable sorte dans la fenêtre de données sans l'afficher sur le graphique ?

Je n'arrive pas à le trouver dans la documentation pour une raison quelconque.

 
psyman:

Comment faire pour que la variable sorte dans la fenêtre de données sans l'afficher sur le graphique ?

Je n'arrive pas à le trouver dans la documentation pour une raison quelconque.

Réglez la couleur de l'affichage sur clrNONE.