Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 669

 
psyman:

J'ai lu votre correspondance concernant mon sujet, c'est très amusant :-) mais qu'en est-il de la question qui a provoqué tout ce buzz ?

Déclarer un tableau viaSetIndexBuffer(1, tmp1) ne me donne rien. Bien sûr, je peux augmenter la taille du tableau dans la même boucle, mais je veux connaître un moyen plus simple et plus efficace.

Montrez-moi le code dans son intégralité - ce que vous avez fait, ce que vous vouliez et ce que vous avez obtenu.

 

Je veux surveiller la volatilité. Au moins l'ouverture-fermeture pour commencer, la moyenne sur une période est faite en utilisant les SMA.


//+------------------------------------------------------------------+
//|                                                        _null.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot OC
#property indicator_label1  "O-C"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrSteelBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         ip1Buf[];

input int ip1=100;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  
string s_name1;

s_name1="O-C (" + IntegerToString(ip1) + ")";

IndicatorShortName(s_name1);
SetIndexLabel(0, s_name1);


//--- indicator buffers mapping
   SetIndexBuffer(0,ip1Buf);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {


int i;
double tmp1[];

SetIndexBuffer(1, tmp1);


      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total-1; i++)
      {
      tmp1[i]=close[i];      
      ip1Buf[i]=iMA(NULL,0,100,0,0,tmp1[i],0);
      
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
psyman:

Je veux surveiller la volatilité. Au moins l'ouverture-fermeture pour commencer, la moyenne sur une période est faite avec la SMA.


SetIndexBuffer(1, tmp1) pourquoi pas dans OnInit() ?

Pourquoi pas de IndicatorBuffers(2) ?

Pourquoi ne pas le calculer de manière optimale ? Il y a une boucle complète sur chaque tique.

Pourquoi iMA() et non iMAOnArray() ?

 

=Pourquoipas de IndicatorBuffers(2) ?


#property strict ne s'en plaint pas, c'est probablement la raison pour laquelle je ne l'ai pas écrit.


=PourquoiiMA() et non iMAOnArray() ?


Je n'ai pas assez de connaissances et le manuel ne dit rien à ce sujet.

Le manque de connaissance du système est une sérieuse limitation.


=Boucle complèteà chaque tic.


Je n'y comprends rien, veuillez me l'expliquer ou me donner un lien vers l'endroit où cela se fait.

J'ai un minimum d'une heure de TF.

 
=На chaque tic correspond à un cycle complet.


Je ne comprends rien à tout cela, veuillez m'expliquer ou me donner un lien vers un endroit où cela se fait.

J'ai un TF minimum d'une heure.

À chaque appel à OnCalculate, la boucle for parcourt les données de 1 à rates_total, c'est-à-dire qu'elle effectue le même travail. C'est, bien sûr, une mauvaise chose.

 
psyman:

=Pourquoipas de IndicatorBuffers(2) ?


#property strict ne s'en plaint pas, c'est probablement la raison pour laquelle je ne l'ai pas écrit.


=PourquoiiMA() et non iMAOnArray() ?


Je n'ai pas assez de connaissances et le manuel ne dit rien à ce sujet.

Le manque de connaissance du système est une sérieuse limitation.


=Boucle complèteà chaque tic.


Je n'y comprends rien, veuillez me l'expliquer ou me donner un lien vers l'endroit où cela se fait.

J'ai un minimum d'une heure de TF.

Vous savez, j'ai joint un modèle d'indicateur dans ce fil de discussion - quelque part au milieu - vous pouvez le trouver et en faire ce que vous voulez. Cherchez. J'ai aussi écrit que souvent les gens sont intéressés par ce qui se passe, donc j'ai décidé de faire un modèle d'indicateur et de le mettre dans ce fil.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Andrei Novichkov, 2018.10.17 22:06

À chaque appel à OnCalculate, vous avez une boucle for pour parcourir les données de 1 à rates_total, c'est-à-dire faire le même travail. C'est certainement une mauvaise chose.


Si vous dites que c'est mauvais, dites-moi comment le faire bien. Voulez-vous déplacer les calculs vers OnInit ?

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes questions pour les débutants sur MQL4, aide et discussion sur les algorithmes et les codes

Artyom Trishkin, 2018.10.17 22:10

Vous savez, j'ai directement dans cette branche - quelque part au milieu de celle-ci, joint un modèle d'indicateur - vous pouvez le trouver, et faire directement à partir de celui-ci ce que vous voulez. Cherchez. J'ai écrit que beaucoup de gens sont intéressés par son fonctionnement et j'ai décidé de faire un modèle d'indicateur et de le mettre dans ce fil.


En cherchant les mots "modèle d'indicateur" et votre nom, je ne trouve rien, et j'ai déjà écrit ici sur le volume de Guerre et Paix.

Toute combinaison de mots du post me vient à l'esprit.

 
Comment créer un tableau d'instances de classe ?
Fait ClassName* className[], puis ArrayResize dessus, mais ne donne pas accès aux méthodes par des pointeurs invalides
 
Roman Sharanov:
Comment créer un tableau d'instances de classe ?
Fait ClassName* className[], puis ArrayResize dessus, mais ne donne pas accès aux méthodes par des pointeurs invalides

Il existe un exemple dansCArrayObj