Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 32
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich prüfe, ob der Indikator bereit ist (zu Beginn vonOnCalculate)
Sie können auch eine Periodenprüfung hinzufügen
1. Nur eine Klarstellung. Jetzt ist klar, dass wir über dieselbe Sache sprechen.
2) Ich verstehe das, aber ich stimme nicht zu, dass man dazu Arrays spiegeln muss. Ist ein Indikator für zwei Terminals erforderlich? Es ist fast so, als würde man aus 2in1 eine Sense und eine Axt machen.
3. soweit ich weiß, wird Buffer[] vom Empfänger in der Funktion CopyBuffer() verwendet, um nur einen Indikatorwert zu erhalten.
4. Sie haben das Wichtigste nicht beachtet. Der Beginn des Kopierens des Indikatorwertes sollte nicht durch den Taktindex, sondern durch den Zeitpunkt des i-ten Taktes bestimmt werden.
1. Ok.
2. Ich habe das Array umgedreht, weil ich den Indikator aus den vier umschreibe - alles funktioniert darin richtig und alle Daten sind korrekt. Alles darin ist daran gebunden, die Daten in der genauen Reihenfolge zu erhalten, in der sie in der Schleife gelesen werden. Wenn wir den Puffer nicht umdrehen, müssen wir den Indikator von Grund auf neu schreiben - wozu? Es ist ziemlich kompliziert. Ich habe diesen Indikator nur als Beispiel dafür angeführt, wie fehlerhaft es ist, Daten von einer nicht einheimischen Frau zu erhalten.
Nein. In Buffer[] werden die Daten nacheinander in die Schleife eingefügt - bei jeder Iteration der Schleife wird ein Wert aus AO() eingefügt.
4. Was meinen Sie mit "Beginn des Kopierens"?
1. gut.
2. Ich drehe das Array um, weil ich den Indikator von vier neu schreibe - darin funktioniert alles richtig, alle Daten sind korrekt. Alles ist daran gebunden, die Daten in der genauen Reihenfolge zu erhalten, in der sie in der Schleife gelesen werden. Wenn wir den Puffer nicht umdrehen, müssen wir den Indikator von Grund auf neu schreiben - wozu? Es ist ziemlich kompliziert. Ich habe diesen Indikator nur als Beispiel dafür angeführt, wie fehlerhaft es ist, Daten aus einer nicht einheimischen Quelle zu erhalten.
Nein. In Buffer[] werden die Daten nacheinander in die Schleife eingefügt - bei jeder Iteration der Schleife wird ein Wert aus AO() eingefügt
4. Was meinen Sie mit "Beginn des Kopierens"?
2. Nichts hindert Sie daran, eine Schleife von 0 bis rates_total-1 zu erstellen.
3. Ja, ich habe irgendwo einen Fehler gemacht.
4.
sollte geändert werden in
"Von wo aus beginnen" oder "von welchem Datum aus" ist der Beginn des Kopierens der Indikatorwerte in das Empfängerfeld.
3. Ja, ich habe irgendwo etwas durcheinander gebracht.
4. in Ihrem Code.
sollte geändert werden in
"Wo fangen wir an?" oder "Ab welchem Datum?" Dies ist der Beginn des Kopierens der Indikatorwerte in das Empfängerfeld.
Warum das Datum übergeben, wenn ich den Wert aus dem Schleifenindex lese? Haben Sie diesen Testindikator ausgeführt? Er bezieht AO immer nur aus einem - dem in den Einstellungen angegebenen Stromfaktor. Unabhängig davon, wie Sie den aktuellen Zeitrahmen wechseln, entspricht der AO-Chart immer dem, den Sie in den Einstellungen festgelegt haben.
In diesem Fall werden alle Daten zurückgegeben, aber in meinem Indikator, den ich ändere, werden die Daten nicht von einem nicht-nativen Preis zurückgegeben.
Sie brauchen diesen Testindikator nicht - Daten aus einem nicht nativen Strom werden bereits zurückgegeben. In meinem Fall werden die Daten jedoch nicht zurückgegeben, aber ich erhalte sie auf die gleiche Weise.
Warum das Datum übergeben, wenn ich den Wert aus dem Schleifenindex lese? Haben Sie diesen Testindikator ausgeführt? Es wird immer nur ein AO geplottet - das Setff in den Einstellungen. Unabhängig davon, wie Sie den aktuellen Zeitrahmen wechseln, entspricht der AO-Chart immer dem, den Sie in den Einstellungen festgelegt haben.
In diesem Fall werden alle Daten zurückgegeben, aber in meinem Indikator, den ich ändere, werden die Daten nicht von einem nicht-nativen Preis zurückgegeben.
Sie brauchen diesen Testindikator nicht - Daten aus einem nicht nativen Strom werden bereits zurückgegeben. Bei mir ist das nicht der Fall, aber ich erhalte die Daten auf genau die gleiche Weise.
Denn der Null-Balken H4 enthält VIER H1-Balken. Und wenn Sie den Index 2 der Periode H1 abfragen, erhalten Sie den Wert des Indikators in Takt 2 der Periode H4.
Ich verstehe kaum, was ich schreiben konnte.
Im Moment ist es 13:35 Uhr. Öffnungszeit des aktuellen H1-Balkens = 13:00. Sie versuchen, die Werte des Indikators mit dem Index von bar = 1 zu kopieren, d.h. bar 12:00 der aktuellen H1-Periode. Aber statt 12:00 Uhr erhalten Sie 8:00 Uhr in H4 der Periode
Für H1 ist der erste Takt 12:00
Für H4 ist der erste Takt 8:00
Sowohl dort als auch dort steht der Balkenindex an erster Stelle...
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
fxsaber, 2017.04.12 08:38
Ein bisschen Hut ab. Umgehung des ZuweisungsoperatorsForum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Ich kann keine Indikatordaten vom hohen Zeitrahmen erhalten
Artyom Trishkin, 2017.04.14 01:23
Seit vier Tagen versuche ich, die Daten des Standard-AO-Indikators aus dem älteren Zeitrahmen in den Indikator zu bekommen, und immer noch keine Möglichkeit...
Ich lese AO-Daten in der Schleife, aber genau in der Schleife gibt es keine historischen Daten. Auf dem aktuellen Balken befinden sich Daten. Was ist das Problem? Was mache ich falsch?
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Merkmale der Sprache mql5, Tipps und Tricks
fxsaber, 2017.02.27 18:40
Danke für den Tipp! In der Wildnis ist es SymbolInfoMarginRate. Jetzt sieht es also so ausdouble GetMarginRequired( const string Symb )
{
MqlTick Tick;
double MarginInit, MarginMain;
return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Wir müssen uns darüber im Klaren sein, dass es im MT5 sehr unterschiedliche Margin-Anforderungen in verschiedenen Richtungen geben kann. D.h. eine einzige MT4-Variante kann nicht funktionieren. Auf dem Forex ist dies natürlich nicht der Fall. Aber Sie müssen daran denken. Daher sollten Sie ihn im Allgemeinen wie folgt schreiben
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
double MarginInit, MarginMain;
const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
(SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
return(Res);
}
Hervorgehoben kann 0 zurückgeben. BKS ist darauf gestoßen.
Ich habe es so gemacht:
Ich glaube, Sie machen eine Menge Dinge "falsch". Bitte beschreiben Sie, was Sie tun müssen: Schritt für Schritt, Punkt für Punkt.
Was genau ist falsch? Das war die Frage - was mache ich falsch, um Indikatordaten aus einem nicht nativen Zeitrahmen zu erhalten?
Beispiel: Der Indikator läuft auf М1, während die Daten von AO auf М5 bezogen werden sollen. Während wir also einen Grenzwert>1 haben (die Historie muss neu berechnet werden), liefert AO von M5 Nullen, ohne dass ein Datenfehler vorliegt. Sobald die gesamte Historie berechnet ist (Limit==0), beginnen die Daten von AO mit M5 zu kommen.