Explicación detallada de iCustom - página 2

 
NewCoder47:


Gracias por eso RaptorUK, sin embargo es la codificación real que estoy teniendo dificultades con. Soy muy nuevo en MQL4, y sólo he estado haciendo un par de meses, y todavía estoy aprendiendo - así que estoy necesitando una explicación sencilla de la codificación y cómo configurarlo en el indicador.

¿No leíste lo que escribí? " No se necesitan cambios en los indicadores... el EA simplemente accede a los buffers que necesita en los valores de desplazamiento que necesita".
 
dabbler:
No se puede. Acabo de probarlo. No compila si se omite uno de los parámetros dejando un lugar vacío entre las comas.
Sabía que debería haber corregido la última declaración. Quita las comas de los parámetros.
 
ubzen:
Sabía que debería haber corregido la última declaración. Quite las comas de los parámetros.

Acabo de compilar este indicador como TOR.mqh dentro de mi carpeta de indicadores. Luego escribí el siguiente código en la carpeta de expertos.

void start(){
    iCustom(Symbol(),0,"TOR",0,1);
}
Se cumplió bien para mí sin pasar ningún parámetro.
 
ubzen:

Acabo de compilar este indicador como TOR.mqh dentro de mi carpeta de indicadores. Entonces escribí el siguiente código en la carpeta de expertos.

Se compiló bien para mí sin pasar ningún parámetro.
¿Pero realmente funciona?
 
dabbler:
Pero, ¿funciona realmente?
Sí. Todo el tiempo. Estoy hablando de los Valores Externos. Y supongo que tú estás hablando de Buffers.
 

Gracias por vuestra ayuda, mañana por la noche echaré un vistazo a ver qué puedo averiguar.

Gracias

 

Hola chicos. Parece que sigo teniendo algunas dificultades.

Aquí está el código, en el indicador ( No he cambiado nada en el indicador), estoy mostrando lo que creo que es la parte relevante. Tenga en cuenta que estos no se siguen en el indicador, hay mucho más que he despojado.

//---- 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);
     } 

Ahora aquí está el código en el 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);
                

Lo que no entiendo es la parte de los parámetros. ¿Qué valores debo poner aquí? Esta es la parte con la que estoy luchando. Quiero usar los valores de STDBuffer y stddevma en una prueba más adelante en el EA. Por ejemplo, ¿incluyo Pair1 (que está en otra parte del indicador declarado como el gráfico actual)? Como su ya declarado como Null en el inicio de iCustom.

Además, ¿hay alguna forma de ver físicamente qué valores se envían al EA?

Cualquier ayuda será muy apreciada.

Gracias

 
NewCoder47:

Aquí está el código, en el indicador (no he cambiado nada en el indicador), estoy mostrando lo que creo que es la parte relevante. Tenga en cuenta que estos no se siguen en el indicador, hay mucho más que he despojado.

Ahora aquí está el código en el EA

Lo que no entiendo es la parte de los parámetros. ¿Qué valores debo poner aquí? Esta es la parte con la que estoy luchando. Quiero utilizar los valores de STDBuffer y stddevma en una prueba más adelante en el EA. Por ejemplo, ¿incluyo Pair1 (que está en otra parte del indicador declarado como el gráfico actual)? Como su ya declarado como Null en el inicio de iCustom.

No has mostrado las partes relevantes del indicador. Necesita mostrar todas las sentencias externas Y el orden en que ocurren.

Necesitas mostrar todas las sentencias SetIndexBuffer . Cuando entiendas por qué necesitas mostrarlas, probablemente verás lo que tienes que hacer.

Ah, y no puedes tener espacios en blanco entre las comas en las sentencias iCustom ; no compilarán.

Intenta releer la documentación de iCustom , teniendo en cuenta que está originalmente en ruso. Tienes que estudiarla detenidamente.

 
dabbler:

No has mostrado las partes relevantes del indicador. Debe mostrar todas las sentencias externas Y el orden en que se producen.

Necesitas mostrar todas las sentencias SetIndexBuffer . Cuando entiendas por qué necesitas mostrarlas, probablemente verás lo que tienes que hacer.

Ah, y no puedes tener espacios en blanco entre comas en las sentencias de iCustom ; no compilarán.

Intenta releer la documentación de iCustom , teniendo en cuenta que estaba originalmente en ruso. Tienes que estudiarla detenidamente.

Gracias Dabbler. He adjuntado el EA completo y el indicador. He leído las declaraciones sobre iCustom, y entiendo todo, excepto la parte de los parámetros, es extremadamente vaga. El EA es muy reducido, ya que sólo estoy probando en el mo.

Gracias,

Mike.

Indicador:

//---- 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);
        }

Por favor, ignore el hecho de que el EA está haciendo el trabajo de un indicador, como he dicho, estoy probando en el momento.

 
NewCoder47:

Gracias Dabbler. He adjuntado el EA completo y el indicador. He leído las declaraciones sobre iCustom, y entender todo, aparte de la parte de los parámetros, es extremadamente vaga. El EA es muy reducido, ya que sólo estoy probando en el mo.

Gracias,

Mike.

Indicador:

EA:

Por favor, ignora el hecho de que el EA está haciendo el trabajo de un indicador, como he dicho, estoy probando en este momento.


Usted había tenido un gran consejo aquí y todavía está luchando....

Para saber cómo funciona iCustom con tu indicador puedes hacer un helpEA o helpIndicator para comprobar qué hay dentro de los buffers del indicador

De esta manera aprendes lo máximo sobre la comprobación de comandos en MT4. Lee aquí https://www.mql5.com/en/forum/138379

haz algo así y aprenderás a usarlo..... en los EA's que quieras hacer