Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 113

 
Hallo!!! Ich möchte Folgendes tun:
Ich brauche meine EA, um alle Aufträge (Verkauf und Kauf) zu öffnen, auch wenn sie bereits offen sind und dass es nicht tun würde, wenn alle Bedingungen konvergieren, aber auf die nächste Kerze!!! Hilfe plz......Ich bin im Voraus dankbar...

Im Moment habe ich dies in meinem Code:

PHP-Code:
void start()
{
if(
NewBar())
{
// Algorithmus selbst usw.
}
}

bool NewBar()
{
static
datetimelastbar=0;
datetime curbar=iTime(Symbol(),0,0);
if(
lastbar!=curbar)
{
lastbar=curbar;
return(
true);
}
return(
false);
}
 
qroner:
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8]){
ArrayInitialize(_Mas, 0);
int Ticket=-1;
for(int pos=OrdersTotal()-1; pos>=0; pos--){
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol&&
OrderMagicNumber()==_Magic && OrderTicket()!=Ticket){
Ticket=OrderTicket();
switch(OrderType()){
case 0:{_Mas[0]++;_Mas[6]++;break;}
case 1:{_Mas[1]++;_Mas[6]++;break;}
case 2:{_Mas[2]++;_Mas[7]++;break;}
case 3:{_Mas[3]++;_Mas[7]++;break;}
case 4:{_Mas[4]++;_Mas[7]++;break;}
case 5:{_Mas[5]++;_Mas[7]++;break;}
}
}
}

}

Hier ist die Funktion.

Ich dachte nur, dass das Problem nicht im Code liegt, da im Standardmodus keine Fehler auftreten.

Wie auch immer, niemand scheint zu antworten...

 
qroner:

Wie auch immer, es scheint niemand zu antworten...

Das Terminal sagt Ihnen, dass der Fehler in Zeile 69 liegt, aber Sie zeigen den Programmtext, wo es weniger Zeilen gibt... Wie wollen Sie antworten?
 
qroner: Wie auch immer, es sieht so aus, als würde niemand antworten...

In der von Ihnen geposteten Funktion scheint es keine Fehler zu geben. Ich bin verwirrt über die Verwendung von OrderTicket()!=Ticket, um benachbarte Aufträge mit demselben Ticket auszusortieren. Vergewissern Sie sich, dass es keine solchen Aufträge gibt. Wenn (69,25) vom Compiler angegeben wird , sehen Sie sich die Position 25 der Zeile 69 an - dort liegt der Fehler. Geben Sie diese eine Zeile ein.

 
Vladimir: Das Terminal sagt Ihnen, dass der Fehler in Zeile 69 liegt, aber Sie zeigen den Programmtext mit weniger Zeilen... Auf welcher Grundlage möchten Sie antworten?

Ich frage mich wirklich, was er in Reihe 69 hat.

 

Puh, ich dachte schon, es würde niemand reagieren.

Hier ist dieser Teil des Codes:

66 double Volatilität(int _Periode){

67 double summ = 0;

68 for(int i=1; i<=_period; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Danke für den Hinweis

 
qroner:

Puh, ich dachte schon, es würde niemand reagieren.

Hier ist dieser Teil des Codes:

66 double Volatilität(int _Periode){

67 double summ = 0;

68 for(int i=1; i<=_period; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Danke für den Hinweis.

Alles ist klar. Der Fehler liegt in der Zeile summ+=MathAbs(High[i]-Low[i]); wenn man 25 Positionen vom Rand aus zählt, kommt man wahrscheinlich auf High[i] zurück.

Ich habe Alert(Low[-1]) geschrieben; der Compiler verlangt eine positive Zahl. Ich schrieb int n=-1; Alert(Low[n]); - beim Ausführen von Array out of rangre. Aber wie kann i<0 ??? vielleicht ist es der Mangel an historischen Daten? überprüfen Sie das Datumsintervall von ... zu ...

 

BITTE GEBEN SIE AN, WELCHEN HÄNDLER SIE WÄHLEN SOLLEN ODER DEN GENAUEN SERVERNAMEN

 
qroner:

Puh, ich dachte schon, es würde niemand reagieren.

Hier ist dieser Teil des Codes:

66 double Volatilität(int _Periode){

67 double summ = 0;

68 for(int i=1; i<=_period; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Danke für den Hinweis

double Volatility(int _period)
  {
    double summ = 0;

    for(int i=1; i<=_period; i++)
        if(ArraySize(High) > i && ArraySize(Low) > i)
           summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }
double Volatility(int _period)
  {
    double summ = 0;
    int src = MathMin(MathMin(_period, ArraySize(High)), ArraySize(Low));

    for(int i=1; i<src; i++)
        summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }

Es scheint, dass _period manchmal einen größeren Wert als die Array-Elemente hat. Daher wird das Feld überlaufen.

Wählen Sie eine der Optionen.

 
Guten Tag, wie kann ich einen Trigger erstellen? Ich brauche zum Beispiel diese Bedingung if(iClose(NULL,HTF,4)<BlueLine) wenn sie ausgeführt wird DayDown = 1 ! F: Wie kann DayDown auf 1 belassen werden und erst am nächsten Tag abgefragt werden?
Grund der Beschwerde: