![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Gibt es ein Beispiel für die Verwendung von icustom-Funktion, um zwei Zeitrahmen gleichen Puffer zu erhalten?
Da 2 Zeitrahmenpuffer denselben Namen haben, wie kann ich die verschiedenen Zeitrahmen bestimmen?
aktueller Zeit rahmen
double trend = iCustom(NULL, 1, "HA01", 0, 1500, 0, 0);
höherer Zeitrahmen
double trend = iCustom(NULL, 5, "HA01", 0, 1500, 0, 1);
Und dann die 2 Variablen nach Bedarf verwenden (zum Beispiel: wenn (trend1minute == ... && trend5minute ==... ) etwas tun)
Gibt es ein Beispiel für die Verwendung der iCustom-Funktion, um zwei Zeitrahmen mit demselben Puffer zu erhalten?
da 2 tf-Puffer den gleichen Namen haben, wie kann ich die verschiedenen Zeitrahmen bestimmen?
aktueller Zeitrahmen
double trend = iCustom(NULL, 1, "HA01", 0, 1500, 0, 0);
höherer Zeitrahmen
double trend = iCustom(NULL, 5, "HA01", 0, 1500, 0, 1);Verwendung von iCustom in einem EA, Einzelinstanz
Hallo zusammen,
Ich arbeite daran, einen EA zu schreiben, um einen benutzerdefinierten Indikator zu verwenden. Wenn ich einen Backtest durchführe, stelle ich fest, dass es scheint, jedes Mal eine neue Instanz des Indikators zu laden, wenn die iCustom-Funktion aufgerufen wird. Kennt jemand eine Möglichkeit, den benutzerdefinierten Indikator einmal zu laden und bei jeder Folge wieder auf ihn zu verweisen?
void OnBar()
{
RSIPL = iCustom(NULL,0,"NCH_DI",0,4,BarIndex);
TSL = iCustom(NULL,0,"NCH_DI",0,5,BarIndex);
HAOpen = iCustom(NULL,0,"HeikenAshi",0,2,BarIndex);
HAClose = iCustom(NULL,0,"HeikenAshi",0,3,BarIndex);
PACHigh = iMA(NULL,0,5,0,MODE_SMMA,PRICE_HIGH,BarIndex);
PACLow = iMA(NULL,0,5,0,MODE_SMMA,PRICE_LOW,BarIndex);
// DO MY OTHER STUFF HERE
}
Der obige Code lädt eine neue Instanz des NCH_DI bei jedem Aufruf........
Vielen Dank
Kann nicht tun
Das ist die Art und Weise, wie MT4 funktioniert. Die beste Lösung ist, die Anzahl der iCustom()-Aufrufe in Ihrem Code zu minimieren. HA muss normalerweise nur aufgerufen werden, wenn ein neuer Balken gebildet wird. Es ist nicht optimal, es jeden Tick aufzurufen.
So funktioniert MT4. Die beste Lösung ist, die Anzahl der iCustom()-Aufrufe in Ihrem Code zu minimieren. HA muss normalerweise nur aufgerufen werden, wenn ein neuer Balken gebildet wird. Es ist nicht optimal, es jeden Tick aufzurufen.
Ich habe alle meine Aufrufe auf einer neuen Taktformation. Der NCH_DI ist leider ein relativ speicherintensives Stück Code. Haben Sie irgendwelche Vorschläge, wie ich alte Instanzen löschen kann?
Versuchen Sie dies
DerStrategietester ist nicht das eigentliche Ziel dieses EAs. Ihn live auf einem Chart laufen zu lassen schon. Ich glaube, dass das Laden von iCustom() einmalig auf einem Chart erfolgt, vorausgesetzt, Sie verfügen über genügend Speicherplatz. Daher würde ich nicht viel Zeit darauf verwenden, etwas zu entwickeln, das den Besonderheiten von Strategy Tester entspricht. Die einzige Alternative zu iCustom() besteht darin, den Indikator direkt im EA zu programmieren.
Ich habe darüber nachgedacht, es in EA.... umzukodieren. Ich entschied, dass wäre nicht praktisch in diesem Fall. Ich habe festgestellt, dass, wenn ich auskommentieren #property indicator_separate_window in den Indikator wird es laden und entladen, sobald der Aufruf abgeschlossen ist, Im gehen, um die wichtigsten Codierung zu beenden und Demo es für eine Woche oder so und überwachen meine Speichernutzung. Danke Jungs, Ill lassen Sie wissen, wie es geht.
Probleme mit iCustom Indicator
Hallo zusammen,
mein EA verwendet einen eigenen Indikator mit iCustom.
Beim Öffnen einer neuen Kerze wird der Indikator von iCustom aufgerufen.
Jetzt habe ich festgestellt, dass der Wert von iCustom[1] nicht gleich iCustom[0] des vorherigen Balkens ist.
Der Wert ist ähnlich, aber nicht exakt derselbe, wie er sein sollte und wie ich ihn z.B. für den RSI überprüft habe.
Haben Sie eine Idee, worauf das Problem beruhen könnte?
Danke für jeden Hinweis.
Camilo
Dies hängt von dem Preis ab, der vom benutzerdefinierten Indikator verwendet wird. Wenn Ihr benutzerdefinierter Indikator den Schluss-, Hoch-, Tiefst- oder einen anderen Preis verwendet, der sich während der aktuellen Kerzenentwicklung ändert, dann wird der Wert des Index [0] geändert.
Wenn Sie z.B. einen Indikator aufrufen, der einen benutzerdefinierten Preis verwendet, und den Wert [0] mit dem Ergebnis [1] vergleichen, nachdem der Balken geschlossen wurde, ist es fast sicher, dass der Wert anders sein wird, da das Ei ein Ei ist. Wenn Sie jedoch den benutzerdefinierten Indikator so einstellen, dass er den OFFENEN Preis anstelle des Schlusskurses verwendet, dann wird der Wert gleich sein (weil sich der offene Preis während der Kerzenentwicklung nicht ändert).
Danke für die schnelle Antwort, Kalenzo.
Ich habe die Werte für [2] überprüft und festgestellt, dass für [1] -> [2] alles gut aussieht.
Hier habe ich ein Beispiel für die Werte meines Indikators
.... [0]..........[1].........[2]
t4 31,8711 42,6700 52,1915
t3 44,6881 52,1915 60,3014
t2 53,0572 60,3014 67,6553
t1 59,8860 67,6553 74,5797
Es sieht also so aus, als ob das Problem in der Identifizierung der Öffnung des Balkens liegt.
Ich verwende einfach die vorherige Prüfung:
if(Volume[0]>1) return;
Ist das nicht in Ordnung?