Explication détaillée d'iCustom - page 2

 
NewCoder47:


Merci pour cette information RaptorUK, mais c'est le codage réel qui me pose problème. Je suis très novice dans MQL4, je ne le pratique que depuis quelques mois et j'apprends encore. J'ai donc besoin d'une explication simple du codage et de la façon de le configurer dans l'indicateur.

N'avez-vous pas lu ce que j'ai écrit ? " Aucun changement n'est nécessaire dans les indicateurs... l'EA accède simplement aux tampons dont il a besoin aux valeurs de décalage dont il a besoin."
 
dabbler:
Non, tu ne peux pas. Je viens de l'essayer. Il ne compilera pas si vous omettez l'un des paramètres en laissant simplement un espace vide entre les virgules.
Je savais que j'aurais dû corriger la dernière phrase. Enlever les virgules pour les paramètres.
 
ubzen:
Je savais que j'aurais dû corriger la dernière phrase. Enlevez les virgules pour les paramètres.

Je viens de compiler cet indicateur en tant que TOR.mqh dans mon dossier d'indicateurs. Puis j'ai écrit le code suivant dans le dossier Expert.

void start(){
    iCustom(Symbol(),0,"TOR",0,1);
}
Il a bien fonctionné pour moi sans passer aucun paramètre.
 
ubzen:

Je viens de compiler cet indicateur en tant que TOR.mqh dans mon dossier d'indicateurs. Puis j'ai écrit le code suivant dans le dossier de l'expert.

Il s'est compilé sans problème sans passer de paramètres.
Mais est-ce que cela fonctionne réellement ?
 
dabbler:
Mais est-ce que ça marche vraiment ?
Oui. Tout le temps. Je parle de Extern Values. Et je suppose que tu parles de Buffers.
 

Merci pour votre aide les gars, je vais regarder demain soir et voir ce que je peux trouver.

Merci

 

Salut les gars. Il semble que j'aie encore quelques difficultés.

Voici le code, dans l'indicateur ( je n'ai rien changé dans l'indicateur), je montre ce que je pense être la partie pertinente. Veuillez noter que ces éléments ne se suivent pas dans l'indicateur, il y a beaucoup plus que ce que j'ai enlevé.

//---- indicator buffers
double     STDBuffer[];
double     stddevma[];


//---- macd counted in the 1-st buffer
  for(int i=limit-1; i>=0; i--){
     STDBuffer[i]=iStdDev(Pair1,0,StdDev.MA.Period, StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
  for(i=limit-1; i>=0; i--){
     stddevma[i] = iMAOnArray(STDBuffer, 0, MA.Fast.Period, MA.Fast.Shift, MA.Fast.Method, i);
     } 

Voici maintenant le code dans l'EA

                double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
                double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0);
                double     STDBuffer = iCustom(Null,0,"SFX", , ,0,0);
                double     stddevma = iCustom(Null,0,"SFX", , ,1,0);
                

Ce que je ne comprends pas, c'est la partie paramètres. Quelles valeurs dois-je mettre ici ? C'est la partie qui me pose problème. Je veux utiliser les valeurs de STDBuffer et de stddevma dans un test plus loin dans l'EA. Par exemple, dois-je inclure Pair1 (qui se trouve ailleurs dans l'indicateur et qui est déclaré comme étant le graphique actuel) ? Comme elle est déjà déclarée comme nulle au début de iCustom.

De plus, y a-t-il un moyen de voir physiquement quelles valeurs sont envoyées à l'EA ?

Toute aide serait grandement appréciée.

Merci

 
NewCoder47:

Voici le code, dans l'indicateur ( je n'ai rien changé dans l'indicateur), je montre ce que je pense être la partie pertinente. Veuillez noter que ces éléments ne se suivent pas dans l'indicateur, il y a beaucoup d'autres éléments que j'ai supprimés.

Voici maintenant le code de l'EA

Ce que je ne comprends pas, c'est la partie paramètres. Quelles valeurs dois-je mettre ici ? C'est la partie qui me pose problème. Je veux utiliser les valeurs de STDBuffer et de stddevma dans un test plus loin dans l'EA. Par exemple, dois-je inclure Pair1 (qui se trouve ailleurs dans l'indicateur et qui est déclaré comme étant le graphique actuel) ? Comme elle est déjà déclarée comme nulle au début de iCustom.

Vous n'avez pas montré les parties pertinentes de l'indicateur. Vous devez montrer toutes les déclarations externes ET l'ordre dans lequel elles se produisent.

Vous devez montrer toutes les instructions SetIndexBuffer . Lorsque vous comprendrez pourquoi vous devez les montrer, vous verrez probablement ce que vous devez faire.

Oh, et vous ne pouvez pas avoir d'espaces entre les virgules dans les instructions iCustom ; cela ne compilera pas.

Essayez de relire la documentation d'iCustom , en tenant compte du fait qu'elle était à l'origine en russe. Vous devez l'étudier attentivement.

 
dabbler:

Vous n'avez pas montré les parties pertinentes de l'indicateur. Vous devez montrer toutes les instructions externes ET l'ordre dans lequel elles apparaissent.

Vous devez montrer toutes les instructions SetIndexBuffer . Lorsque vous comprendrez pourquoi vous devez les montrer, vous verrez probablement ce que vous devez faire.

Oh, et vous ne pouvez pas avoir d'espaces entre les virgules dans les instructions iCustom ; cela ne compilera pas.

Essayez de relire la documentation d'iCustom , en tenant compte du fait qu'elle était à l'origine en russe. Vous devez l'étudier attentivement.

Merci Dabbler. J'ai joint l'EA et l'indicateur complets. J'ai lu les déclarations sur iCustom, et je comprends tout, sauf la partie sur les paramètres, qui est extrêmement vague. L'EA est très réduite, car je ne fais que des tests pour le moment.

Merci,

Mike.

Indicateur :

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Yellow
#property  indicator_color2  Red
#property  indicator_width1  1

//---- indicator parameters
extern string PairName = "";   // Leave blank for the pair of the chart, enter other pair name to compare correlated pairs

extern int StdDev.MA.Period=12;  // D1=20
extern int StdDev.MA.Shift=0;    //
extern int StdDev.MA.Method = 0; // 0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int StdDev.MA.Price = 0;  // 0 Close price, 1 Open price, 2 High price, 3 Low price, 4 Median price, (high+low)/2, 5 Typical price, (high+low+close)/3, 6 Weighted close price, (high+low+close+close)/4

extern int MA.Fast.Period = 3;
extern int MA.Fast.Method = 2;   //  0=SMA 1=EMA 2=Smoothed 3=Linear Weighted
extern int MA.Fast.Shift = 0;

extern bool CheckOncePerBar = true;

int i, limit, counted_bars;
static string Pair1;

datetime CurrentTimeStamp;

//---- indicator buffers
double     STDBuffer[];
double     stddevma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  
   IndicatorDigits(Digits+1);
     
//---- drawing settings
   SetIndexStyle(0,DRAW_LINE); // 
   SetIndexStyle(1,DRAW_LINE);

      
//---- indicator buffers mapping
   SetIndexBuffer(0, STDBuffer);
   SetIndexBuffer(1, stddevma);

   
   if (PairName == "") Pair1 = Symbol();
   else Pair1 = PairName;

//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("SFX TOR: "+Pair1+"("+StdDev.MA.Period+")");
   SetIndexLabel(0,"StdDev");
   SetIndexLabel(1,"StdDev MA");

//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {

   counted_bars=IndicatorCounted();
   
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
//---- macd counted in the 1-st buffer
  for(int i=limit-1; i>=0; i--){
     STDBuffer[i]=iStdDev(Pair1,0,StdDev.MA.Period, StdDev.MA.Shift, StdDev.MA.Method, StdDev.MA.Price, i);
     }
  for(i=limit-1; i>=0; i--){
     stddevma[i] = iMAOnArray(STDBuffer, 0, MA.Fast.Period, MA.Fast.Shift, MA.Fast.Method, i);
     } 
    
//Execute on bar Open
    if( CheckOncePerBar == true ){
      if( CurrentTimeStamp == Time[0] )
         return( 0 );
   }
   
   CurrentTimeStamp = Time [0];
   
          
//---- done
   return(0);
  }

EA :

//+------------------------------------------------------------------+
//|                                                       Simple.mq4 |
//|                                                       Mike Clegg |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright "Mike Clegg"


// External variables
extern double LotSize = 1;

extern int MagicNumber = 123;

extern int FastMAPeriod = 12;
extern int SlowMAPeriod = 26;


// Global variables
int BuyTicket;
int SellTicket;


// Start function
int start()
        {
                // Moving averages
                double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
                double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0);
                double     STDBuffer = iCustom(NULL,0,"SFX",0,0);
      double     stddevma = iCustom(NULL,0,"SFX",1,0);
                
                // Buy order 
                if(FastMA > SlowMA && BuyTicket == 0 && stddevma > STDBuffer)
                        {PlaySound("alert.wav");
         Alert(Symbol(),"All Crossing",Period(),"All Crossing");
                        }
                                
                return(0);
        }

Veuillez ignorer le fait que l'EA fait le travail d'un indicateur, comme je l'ai dit, je fais des tests pour le moment.

 
NewCoder47:

Merci Dabbler. J'ai joint l'EA et l'indicateur complets. J'ai lu les déclarations sur iCustom, et je comprends tout, sauf la partie sur les paramètres, qui est extrêmement vague. L'EA est très réduite, car je ne fais que des tests pour le moment.

Merci,

Mike.

Indicateur :

EA :

Veuillez ignorer le fait que l'EA fait le travail d'un indicateur, comme je l'ai dit, je suis en train de tester pour le moment.


Vous avez reçu d'excellents conseils et vous vous débattez encore. ....

Pour savoir comment iCustom fonctionne avec votre indicateur, vous pouvez faire un helpEA ou helpIndicator pour vérifier ce qui se trouve dans les tampons de l'indicateur.

De cette façon vous apprenez le plus sur les commandes de vérification dans MT4. Lisez ici https://www.mql5.com/en/forum/138379

Faites quelque chose comme ça et vous apprendrez comment l'utiliser..... dans les EA que vous voulez faire.

Raison: