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

 
Vitaly Muzichenko #:

Je n'arrive pas à trouver comment résoudre le problème.

J'ai besoin d'un graphique en tic-tac, c'est-à-dire un tic-tac est venu - décaler le tampon d'une unité et dessiner

Nous devons dessiner 60 derniers ticks, c'est-à-dire 60 barres.

---

Il faut procéder de la même manière que dans la fenêtre "Ticky".


Il s'agit d'une ligne, pas de barres.

Le code dessine les barres dans une nouvelle fenêtre. Cela peut aider.

Dossiers :
SaveTicks.mq4  6 kb
 
Vitaly Muzichenko #:

Je n'arrive pas à trouver comment résoudre le problème.

J'ai besoin d'un graphique en tic-tac, c'est-à-dire un tic-tac venu - décaler le tampon d'une unité et dessiner

Nous devons dessiner 60 derniers ticks, c'est-à-dire 60 barres.

---

Il devrait être fait comme il est implémenté dans la fenêtre "ticks".


Pour résoudre ce problème, nous avons besoin d'un autre tableau. Il peut être d'une longueur fixe, par exemple 60. Il doit être rempli de ticks, en décalant chaque fois les données de 1 à l'aide de la boucle. Après l'écriture de chaque tick, ce tableau doit être copié dans le tableau Buffer, et ses données seront affichées dans le graphique.

 
Valeriy Yastremskiy #:

Ce ne sont pas des barres, c'est une ligne.

Le code dessine les barres dans une nouvelle fenêtre. Ça pourrait aider.

Je n'ai rien pu en tirer. Peut-être que je le regarde du mauvais côté ?


Mihail Matkovskij #:

Vous avez besoin d'un tableau supplémentaire pour résoudre ce problème. Il peut être d'une longueur fixe, par exemple 60. Il doit être rempli de ticks, en décalant chaque fois les données de 1 à l'aide d'une boucle. Après l'écriture de chaque tick, ce tableau doit être copié dans le tableau Buffer et ses données seront affichées dans le graphique.

Je n'arrive pas à trouver comment faire le changement.

Si vous le voulez bien, montrez-moi le code

 
Vitaly Muzichenko #:

Je n'ai rien pu en tirer. Peut-être que je regarde ça du mauvais côté.


Je n'arrive pas à trouver comment faire un changement.

Si vous le voulez bien, pouvez-vous me montrer le code

A[0]=Enchère ;

for(i=0;i<60;i++){A[i+1]=A[i]}

 
Valeriy Yastremskiy #:

A[0]=Enchère ;

for(i=0;i<60;i++){A[i+1]=A[i]}

Je l'ai fait, ça marche.

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[])
{
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  Buffer1[0]=b;
  for(int j=10; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
  }
  return(rates_total);
}

---

Quelque chose me dit que je peux faire sans la boucle.

C'est vrai ?

 
Vitaly Muzichenko #:

Je l'ai fait, ça marche.

---

Quelque chose me dit que vous pouvez vous passer du cycle.

C'est vrai ?

Dans les séries temporelles, cette boucle est cachée. cela ne fait aucune différence de quel côté on se déplace. cela me semble plus logique à partir de 0. Je n'ai pas vu de fonctions de décalage dans MKL. C'est un travail d'indexation. C'est le premier entré, le dernier sorti. C'est le cas en Python. Il ne semble pas exister dans la MCL.

 

Voilà ce qui ne va pas.

Il commence à fonctionner correctement, mais à chaque nouvelle barre, il y a un décalage et un dépassement de la plage.

Comment l'éviter ?

---

P.S. Je pense que c'est tout, ça marche bien, j'ai ajouté

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
  }
 
Vitaly Muzichenko #:

Voilà ce qui ne va pas.

Il commence à fonctionner correctement, mais à chaque nouvelle barre, il y a un décalage et un dépassement de la plage.

Comment l'éviter ?

---

P.S. Semble fonctionner correctement, ajouté

Du côté le plus petit de l'index, vérifiez si l'indice est inférieur à zéro, du côté le plus grand, si l'indice est supérieur à la dimension du tableau. La mise à zéro du tableau ou de la dernière valeur n'est pas logique à chaque tick.

 
Valeriy Yastremskiy #:

du côté le plus petit de l'index, vérifiez si la valeur est inférieure à zéro, du côté le plus grand, si elle est supérieure à la dimension du tableau. Mettre à zéro le tableau ou la dernière valeur n'est pas logique.

Un tableau pour tous les historiques disponibles, je n'en ai pas besoin.

J'ai littéralement besoin de 50-100 barres.

Comme ceci


 

Bon après-midi .

J'affiche la valeur de la fractale quotidienne sous la forme de sa valeur ou d'une ligne verticale. La ligne n'est pas affichée et la valeur est 0.

Voici un morceau de code

 double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 0);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);
   ObjectSetText("signal00",DoubleToString(FractalDayUpper,5),18,"Times New Roman", clrRed);


S'il vous plaît, dites-moi ce qui ne va pas.

Raison: