Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 777

 
Aleksey Vyazmikin:

Pode escrever um kernel para OpenCL? Só conheço aqui uma pessoa que afirma utilizar o OpenCL para optimizar em tempo real - enquanto a EA está a decorrer. Não tenho conhecimento de quaisquer outros exemplos.

Gostaria de ser eu próprio a dar-lhes uma vista de olhos. Até pediu para publicar um artigo sobre o assunto, mas a administração não sabe como aplicá-lo ao comércio real.

É espantoso, o opencl já é apoiado há 5 anos, mas não há exemplos de trabalho específicos para o comércio e não há artigos... Bem, uma vez que os próprios criadores não sabem como aplicá-lo, então vamos concentrar-nos na optimização da nuvem
 
ax237b:
é simplesmente espantoso, o apoio ao opencl existe há 5 anos e não há exemplos concretos de trabalho para ofícios ou artigos... bem, se os próprios criadores não sabem como aplicá-lo, então vamos concentrar-nos na optimização da nuvem
O que é tão surpreendente? O terminal funciona com rapidez suficiente, o atraso na resposta do corretor. Portanto, o opencl está a descansar por agora. O que acontece a seguir - vamos ver
 

Por favor, ajudem!

Estou a refazer o indicador, aqui está o código para desenhar

#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#indicador de propriedade_estilo2STYLE_DOT; - não desenha de todo no gráfico

Estilo#indicador de propriedade_estilo2STYLE_SOLID; - desenha no gráfico emSTYLE_DOT

O que é esta anomalia, ou as minhas mãos estão erradas?

 

Qual é a melhor forma de calcular a média móvel a partir da matriz gráfica - aqui ou no indicador?

Existem algumas funções prontas ou bibliotecas recomendadas pelos programadores?

 
Aleksey Vyazmikin:

Qual é a melhor forma de calcular a média móvel a partir da matriz gráfica - aqui ou no indicador?

Talvez haja algumas funções já prontas ou bibliotecas recomendadas pelos programadores?


Ou mesmo uma variante simples - para tirar MA no porão do iMA - não recebo nada :(

Estou a ligar através da função

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

Mas, não está certo - do avesso...

 

Com o mago a fazer uma chamada de dentro para fora para MA_TF(rates_total-i) - parece ter ajudado, mas olho para a história e por vezes há uma discrepância com o indicador incorporado (mesmo com a normalização removida), pode ser este o caso?

E, como fazer com que o indicador produza valores decimais?

 
Aleksey Vyazmikin:

Qual é a melhor maneira de calcular a média móvel a partir da matriz gráfica - aqui ou no indicador?

Existem algumas funções prontas ou bibliotecas recomendadas pelos programadores?

Há MovingAverages.mqh na pasta Include...
 
Alexey Viktorov:
Há MovingAverages.mqh na pasta Include...

Obrigado, eu não sabia, mas posso ver um exemplo de onde trabalhar com ele?

 
Aleksey Vyazmikin:

Obrigado, eu não sabia, mas posso ver um exemplo de onde trabalhar com ele?

Alexey, a pesquisa já não está a funcionar?

Há uma pesquisa de ficheiros no canto superior direito. Ajusta-se a área de pesquisa clicando na engrenagem.


E aqui está o resultado.


 
Alexey Viktorov:

Alexei, a busca já não está a funcionar?

Há uma pesquisa de ficheiros no canto superior direito. Ajusta-se a área de pesquisa clicando na engrenagem.


e aqui está o resultado.



De facto, porque não procurar o seu próprio - obrigado!