[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 56

 
Bon après-midi, s'il vous plaît aidez, il y a une idée simple pour mettre en œuvre un appel Alert() lorsque trois MAs se croisent.
Description de l'intersection dans le programme. Il semble fonctionner, mais pas comme il le devrait. J'arrondis les variables à un chiffre pour que
puisse détecter l'intersection. Et cette Alert() me tambourine tant que les moyens sont à la même position. Comment faire pour qu'il soit appelé une fois, ou jusqu'à 5 fois.
//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;

//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD()
      {
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          Alert("Cигнал на ПОКУПКУ паре EURUSD");
          return(11); // 11 - на первой паре сигнал на покупку.
         }
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          Alert("Cигнал на ПРОДАЖУ паре EURUSD");
          return(10); // 20 - на первой паре сигнал на продажу.
         }     
      }
int start()

   {

//+------------------------------------------------------------------+
//| Блок работы с EURUSD                               |
//+------------------------------------------------------------------+
   if(EURUSD() != 11 || EURUSD() != 10)
      {
         // Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше.
         MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
  
         SMA_Blue_EURUSD = MA_Blue_EURUSD;
     // Преобразование int в string
         SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, '');     // Округление до х.хххх
         SMA_Green_EURUSD = MA_Green_EURUSD;   // Преобразование int в string
         SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, '');   // Округление до х.хххх
         SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string
         SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх

      }

     }

int deinit(){return(0);}




Si tout est faux à la racine, proposez des méthodes pour suivre l'intersection. Merci.
 
Zherart:
Bon après-midi, s'il vous plaît aidez, il y a une idée simple pour mettre en œuvre un appel Alert() lorsque trois MAs se croisent.
Description de l'intersection dans le programme. Il semble fonctionner, mais pas comme il le devrait. J'arrondis les variables à un chiffre pour...
pour attraper l'intersection. Et cet Alert() tambourine pour moi tant que les moyens sont à la même position. Comment faire pour qu'il soit appelé une fois, voire jusqu'à 5 fois. Si ce n'est pas à la racine, proposez des méthodes pour suivre l'intersection. Merci.

//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
   int БАРАБАНИТЬ = 1; // Сколько раз подавать сигнал
   int ПОКУПКА=0,ПРОДАЖА=0;
//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD() 
      {
   
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          if(ПОКУПКА<БАРАБАНИТЬ) {Alert("Cигнал на ПОКУПКУ паре EURUSD");ПОКУПКА++;}
          return(11); // 11 - на первой паре сигнал на покупку.
         }
      else ПОКУПКА=0;
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          if(ПРОДАЖА<БАРАБАНИТЬ) {Alert("Cигнал на ПРОДАЖУ паре EURUSD");ПРОДАЖА++;}
          return(10); // 20 - на первой паре сигнал на продажу.
         }
       else ПРОДАЖА=0;       
      }

Quelque chose comme ça en un coup d'oeil...
 
Sepulca, merci ! !! Nous allons faire un essai. J'ai compris ! !!
 
Soit je suis stupide, soit il y a un problème avec le terminal. Je voulais optimiser un EA, mais il n'y a pas d'onglet "paramètres d'entrée" dans les propriétés de l'EA. Aide.
 
prom18:
Soit je suis stupide, soit il y a un problème avec le terminal. Je voulais optimiser un EA, mais il n'y a pas d'onglet "paramètres d'entrée" dans les propriétés de l'EA. J'ai essayé d'optimiser mon EA, mais il n'y a pas d'onglet "paramètres d'entrée" dans ses propriétés.



https://forum.mql4.com/ru/46980/page417#702426

https://www.mql5.com/ru/forum/138609/page417#702426

 
silhouette:

Est-il possible d'utiliser un tableau dans les paramètres d'une fonction ? Par exemple, je veux créer une fonction qui traite les informations contenues dans un tableau :


Que dit le tutoriel ici?

"

Lesparamètres à passer sont indiqués entre parenthèses après le nom de la fonction à appeler et sont énumérés, séparés par des virgules. Le nombre de paramètres passés à une fonction ne doit pas dépasser 64. La fonction peut également ne pas utiliser les paramètres passés. Dans ce cas, une liste de paramètres vide est indiquée, c'est-à-dire que les parenthèses ouvrantes et fermantes sont placées immédiatement après le nom de la fonction.

Le nombre, le type et l'ordre des paramètres passés dans l'appel de la fonction doivent coïncider avec le nombre, le type et l'ordre des paramètres formels, spécifiés dans la description de la fonction (l'exception est l'appel d'une fonction, qui a des paramètres par défaut - voir Appel de fonction et Description de fonction et opérateur de retour). Si cette coïncidence n'existe pas, le MetaEditor affichera un message d'erreur. Les constantes, les variables, les expressions et les tableaux peuvent être utilisés comme paramètres passés. "

 
silhouette:

Est-il possible d'utiliser un tableau dans les paramètres d'une fonction ? Par exemple, je veux créer une fonction qui traite les informations contenues dans un tableau :

Essayez ça :

void Function(double& Array[])
 {
  ...
 }
https://docs.mql4.com/ru/basis/variables/formal
 
Sepulca:


Il en va de même pour Close - iClose, Open - iOpen, Time - iTime Volume - iVolume, etc.

Et l'indicateur peut dessiner jusqu'à 8 lignes de 0 à 7 https://docs.mql4.com/ru/customind/indicatorbuffers.


merci beaucoup :) l'indicateur n'est toujours pas dessiné, j'ai des pics dans des lignes comme price=iL[k] ; où iL est mon iLow...former Low

Bref, j'ai trouvé beaucoup de choses utiles... mais je ne vais pas creuser plus loin...

il existe une méthode plus simple pour visualiser le redécoupage... sans indicateur personnalisé.

 
Roman.:

Que dit le manuel ici?

"

Lesparamètres à passer sont indiqués entre parenthèses après le nom de la fonction à appeler et sont énumérés, séparés par des virgules. Le nombre de paramètres passés à la fonction ne doit pas dépasser 64. La fonction peut également ne pas utiliser les paramètres passés. Dans ce cas, une liste de paramètres vide est indiquée, c'est-à-dire que les parenthèses ouvrantes et fermantes sont placées immédiatement après le nom de la fonction.

Le nombre, le type et l'ordre des paramètres passés dans l'appel de la fonction doivent coïncider avec le nombre, le type et l'ordre des paramètres formels, spécifiés dans la description de la fonction (l'exception est l'appel d'une fonction, qui a des paramètres par défaut - voir Appel de fonction et Description de fonction et opérateur de retour). Si cette coïncidence n'existe pas, le MetaEditor affichera un message d'erreur. Les constantes, les variables, les expressions et les tableaux peuvent être utilisés comme paramètres passés. "

Lire le manuel avant d'écrire, voir le soulignement, mais n'a pas réussi à mettre en œuvre dans la pratique - écrit sur le type incompatible.
 
Sepulca:

Essayez de cette façon :

https://docs.mql4.com/ru/basis/variables/formal

Il existe deux fonctions.
// заполняет массив фракталами, найденными в пределах заданного количества баров
double FractalsUP[], FractalsDN[];
void FractalsMassive(string symb, int timeframe, int bars)
 {
  int fr, frtUP=0, frtDN=0;
  for(fr=3; fr<=bars; fr++)
   {
    if(iFractals(symb,timeframe,MODE_UPPER,fr)>0)
     {
      ArrayResize(FractalsUP,frtUP+1);
      FractalsUP[frtUP]=iFractals(symb,timeframe,MODE_UPPER,fr);
      frtUP++;
     }
    if(iFractals(symb,timeframe,MODE_LOWER,fr)>0)
     {
      ArrayResize(FractalsDN,frtDN+1);
      FractalsDN[frtDN]=iFractals(symb,timeframe,MODE_LOWER,fr);
      frtDN++;      
     }
   }
 }
double ExtremeFractalUP(double& fractalup[])
 {
  int masrange, efup;
  masrange=ArrayRange(fractalup,1);
  
  for(efup=0; efup<masrange; efup++)
   {
    if(fractalup[efup]>fractalup[efup+1])
     {
      return(fractalup[efup]);
     }
    else continue;
   }  
 }

Erreur "FractalsUP - types incompatibles" lors de la tentative de compilation dans EA.

   FractalsMassive(Symbol(),0,100);
   double extr=ExtremeFractalUP(FractalsUP[]);

Les fonctions et les tableaux déclarés sont stockés dans les fichiers d'inclusion, le cas échéant.