Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 589

 
admoon:



Als ich den Indikator Schritt für Schritt überprüfte, fand ich in der Unterroutine hinter dem if {} einen Sprung, in dem es kein W gibt. Hier ist ein vereinfachter Code, um den Punkt zu verdeutlichen:

//--- Eingabeparameter

Eingabe int w=10;

//---

{

int i;

//---

int co=0;

for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}

//--- Rückgabewert von prev_calculated für den nächsten Aufruf

return(rates_total);

}

Ergebnis (Arlets):

2016.05.30 00:45:14.064 1 (EURUSD,H1) 11

2016.05.30 01:10:35.972 1 (EURUSD,H1) 10

........... usw. auf 1.

2016.05.30 00:45:14.064 1 (EURUSD,H1) 1

Regel: Wenn der Ausdruck in der Klammer wahr ist, wird der Operator1 ausgeführt.

Im Code: operator1 wird IMMER ausgeführt.

Ich denke, if() sollte nur einmal funktionieren, wenn die eingeklammerte Bedingung wahr ist. Sie erfolgt jedoch bei jeder Prüfung, so dass alle Ausdrücke in {} bei jedem Schritt ausgeführt werden und Maschinenzeit verschlingen.

Fragen: WARUM ist die Variable CO während der Schleife von 0 auf 11 gestiegen? Warum wird bei jedem Schritt ein Alert ausgelöst?

Wie oft muss ich Ihnen das noch sagen?

Sehen Sie: Sie haben w gleich 10,
Sie prüfen w auf 10: "if(w==10){co++; Alert(co);}" Glauben Sie, dass dieser Ausdruck wahr ist?
Warum haben Sie dann diese Frage?

 
admoon:



Als ich den Indikator Schritt für Schritt überprüfte, entdeckte ich einen Sprung in der Unterroutine hinter dem if {}, in der es kein W gibt. Hier ist ein vereinfachter Code, um die Sache zu verdeutlichen:

//--- Eingabeparameter

Eingabe int w=10;

//---

{

int i;

//---

int co=0;

for(i=0;i<=w;i++)if(w==10){co++; Alert(co);}

//--- Rückgabewert von prev_calculated für den nächsten Aufruf

return(rates_total);

}

Ergebnis (arlet):

2016.05.30 00:45:14.064 1 (EURUSD,H1) 11

2016.05.30 01:10:35.972 1 (EURUSD,H1) 10

........... usw. auf 1.

2016.05.30 00:45:14.064 1 (EURUSD,H1) 1

Regel: Wenn der Ausdruck in der Klammer wahr ist, wird der Operator1 ausgeführt.

Im Code: operator1 wird IMMER ausgeführt.

Ich denke, if() sollte nur einmal funktionieren, wenn die eingeklammerte Bedingung wahr ist. Sie erfolgt jedoch bei jeder Prüfung, so dass alle Ausdrücke in {} bei jedem Schritt ausgeführt werden und Maschinenzeit verschlingen.

Fragen: WARUM ist die Variable CO während der Schleife von 0 auf 11 gestiegen? Warum wird bei jedem Schritt ein Alert ausgelöst?

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Andrey Barinov, 2016.05.30 10:38

Offensichtlich haben Sie sich im Code vertippt und wollten das so schreiben:

int i;
//---
   int co=0;
   for(i=0;i<=w;i++)
     {
      if(i==10)
        {
         co++; 
         Alert(co);
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);

 
Hallo meine Herren! Ich habe ein kleines Problem mit dem Schreiben eines EA(( der EA öffnet schwebende Aufträge meist ok, aber manchmal muss ich Aufträge sehr nah an den aktuellen Preis zu öffnen, so wie zu verschreiben, dass die schwebenden Aufträge so nah wie möglich öffnen würde?
 
barudkinarseniy:
Hallo meine Herren! Ich habe ein kleines Problem beim Schreiben eines EA(( Der EA öffnet schwebende Aufträge meist alles in Ordnung, aber manchmal muss ich Aufträge sehr nah an den aktuellen Preis zu öffnen, so wie zu verschreiben, dass schwebende Aufträge so nah wie möglich öffnen würde?
Ich glaube, ich habe es verstanden.) Falls es jemanden interessiert, hier ist, wie es funktioniert
 double ilow = iLow(Symbol(),TimeFrames_3,1);
 double ihigh = iHigh(Symbol(),TimeFrames_3,1);
 
 double OpenPriceBuy = NormalizeDouble(MathMax(ihigh,Ask + Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)),Digits);
 double OpenPriceSell = NormalizeDouble(MathMin(ilow,Bid - Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)),Digits);
 
 int StepST = (int)MathMax(OpenPriceBuy - OpenPriceSell,SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL));
 double lots = LotsByRisk(StepST);
 
Artyom Trishkin:

Wie oft muss ich Ihnen das noch sagen?

Schauen Sie: Sie haben w gleich 10,
Sie prüfen w auf gleich 10: "if(w==10){co++; Alert(co);}" Glauben Sie, dass dieser Ausdruck wahr ist?
Warum haben Sie dann diese Frage?

Ich entschuldige mich für die dumme Frage und danke Ihnen für Ihre Geduld und Ihr Verständnis. Ich wurde im Stich gelassen, indem ich die Sonde mechanisch if(w==10){ Alert(I,"/",F); durch das Programm bewegte, um einen Fehler in den Schritten zu finden. Das passiert manchmal, wenn man gegen eine Mauer der eigenen Unwissenheit über den Grund stößt, aber wenn man sich eine Weile von dem Problem abwendet, verschwindet die Frage irgendwie von selbst. Was Sie als "störend" empfinden, entpuppt sich in Wirklichkeit als eine nicht begründete Anforderung aus einem anderen Teil des Programms. Mit Dank, Vladimir.

 

Hallo, können Sie mir bitte bei den Rechenaufgaben helfen?

Wie kann man wissen, was das Los der fünften Stelle sein wird, wenn man das Los der ersten Stelle kennt und weiß, dass das Los jeder neuen Stelle in arithmetischer Progression zunimmt.

Die zweite Möglichkeit ist, dass das Los mit der geometrischen Progression zunimmt.

 
mila.com:

Hallo, können Sie mir bitte bei den Rechenaufgaben helfen?

Wie kann man wissen, was das Los der fünften Stelle sein wird, wenn man das Los der ersten Stelle kennt und weiß, dass das Los jeder neuen Stelle in arithmetischer Progression zunimmt.

Die zweite Möglichkeit ist, dass das Los mit der geometrischen Progression zunimmt.

Wurden Sie von Google verbannt? Es tut mir leid, warum sind Sie so grausam? ))

Die arithmetische Progression wird durch eine Formel definiert.

Diegeometrische Progression ergibt sich aus der Formel

 

Ich verstehe nicht, dass es theoretisch für die erste Variante ausreicht, das erste Los mit 5 zu multiplizieren, wenn es sich um das Startlos erhöht

Für die zweite Option: das Los der ersten Position* Multiplikator*5 ...aber

 
mila.com:

Ich verstehe das nicht, theoretisch muss man für die erste Option nur die erste Partie mit 5 multiplizieren.

Bei der zweiten Option ist die Partie der ersten Position * Koeffizient * 5 ...aber

Schon gut, ich habe die Mathematik selbst seit der Schule vergessen )) Ich habe ein Buch über Mathematik ausgegraben und die Definition von Arithmetik und Progression abgetippt.

-------------

Eine Folge von Zahlen, von denen jede, beginnend mit der zweiten, durch Addition einer konstanten Zahl d, die als Differenz einer arithmetischen Progression bezeichnet wird, aus der vorhergehenden gewonnen wird.

Wenn der erste Term a1 ist, dann hat das arith. prog. mit der Länge n die Form:

a1, a1+d, a1+2*d, ...., a1 + n*d

Der Code in MQL ist wie folgt, ich habe ein einfaches Beispiel erstellt

#define  LEN 5 // задали длину последовательности

int start()
{
    int d = 4;    // это разность, любое значение
    int a[LEN];   // тут храним ариф. посл.
    a[0] = 3;     // любое стартовое значение, задаете сами
    Print(0, "  ", a[0]);

    for (int n = 1; n < 4; n++)
    {
       a[n] = a[0] + (n*d);
       Print(n, "  ", a[n]);
    }
}

2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 3  15
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 2  11
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 1  7
2016.05.31 23:08:52.433 ChangeTimeFrame EURUSD.e,M1: 0  3
 
Alexey Volchanskiy:

Schon gut, ich habe Mathe selbst seit der Schule vergessen ))

Ich gehe spazieren, dann schreibe ich den Code für das Geometrieprogramm.
Grund der Beschwerde: