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

 
RomanRott:

Je veux prescrire un code dans mon indicateur/conseiller, qui connecterait immédiatement d'autres indicateurs lorsqu'il est activé.
Quel genre de code ?

Quelque chose me dit que c'est pour le testeur. Ceci est résolu en un demi-clic sans programmation. Lorsque vous créez un modèle avec tous les indicateurs dont vous avez besoin et que vous lui donnez le nom "Tester" ou le nom du conseiller, lorsque vous exécutez le conseiller dans le testeur, un graphique sera ouvert avec les indicateurs déjà définis.

 
RomanRott:

J'ai l'intention d'écrire un code dans mon indicateur/conseiller, qui connecterait immédiatement d'autres indicateurs lors de l'activation de
. Que dois-je ajouter et comment ?

J'ai de nombreuses variantes. Par exemple 1) ChartApplyTemplate - applique au graphique le modèle spécifié (le modèle montre l'indicateur). 2) Ajoutez le code de l'indicateur à inclure dans l'indicateur. 3) Dans l'Expert Advisor, afficher l'indicateur par des objets graphiques. 4) ...
 

Bonjour, Pouvez-vous me conseiller, j'ai besoin d'intégrer l'indicateur Vinini_HMA dans un EA, j'ai réussi à le connecter et à obtenir des données via la ressource et iCustom, mais le test est devenu très lent. Veuillez me conseiller comment faire pour que les valeurs de l'indicateur soient calculées dans l'EA lui-même, j'ai besoin d'un seul paramètre pour les 3 dernières bougies.

Voici le code de l'indicateur :

#property indicator_chart_window 
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green 
#property indicator_color3 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters 
extern int period=15; 
extern int method=3; // MODE_SMA 
extern int price=0; // PRICE_CLOSE 
extern int sdvig=0;
//---- buffers 

double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];

double vect[]; 

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() { 
   IndicatorBuffers(4); 
   SetIndexBuffer(0, ExtMapBuffer); 
   SetIndexBuffer(1, Uptrend); 
   SetIndexBuffer(2, Dntrend); 
   SetIndexBuffer(3, vect); 
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);

   SetIndexDrawBegin(0,1*period);
   SetIndexDrawBegin(1,2*period);
   SetIndexDrawBegin(2,3*period);

   IndicatorShortName("Signal Line("+period+")"); 
   SetIndexLabel(1,"UP");
   SetIndexLabel(2,"DN");
   return(0); 
} 

//+------------------------------------------------------------------+ 
//| Custor indicator deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() { return(0); } 

//+------------------------------------------------------------------+ 
//| ?????????? ??????? | 
//+------------------------------------------------------------------+ 
double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method, price, x+sdvig)); } 

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function | 
//+------------------------------------------------------------------+ 
int start() { 
   int counted_bars = IndicatorCounted(); 

   if (counted_bars < 0) return(-1); 
   if (counted_bars > 0) counted_bars--;
   
   int p = MathSqrt(period); 

   int i, limit0,limit1,limit2;
   
   limit2=Bars - counted_bars;
   limit1=limit2;
   limit0=limit1;

   if (counted_bars==0){
      limit1-=(period);
      limit2-=(2*period);
   }

   for(i = limit0; i >= 0; i--)    vect[i]          = 2*WMA(i, period/2) - WMA(i, period); 
   for(i = limit1; i >= 0; i--)    ExtMapBuffer[i]  = iMAOnArray(vect, 0, p, 0, method, i); 
   for(i = limit2; i >= 0; i--) { 
      Uptrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]> ExtMapBuffer[i+1]) Uptrend[i] = ExtMapBuffer[i]; `  AZ4
      Dntrend[i] = EMPTY_VALUE; if (ExtMapBuffer[i]< ExtMapBuffer[i+1]) Dntrend[i] = ExtMapBuffer[i]; 
   }
   return(0); 
} 

J'ai besoin de calculer les 3 dernières valeurs qui sont dans le tamponExtMapBuffer[i]. Je suis un débutant, ne jugez pas sévèrement. J'ai essayé d'insérer ces fragments de code dans l'Expert Advisor, mais les valeurs sont calculées de manière incorrecte

extern int period1=14;
extern int method1=3;
extern int price1=0;
extern int sdvig1=0;

-----------------------------------------------------
.
int p = MathSqrt(period1);      
        
        int z = 3;
        double vect[];
        ArrayResize(vect,z);
        
for(int i = 2; i >= 0; i--) vect[i] = 2*WMA(i, period1/2) - WMA(i, period1);
                
        int y = 3;;
        double HMA[];
        ArrayResize(HMA,y);
        
for(i = 2; i >= 0; i--) HMA[i]  = iMAOnArray(vect, 0, p, 0, method, i);

-------------------------------------------------------

double WMA(int x, int p) { return(iMA(NULL, 0, p, 0, method1, price1, x+sdvig1)); }

J'en ai vraiment besoin ! Merci ! Merci d'avance ! Et désolé pour le long message.

Dossiers :
123.png  22 kb
 

Je me retrouve avec 3 valeurs vect[0], vect[1], vect[2]. Mais j'ai besoin des valeurs HMA. HMA[0] est calculé mais pas correct. HMA[1] et HMA[2] sont égaux à zéro.

 
ilfat85:

Je me retrouve avec 3 valeurs vect[0], vect[1], vect[2]. Mais j'ai besoin des valeurs HMA. HMA[0] est calculé mais pas correct. HMA[1] et HMA[2] sont égaux à zéro.

Je pense que cela a déjà été discuté sur cette page... Avez-vous essayé de contacter l'auteur ?
 
ilfat85:

Bonjour, Pouvez-vous me conseiller, j'ai besoin d'intégrer l'indicateur Vinini_HMA dans un EA, j'ai réussi à le connecter et à obtenir des données via la ressource et iCustom, mais le test est devenu très lent. Veuillez me conseiller comment faire pour que les valeurs de l'indicateur soient calculées dans l'EA lui-même, j'ai besoin d'un seul paramètre pour les 3 dernières bougies.

Voici le code de l'indicateur :

J'ai besoin de calculer les 3 dernières valeurs qui sont dans le tamponExtMapBuffer[i]. Je suis un débutant, ne jugez pas sévèrement. J'ai essayé d'insérer ces fragments de code dans l'Expert Advisor, mais les valeurs sont calculées de manière incorrecte

J'en ai vraiment besoin ! Merci ! Merci d'avance ! Et désolé pour le long message.

Pour le testeur, ne pas connecter une ressource - elle est lente (ne s'applique pas à cet indicateur particulier, mais à tous - toutes les ressources sont lentes dans le testeur).

Connectez-vous simplement via iCustom() à partir de l'emplacement du fichier dans son dossier (pas à partir de la ressource).

 
STARIJ:
Je pense que cela a déjà été discuté sur cette page... Avez-vous essayé de contacter l'auteur ?

Vitya apparaît très rarement ici.

 
STARIJ:
Je pense que cela a déjà été discuté sur cette page... Avez-vous essayé de contacter l'auteur ?

Il y a un problème légèrement différent ici, ils obtiennent les valeurs de l'indicateur, et je voulais que les valeurs soient calculées directement dans l'EA. Les formules semblent être simples, mais j'ai fait une erreur quelque part. Je n'ai pas contacté l'auteur. Merci pour le conseil, je vais essayer de lui écrire.

 
Artyom Trishkin:

Pour le testeur, ne connectez pas une ressource - elle ralentit (ne s'applique pas à cet indicateur particulier, mais à tous - des ressources ralentissent dans le testeur).

Connectez-vous simplement via iCustom() à partir de l'emplacement du fichier dans son dossier (pas à partir de la ressource).


Merci ! Je ne connaissais pas ça, je vais essayer comme ça.

 

Bonjour, je réalise un graphique en barres basé sur la taille des bougies. Aidez-moi à savoir que la taille de la première bougie est la plus grande des dix dernières bougies. La barre de l'histogramme doit être marquée d'une manière ou d'une autre, par sa largeur ou sa couleur. Vous devriez peut-être aussi ajouter un tampon.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit = Bars-1;
//--- counting from 0 to rates_total
   

//--- the main loop of calculations
   for(i = limit; i >= 0; i--)
     {
      if (hl) ExtATRBuffer[i] = (iHigh(Symbol(),Period(),i) - iLow(Symbol(),Period(),i)); 
                        
      else    ExtATRBuffer[i] = MathAbs(iOpen(Symbol(),Period(),i) - iClose(Symbol(),Period(),i));
      
      if (ExtATRBuffer[i] < x) ExtATRBuffer[i] = 0;
    
    //
      
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
п