Explicação detalhada do iCustom - página 2

 
NewCoder47:


Obrigado por esse RaptorUK, porém é com a codificação propriamente dita que estou tendo dificuldades. Sou muito novo na MQL4, e estou fazendo isso há apenas alguns meses, e ainda estou aprendendo - por isso preciso de uma explicação simples da codificação e de como configurá-la no indicador.

Você não leu o que escrevi? " Não são necessárias mudanças nos Indicadores . . . o EA simplesmente acessa os amortecedores de que precisa nos valores de deslocamento que precisa".
 
dabbler:
Não, você não pode. Eu acabei de tentar. Ele não será compilado se você deixar de fora um dos parâmetros, deixando apenas um lugar vazio entre as vírgulas.
Eu sabia que deveria ter corrigido a última afirmação. Tirar as vírgulas para os parâmetros.
 
ubzen:
Eu sabia que deveria ter corrigido a última afirmação. Tirei as vírgulas para os parâmetros.

Acabei de cumprir este Indicador como TOR.mqh dentro de minha Pasta de Indicadores. Então escrevi o seguinte Código na Pasta de Peritos.

void start(){
    iCustom(Symbol(),0,"TOR",0,1);
}
Para mim, ele cumpriu bem sem passar nenhum parâmetro.
 
ubzen:

Acabei de cumprir este Indicador como TOR.mqh dentro de minha Pasta de Indicadores. Então escrevi o seguinte Código na Pasta de Peritos.

Ele compilou multa para mim sem passar nenhum parâmetro.
Mas será que realmente funciona?
 
dabbler:
Mas será que realmente funciona?
Sim. O tempo todo. Estou falando de valores externos. E eu acho que você está falando de Buffers.
 

Obrigado por sua ajuda, darei uma olhada amanhã à noite e verei o que posso descobrir.

Obrigado

 

Ei, pessoal. Parece que ainda estou tendo alguma dificuldade.

Aqui está o código, no indicador ( Não mudei nada no indicador), estou mostrando o que acho que é a parte relevante. Por favor note que estes não se seguem no indicador, há muito mais que eu despojei.

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

Agora aqui está o código no 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);
                

O que eu não entendo é a parte dos parâmetros. Que valores eu coloco aqui? Esta é a parte com a qual estou me debatendo. Estou querendo usar os valores do STDBuffer e do stddevma em um teste mais abaixo no EA. Por exemplo, eu incluo o Par1 (que está em outro lugar no Indicador declarado como o gráfico atual)? Como já foi declarado como Nulo no início do iCustom.

Além disso, há alguma maneira de ver fisicamente quais valores estão sendo enviados para a EA?

Qualquer ajuda seria muito apreciada.

Obrigado

 
NewCoder47:

Aqui está o código, no indicador ( Não mudei nada no indicador), estou mostrando o que acho que é a parte relevante. Observe que estes não se seguem no indicador, há muito mais que eu despojei.

Agora aqui está o código no EA

O que eu não entendo é a parte dos parâmetros. Que valores eu coloco aqui? Esta é a parte com a qual estou me debatendo. Estou querendo usar os valores do STDBuffer e do stddevma em um teste mais abaixo no EA. Por exemplo, eu incluo o Par1 (que está em outro lugar no Indicador declarado como o gráfico atual)? Como já foi declarado como Nulo no início do iCustom.

Você não mostrou as partes relevantes do indicador. Você precisa mostrar todas as declarações externas E a ordem em que elas ocorrem.

Você precisa mostrar todas as declarações do SetIndexBuffer . Quando você entender por que precisa mostrá-las, provavelmente verá o que tem que fazer.

Ah, e você não pode ter espaços em branco entre vírgulas nas declarações iCustom ; ele não irá compilar.

Tente reler a documentação do iCustom , levando em conta que ela estava originalmente em russo. Você tem que estudá-la cuidadosamente.

 
dabbler:

Você não mostrou as partes relevantes do indicador. Você precisa mostrar todas as declarações externas E a ordem em que elas ocorrem.

Você precisa mostrar todas as declarações do SetIndexBuffer . Quando você entender por que precisa mostrá-las, provavelmente verá o que tem que fazer.

Ah, e você não pode ter espaços em branco entre vírgulas nas declarações iCustom ; ele não irá compilar.

Tente reler a documentação do iCustom , levando em conta que ela estava originalmente em russo. Você tem que estudá-la cuidadosamente.

Obrigado, Dabbler. Anexei a EA completa e o Indicador. Li as declarações sobre o iCustom, e entendi tudo, exceto a parte dos parâmetros, que é extremamente vaga. O EA é muito reduzido, pois estou apenas testando no Mo.

Obrigado,

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 o fato de que a EA está fazendo o trabalho de um indicador, como eu disse, eu estou testando no momento.

 
NewCoder47:

Obrigado Dabbler. Anexei o EA completo e o Indicador. Li as declarações no iCustom, e entendi tudo, exceto a parte dos parâmetros, que é extremamente vaga. O EA é muito reduzido, pois estou apenas testando no Mo.

Obrigado,

Mike.

Indicador:

EA:

Por favor, ignore o fato de que a EA está fazendo o trabalho de um indicador, como eu disse, eu estou testando no momento.


Você teve alguns grandes conselhos aqui e ainda está lutando....

Para saber como o iCustom trabalha com seu indicador você pode fazer uma helpEA ou helpIndicator para verificar o que está dentro dos amortecedores do indicador.

Desta forma, você aprende mais sobre a verificação de comandos no MT4. Leia aqui https://www.mql5.com/en/forum/138379

faça algo assim e você aprenderá como usá-lo..... nos EA's que você quer fazer