Spiegazione dettagliata di iCustom - pagina 2

 
NewCoder47:


Grazie per questo RaptorUK, tuttavia è la codifica effettiva con cui sto avendo difficoltà. Sono molto nuovo di MQL4, e lo sto facendo solo da un paio di mesi, e sto ancora imparando - quindi ho bisogno di una semplice spiegazione della codifica e di come impostarla nell'indicatore.

Non hai letto quello che ho scritto? " Non sono necessarie modifiche agli indicatori. . . . l'EA accede semplicemente ai buffer di cui ha bisogno ai valori di shift di cui ha bisogno".
 
dabbler:
No, non puoi. Ho appena provato. Non si compila se si tralascia uno dei parametri lasciando solo un posto vuoto tra le virgole.
Sapevo che avrei dovuto correggere l'ultima affermazione. Togliere le virgole per i parametri.
 
ubzen:
Sapevo che avrei dovuto correggere l'ultima affermazione. Togliere le virgole per i parametri.

Ho appena compilato questo indicatore come TOR.mqh nella mia cartella Indicatore. Poi ho scritto il seguente codice nella cartella Expert.

void start(){
    iCustom(Symbol(),0,"TOR",0,1);
}
Ha compilato bene per me senza passare alcun parametro.
 
ubzen:

Ho appena compilato questo indicatore come TOR.mqh nella mia cartella Indicatore. Poi ho scritto il seguente codice nella cartella Expert.

Ha compilato bene per me senza passare alcun parametro.
Ma funziona veramente?
 
dabbler:
Ma funziona davvero?
Si. Sempre. Sto parlando dei valori esterni. E immagino che tu stia parlando di Buffer.
 

Grazie per il vostro aiuto ragazzi, domani sera darò un'occhiata e vedrò cosa posso capire.

Grazie

 

Ciao ragazzi. Sembra che io abbia ancora qualche difficoltà.

Ecco il codice, nell'indicatore (non ho cambiato nulla nell'indicatore), sto mostrando quello che penso sia la parte rilevante. Si prega di notare che questi non si susseguono nell'indicatore, c'è molto di più che ho spogliato.

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

Ora ecco il codice nell'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);
                

Quello che non capisco è la parte dei parametri. Quali valori devo mettere qui? Questa è la parte con cui sto lottando. Voglio usare i valori di STDBuffer e stddevma in un test più avanti nell'EA. Per esempio, devo includere Pair1 (che è altrove nell'indicatore dichiarato come il grafico corrente)? Poiché è già dichiarato come Null all'inizio di iCustom.

Inoltre, c'è un modo per vedere fisicamente quali valori vengono inviati all'EA?

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie

 
NewCoder47:

Ecco il codice, nell'indicatore (non ho cambiato nulla nell'indicatore), sto mostrando quello che penso sia la parte rilevante. Si prega di notare che questi non si susseguono nell'indicatore, c'è molto di più che ho spogliato.

Ora ecco il codice nell'EA

Quello che non capisco è la parte dei parametri. Quali valori devo mettere qui dentro? Questa è la parte con cui sto lottando. Voglio usare i valori di STDBuffer e stddevma in un test più avanti nell'EA. Per esempio, devo includere Pair1 (che è altrove nell'indicatore dichiarato come il grafico corrente)? Poiché è già dichiarato come Null all'inizio di iCustom.

Non hai mostrato le parti rilevanti dell'indicatore. Devi mostrare tutte le dichiarazioni esterne E l'ordine in cui si verificano.

Devi mostrare tutte le istruzioni SetIndexBuffer . Quando capirai perché hai bisogno di mostrarli, probabilmente capirai cosa devi fare.

Oh, e non puoi avere spazi vuoti tra le virgole nelle dichiarazioni iCustom ; non compilerà.

Prova a rileggere la documentazione di iCustom , tenendo conto che originariamente era in russo. Devi studiarla attentamente.

 
dabbler:

Non hai mostrato le parti rilevanti dell'indicatore. Devi mostrare tutte le istruzioni esterne E l'ordine in cui si verificano.

Devi mostrare tutte le istruzioni SetIndexBuffer . Quando capirai perché hai bisogno di mostrarli, probabilmente capirai cosa devi fare.

Oh, e non puoi avere spazi vuoti tra le virgole nelle dichiarazioni iCustom ; non compilerà.

Prova a rileggere la documentazione di iCustom , tenendo conto che originariamente era in russo. Devi studiarla attentamente.

Grazie Dabbler. Ho allegato l'EA completo e l'indicatore. Ho letto le dichiarazioni su iCustom, e capisco tutto a parte la parte dei parametri, è estremamente vaga. L'EA è molto ridotto thou, come io sono solo test al mo.

Grazie,

Mike.

Indicatore:

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

Si prega di ignorare il fatto che l'EA sta facendo il lavoro di un indicatore, come ho detto, sto testando al momento.

 
NewCoder47:

Grazie Dabbler. Ho allegato l'EA completo e l'indicatore. Ho letto le dichiarazioni su iCustom, e capisco tutto a parte la parte dei parametri, è estremamente vaga. L'EA è molto ridotto thou, come io sono solo test al mo.

Grazie,

Mike.

Indicatore:

EA:

Per favore ignora il fatto che l'EA sta facendo il lavoro di un indicatore, come ho detto, lo sto testando al momento.


Hai avuto alcuni ottimi consigli qui e ancora stai lottando....

Per sapere come iCustom lavora con il tuo indicatore puoi fare un helpEA o helpIndicator per controllare cosa c'è dentro i buffer dell'indicatore

In questo modo si impara il massimo sul controllo dei comandi in MT4. Leggete qui https://www.mql5.com/en/forum/138379

fai qualcosa del genere e imparerai come usarlo..... negli EA che vuoi fare