Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 409

 
RomanRott:

Intendo prescrivere del codice nel mio indicatore/advisor, che collegherebbe immediatamente alcuni altri indicatori quando si accende
Che tipo di codice?

Qualcosa mi dice che è per il tester. Questo si risolve in mezzo clic senza programmazione. Quando crei un modello con tutti gli indicatori di cui hai bisogno e gli dai il nome "Tester" o il nome dell'advisor, quando esegui l'advisor nel tester, si apre un grafico con gli indicatori già impostati.

 
RomanRott:

Intendo scrivere del codice nel mio indicatore/advisor, che collegherebbe immediatamente alcuni altri indicatori quando si accende
Cosa e come posso aggiungere?

Ho molte varianti. Per esempio 1) ChartApplyTemplate - applica al grafico il modello specificato (il modello mostra indicatore). 2) Aggiungere il codice dell'indicatore da includere nell'indicatore. 3) In Expert Advisor, visualizza l'indicatore tramite oggetti grafici. 4) ...
 

Ciao, puoi per favore consigliarmi, ho bisogno di integrare l'indicatore Vinini_HMA in un EA, sono riuscito a collegarlo e ottenere i dati tramite risorsa e iCustom, ma il test è diventato molto lento. Per favore consigliatemi come fare in modo che i valori dell'indicatore siano calcolati nell'EA stesso, ho bisogno di un solo parametro per le ultime 3 candele.

Ecco il codice dell'indicatore:

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

Ho bisogno di calcolare gli ultimi 3 valori che sono nel bufferExtMapBuffer[i]. Sono un principiante, non giudicare severamente. Ho provato a inserire questi frammenti di codice nell'Expert Advisor, ma i valori sono calcolati in modo errato

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

Ne ho davvero bisogno! Grazie! Grazie in anticipo! E scusate per il lungo messaggio.

File:
123.png  22 kb
 

Mi ritrovo con 3 valori vect[0], vect[1], vect[2]. Ma ho bisogno dei valori HMA. HMA[0] è calcolato ma non è corretto. HMA[1] e HMA[2] sono zero.

 
ilfat85:

Mi ritrovo con 3 valori vect[0], vect[1], vect[2]. Ma ho bisogno dei valori HMA. HMA[0] è calcolato ma non è corretto. HMA[1] e HMA[2] sono zero.

Credo che sia stato già discusso in questa pagina... Hai provato a contattare l'autore?
 
ilfat85:

Ciao, puoi per favore consigliarmi, ho bisogno di integrare l'indicatore Vinini_HMA in un EA, sono riuscito a collegarlo e ottenere i dati tramite risorsa e iCustom, ma il test è diventato molto lento. Per favore consigliatemi come fare in modo che i valori dell'indicatore siano calcolati nell'EA stesso, ho bisogno di un solo parametro per le ultime 3 candele.

Ecco il codice dell'indicatore:

Ho bisogno di calcolare gli ultimi 3 valori che sono nel bufferExtMapBuffer[i]. Sono un principiante, non giudicare severamente. Ho provato a inserire questi frammenti di codice nell'Expert Advisor, ma i valori sono calcolati in modo errato

Ne ho davvero bisogno! Grazie! Grazie in anticipo! E scusate per il lungo messaggio.

Per il tester, non collegare una risorsa - è lento (non si applica a questo particolare indicatore, ma a tutti - tutte le risorse sono lente nel tester).

Collegarsi semplicemente attraverso iCustom() dalla posizione del file nella sua cartella (non dalla risorsa)

 
STARIJ:
Credo che questo sia già stato discusso in questa pagina... Hai provato a contattare l'autore?

Vitya appare molto raramente qui.

 
STARIJ:
Credo che sia stato già discusso in questa pagina... Hai provato a contattare l'autore?

Lì c'è un problema leggermente diverso, loro ottengono i valori dall'indicatore, e io volevo che i valori fossero calcolati direttamente nell'EA. Le formule sembrano essere semplici, ma ho fatto un errore da qualche parte. Non ho contattato l'autore, non l'ho fatto. Grazie per il suggerimento, proverò a scrivergli.

 
Artyom Trishkin:

Per il tester, non collegare una risorsa - rallenta (non si applica a questo particolare indicatore, ma a tutti - delle risorse rallentano nel tester).

Collegarsi semplicemente tramite iCustom() dalla posizione del file nella sua cartella (non dalla risorsa)


Grazie! Non sapevo di questo, proverò in questo modo.

 

Ciao, sto facendo un grafico a barre basato sulla dimensione delle candele. Aiutami a sapere che la dimensione della prima candela è la più grande delle ultime dieci candele. La barra dell'istogramma dovrebbe essere segnata in qualche modo, per larghezza o colore. Forse dovresti anche aggiungere un buffer.

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);
  }
п
Motivazione: