[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 705

 
Infinity:

Si clair, regarder dans le livre et ne pas voir, fonctionne merci ! Continuez) avec des questions. Il s'agit des mêmes variables globales. J'ai ajouté la condition suivante à l'indicateur :

Je veux définir quelle variable globale doit recevoir une valeur, en fonction de la devise sur laquelle l'indicateur est basé.

Je comprends que dans la variable globale GlobalVariableSet(valuta,param), le nom (valuta) doit contenir la valeur qui lui est attribuée ci-dessus

appeler à nouveau la variable globale dans le code du Conseiller Expert

chaîne de caractères valuta="valuta" ;

int i= GlobalVariableGet(valuta) ; // mais je n'obtiens pas la valeur, .... J'obtiens donc 0. Peut-être est-il impossible de changer le nom de la variable globale de cette façon ?

Si un EA vérifie la valeur enregistrée par l'indicateur, il serait logique de supposer que la valeur du paramètre valuta devrait correspondre au nom du symbole, c'est-à-dire EURUSD ou GBPUSD.

En conséquence, si le conseiller vérifie la valeur du symbole actuel, alors

chaîne de caractères valuta = Symbol() ;

int i= GlobalVariableGet(valuta) ;
 
zhuki:

Tout d'abord, de l'aide

double GlobalVariableGet(string name)

Renvoie la valeur de la variable globale existante ou 0 en cas d'erreur. Appelez GetLastError() pour obtenir des informations sur les erreurs.


Vous pouvez voir le contenu du GV, mais ne pouvez pas le récupérer ?


Eh bien, les variables globales affichent à la fois le nom et la valeur, ..... Je n'arrive pas à obtenir la valeur d'une variable globale dans mon code via la variable globale (nom-paramètre), je dois spécifier le nom de la chaîne, alors pas de problème, il trouve tout.
 
Infinity:

Eh bien, les variables globales affichent à la fois le nom et la valeur, ...... Je ne peux pas obtenir la valeur de la variable globale dans mon code via (nom-paramètre) de la variable globale, je dois spécifier le nom de la chaîne de caractères, alors il ne trouve aucun problème.


Remplacer

si (symb==EUR) {valuta=EUR;}

à

if (symb=="EURUSD") {valuta="EUR";}

 
keekkenen:

Si l'EA vérifie la valeur sauvegardée par l'indicateur, alors il serait logique de supposer que la valeur du paramètre valuta devrait correspondre au nom de l'instrument, c'est-à-dire EURUSD ou GBPUSD...

Par conséquent, si le conseiller vérifie la valeur du symbole courant, alors

chaîne de caractères valuta = Symbol() ;

int i= GlobalVariableGet(valuta) ;


Oui, ça marche)) C'est plus facile qu'il n'y paraît.)

Un grand merci à tous ceux qui nous rendent visite et nous aident !

 

Mes amis, dites-moi où j'ai merdé... Je n'arrive pas à comprendre. L'indicateur lit les données, mais ensuite il ne fonctionne pas. Je n'arrive pas à le trouver. Peut-être que quelqu'un peut me dire ce que je ne comprends pas :

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Поиск экстремумов
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void   SaveDataIND(double &TempIND[], int nBars)
{
   ArrayResize(TempIND,nBars);                     // Размер массива под переданный в ф-цию размер
   for (int j=0; j<=nBars-1; j++)
      {
         TempIND[j]=iAD(NULL,PERIOD_M5,j);         // Запишем данные инд. в цикле в массив
         Print("TempIND[",j,"] = ",TempIND[j]);
      }
//------------------------------------------------------------------
// Заполнение массивов данными о пичках и донышках
//------------------------------------------------------------------
   double   PeakUP[], PeakDN[];                    // Объявляем массивы пичков/донышков
   int i, k, l, asize;
   if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l<=asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l<=asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }            
         

}   

Le journal affiche toujours les données du tableau des valeurs de l'indicateur, mais s'arrête ensuite...
... seulement une cellule zéro... et seulement zéro... Aidez-nous s'il vous plaît...


 
odiseif:
Désolé, il y a eu une erreur ..... voici l'original

Odyssey, si vous ne les avez pas, vous devriez les ajouter :))

Dossiers :
 
artmedia70:

Mes amis, dites-moi où j'ai merdé... Je n'arrive pas à comprendre. L'indicateur lit les données, mais ensuite il ne fonctionne pas. Je n'arrive pas à le trouver. Peut-être que quelqu'un peut me dire ce que je ne comprends pas :

Le journal affiche toujours les données du tableau des valeurs de l'indicateur, mais s'arrête ensuite...
... seulement une cellule zéro... et seulement zéro... Aidez-nous s'il vous plaît...

Artyom, j'ai trouvé la première erreur jusqu'à présent :

Les tableaux PeakUP[] et PeakDN[], sont déclarés sans quantité spécifiée d'éléments, c'est-à-dire, vous les avez créés sans cellules du tout, et plus loin dans un code essayer d'écrire quelque chose en eux, mais comme ils ne contiennent pas en eux-mêmes des éléments, naturellement en eux rien n'est écrit, et dans l'imprimante constamment zéro. Comme vous ne savez pas exactement combien de pics et de creux il y aura, je vous recommande d'augmenter dynamiquement le nombre d'éléments dans ces tableaux lorsque de nouvelles données arrivent, les zones corrigées sont marquées en rouge.

if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     ArrayResize(PeakDN, k + 1);
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l< asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     ArrayResize(PeakUP, k + 1);
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l< asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }    

ArraySize() renvoie le nombre total d'éléments du tableau, mais comme l'indexation commence à zéro, le nombre réel d'éléments est ArraySize() - 1.

 
Me voici à nouveau avec des questions) La question qui se pose maintenant est de la nature suivante. (Merci à tous ceux qui m'ont aidé précédemment), maintenant mon Expert Advisor reçoit les données des variables globales des indicateurs, en détectant de quel symbole les données ont été reçues. Sur la base de ces données, j'ouvre un ordre dans Expert Advisor sur la devise dont j'ai reçu les données de la variable globale. J'attache l'EA à un graphique et les indicateurs à tous les autres graphiques. Il reçoit les données mais n'ouvre l'ordre que pour une devise sur laquelle il est positionné (EA lui-même) ... Je pense que ce devrait être un multi-expert ... je ne sais pas comment le faire ou du moins ce qu'il devrait contenir pour qu'il ouvre des ordres sur d'autres paires (...) je ne veux pas lancer plusieurs EAs (...)
 
Infinity:
...comment faire, ou du moins ce qu'il faut y spécifier, pour qu'il ouvre des ordres sur d'autres paires. Je ne veux pas faire tourner plusieurs EAs ((
)
OrderSend(Nom de la paire de devises.... et autres paramètres......)
 
ToLik_SRGV:

Artyom, pour l'instant j'ai trouvé la première erreur :

Les tableaux PeakUP[] et PeakDN[], sont déclarés sans quantité spécifiée d'éléments, c'est-à-dire que vous les avez créés sans cellules du tout, et plus loin dans le code essayez d'y écrire quelque chose, mais comme ils ne contiennent pas d'éléments en eux-mêmes, naturellement rien n'est écrit en eux, et dans l'imprimante constamment zéro. Comme vous ne savez pas exactement combien de pics et de creux il y aura, je vous recommande d'augmenter dynamiquement le nombre d'éléments dans ces tableaux lorsque de nouvelles données arrivent, les zones corrigées sont marquées en rouge.

ArraySize() renvoie le nombre total d'éléments du tableau, mais comme l'indexation commence à zéro, le nombre réel d'éléments est ArraySize() - 1.

Anatoly ! Un monument devrait être érigé en votre honneur - un buste dans votre patrie ! Le plus intéressant est que je l'ai fait pour le réseau TempIND, mais je les ai oubliés et j'ai travaillé dessus la moitié de la nuit... :))
Raison: