Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 978

 
Vadim_2015:

L'algorithme est clair, je l'ai compris. J'ai fait l'exemple, tout fonctionne.

Merci beaucoup !

Et, en ce qui concerne la première question (sur les maxima), pourriez-vous expliquer plus en détail comment la mettre en œuvre ? Si possible, veuillez me donner un petit algorithme. Vous êtes doué pour cela :)

Je suis heureux d'être compris par quelqu'un d'autre que moi-même.

Vadim_2015:
Bonjour chers utilisateurs du forum !

J'ai commencé à étudier le langage MQL4 et, bien que j'écrive un indicateur simple, j'ai été confronté à un problème que je ne peux pas résoudre. L'essentiel du problème :

1_Comment trouver le High[i - fin de journée]. J'ai un cycle simple Close[i]-Open[i+1], j'ai besoin de trouver le High[i - fin de journée]. Par exemple, de [i], [1], [2] et jusqu'à la fin de la journée (PERIOD_H1) . Je ne sais pas comment faire. Il existe la fonction "iHigh", mais ce n'est pas tout à fait la même chose.


C'est exactement ce dont nous avons besoin. Haut de la journée en cours, quel que soit le temps restant jusqu'à la fin de la journée.

double  iHigh( 
   string           symbol,          // _Symbol
   int              timeframe,       // PERIOD_D1
   int              shift            // 0
   );

Si je comprends bien la question.

 
AlexeyVik:

Je suis content que quelqu'un d'autre que moi me comprenne.

C'est juste la bonne chose à faire. Le jour actuel élevé, peu importe le temps qu'il reste dans la journée.

Si je comprends bien la question.

C'est un peu différent de ce que j'avais compris. C'est comme ça.
bar=iBarShift(NULL,0,t1,false);   //по времени, находим индекс бара
barH=iHighest(NULL,0,MODE_HIGH,bar+1,1);  //находим максимум, в этом промежутке    
 
r772ra:
Légèrement différent, si je comprends bien. C'est comme ça.

Eh bien, c'est exactement ce qu'on m'a conseillé avant.
Mais iHighest(NULL, MODE_HIGH, bar+1, 1) renvoie l'index du High de la barre qui est plus élevé que tous les autres dans cet intervalle, alors que vous avez demandé le High du jour.

 
AlexeyVik:

Eh bien, c'est exactement ce qu'on m'a conseillé avant.
Mais iHighest(NULL, MODE_HIGH, bar+1, 1) renvoie le High de l'indice de la barre qui est plus élevé que tous les autres dans cet intervalle, et vous avez demandé le High du jour.

Je suis d'accord,"iHighest(NULL, MODE_HIGH, bar+1, 1) renvoiel'indice de la barre High qui est plus élevée que toutes les autres dans cet intervalle" . Et je veux dire haut jour courant restant de la journée.

Je vais essayer d'expliquer plus clairement...

#property indicator_separate_window
#property indicator_buffers 1

#property  indicator_label1  "longBars"

#property  indicator_color1 clrBlue

#property  indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100;
//---indicators Buffers
double   longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,longBarsBuffer);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   
   IndicatorDigits(Digits);
  
   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 counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars<0) return(-1);
   if (counted_bars>0)       
       counted_bars--;       
      
   limit=Bars-counted_bars;
   if(limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double  longValue;
      
                            
   for(int i=0;i<limit;i++)
      {
       longValue = Close[i+1]-Open[i+3];
       
//--- само условие
         
       if(longValue>0) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
//---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]=0.0; 
       

Si vous ne pouvez pas trop me gronder :) ...veuillez m'expliquer comment faire ?

 
Vadim_2015:

Je suis d'accord, "iHighest(NULL, MODE_HIGH, bar+1, 1) renvoiel'indice de la barre High qui est plus élevée que toutes les autres dans cet intervalle" . Et je veux dire haut le reste de l'actuel de la journée.

Je vais essayer d'être plus précis...

Si vous le pouvez, ne me grondez pas trop :) ... pouvez-vous m'expliquer comment faire ?

Au début, je pensais qu'il s'agissait d'une simple faute d'orthographe, mais maintenant il n'y a plus de doute, voulez-vous regarder vers l'avenir ??? Alors seul le docteur de Retour vers le futur peut vous aider.
 
AlexeyVik:
Au début, je pensais qu'il s'agissait d'une simple faute de frappe, mais maintenant il n'y a plus de doute, vous voulez regarder dans le futur ? ??? Alors seul le docteur de Retour vers le futur peut vous aider.

J'ai bien peur que Doc ne puisse pas m'aider... il n'est pas dans le bon domaine :)

Oui, cette question, "Highle reste de l'actuel. de la journée." C'est un peu confus. Je viens d'y penser, on croirait vraiment qu'il s'agit d'une tentative de regarder l'avenir en ce jour. C'est un peu exagéré. Je voulais compter les _HighLe reste de l'actuel. du jour depuis le début du tableau des prix jusqu'à l'avant-dernier jour (hier), car toutes les données sont là. Et le dernier jour (celui d'aujourd'hui) doit être recalculé dès qu'il est terminé. Sinon, cela ressemblera à ce que vous avez dit : une tentativede se projeter dans l'avenir ! Si je commence au début du tableau des prix et que je remonte jusqu'à la fin (la journée d'hier), le haut changera à chaque barre vérifiée. C'est pourquoi j'ai demandé comment soustraire le haut du reste de la journée. J'ai oublié de vous dire que la journée en cours n'est pas prise en compte, car elle n'est pas encore terminée. Désolé, je n'ai pas compris tout de suite :) . Pouvez-vous me dire comment organiser un tel calcul ? Est-ce même possible ?

 
Vadim_2015:

J'ai bien peur que Doc ne puisse pas m'aider... il n'est pas dans le bon domaine :)

Oui, cette question, "Highle reste de l'actuel. du jour", c'est un peu confus. Je viens juste d'y penser, on pourrait vraiment penser qu'il s'agit d'une tentative de regarder l'avenir en ce jour... C'est un peu un terme inapproprié. Je voulais compter les _High♪ le reste de l'actuel ♪ du jour depuis le début du tableau des prix jusqu'à l'avant-dernier jour (hier), car toutes les données sont là. Et le dernier jour (celui d'aujourd'hui) doit être recalculé dès qu'il est terminé. Sinon, cela ressemblera à ce que vous avez dit : une tentativede se projeter dans l'avenir ! Si je commence au début du tableau des prix et que je remonte jusqu'à la fin (la journée d'hier), le haut changera à chaque barre vérifiée. C'est pourquoi j'ai demandé comment soustraire le haut du reste de la journée. J'ai oublié de vous dire que la journée en cours n'est pas prise en compte, car elle n'est pas encore terminée. Désolé, je n'ai pas compris tout de suite :) . Pouvez-vous me dire comment organiser un tel calcul ? Est-ce même possible ?

Laissez-moi essayer de comprendre votre question. Vous devez trouver le point culminant entre les barres 1) du jour précédent et ce que vous avez aujourd'hui, ou 2) seulement ce que vous avez aujourd'hui ? Peut-être que iHighest() vous aidera ?
 
paladin80:
Laissez-moi essayer de comprendre votre question. Avez-vous besoin de trouver High parmi les barres 1) la date du jour précédent et celle d'aujourd'hui, ou 2) seulement la date que vous avez aujourd'hui ? Peut-être que iHighest() vous aidera ?

Chers amis, je vais essayer d'expliquer du mieux que je peux ce que je veux réaliser... ... ou bien je vais avoir raison ... ou bien je vais embrouiller tout le monde !

Regardez, il y a un tableau de prix, disons du _1.02.2015. au 15.12.2015(jour d'aujourd'hui), prenez PERIOD_H1.

1_Je prends une formule simple _val=Close[i]-Open[i]

2_établir une condition simple if (val>0) - la vérification doit commencer à partir du _1.02.2015.

-Si la condition est remplie, disons, sur une certaine barre, alors à partir de cette barre et jusqu'à la fin de cette journée, trouvez _High. Par exemple :Close[4]-Open[4]>0, c'est-à-dire supposez que la barre d'indice [i=4] appartient à _1.02.2015 10:00, doncde 10:00 - de ce jour jusqu'à 00:00 - la fin de ce jour- nous trouvons _High. De même, si la condition a fonctionné un autre jour, nous agissons selon le même principe. Et ainsi de suite à travers toute la gamme de prix. Le calcul devrait commencer du _1.02.2015 au 14.12.2015 (l'avant-dernier jour), pourquoi jusqu'à l'avant-dernier jour, - parce que le dernier jour n'est pas encore terminé et le Haut de la journée entière n'est pas connu. Dès que le dernier jour est terminé, nous vérifions également son état. Puisque les données du _1.02.2015. au 14.12.2015 (l'avant-dernier jour) sont connues, cela ne donnera pas l'impression d'essayer deregarder dans le futur :)

- Si la condition n'est pas remplie - rien n'est fait, une valeur vide est écrite dans le tableau.

C'est en fait toute l'"idée". Comment le faire, comment le définir à travers une boucle - je n'arrive pas à réfléchir !

 
Vadim_2015:

J'ai bien peur que Doc ne puisse pas m'aider... il n'est pas dans le bon domaine :)

Oui, cette question, "Highle reste de l'actuel. du jour", c'est un peu confus. Je viens juste d'y penser, on pourrait vraiment penser qu'il s'agit d'une tentative de regarder l'avenir en ce jour... C'est un peu un terme inapproprié. Je voulais compter les _High♪ le reste de l'actuel ♪ du jour depuis le début du tableau des prix jusqu'à l'avant-dernier jour (hier), car toutes les données sont là. Et le dernier jour (celui d'aujourd'hui) doit être recalculé dès qu'il est terminé. Sinon, cela ressemblera à ce que vous avez dit : une tentativede se projeter dans l'avenir ! Si je commence au début du tableau des prix et que je remonte jusqu'à la fin (la journée d'hier), le haut changera à chaque barre vérifiée. C'est pourquoi j'ai demandé comment soustraire le haut du reste de la journée. J'ai oublié de vous dire que la journée en cours n'est pas prise en compte, car elle n'est pas encore terminée. Désolé, je n'ai pas compris tout de suite :) . Pouvez-vous me dire comment organiser un tel calcul ? Est-ce même possible ?

Si c'est le cas, nous retournons à iHighest(), mais le nombre de barres à compter et à partir duquel commencer doit être calculé à l'aide de iBarShift().
 
AlexeyVik:
Si c'est le cas, nous retournons à iHighest(), mais le nombre de barres à compter et la barre de départ doivent être calculés à l'aide de iBarShift().

Pourriez-vous me montrer comment faire cela dans une boucle ? Je n'arrive pas à trouver comment le faire correctement.