Bei einem Indikator trat ein Fehler bei der Division durch Null auf - Seite 9

 
Sergey Savinkin:

Und warum werden sie rund sein, wenn Sie zuerst CopyRates aus dem stündlichen Zeitrahmen machen (die runden Zahlen werden erhalten), dann der ProzedurCreateFigure die Zeit aus dem aktuellen Zeitrahmen übergeben(time, die zu Time wird), und dann den Index nach dem aktuellen Zeitrahmen durchsuchen?start_index=ArrayBsearch(Time,start_time);

Das ist richtig, wir suchen nach einer runden Zeit auf einer nicht runden Zeit im Array... D.h. es wird nach einem Balken auf einem Minuten-Zeitfenster gesucht, bei dem die Zeit mit der Eröffnungszeit der Stunde übereinstimmt.

 
О!
 
Алексей Тарабанов:
О!

Emotionen sind gut!

Aber vielleicht gibt es ja ein paar substanzielle Gedanken!?

 

Hier ein Beispiel für die Zeit - ich habe zwei Variablen hinzugefügt, um Zeit zu sparen

void CreateFigure(int i,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],MqlRates &rates[])
  {
   datetime start_time=rates[i].time;
   datetime stop_time=(start_time+PeriodSeconds(TimeFrames));
   datetime start_timeA=start_time;
   
//---
   int start_index,stop_index,limit;
   datetime vertical_line_time;
//---
   start_index=ArrayBsearch(Time,start_time);
   datetime start_timeB=Time[start_index];   
   if(Time[start_index]<start_time) start_index=(start_index>0?start_index-1:start_index);
   start_time=Time[start_index];
   Print("start_timeA=", start_timeA, " start_timeB=",start_timeB," start_time=",start_time);

Wir erhalten einen Ausdruck wie diesen

2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 12:00:00 start_timeB=2018.07.04 12:00:00 start_time=2018.07.04 12:00:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 13:00:00 start_timeB=2018.07.04 13:00:00 start_time=2018.07.04 13:00:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 14:00:00 start_timeB=2018.07.04 13:59:00 start_time=2018.07.04 14:05:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 15:00:00 start_timeB=2018.07.04 15:00:00 start_time=2018.07.04 15:00:00

D.h. als ob in einer normalen/stationären Situation alles richtig wäre.

Sie können sehen, dass um 14:00 Uhr die Zeit der Balkeneröffnung auf der Minuten-TF auf 14:05 Uhr korrigiert wurde - die tatsächliche Zeit des ersten auf der TF M1 erscheinenden Balkens.
 
Aleksey Vyazmikin:

Emotionen sind gut!

Aber vielleicht gibt es ja ein paar substanzielle Gedanken!?

Die Stunde ist dieselbe, also Grenze=0. Ich wollte es selbst tun.

 
Алексей Тарабанов:

Die Stunde ist dieselbe, also Grenze=0. Ich wollte es selbst tun.

Und wenn die Uhrzeit dieselbe ist? Immerhin gibt es in dieser Stunde 60 Takte auf TF M1!

Falls die aktuelle TF und die berechnete TF übereinstimmen, gibt es einen Schutz, und es wird in dieser Situation keine Division durch Null geben.

if(_Period>=TimeFrames) return(0);
 
Schlafen
 
Алексей Тарабанов:
Schlafen

Du versteckst dich!?

 
Schlafen
 
Алексей Тарабанов:
Schlafen

???

Grund der Beschwerde: