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

 
EVGENII SHELIPOV #:

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


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

Parce que la valeur est 0. La fractale est formée après n chandeliers.

 
Vitaly Muzichenko #:

Array pour toute l'histoire disponible, je n'ai pas besoin de ça.

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

Comme ça.


Quel est l'intérêt de l'indicateur ? Si ce n'est pas un secret bien sûr) Le problème se situe au niveau de l'affichage de l'heure. C'est-à-dire que ce n'est pas le temps réel de l'horloge, c'est le temps des chiffres. Chaque numéro sur sa propre barre du TF.

 
Valeriy Yastremskiy #:

Quel est l'intérêt de l'indicateur ? Si ce n'est pas un secret, bien sûr) Le problème est bien sûr l'affichage de l'heure. C'est-à-dire que ce n'est pas le temps réel qui fait tic-tac, mais le temps numéroté. Chaque numéro sur sa propre barre de TF.

Le but est de voir les derniers ticks sur le graphique ouvert :)

P.S. * Changement de l'offre et de la demande

Comme dans Market Watch


 
Tretyakov Rostyslav #:

Parce que la valeur est 0. Une fractale est formée après n bougies

Une fractale est formée s'il n'y a pas de nouvel extremum et après trois barres, celles-ci sont 0, 1, 2.

double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 2);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);

Rien n'a changé.

Ou bien il y a encore un problème.

 
Vitaly Muzichenko #:

Je l'ai fait, ça marche.

---

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

C'est vrai ?

Il ne semble pas y avoir de fonction de décalage dans MQL, pour autant que je sache. Ainsi, le changement ne peut se faire qu'à l'aide d'une boucle. Pourquoi ça ne te convient pas ?

P.S. A propos du tableau supplémentaire, ce n'était pas nécessaire. Vous avez correctement effectué le décalage et écrit la valeur de l'offre directement dans le tampon !

 
EVGENII SHELIPOV #:

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


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

Pourquoi êtes-vous sûr que la fractale sur la barre du zéro doit être non nulle ? Quand, il ne sera pas 0 seulement s'il est là !


Tretyakov Rostyslav #:

Parce que la valeur est 0. La fractale est formée après n bougies

Et c'est loind'être toujours le cas. Seulement dans le cas où la nième barre est une fractale !

 
Vitaly Muzichenko #:

C'est-à-dire, pour voir les derniers ticks sur un graphique ouvert :)

P.S. * Changement de l'offre et de la demande

Comme dans Market Watch


Je pensais à des mesures de vitesse)))

 
Vitaly Muzichenko #:

C'est-à-dire, pour voir les derniers ticks sur un graphique ouvert :)

P.S. * Changement de l'offre et de la demande

Comme dans Market Watch


Quel est le problème avecArrayCopy()?
Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
ArrayCopy - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
ArrayCopy() n'est pas une bonne solution ?

ArrayCopy, qui permet de copier d'un tableau à un autre. Et ici, vous devez décaler les valeurs avant d'ajouter chaque coche. Par conséquent, il ne peut être résolu qu'en utilisant une boucle.

 
Artyom Trishkin #:
ArrayCopy() ne vous convient pas ?

Comment l'utiliser, pouvez-vous me montrer ?

Voici la tâche.

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 et MQL5, aide et discussion sur les algorithmes et les codes.

Vitaly Muzichenko, 2022.02.13 15:42

Je n'ai pas besoin d'un tableau pour l'ensemble de l'historique disponible.

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

Comme ceci


Voici le code prêt, mais la boucle est un peu effrayante

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_label1  "Bid"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_label2  "Ask"

double Buffer1[];
double Buffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
{
  SetIndexBuffer(0,Buffer1);
  ArraySetAsSeries(Buffer1,true);
  SetIndexBuffer(1,Buffer2);
  ArraySetAsSeries(Buffer2,true);
  ArrayInitialize(Buffer1,EMPTY_VALUE);
  ArrayInitialize(Buffer2,EMPTY_VALUE);
  IndicatorSetInteger(INDICATOR_DIGITS,Digits());
  IndicatorSetString(INDICATOR_SHORTNAME,"Tick:");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 H=100;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }
  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  double a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  return(rates_total);
}
//+------------------------------------------------------------------+

---

Encore une fois, il y a une boucle dans ArrayCopy() et probablement plus d'une. Ainsi, le code ne deviendra guère plus léger et rapide grâce à ce remplacement.