Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 777

 
Aleksey Vyazmikin:

Puoi scrivere un kernel per OpenCL? Conosco solo una persona qui che sostiene di usare OpenCL per ottimizzare al volo - mentre l'EA è in esecuzione. Non sono a conoscenza di altri esempi.

Vorrei dargli un'occhiata io stesso. Anche chiesto di rilasciare un articolo sul tema, ma l'amministrazione non sa come applicarlo al commercio reale.

È incredibile, opencl è stato supportato per già 5 anni, ma non ci sono esempi di lavoro specifici per il trading e nessun articolo... Beh, dato che gli sviluppatori stessi non sanno come applicarlo, allora concentriamoci sull'ottimizzazione del cloud
 
ax237b:
è semplicemente incredibile, il supporto per opencl esiste da 5 anni e nessun esempio concreto di lavoro per mestieri o articoli... beh, se gli sviluppatori stessi non sanno come applicarlo, allora concentriamoci sull'ottimizzazione del cloud
Cosa c'è di così sorprendente? Il terminale funziona con sufficiente velocità, il ritardo nella risposta del broker. Quindi opencl si riposa per ora. Cosa succederà dopo - vedremo
 

Per favore, aiutatemi!

Sto rifacendo l'indicatore, ecco il codice per il disegno

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

Stile#propertyindicator_style2STYLE_DOT; - non disegna affatto sul grafico

Stile#propertyindicator_style2STYLE_SOLID; - disegna sul grafico inSTYLE_DOT

Cos'è questa anomalia, o le mie mani sono sbagliate?

 

Qual è il modo migliore per calcolare la media mobile dalla matrice grafica - qui o nell'indicatore?

Ci sono funzioni o librerie già pronte raccomandate dagli sviluppatori?

 
Aleksey Vyazmikin:

Qual è il modo migliore per calcolare la media mobile dalla matrice grafica - qui o nell'indicatore?

Forse ci sono alcune funzioni già pronte o librerie raccomandate dagli sviluppatori?


O anche una semplice variante - per disegnare MA nel seminterrato da iMA - non ottengo nulla :(

Sto chiamando tramite la funzione

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

Ma non è giusto - dentro e fuori...

 

Con la procedura guidata ha fatto una chiamata all'interno verso MA_TF(rates_total-i) - sembra aver aiutato, ma guardo la storia e a volte c'è una discrepanza con l'indicatore incorporato (anche con la normalizzazione rimossa), può essere questo il caso?

E come fare in modo che l'indicatore emetta valori decimali?

 
Aleksey Vyazmikin:

Qual è il modo migliore per calcolare la media mobile dalla matrice grafica - qui o nell'indicatore?

Ci sono funzioni o librerie già pronte raccomandate dagli sviluppatori?

C'è MovingAverages.mqh nella cartella Include...
 
Alexey Viktorov:
C'è MovingAverages.mqh nella cartella Include...

Grazie, non lo sapevo, ma posso vedere un esempio di dove lavorarci?

 
Aleksey Vyazmikin:

Grazie, non lo sapevo, ma posso vedere un esempio di dove lavorarci?

Alexei, la ricerca non funziona più?

C'è una ricerca di file in alto a destra. Si regola l'area di ricerca cliccando sull'ingranaggio.


Ed ecco il risultato.


 
Alexey Viktorov:

Alexei, la ricerca non funziona più?

C'è una ricerca di file in alto a destra. Si regola l'area di ricerca cliccando sull'ingranaggio.


ed ecco il risultato.



Infatti, perché non cercare il proprio - grazie!