Questions des débutants MQL5 MT5 MetaTrader 5 - page 777

 
Aleksey Vyazmikin:

Pouvez-vous écrire un noyau pour OpenCL ? Je ne connais qu'une seule personne ici qui prétend utiliser OpenCL pour optimiser à la volée - pendant que l'EA fonctionne. Je n'ai pas connaissance d'autres exemples.

J'aimerais y jeter un coup d'œil moi-même. Il a même demandé à publier un article sur le sujet, mais l'administration ne sait pas comment l'appliquer aux transactions réelles.

C'est incroyable, opencl est supporté depuis déjà 5 ans, mais il n'y a pas d'exemples de travail spécifiques pour le commerce et pas d'articles... Eh bien, puisque les développeurs eux-mêmes ne savent pas comment l'appliquer, alors concentrons-nous sur l'optimisation du cloud.
 
ax237b:
c'est juste incroyable, le support pour opencl existe depuis 5 ans et aucun exemple concret de travail pour les métiers ou les articles... bon si les développeurs eux-mêmes ne savent pas comment l'appliquer, alors concentrons-nous sur l'optimisation du cloud.
Qu'est-ce qui est si surprenant ? Le terminal fonctionne avec une vitesse suffisante, le délai de réponse du courtier. Donc opencl se repose pour le moment. Ce qui se passe ensuite - nous verrons bien
 

Aidez-moi !

Je suis en train de refaire l'indicateur, voici le code pour le dessin

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

Style#propertyindicator_style2STYLE_DOT; - ne dessine pas du tout sur le graphique

Style#propertyindicator_style2STYLE_SOLID; - dessine sur le graphique enSTYLE_DOT

Quelle est cette anomalie, ou mes mains sont mauvaises ?

 

Quelle est la meilleure façon de calculer la moyenne mobile à partir du tableau graphique - ici ou dans l'indicateur ?

Existe-t-il des fonctions prêtes à l'emploi ou des bibliothèques recommandées par les développeurs ?

 
Aleksey Vyazmikin:

Quelle est la meilleure façon de calculer la moyenne mobile à partir du tableau graphique - ici ou dans l'indicateur ?

Peut-être existe-t-il des fonctions prêtes à l'emploi ou des bibliothèques recommandées par les développeurs ?


Ou même une variante simple - dessiner la MA dans le sous-sol à partir d'iMA - je n'obtiens rien :(

J'appelle via la fonction

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

Mais, ça ne va pas - à l'intérieur comme à l'extérieur...

 

Avec l'assistant, j'ai fait un appel inside out à MA_TF(rates_total-i) - cela semble aider, mais je regarde l'historique et parfois il y a une divergence avec l'indicateur intégré (même avec la normalisation enlevée), cela peut-il être le cas ?

Et, comment faire pour que l'indicateur affiche des valeurs décimales ?

 
Aleksey Vyazmikin:

Quelle est la meilleure façon de calculer la moyenne mobile à partir du tableau graphique - ici ou dans l'indicateur ?

Existe-t-il des fonctions prêtes à l'emploi ou des bibliothèques recommandées par les développeurs ?

Il y a MovingAverages.mqh dans le dossier Include...
 
Alexey Viktorov:
Il y a MovingAverages.mqh dans le dossier Include...

Merci, je ne le savais pas, mais puis-je voir un exemple d'utilisation ?

 
Aleksey Vyazmikin:

Merci, je ne le savais pas, mais puis-je voir un exemple d'utilisation ?

Alexey, la recherche ne fonctionne plus ?

Il y a une recherche de fichiers en haut à droite. Vous ajustez la zone de recherche en cliquant sur l'engrenage.


Et voici le résultat.


 
Alexey Viktorov:

Alexei, la recherche ne fonctionne plus ?

Il y a une recherche de fichiers en haut à droite. Vous ajustez la zone de recherche en cliquant sur l'engrenage.


et voici le résultat.



En effet, pourquoi ne pas effectuer vos propres recherches - merci !