Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 409

 
RomanRott:

Me refiero a prescribir algún código en mi indicador/consejero, que conectaría inmediatamente algunos otros indicadores al encender
¿Qué tipo de código?

Algo me dice que es para el probador. Esto se resuelve en medio clic sin necesidad de programar. Cuando cree una plantilla con todos los indicadores que necesite y le dé el nombre de "Tester" o el nombre del asesor, cuando ejecute el asesor en el tester, se abrirá un gráfico con los indicadores ya configurados.

 
RomanRott:

Me refiero a escribir algún código en mi indicador/asesor, que conectaría inmediatamente algunos otros indicadores cuando se enciende
¿Qué y cómo agrego?

Tengo muchas variantes. Por ejemplo 1) ChartApplyTemplate - aplica al gráfico la plantilla especificada (la plantilla muestra el indicador). 2) Añade el código del indicador que se incluirá en el indicador. 3) En el Asesor Experto, visualice el indicador por objetos gráficos. 4) ...
 

Hola, me pueden asesorar por favor, necesito integrar el indicador Vinini_HMA en un EA, he logrado conectarlo y obtener datos a través de resource y iCustom, pero las pruebas se han vuelto muy lentas. Por favor, aconsejar cómo hacer que los valores del indicador se calculan en la propia EA, necesito sólo un parámetro para las últimas 3 velas.

Aquí está el código del indicador:

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

Necesito calcular los 3 últimos valores que hay en el bufferExtMapBuffer[i]. Soy un principiante, no me juzgues severamente. He intentado insertar estos fragmentos de código en el Asesor Experto, pero los valores se calculan incorrectamente

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

Lo necesito de verdad. Gracias. Gracias de antemano. Y perdón por el largo mensaje.

Archivos adjuntos:
123.png  22 kb
 

Termino con 3 valores vect[0], vect[1], vect[2]. Pero necesito los valores de HMA. HMA[0] se calcula pero no es correcto. HMA[1] y HMA[2] son cero.

 
ilfat85:

Termino con 3 valores vect[0], vect[1], vect[2]. Pero necesito los valores de HMA. HMA[0] se calcula pero no es correcto. HMA[1] y HMA[2] son cero.

Creo que ya se discutió en esta página... ¿Ha intentado ponerse en contacto con el autor?
 
ilfat85:

Hola, me pueden asesorar por favor, necesito integrar el indicador Vinini_HMA en un EA, he logrado conectarlo y obtener datos a través de resource y iCustom, pero las pruebas se han vuelto muy lentas. Por favor, aconsejar cómo hacer que los valores del indicador se calculan en la propia EA, necesito sólo un parámetro para las últimas 3 velas.

Aquí está el código del indicador:

Necesito calcular los 3 últimos valores que hay en el bufferExtMapBuffer[i]. Soy un principiante, no me juzgues severamente. He intentado insertar estos fragmentos de código en el Asesor Experto, pero los valores se calculan incorrectamente

Lo necesito de verdad. Gracias. Gracias de antemano. Y perdón por el largo mensaje.

Para el probador, no conecte un recurso - es lento (no se aplica a este indicador en particular, sino a todos - todos los recursos son lentos en el probador).

Conectar simplemente a través de iCustom() desde la ubicación del archivo en su carpeta (no desde el recurso)

 
STARIJ:
Creo que esto ya se ha discutido en esta página... ¿Ha intentado ponerse en contacto con el autor?

Vitya aparece muy raramente aquí.

 
STARIJ:
Creo que ya se discutió en esta página... ¿Ha intentado ponerse en contacto con el autor?

Hay una cuestión ligeramente diferente allí, obtienen los valores del indicador, y yo quería que los valores se calculan directamente en la EA. Las fórmulas parecen ser sencillas, pero me he equivocado en alguna parte. No me he puesto en contacto con el autor. Gracias por el consejo, intentaré escribirle.

 
Artyom Trishkin:

Para el probador, no conecte un recurso - se ralentiza (no se aplica a este indicador en particular, sino a todos - de los recursos se ralentizan en el probador).

Conectar simplemente a través de iCustom() desde la ubicación del archivo en su carpeta (no desde el recurso)


Gracias. No sabía de esto, lo probaré así.

 

Hola. Estoy haciendo un gráfico de barras basado en el tamaño de las velas. Ayúdame a saber que el tamaño de la primera vela es el mayor de las últimas diez velas. La barra del histograma debe estar marcada de alguna manera, por su anchura o por su color. Tal vez también debas añadir un amortiguador.

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