Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 777

 
Aleksey Vyazmikin:

¿Se puede escribir un kernel para OpenCL? Sólo conozco a una persona aquí que afirma utilizar OpenCL para optimizar sobre la marcha, mientras el EA se está ejecutando. No conozco ningún otro ejemplo.

Me gustaría echarles un vistazo yo mismo. Incluso ha pedido que se publique un artículo sobre el tema, pero la administración no sabe cómo aplicarlo al comercio real.

Es increíble, opencl lleva ya 5 años de soporte, pero no hay ejemplos concretos de funcionamiento para operar ni artículos... Bueno, ya que los propios desarrolladores no saben cómo aplicarlo, entonces centrémonos en la optimización de la nube
 
ax237b:
es alucinante, el soporte para opencl lleva 5 años y no hay ejemplos concretos de trabajo para oficios o artículos... bueno si los propios desarrolladores no saben aplicarlo, pues centrémonos en la optimización de la nube
¿Qué es lo sorprendente? El terminal funciona con suficiente rapidez, el retraso en la respuesta del corredor. Así que opencl está descansando por ahora. Lo que suceda después, ya lo veremos
 

¡Por favor, ayuda!

Estoy rehaciendo el indicador, aquí está el código para dibujar

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Label1
#property  indicator_label1  "High";
#property  indicator_type1   DRAW_LINE;
#property  indicator_color1  clrRed;
#property  indicator_style1  STYLE_DOT;
#property  indicator_width1  1;
//--- plot Label2
#property  indicator_label2  "Low";
#property  indicator_type2   DRAW_LINE;
#property  indicator_color2  clrRed;
#property  indicator_style2  STYLE_DOT;
#property  indicator_width2  1;
//--- plot Label3
#property  indicator_label3  "Close";
#property  indicator_type3   DRAW_LINE;
#property  indicator_color3  clrAquamarine;
#property  indicator_style3  STYLE_SOLID;
#property  indicator_width3  1;


//--- input parameters
input int InpChannelPeriod=48; // Period
//--- indicator buffers
double ExtHighBuffer[];
double ExtLowBuffer[];
double ExtCloseBuffer[];
//---
int i,limit,start;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtLowBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtCloseBuffer,INDICATOR_DATA);   
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- set first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpChannelPeriod);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpChannelPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpChannelPeriod);   
//---
   return(0);
  }

//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- check for rates if(rates_total<InpChannelPeriod) return(0); //--- preliminary calculations if(prev_calculated==0) limit=InpChannelPeriod; else limit=prev_calculated; //--- the main loop of calculations for(i=limit;i<rates_total && !IsStopped();i++) { ExtHighBuffer[i]=100.0; ExtLowBuffer[i]=0.0; ExtCloseBuffer[i]=50.0; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+

Estilo#propertyindicator_style2STYLE_DOT; - no dibuja en el gráfico en absoluto

Estilo#propertyindicator_style2STYLE_SOLID; - dibuja en el gráfico enSTYLE_DOT

¿Qué es esta anomalía, o mis manos están mal?

 

¿Cuál es la mejor manera de calcular la media móvil de la matriz gráfica - aquí o en el indicador?

¿Existen funciones o librerías ya hechas recomendadas por los desarrolladores?

 
Aleksey Vyazmikin:

¿Cuál es la mejor manera de calcular la media móvil de la matriz gráfica: aquí o en el indicador?

¿Tal vez haya algunas funciones o bibliotecas ya hechas recomendadas por los desarrolladores?


O incluso una simple variante - para dibujar MA en el sótano de iMA - no consigo nada :(

Estoy llamando a través de la función

double MA_TF(int index)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(handle_MA_TF,0,index,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the handle_MA_TF indicator, error code %d",GetLastError());
      return(0.0);
     }
   return NormalizeDouble(MA[0],Digits());
  }

Pero, no está bien - de adentro hacia afuera...

 

Con el asistente hice una llamada al revés a MA_TF(rates_total-i) - pareció ayudar, pero miro el historial y a veces hay una discrepancia con el indicador incorporado (incluso con la normalización eliminada), ¿puede ser este el caso?

Y, ¿cómo hacer que el indicador emita valores decimales?

 
Aleksey Vyazmikin:

¿Cuál es la mejor manera de calcular la media móvil de la matriz gráfica - aquí o en el indicador?

¿Existen funciones o librerías ya hechas recomendadas por los desarrolladores?

Hay MovingAverages.mqh en la carpeta Include...
 
Alexey Viktorov:
Hay MovingAverages.mqh en la carpeta Include...

Gracias, no lo sabía, pero ¿puedo ver un ejemplo de dónde trabajar con él?

 
Aleksey Vyazmikin:

Gracias, no lo sabía, pero ¿puedo ver un ejemplo de dónde trabajar con él?

Alexey, ¿la búsqueda ya no funciona?

Hay una búsqueda de archivos en la parte superior derecha. El área de búsqueda se ajusta haciendo clic en el engranaje.


Y aquí está el resultado.


 
Alexey Viktorov:

Alexei, ¿la búsqueda ya no funciona?

Hay una búsqueda de archivos en la parte superior derecha. El área de búsqueda se ajusta haciendo clic en el engranaje.


y aquí está el resultado.



Efectivamente, por qué no buscar en el suyo propio - ¡gracias!