Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 978

 
Vadim_2015:

Der Algorithmus ist klar, ich habe ihn herausgefunden. Habe das Beispiel gemacht, es funktioniert alles.

Herzlichen Dank!

Und könnten Sie in Bezug auf die erste Frage (zu den Maxima) genauer erklären, wie man sie umsetzt? Wenn möglich, geben Sie mir bitte einen kleinen Algorithmus. Sie sind gut darin :)

Ich bin froh, dass ich von jemand anderem als mir selbst verstanden werde.

Vadim_2015:
Hallo liebe Forumsnutzer!

Ich habe begonnen, die Sprache MQL4 zu lernen, und obwohl ich einen einfachen Indikator schreibe, bin ich auf ein Problem gestoßen, das ich nicht lösen kann. Der Kern des Problems:

1_Wie finde ich das High[i - Tagesende]. Ich habe einen einfachen Zyklus Close[i]-Open[i+1], ich muss das High[i - Tagesende] finden. Zum Beispiel von[i],[1],[2] und bis zum Ende des Tages (PERIOD_H1). Ich bin mir nicht sicher, wie ich es machen soll. Es gibt die Funktion "iHigh", aber das ist nicht ganz dass elbe.


Das ist genau das, was wir brauchen. Höchststand des aktuellen Tages, unabhängig davon, wie viel Zeit bis zum Ende des Tages verbleibt.

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

Wenn ich die Frage richtig verstehe.

 
AlexeyVik:

Ich bin froh, dass mich außer mir noch jemand versteht.

Es ist einfach das Richtige, das zu tun. Hochaktueller Tag, egal wie viel Zeit am Tag noch übrig ist.

Wenn ich die Frage richtig verstehe.

Das ist ein bisschen anders, als ich es verstanden habe. So ist das nun einmal.
bar=iBarShift(NULL,0,t1,false);   //по времени, находим индекс бара
barH=iHighest(NULL,0,MODE_HIGH,bar+1,1);  //находим максимум, в этом промежутке    
 
r772ra:
Meines Erachtens ist das ein wenig anders. So ist das nun einmal.

Nun, das ist genau das, was mir vorher geraten wurde.
Aber iHighest(NULL, MODE_HIGH, bar+1, 1) gibt den Index des Bar High zurück, der höher ist als alle anderen in diesem Intervall, während Sie nach dem High des aktuellen Tages gefragt haben.

 
AlexeyVik:

Nun, das ist genau das, was mir vorher geraten wurde.
Aber iHighest(NULL, MODE_HIGH, bar+1, 1) gibt den Barindex High zurück, der höher ist als alle anderen in diesem Intervall, und Sie fragten nach dem High des aktuellen Tages.

Ich stimme zu: "iHighest(NULL, MODE_HIGH, bar+1, 1) gibtden Index des Taktes High zurück, der höher ist als alle anderen in diesem Intervall". Und ich meine High verbleibender aktueller Tag des Tages.

Ich werde versuchen, das genauer zu erklären...

#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; 
       

Wenn möglich, schimpfen Sie nicht zu viel :) ...erklären Sie bitte, wie man es macht?

 
Vadim_2015:

Ich stimme zu: "iHighest(NULL, MODE_HIGH, bar+1, 1) gibtden Index des Taktes High zurück, der höher ist als alle anderen in diesem Intervall". Und ich meine High der Rest des aktuellen des Tages.

Ich werde versuchen, genauer zu sein...

Wenn Sie können, schimpfen Sie bitte nicht zu sehr mit mir :) ...können Sie mir bitte erklären, wie man das macht?

Zuerst dachte ich, es handele sich um einen einfachen Schreibfehler, aber jetzt gibt es keinen Zweifel mehr: Sie wollen in die Zukunft schauen? Dann kann Ihnen nur der Doc aus Zurück in die Zukunft helfen.
 
AlexeyVik:
Zuerst dachte ich, es handele sich um einen einfachen Tippfehler, aber jetzt gibt es keinen Zweifel mehr: Sie wollen in die Zukunft schauen? Dann kann Ihnen nur der Doc aus Zurück in die Zukunft helfen.

Ich fürchte, Doc kann mir nicht helfen... er ist in der falschen Branche:)

Ja, diese Frage, "Highden Rest des aktuellen. Das ist ein bisschen verwirrend. Das ist mir gerade eingefallen, man könnte wirklich meinen, es sei ein Versuch, an diesem Tag in die Zukunft zu schauen. Das ist ein bisschen daneben. Ich wollte die _HighDer Rest des aktuellen. des Tages vom Beginn des Preisfeldes bis zum vorletzten Tag (gestern), da alle Daten vorhanden sind. Und der letzte (heutige) Tag sollte neu berechnet werden, sobald er beendet ist. Sonst sieht es so aus, wie Sie sagten - ein Versuch, in die Zukunft zu schauen! Wenn ich am Anfang des Preisfeldes beginne und mich bis zum Ende (dem gestrigen Tag) bewege, ändert sich das Hoch bei jedem weiteren überprüften Balken. Deshalb habe ich gefragt, wie man das Hoch vom Rest des Tages subtrahieren kann. Ich habe vergessen, Ihnen zu sagen, dass der aktuelle Tag nicht berücksichtigt wird, weil er noch nicht abgeschlossen ist. Entschuldigung, ich habe es nicht gleich verstanden :) . Können Sie mir sagen, wie man eine solche Berechnung organisiert? Ist das überhaupt möglich?

 
Vadim_2015:

Ich fürchte, Doc kann mir nicht helfen... er ist in der falschen Branche:)

Ja, diese Frage, "Highden Rest des aktuellen. des Tages", das ist etwas verwirrend. Es ist mir gerade erst eingefallen, man könnte wirklich meinen, es sei ein Versuch, an diesem Tag in die Zukunft zu schauen. Es ist ein bisschen daneben. Ich wollte die _High♪ der Rest der aktuellen ♪ des Tages vom Beginn des Preisfeldes bis zum vorletzten Tag (gestern), da alle Daten vorhanden sind. Und der letzte (heutige) Tag sollte neu berechnet werden, sobald er beendet ist. Sonst sieht es so aus, wie Sie sagten - ein Versuch, in die Zukunft zu schauen! Wenn ich am Anfang des Preisfeldes beginne und mich bis zum Ende (dem gestrigen Tag) bewege, ändert sich das Hoch bei jedem weiteren überprüften Balken. Deshalb habe ich gefragt, wie man das Hoch vom Rest des Tages subtrahieren kann. Ich habe vergessen, Ihnen zu sagen, dass der aktuelle Tag nicht berücksichtigt wird, weil er noch nicht abgeschlossen ist. Entschuldigung, ich habe es nicht gleich verstanden :) . Können Sie mir sagen, wie man eine solche Berechnung organisiert? Ist das überhaupt möglich?

Lassen Sie mich versuchen, Ihre Frage zu verstehen. Sie müssen High zwischen den Balken 1) vom Vortag und dem, was Sie heute haben, oder 2) nur das, was Sie heute haben, finden? Vielleicht kann iHighest() helfen?
 
paladin80:
Lassen Sie mich versuchen, Ihre Frage zu verstehen. Müssen Sie das Hoch zwischen den Balken 1) des Vortages und des heutigen Datums oder 2) nur des heutigen Datums finden? Vielleicht kann iHighest() helfen?

Liebe Freunde, ich werde versuchen, so gut ich kann, zu erklären, was ich erreichen möchte... ...oder ich werde es richtig machen ...oder ich werde alle verwirren!

Sehen Sie, es gibt eine Reihe von Preisen, sagen wir vom _1.02.2015. bis zum 15.12.2015 (heutiger Tag), nehmen Sie PERIOD_H1.

1_Ich nehme eine einfache Formel _val=Close[i]-Open[i]

2_eine einfache Bedingung festlegen, wenn (val>0) - die Prüfung sollte ab dem _1.02.2015 beginnen.

-Wenn die Bedingung erfüllt ist, sagen wir, auf einem Balken, dann finden Sie ab diesem Balken und bis zum Ende des Tages _High. Zum Beispiel:Close[4]-Open[4]>0, d.h. angenommen, der Balken mit Index[i=4] gehört zu _1.02.2015 10:00, alsovon 10:00 - dieses Tages bis 00:00 - das Ende dieses Tages- finden wir _High. Dementsprechend handeln wir nach dem gleichen Prinzip, wenn die Bedingung an einem anderen Tag funktioniert hat. Und so geht es durch die gesamte Preispalette. Die Berechnung sollte vom _1.02.2015 bis zum 14.12.2015 (dem vorletzten Tag) beginnen, warum bis zum vorletzten Tag, - weil der letzte Tag noch nicht abgeschlossen ist und der High des ganzen Tages nicht bekannt ist. Sobald der letzte Tag vorbei ist, überprüfen wir ihn auch auf den Zustand. Da die Daten vom _1.02.2015. bis zum 14.12.2015 (dem vorletzten Tag) bekannt sind, wird es nicht so aussehen, als würde man versuchen, in dieZukunft zu schauen :)

- Wenn die Bedingung nicht erfüllt ist, wird nichts getan, sondern ein leerer Wert in das Array geschrieben.

Das ist eigentlich die ganze "Idee". Wie man es macht, wie man es durch eine Schleife definiert - ich weiß es nicht!

 
Vadim_2015:

Ich fürchte, Doc kann mir nicht helfen... er ist in der falschen Branche:)

Ja, diese Frage, "Highden Rest des aktuellen. des Tages", das ist etwas verwirrend. Das ist mir gerade erst eingefallen, man könnte wirklich meinen, es sei ein Versuch, an diesem Tag in die Zukunft zu schauen. Das ist eine etwas falsche Bezeichnung. Ich wollte die _High♪ der Rest der aktuellen ♪ des Tages vom Beginn des Preisfeldes bis zum vorletzten Tag (gestern), da alle Daten vorhanden sind. Und der letzte (heutige) Tag sollte neu berechnet werden, sobald er beendet ist. Sonst sieht es so aus, wie Sie sagten - ein Versuch, in die Zukunft zu schauen! Wenn ich am Anfang des Preisfeldes beginne und mich bis zum Ende (dem gestrigen Tag) bewege, ändert sich das Hoch bei jedem weiteren überprüften Balken. Deshalb habe ich gefragt, wie man das Hoch vom Rest des Tages subtrahieren kann. Ich habe vergessen, Ihnen zu sagen, dass der aktuelle Tag nicht berücksichtigt wird, weil er noch nicht abgeschlossen ist. Entschuldigung, ich habe es nicht gleich verstanden :) . Können Sie mir sagen, wie man eine solche Berechnung organisiert? Ist das überhaupt möglich?

Wenn ja, kehren wir zu iHighest() zurück, aber die Anzahl der zu zählenden Takte und die Anzahl der Takte, mit denen begonnen werden soll, sollte mit iBarShift() berechnet werden.
 
AlexeyVik:
Wenn ja, kehren wir zu iHighest() zurück, aber wie viele Takte gezählt werden sollen und bei welchem Takt begonnen werden soll, muss mit iBarShift() berechnet werden.

Können Sie mir zeigen, wie man das in einer Schleife macht? Ich kann nicht herausfinden, wie man es richtig macht.