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
Sie müssen den Block markieren und Umschalt+Tab drücken.
Hinzufügen zum Tutorial im Abschnitt
MQL5 Referenzhandbuch / Technische Indikatoren / iMA spezifisches Beispiel nach der Beschreibung:
angewandter_Preis
[in] Zu verwendender Preis. Kann eine der Preiskonstanten ENUM_APPLIED_PRICE oder das Handle eines anderen Indikators sein.
Wie kann ein Handle eines anderen Indikators verwendet werden? Was bewirkt es? Oder können nur die Werte von technischen Standardindikatoren gemittelt werden? Und wenn es erforderlich ist, einen benutzerdefinierten Indikator in indicator_separate_window zu zeichnen und einen gleitenden Durchschnitt dieses Indikators im selben Fenster zu zeichnen,kann iMA() dies tun? Ich habe einen vagen Verdacht, dass iMA() iMAOnArray() Ergebnis erreichen kann, aber ich habe keine Ahnung, wie, vielleicht bin ich falsch
ZS: Vielleicht erwarte ich zu viel von MT5, aber auf MT4 war die eingebaute Funktion iMAOnArray() nicht vorhanden, es ist nicht schwierig, eine Benutzerfunktion für die Berechnung eines Durchschnitts zu schreiben, aber ich hätte gerne Standardfunktionen, um mit Arrays zu arbeiten, ich habe mehr Zeit mit der Suche nach Informationen über iMAOnArray() verbracht, als es dauerte, meine eigene Funktion zu schreiben
Hinzufügen zum Tutorial im Abschnitt
MQL5 Referenzhandbuch / Technische Indikatoren / iMA spezifisches Beispiel nach der Beschreibung:
Wie kann man das Handle eines anderen Indikators verwenden? Was wird es tun? oder ist es möglich, nur die Werte von technischen Standardindikatoren zu mitteln? und wenn es notwendig ist, einen benutzerdefinierten Indikator in indicator_separate_window zu zeichnen und einen gleitenden Durchschnitt für diesen Indikator im selben Fenster zu zeichnen,kann iMA() das tun? Ich habe einen vagen Verdacht, dass iMA () iMAOnArray() erreichen kann, aber ich habe keine Ahnung, wie, vielleicht bin ich falsch
Klicken Sie auf den Link und Sie gelangen zum Abschnitt Preiskonstanten, wo unten ein Beispiel zu finden ist:
Wenn ein technischer Indikator Preisdaten verwendet, deren Typ durch die Aufzählung ENUM_APPLIED_PRICE festgelegt ist, kann ein Handle eines beliebigen Indikators (eingebautes Terminal oder von einem Benutzer geschrieben) als Eingabepreisreihe angegeben werden. In diesem Fall werden die Werte des Indikators Nullpuffer für Berechnungen verwendet. Auf diese Weise können Sie die Werte eines Indikators problemlos auf die Werte eines anderen Indikators aufbauen. Der Handle eines benutzerdefinierten Indikators wird durch den Aufruf der Funktion iCustom() erstellt.
Beispiel:
#propertyindicator_separate_window
#Eigenschaftindicator_buffers 2
#propertyindicator_plots 2
//--- Eingabeparameter
inputint RSIperiod=14;//Zeitraum für die RSI-Berechnung
inputint Smooth=8;// RSI-Glättungsperiode
inputENUM_MA_METHOD meth=MODE_SMMA;//Glättungsmethode
//---- plot RSI
#propertyindicator_label1"RSI"
#propertyindicator_type1DRAW_LINE
#propertyindicator_color1Rot
#property indicator_style1STYLE_SOLID
#Eigenschaftindicator_width1 1
//---- RSI_Geglättet darstellen
#property indicator_label2"RSI_Geglättet"
#property indicator_type2DRAW_LINE
#Eigenschaft indicator_color2Navy
#property indicator_style2STYLE_SOLID
#Eigenschaft indicator_width2 1
//--- Indikatorpuffer
double RSIBuffer[];//hier werden die RSI-Werte gespeichert
double RSI_SmoothedBuffer[];// geglättete RSI-Werte werden hier gespeichert
int RSIhandle;// RSI-Indikator-Handle
//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
voidOnInit()
{
//--- Zuordnung von Indikatorpuffern
SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
SetIndexPuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
IndicatorSetInteger(INDICATOR_DIGITS,2);
//---
RSIhandle=iRSI(NULL,0,RSIZeitraum,PRICE_CLOSE);
//---
}
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion|
//+------------------------------------------------------------------+
intOnCalculate(constint rates_total,
constint prev_calculated,
constint begin,
constdouble&Preis[]
)
{
//--- den Wert des letzten Fehlers auf Null zurücksetzen
ResetLastError();
//--- RSI-Indikator-Daten in RSIBuffer[]-Array holen
int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
if(kopiert<=0)
{
Print("RSI-Indikatorwerte konnten nicht kopiert werden, Fehler = ",
GetLastError(),", kopiert = ",kopiert);
zurück(0);
}
//--- Erstellen eines Indikators für den Durchschnitt anhand der Werte des RSI-Indikators
int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
if(kopiert<=0)
{
Print("RSI geglätteter Indikator konnte nicht kopiert werden, Fehler = ",
GetLastError(),",copied =",copied);
zurück(0);
}
//--- Rückgabewert von prev_calculated für den nächsten Aufruf
return(rates_total);
}
Sie haben nur einen Absatz nicht zu Ende gelesen.
Ich verwende den Standard-Trailing-Stop ausgiebig. In diesem Zusammenhang ein paar Anfragen.
1) Hinzufügen der Möglichkeit, "Trailing Stop Level" im Spaltenmenü auszuwählen. Das ist, soweit ich weiß, nicht schwierig.
2) Hinzufügen des TS-Wertes als Positionseigenschaft mit der Möglichkeit (nach Wahl des Benutzers), die TS-Stufe für eine bestimmte Position an das Terminal zu übertragen oder nicht zu übertragen. Ich verstehe, dass es viel schwerwiegender ist als Punkt 1), und die Implementierung von TS vollständig auf der Serverseite erhöht die Belastung des Servers erheblich.
Dafür würde ich persönlich gerne Punkt 2) verwenden:
- mehrere Endgeräte mit demselben Konto verbunden sind (idealerweise über verschiedene Server und Anbieter, z. B. zu Hause und am Arbeitsplatz);
- eines der Terminals öffnet manuell eine Position und stellt den TS-Pegel ein;
- Wenn der TS-Level auf einem anderen Terminal gesetzt wird, bleibt der TS auf dem ersten Terminal unverändert, da der Trailing-Stop jetzt auf der Client-Seite implementiert wird. Das würde ich gerne ändern, wenn der Kunde es wünscht.
Klicken Sie auf den Link und Sie werden zum Abschnitt Preiskonstanten mit einem Beispiel unten weitergeleitet:
Sie haben nur einen Absatz nicht zu Ende gelesen.
Klicken Sie auf den Link und Sie gelangen zum Abschnitt Preiskonstanten, wo unten ein Beispiel zu finden ist:
Sie haben nur einen Absatz nicht gelesen
Ich habe den Absatz beendet, aber das Beispiel verwendet nur technische Standardindikatoren, die Frage bezieht sich auf benutzerdefinierte Indikatoren und die Funktion iMAOnArray()
-Ich möchte sehen, ob Sie gleitende Durchschnitte zur Glättung der Daten des benutzerdefinierten Indikators verwenden können.
- Ich denke, es wäre nützlich, Links zu veralteten f-Funktionen zu haben, damit man nicht das ganze Forum durchsuchen muss.
MQL4-Referenz - Veraltete Funktionen
Es gibt in der Tat Beispiele, aber oft kann man sie nicht intuitiv finden, vielleicht könnte man in solchen Fällen einfach einen "Beispiel"-Link einrichten - das wäre sehr praktisch, IMHO natürlich.
Ich habe den Absatz gelesen, aber das Beispiel verwendet nur technische Standardindikatoren, die Frage bezieht sich auf benutzerdefinierte Indikatoren und die Funktion iMAOnArray()
-Ich möchte wissen, ob gleitende Durchschnitte zur Glättung von Daten benutzerdefinierter Indikatoren verwendet werden können.
Ich habe oben angegeben:
Wenn ein technischer Indikator für seine Berechnungen Preisdaten verwendet, deren Typ durch die Aufzählung ENUM_APPLIED_PRICE definiert ist, kann jedes Indikator-Handle (im Terminal eingebaut odervom Benutzer geschrieben) als Eingabepreisreihe angegeben werden.
Lesen Sie auch Artikel:
Wenn die Gemeinschaft daran interessiert ist, könnte eine Änderung der bestehenden Test- und Optimierungsoption in Betracht gezogen werden. Ich benötige beispielsweise Test-/Optimierungsdaten nicht nur für einen Zeitraum, sondern für mehrere Zeiträume auf einmal (z. B. um die Gleichmäßigkeit der Leistung eines Expert Advisors zu bewerten). Natürlich können wir uns bei der Prüfung/Optimierung für alle Zeiträume abwechseln. Wenn aber ein Zeitraum 0,5 bis 1 Stunde dauert und Sie 10 benötigen, ist es viel bequemer, alle 10 Zeiträume auf einmal laufen zu lassen (z. B. über Nacht) und alle Ergebnisse später zu erhalten. Ich gebe derzeit "Datum von" und "Datum bis" als Eingabeparameter im Expert Advisor an und gebe den gesamten Optimierungszeitraum in der externen Registerkarte des Testers an (Datum von/bis ist einer der Optimierungsparameter). Aber in diesem Fall ist die Optimierungszeit jedes Laufs tatsächlich gleich der Zeit der allgemeinen Optimierungsperiode (in der Registerkarte des Testers - die Häkchen bewegen sich immer - ich habe es virtuell überprüft). Wenn es möglich wäre, im Prüfgerät 2 Zeiträume gleichzeitig anzugeben: einen allgemeinen großen Zeitraum und einen kleinen Zeitraum innerhalb dieses Zeitraums, wäre das Problem gelöst.
Es gibt die Funktion ChartIndicatorAdd(), um einen Indikator zum Diagramm hinzuzufügen. Bitte erstellen Sie die Funktion zum Entfernen des Indikators aus dem Diagramm. Es ist wie mit der Atombombe: Die Bombe ist erfunden, aber es gibt keine Anti-Bombe.