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

 

Ich habe verschiedene Optionen ausprobiert. Das Ergebnis ist das gleiche. Ich verstehe nicht, wie das passieren kann. Irgendwann beginnt iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); plötzlich mit der Berechnung eines größeren Taktbereichs. Bitte um Rat, wer es versteht, mein Kopf ist kaputt. Danke.


4:08:36 Zeit+iLowest Test gestartet

14:08:36 2004.09.29 00:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 24 AnzahlLetzteBar_end= 0
14:08:36 2004.09.29 00:00 Zeit+iTiefstwert EURUSD,H1: i=18
14:08:36 2004.09.29 00:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 01:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 25 AnzahlLetzteBar_end= 1
14:08:39 2004.09.29 01:00 Zeit+iTiefstwert EURUSD,H1: i=19
14:08:39 2004.09.29 01:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 02:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 26 AnzahlLetzteBar_end= 2
14:08:39 2004.09.29 02:00 Zeit+iTiefstwert EURUSD,H1: i=20
14:08:39 2004.09.29 02:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:40 2004.09.29 03:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 27 AnzahlLetzteBar_end= 3
14:08:40 2004.09.29 03:00 Zeit+iTiefstwert EURUSD,H1: i=21
14:08:40 2004.09.29 03:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:41 2004.09.29 04:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 28 AnzahlLetzteBar_end= 4
14:08:41 2004.09.29 04:00 Zeit+iTiefstwert EURUSD,H1: i=31

14:08:41 2004.09.29 04:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=21:00

Code:


static int PrevTime=0;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int start()
{
if(Time[0]<=PrevTime) return(0);
PrevTime=Time[0];
//////////////
// CheckForLongTimeClose_Sell();
double pBid=NormalizeDouble(Bid,Digits),Low_Now=Low[1];
////////////
int n_beg=1;// Index des Tages, in diesem Fall ist 1 der gestrige Tag
datetime DayTime_beg=iTime(NULL,PERIOD_D1,n_beg); // Beginn des Tages "n" in Sekunden
intLastBar_beg=iBarShift(NULL,0,DayTime_beg);

int n_end=0;// Index des Tages, in diesem Fall ist 1 der gestrige Tag
datetime DayTime_end=iTime(NULL,PERIOD_D1,n_end); // Beginn des Tages "n" in Sekunden
int NumberLastBar_end=iBarShift(NULL,0,DayTime_end);
Print(" NumberLastBar_beg= ",NumberLastBar_beg," NumberLastBar_end= ",NumberLastBar_end);
//---------------------------------------------------------------------

datetime Time_Check_Low_Day=Time[iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end)];
int=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);
Print(" i=",i);
string time_check_low_day=TimeToStr(Time_Check_Low_Day,TIME_MINUTES);
/////////////
Print(" time_check_low_day=",time_check_low_day;)

datetime time_check_verify=StrToTime("H_check_beg:M_check_beg");


zurück(0);
}

 
Das Erstaunlichste ist, dass dies nur in diesem Abschnitt der Geschichte geschieht, während es in anderen Abschnitten normal ist.
 
DiPach:

Wenn Sie den Code nur in einem Echtgeld- oder Demokonto verwenden, ist dies bequemer. Bei der Verwendung des Strategieprüfers können jedoch Probleme auftreten.


Zum Beispiel, was? Warum ich nirgendwo Probleme habe, Sie aber "vielleicht".
 

Es gibt einen Teil, den ich nicht verstehe.

double Delta =  NormalizeDouble(MathAbs(Bid-PriceOld),Digits);

Ich erhalte einen Mist wie 5e-005.0 im Drucker.

PreisAlter Wert

PriceOld   = NormalizeDouble(Bid,Digits); 
Wenn ich das alles zusammenzähle, warum sieht es dann so aus, wenn ich es abziehe?
 
001:
Das Verwirrendste ist, dass es in diesem speziellen Abschnitt der Geschichte passiert, in anderen ist es normal.
Lesen Sie die Hilfe zu iLowest() sorgfältig durch. Wie hoch ist die Anzahl der zu durchsuchenden Objekte? Und was bedeutet es für Sie?
 
001:

Ich habe verschiedene Varianten ausprobiert. Das Ergebnis ist das gleiche. Wie das sein kann, ist völlig unklar. Irgendwann beginnt iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); plötzlich mit der Berechnung eines größeren Taktbereichs. Bitte um Rat, wer es versteht, mein Kopf ist kaputt. Danke.


4:08:36 Zeit+iLowest Test gestartet

14:08:36 2004.09.29 00:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 24 AnzahlLetzteBar_end= 0
14:08:36 2004.09.29 00:00 Zeit+iTiefstwert EURUSD,H1: i=18
14:08:36 2004.09.29 00:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 01:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 25 AnzahlLetzteBar_end= 1
14:08:39 2004.09.29 01:00 Zeit+iTiefstwert EURUSD,H1: i=19
14:08:39 2004.09.29 01:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:39 2004.09.29 02:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 26 AnzahlLetzteBar_end= 2
14:08:39 2004.09.29 02:00 Zeit+iTiefstwert EURUSD,H1: i=20
14:08:39 2004.09.29 02:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:40 2004.09.29 03:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 27 AnzahlLetzteBar_end= 3
14:08:40 2004.09.29 03:00 Zeit+iTiefstwert EURUSD,H1: i=21
14:08:40 2004.09.29 03:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=06:00
14:08:41 2004.09.29 04:00 Zeit+iTiefstwert EURUSD,H1: AnzahlLetzteBar_beg= 28 AnzahlLetzteBar_end= 4
14:08:41 2004.09.29 04:00 Zeit+iTiefstwert EURUSD,H1: i=31

14:08:41 2004.09.29 04:00 Zeit+iTiefstwert EURUSD,H1: time_check_low_day=21:00

Code:

static int    PrevTime=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(Time[0]<=PrevTime) return(0);
   PrevTime=Time[0];
//////////////
 //  CheckForLongetivityClose_Sell();
   double pBid=NormalizeDouble(Bid,Digits),Low_Now=Low[1];
////////////
   int n_beg=1;                                           // индекс дня, в данном случае 1 - вчерашний день
   datetime DayTime_beg=iTime(NULL,PERIOD_D1,n_beg);             // Начало дня "n" в секундах
   int NumberLastBar_beg=iBarShift(NULL,0,DayTime_beg);

   int n_end=0;                                           // индекс дня, в данном случае 1 - вчерашний день
   datetime DayTime_end=iTime(NULL,PERIOD_D1,n_end);             // Начало дня "n" в секундах
   int NumberLastBar_end=iBarShift(NULL,0,DayTime_end);
   Print(" NumberLastBar_beg= ",NumberLastBar_beg," NumberLastBar_end= ",NumberLastBar_end);
//---------------------------------------------------------------------

   datetime Time_Check_Low_Day=Time[iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end)];
   int i=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);
   Print(" i=",i);
   string time_check_low_day=TimeToStr(Time_Check_Low_Day,TIME_MINUTES);
/////////////
   Print(" time_check_low_day=",time_check_low_day);

   datetime time_check_verify=StrToTime("H_check_beg:M_check_beg");


   return(0);
  }


Achten Sie auf diese Zeilen.

   datetime Time_Check_Low_Day=Time[iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end)];//iLowest раз
   int i=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end);                            //iLowest два

Diese Zeilen sollten vertauscht werden.

int i=iLowest(NULL,0,MODE_LOW,NumberLastBar_beg,NumberLastBar_end); // исправлять не стал
datetime Time_Check_Low_Day=Time[i];

2) NumberLastBar_beg ist die Nummer des gestrigen Balkens, wobei dieser Wert durch die Anzahl der zu suchenden Balken ersetzt werden kann.

3. Wenn Sie den Code einfügen, finden Sie die Schaltfläche SRC in der Symbolleiste des Texteingabefensters.

 
AlexeyVik:

Zum Beispiel, welche? Warum habe ich nirgendwo ein Problem damit, aber Sie haben "vielleicht" ein Problem damit.

Ich bin ein bisschen grüblerisch. Ich möchte den Code des bestehenden Indikators nicht an einer Stelle ausgeben, an der er deutlich zu sehen ist (wenn nicht eine separate Bedingung für den Prüfer angewendet wird). Sowie zu überlegen, was man auf seiner Basis gesondert für Klarheit verordnen kann.

Aber wenn Sie darauf bestehen - natürlich, ich werde höchstwahrscheinlich beginnen, darüber nachzudenken, was kann die komplizierte "Füllung" er hat, um etwas anderes dort zu verschreiben ersetzen.
 
Kann ich mehr als 1 Timer in meinem EA verwenden? EventSetTimer(5);
 
pu6ka:
Lesen Sie die Hilfe zu iLowest() sorgfältig durch. Nach welcher Anzahl von Elementen soll gesucht werden? Und was bedeutet das?

Aus irgendeinem Grund dachte ich, es sei ein Bereich, aber es ist die Anzahl der Elemente, danke!
 
AlexeyVik:

Achten Sie auf diese Zeilen

Es ist besser, diese Zeilen zu vertauschen.

2) NumberLastBar_beg ist die Nummer des ersten Balkens von gestern, und Sie geben diesen Wert anstelle der Anzahl der zu suchenden Balken ein.


Die i-Variable dient hier nur zu Kontrollzwecken, für Print. Ich habe beim Einstellen der Stäbe einen Fehler gemacht. Danke für den Tipp!