Questions d'un "mannequin - page 57

 
Lizar:

Je vais jeter un coup d'œil à la version publiée dans l'article. Jusqu'à présent, j'ai fait quelques experts en espionnage, ça marche bien.

MetaDriver :

Je ne pense pas que cette technologie fonctionnera dans le testeur.

Ça marche.

C'est génial que ça fonctionne dans le testeur. Je n'ai pas encore été en mesure de le mettre en œuvre. Mais cela est probablement dû à un manque d'expérience. J'ai choisi une minuterie pour l'instant, mais elle est longue.

Lorsque j'essaie d'attacher le conseiller expert au graphique, j'obtiens le message suivant :

Je ne comprends pas ce que l'USDJPY a à voir avec cela. J'ai même commenté l'obtention du handle lors de l'initialisation dans le code et ce message apparaît toujours.

 
Lizar:

Ça marche.

Konstantin, ai-je bien compris que le code exécutable de l'EA, qui réside normalement dans OnTick() ou OnTimer(), doit être placé dans OnChartEvent() pour que votre schéma fonctionne en mode multidevises, à la fois en temps réel et dans le testeur.
 
tol64:

C'est génial que ça fonctionne dans le testeur. Je n'ai pas encore été en mesure de le mettre en œuvre. Mais c'est dû au manque d'expérience, je suppose. Je me suis contenté du minuteur pour l'instant, mais il est trop long.

Lorsque j'essaie d'attacher le conseiller expert au graphique, je reçois un message de ce type :

Je ne comprends pas ce que l'USDJPY a à voir avec cela. J'ai même commenté l'obtention d'un handle à l'initialisation dans le code et ce message apparaît toujours.

Je ne l'ai pas encore regardé.

Tol64:
Konstantin, ai-je bien compris que le code exécutable de l'EA, qui réside normalement dans OnTick() ou OnTimer(), doit être placé dans OnChartEvent() pour que votre schéma fonctionne en mode multidevises, à la fois en temps réel et dans le testeur.

Oui.

 
tol64:

C'est génial que ça fonctionne dans le testeur. Je n'ai pas encore été en mesure de le mettre en œuvre. Mais c'est dû au manque d'expérience, je suppose. Je me suis arrêté à la minuterie pour l'instant, mais c'est trop long.

Lorsque j'essaie d'attacher le conseiller expert au graphique, je reçois un message de ce type :

Je ne comprends pas ce que l'USDJPY a à voir avec cela. J'ai même commenté l'obtention d'un handle lors de l'initialisation dans le code et le message apparaît toujours.

Je l'ai examiné. Le conseiller expert fonctionne. Il y avait juste une erreur dans le message d'erreur.

Ce qu'il vous donnait était un message indiquant que le symbole n'était pas sélectionné dans la fenêtre MarketWatch. Soit vous définissez les symboles avec lesquels le conseiller expert travaille dans la fenêtre MarketWatch, soit vous commentez les appels des spyros sur les symboles appropriés dans OnInit().

Je joins la version modifiée du panneau de contrôle exSpy MCM.mq5.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
Dossiers :
 
Lizar:

J'ai jeté un coup d'oeil. L'expert travaille. Il y avait juste une faute de frappe dans le message d'erreur.

Il vous a donné un message indiquant que le symbole n'était pas sélectionné dans la fenêtre MarketWatch. Soit vous définissez les symboles avec lesquels le conseiller expert travaille dans la fenêtre MarketWatch, soit vous commentez les appels des spyros sur les symboles appropriés dans OnInit().

J'ai joint la version modifiée du panneau de contrôle exSpy MCM.mq5.

J'ai même ri de moi-même pour mon manque d'attention)))) USDJPY était dans la fenêtre de Market Watch. Il n'y avait aucun autre symbole et les empreintes ne contenaient que le même message. )))

Merci.

 
tol64:
Konstantin, est-ce que je comprends bien que le code exécutable de l'Expert Advisor, qui est habituellement situé dans OnTick() ou OnTimer(), doit être placé dans OnChartEvent() pour que votre schéma fonctionne en mode multidevise, à la fois en temps réel et dans le testeur.

Il est préférable de mettre en œuvre toutes les fonctionnalités requises sous la forme de procédures et de fonctions distinctes (je recommande ces dernières), puis de les appeler à partir de n'importe quel endroit dans le conseiller expert.

Si vous utilisez la POO, toutes les fonctionnalités requises peuvent être mises en œuvre sous la forme d'un ensemble de plusieurs méthodes de la classe principale (généralement, il s'agit d'un descendant de la classe Expert).

 
Interesting:

Il est préférable d'implémenter toutes les fonctionnalités nécessaires sous forme de procédures et de fonctions distinctes (je recommande ces dernières), puis de les appeler depuis n'importe quel endroit du conseiller expert.

Si vous utilisez la POO, vous pouvez implémenter toutes les fonctionnalités nécessaires comme un ensemble de méthodes de la classe principale (généralement un descendant de la classe Expert Advisor).

Pour l'instant, toutes les fonctionnalités sont pratiquement implémentées de cette manière. Presque. C'est-à-dire que l'ensemble du code est constitué de quelques fonctions qui contiennent les calculs de base. Je n'ai pas encore complètement maîtrisé la POO, mais je peux déjà voir les bénéfices de son utilisation. Le code s'étoffe de jour en jour et il sera bientôt très difficile de l'utiliser sans la POO.

J'ai créé un sujet séparé où je vous ai donné les résultats de diverses méthodes de test multidevises :Résultats des tests de conseillers experts multidevises. Il y a encore beaucoup de choses sur ce sujet qui ne sont pas claires pour moi.

 

Pourquoi mes citations ne se chargent-elles pas ? Par exemple sur l'EURUSD, ils ne se chargent que jusqu'au mois d'août de cette année-là. C'est tout. Ils ne veulent pas les charger davantage. Peut-être y a-t-il un fichier avec des guillemets quelque part ?

J'ai fixé lenombre de barres à un nombre illimité. Je l'ai rafraîchie plusieurs fois. J'ai appuyé sur HOME plusieurs fois. Il ne fonctionne toujours pas.

 

Et où se trouve la "liste complète annoncée" de tous les fichiers MT5 et de leurs détails ?

Je viens de descendre du baobab aujourd'hui, désolé.

 

Un indicateur fractal multitemporel.

L'essence de l'indicateur est d'afficher les fractales d'un cadre temporel (ou de plusieurs en même temps) sur un autre.

Article source : https://www.mql5.com/ru/code/7304, code indicateur en MQL4

J'ai d'abord essayé de le copier-coller à partir de la version .mq4 avec quelques micro-corrections pour .mq5 (je ne cite même pas ce code - le problème est survenu lorsque j'ai découvert une manipulation imprudente de tableaux comme High[shift+i] à l'intérieur du code source de MQL4.

bool Fractal (string F,int Per, int shift) {...}

J'ai essayé de le réécrire en MQL5 (pas de visibilité par défaut de tels tableaux en dehors de OnCalculate).

Puis j'ai essayé de le réécrire pour MQL5 en appelant plusieurs handles iFractals avec différents paramètres PERIOD_.... En conséquence, les fractales se sont effondrées, bien que parfois une seule série de flèches fractales sur le TF correspondant parvienne à se poser correctement. Ce qui est remarquable, c'est que lorsque je reviens à la même période dans le terminal à partir d'autres périodes différentes, la netteté est affichée différemment, ce qui suggère ce qui suit : les données dans le terminal de cet indicateur peu familier errent de manière incompréhensible, mais j'ai toujours pensé que la même image erronée devrait se répéter de manière stable. Bien sûr, la deuxième variante ne contient même pasbool Fractal(string F,int Per, int shift) {...}, ce que je veux adresser aux développeurs expérimentés d'indicateurs.

Voici ce que j'ai réussi à dessiner :

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1  "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1  2

#property indicator_label2  "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2  2

#property indicator_label3  "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3  2

#property indicator_label4  "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4  2

#property indicator_label5  "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5  2

#property indicator_label6  "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6  2

#property indicator_label7  "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7  2

#property indicator_label8  "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8  2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=-10;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE);

   SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer2,EMPTY_VALUE);

//---
   SetIndexBuffer(2,ExtMapBuffer3,INDICATOR_DATA);
   PlotIndexSetInteger(2,PLOT_ARROW,217);
   PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer3,EMPTY_VALUE);

   SetIndexBuffer(3,ExtMapBuffer4,INDICATOR_DATA);
   PlotIndexSetInteger(3,PLOT_ARROW,218);
   PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer4,EMPTY_VALUE);

//---
   SetIndexBuffer(4,ExtMapBuffer5,INDICATOR_DATA);
   PlotIndexSetInteger(4,PLOT_ARROW,217);
   PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer5,EMPTY_VALUE);

   SetIndexBuffer(5,ExtMapBuffer6,INDICATOR_DATA);
   PlotIndexSetInteger(5,PLOT_ARROW,218);
   PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer6,EMPTY_VALUE);

//---
   SetIndexBuffer(6,ExtMapBuffer7,INDICATOR_DATA);
   PlotIndexSetInteger(6,PLOT_ARROW,217);
   PlotIndexSetInteger(6,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer7,EMPTY_VALUE);

   SetIndexBuffer(7,ExtMapBuffer8,INDICATOR_DATA);
   PlotIndexSetInteger(7,PLOT_ARROW,218);
   PlotIndexSetInteger(7,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer8,EMPTY_VALUE);

   handle1=iFractals(_Symbol, PERIOD_M15);
   handle2=iFractals(_Symbol, PERIOD_H1);
   handle3=iFractals(_Symbol, PERIOD_H4);
   handle4=iFractals(_Symbol, PERIOD_D1);

   return(0);
  }

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 B1 = BarsCalculated(handle1);
   int B2 = BarsCalculated(handle2);
   int B3 = BarsCalculated(handle3);
   int B4 = BarsCalculated(handle4);

   CopyBuffer(handle1,0,0,B1,ExtMapBuffer1);
   CopyBuffer(handle1,1,0,B1,ExtMapBuffer2);
   CopyBuffer(handle2,2,0,B2,ExtMapBuffer3);
   CopyBuffer(handle2,3,0,B2,ExtMapBuffer4);
   CopyBuffer(handle3,4,0,B3,ExtMapBuffer5);
   CopyBuffer(handle3,5,0,B3,ExtMapBuffer6);
   CopyBuffer(handle4,6,0,B4,ExtMapBuffer7);
   CopyBuffer(handle4,7,0,B4,ExtMapBuffer8);

   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   return;
  }
 

Manifestement, il manque certaines vérifications conditionnelles dans OnCalculate ainsi que dans les fonctions externes de type bool ou je n'utilise tout simplement pas correctement ce que j'ai déjà dans mon code. De plus, les tableaux doivent peut-être être initialisés correctement au bon endroit et définis comme des séries temporelles ?