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

 
Alexey Viktorov:

Eh bien, merci... Au moins, je me suis vu il y a six ans... J'étais comme toi maintenant. Je n'ai pas hésité à donner des conseils dans le mauvais sens.

En ce qui concerne le modèle : Si le modèle a un indicateur, mais pas d'EA, alors le modèle sera chargé sans l'EA... Et si le modèle a un EA ? Êtes-vous sûr que l'EA, chargé sur le modèle, n'appliquera pas le modèle et donc fixera et bloquera le terminal ?

ce n'est pas le cas - tout fonctionne bien !

 
SanAlex:

Je n'ai pas de problème - tout fonctionne bien !

Ne soyez pas paresseux comme moi. Faites une vidéo de ces manipulations :-))))

 
Vitaly Muzichenko:

J'en suis maintenant à déboguer la construction "SmoothedMAOnBuffer()" dans mt4.

Qu'est-ce qui ne va pas, je ne comprends pas du tout.

Je l'ai écrit une centaine de fois - retirer la fonction de la boucle.

Au lieu de ces conneries:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);
   for(i = 0; i < counter - a; i++) {
     // buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i); // Так индикатор работает
      SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff); Совсем не работает, но и ошибок в журнале нет
      buf_3[i] = buff[0]; ???
   }
   for(i = counter - a; i > 0; i--) {
      Array_2[i] = Array_2[i + 1];

Ecris comme ça:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);

if(SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff)==0)
   return 0;

for(i = counter - a; i > 0; i--) {
   Array_2[i] = Array_2[i + 1];

Je vous le dis - l'appel de cette fonction est une boucle complète de lissage des données dans Array. Les données lissées de ce tableau seront dans le tableau buff - il suffit ensuite de prendre les données lissées dont vous avez besoin.

 
Alexey Viktorov:

Ne soyez pas paresseux comme moi. Faites une vidéo de ces manipulations :-))))

C'est dommage - que je n'aie pas visité votre profil auparavant. Vous avez de si bons codes ici. J'aime beaucoup celui-ci.https://www.mql5.com/ru/code/16396

EURGBPH1

TralingLine
TralingLine
  • www.mql5.com
Виртуальный Stop Loss или Trailing Stop.
 
Artyom Trishkin:

Je vous l'ai dit des centaines de fois - retirez la fonction de la boucle.

Au lieu de ces conneries:

écrivez-le comme ceci:

Je vous le dis - l'appel de cette fonction est un cycle complet de lissage des données dans Array. Les données lissées de ce tableau seront dans le tableau buff - il suffit ensuite de prendre les données lissées dont vous avez besoin.

Merci !, ça marche.

SmoothedMAOnBuffer(rates_total, prev_calculated, count, period, Array_1, buf_3);

Je ne comprends pas comment cela fonctionne, je vais essayer de le découvrir maintenant.

 
Artyom Trishkin:

Je vous l'ai dit des centaines de fois - retirez la fonction de la boucle.

Au lieu de ces conneries:

écrivez-le comme ceci:

Je vous le dis - l'appel de cette fonction est un cycle complet de lissage des données dans Array. Les données lissées de ce tableau seront dans le tableau buff - allez plus loin et prenez les données lissées dont vous avez besoin.

Je n'ai pas réussi à tout appliquer, loin de là, j'ai passé plus de 4 heures.

Au premier démarrage, il s'affiche correctement, puis pas de rafraîchissement - il se fige, avec le standard qui fonctionne bien.

   double Array_1[];
   double Array_2[];
   int i=0;
   int period = (int)MathFloor(MathSqrt(a));
   int val = (int)MathFloor(a / 1.9);
   int bars=rates_total;
   int counter = bars - prev_calculated + a + 1;
   if(counter > bars)
      counter = bars;
   ArrayResize(Array_1, counter);
    ArraySetAsSeries(Array_1, true);
   ArrayResize(Array_2, counter);
    ArraySetAsSeries(Array_2, true);

   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val) - ma_1(i, a);
  //  for(i = 0; i < counter - a; i++)
  //  buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i);
   SmoothedMAOnBuffer(rates_total, prev_calculated, prev_calculated, period, Array_1, buf_3); // Где-то здесь не правильно вписаны параметры

---

Que dois-je faire pour participer ?

Dans MT5, il ne me montre rien du tout.

Dossiers :
test.mq4  13 kb
 
Vitaly Muzichenko:

Je n'ai pas pu tout appliquer, j'ai passé plus de 4 heures.

Au premier démarrage, il s'affiche correctement, puis il n'y a plus de mise à jour - il se fige, mais il fonctionne bien avec la version standard.

---

Que dois-je faire pour participer ?

Je ne sais pas ce qui se passe dans MT5.

Pouvez-vous expliquer ce que vous voulez obtenir comme résultat ?

Votre indicateur est construit de la manière dont vous devez montrer aux gens comment ne pas le faire :)

Les tampons dessinés et calculés sont tous mélangés. Ceux qui sont calculés devraient être les derniers - vous ne pouvez pas les mélanger au hasard, malheureusement.

Cela ne fonctionnera pas pour un cinq car la fonction ma_1() dans un cinq retournera un handle, pas une valeur MA.

Dans la fonction SmoothedMAOnBuffer(), vous passez prev_calculated au lieu du début des données significatives dans le tableau - pourquoi ? Vous devez y passer au moins 0, et au plus - une valeur calculée en fonction de la période de calcul des données MA stockées dans Array_1 - bien, au moins la période

Dans le bloc de choix de la couleur à dessiner, vous avez une erreur logique - vous écrasez les tampons - il suffit de mettre une valeur vide à l'extérieur des parenthèses. Vous avez une condition, et ce qui devrait être fait en cas de vérité est mis entre parenthèses. C'est-à-dire qu'il est toujours exécuté. C'est une conséquence de l'habitude de disposer les parenthèses - lorsque leur emplacement n'est pas clairement visible.

Array_1 et Array_2 - pourquoi ne sont-ils pas des tampons calculés ?

En somme, il y a beaucoup de questions.

La valeur de la variable a est strictement définie. Pourquoi calculer la valeur de la variable val à chaque tick ?

Faire deux tampons calculés pour deux variables, calculées avec la période a et val à OnInit(). A partir de ces tampons et prendre des valeurs - cela fonctionnera pour les deux plates-formes alors.

 
Artyom Trishkin:

Pouvez-vous mettre des mots sur ce que vous voulez obtenir ?

Votre indicateur est construit de la façon dont vous devez montrer aux gens comment ne pas le faire :)

Les tampons de dessin et de calcul sont tous mélangés. Ceux qui sont calculés devraient être les derniers - vous ne pouvez pas les mélanger au hasard, malheureusement.

Cela ne fonctionnera pas pour un cinq car la fonction ma_1() dans un cinq retournera un handle, pas une valeur MA.

Dans la fonction SmoothedMAOnBuffer(), vous passez prev_calculated au lieu du début des données significatives dans le tableau - pourquoi ? Vous devez y passer le minimum 0, et le maximum - une valeur calculée en fonction de la période de calcul des données MA stockées dans Array_1 - enfin, au moins la période

Dans le bloc de choix de la couleur à dessiner, vous avez une erreur logique - vous écrasez les tampons - il suffit de mettre une valeur vide en dehors des crochets. Vous avez une condition, et ce qui devrait être fait en cas de vérité est mis entre parenthèses. C'est-à-dire qu'il est toujours exécuté. C'est une conséquence de l'habitude de disposer les parenthèses - lorsque leur emplacement n'est pas clairement visible.

Array_1 et Array_2 - pourquoi ne sont-ils pas des tampons calculés ?

En somme, il y a beaucoup de questions.

La valeur de la variable a est strictement définie. Pourquoi calculer la valeur de la variable val à chaque tick ?

Faire deux tampons calculés pour deux variables, calculées avec la période a et val à OnInit(). A partir de ces tampons et prendre des valeurs - cela fonctionnera pour les deux plateformes alors.

Si je connaissais la solution, je ne l'aurais pas écrit.

L'indicateur n'est pas à moi, je n'ai même pas regardé en dessous de iMAOnArray(), la tâche entière est seulement de remplacer iMAOnArray() par quelque chose.

Puis-je avoir un exemple concret de ce que cela devrait être ?

Merci !

P.S. Pour mt5 les poignées sont bien
Dossiers :
max.mq5  14 kb
 
Vitaly Muzichenko:

Puis-je avoir un exemple concret de ce que cela devrait être ?

Un exemple concret de quoi ? Un indicateur de quatre qui fonctionne dans cinq ? Alors donnez-moi un indicateur entièrement fonctionnel à partir de quatre.

Ou un exemple de la façon de travailler avec la fonction SmoothedMAOnBuffer() ?

 
Artyom Trishkin:

Un exemple concret de quoi ? Un indicateur de quatre qui fonctionne dans cinq ? Alors donnez-moi un indicateur entièrement fonctionnel à partir de quatre.

Ou un exemple de la façon de travailler avec la fonction SmoothedMAOnBuffer() ?

Un exemple de travail à partir de mt4, avec le standard iMAOnArray se met à jour, mais SmoothedMAOnBuffer à la première exécution est ok, et puis aucune mise à jour

J'ai besoin d'un exemple de travail avecSmoothedMAOnBuffer()

Dossiers :
test.mq4  17 kb
Raison: