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.
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.
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_buffers1#property indicator_label1 "longBars"#property indicator_color1 clrBlue#property indicator_width1 2//---углубление в историю на...externint barsToProcess = 100;
//---indicators Buffersdouble longBarsBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
SetIndexBuffer(0,longBarsBuffer);
SetIndexStyle(0,DRAW_HISTOGRAM);
IndicatorDigits(Digits);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &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 ?
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 ?
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 !
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.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
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.
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.
Si je comprends bien la question.
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.
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.
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...
Si vous ne pouvez pas trop me gronder :) ...veuillez m'expliquer comment faire ?
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 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 ?
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. 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 !
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 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.