Jetzt verstehe ich etwas nicht, muss ich 2 Puffer für sie machen, um High & Low einer anderen Periode im Indikator zu haben????
und in dem Artikel
warum die Funktionen nicht richtig funktionieren, z.B:
//+------------------------------------------------------------------+
//| Erhalte High für eine gegebene Bar-Nummer|
//+------------------------------------------------------------------+
doubleiHigh(stringsymbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
intkopiert=CopyHigh(Symbol,Zeitrahmen,0,Bars(Symbol,Zeitrahmen),High);
if(kopiert>0 && index<kopiert) high=High[index];
return(high);
}
Was bedeutet "falsch"? Sie sollten konkrete Beispiele anführen, anstatt allgemeine Aussagen wie "alles ist schlecht" zu machen.
Versuchen Sie, das Beispiel aus dem Abschnitt CopyHigh() auszuführen:
//+------------------------------------------------------------------+
//|HighAndLow.mq5 |
//| Copyright 2009, MetaQuotes Software Corp. | |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property description "Beispiel für die Ausgabe von High[i]- und Low[i]-Werten"
#property description "für nach dem Zufallsprinzip ausgewählte Stäbe".
double High[],Low[];
//+------------------------------------------------------------------+
//|| Tiefstwert für eine bestimmte Taktnummer ermitteln
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double low=0;
ArraySetAsSeries(Low,true);
int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
return(low);
}
//+------------------------------------------------------------------+
//| Hoch für eine bestimmte Taktnummer erhalten
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion|
//+------------------------------------------------------------------+
void OnTick()
{
//--- Hoch- und Tiefstwerte für den Balken mit Index bei jedem Tick anzeigen,
//--- gleich der Sekunde der Ankunft des Ticks
datetime t=TimeCurrent();
int sec=t%60;
printf("High[%d] =%G Low[%d] =%G",
sec,iHigh(Symbol(),0,sec),
sec,iLow(Symbol(),0,sec));
}
//+------------------------------------------------------------------+
Das ist das, was ich bekommen habe, es zeigt alles richtig an.
Was bedeutet "falsch"? Sie sollten konkrete Beispiele anführen, anstatt allgemeine Aussagen wie "alles ist schlecht" zu machen.
Versuchen Sie, das Beispiel aus dem Abschnitt CopyHigh() auszuführen:
Das ist das, was ich bekommen habe, es zeigt alles korrekt an.
Ich entschuldige mich für die Unkonkretheit der Behauptungen.
Ich habe den Eindruck, dass wenn eine Funktion geschrieben wird, impliziert wird, dass sie unter verschiedenen Parametern funktioniert. Ansonsten machen sie einfach keinen Sinn.
Fügen wir den TimeFrame-Parameter hinzu. Und testen wir das Programm mit einem anderen Parameter, z. B. gleich dem aktuellen, d. h. setzen wir ihn z. B. auf PERIOD_D1 in einem Tagesdiagramm.
//+------------------------------------------------------------------+ //|HighAndLow.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property description "Beispiel für die Ausgabe von High[i]- und Low[i]-Werten" #property description "für nach dem Zufallsprinzip ausgewählte Stäbe". double High[],Low[]; input ENUM_TIMEFRAMES TimeFrame; //+------------------------------------------------------------------+ //|| Tiefstwert für eine bestimmte Taktnummer ermitteln //+------------------------------------------------------------------+ double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double low=0; ArraySetAsSeries(Low,true); int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low); if(copied>0 && index<copied) low=Low[index]; return(low); } //+------------------------------------------------------------------+ //| Hoch für eine bestimmte Taktnummer erhalten //+------------------------------------------------------------------+ double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double high=0; ArraySetAsSeries(High,true); int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High); if(copied>0 && index<copied) high=High[index]; return(high); } //+------------------------------------------------------------------+ //| Experten-Tick-Funktion| //+------------------------------------------------------------------+ void OnTick() { //--- Hoch- und Tiefstwerte für den Balken mit Index bei jedem Tick anzeigen, //--- gleich der Sekunde der Ankunft des Ticks datetime t=TimeCurrent(); int sec=t%60; printf("High[%d] =%G Low[%d] =%G", sec,iHigh(Symbol(),TimeFrame,sec), sec,iLow(Symbol(),TimeFrame,sec)); } //+------------------------------------------------------------------+
Ich entschuldige mich für die Ungenauigkeit der Aussagen.
Ich habe den Eindruck, dass man, wenn man eine Funktion schreibt, davon ausgeht, dass sie mit verschiedenen Parametern funktioniert. Andernfalls machen sie einfach keinen Sinn.
Fügen wir den TimeFrame-Parameter hinzu. Und testen wir das Programm mit einem anderen Parameter, der z.B. gleich dem aktuellen ist, d.h. setzen wir ihn z.B. gleich PERIOD_D1 auf einem Daily Chart.
Ich habe Ihre Variante geprüft - sie funktioniert ebenfalls korrekt. Ich habe es als Skript auf dem D1-Zeitrahmen mit den Parametern H1 und D1 ausgeführt. Die Werte waren korrekt (ich habe die letzten drei Bars überprüft)
Ich habe Ihre Variante überprüft - sie funktioniert auch korrekt. Ich habe es als Skript auf dem D1-Zeitrahmen mit den Parametern H1 und D1 ausgeführt. Die Werte waren korrekt (ich habe die letzten drei Bars überprüft)
Ich habe gerade angefangen zu lernen. Ich habe es heruntergeladen und in den Ordner D:/\MetaTrader 5/ MQL5/Indikatoren gelegt.
Ich habe es kompiliert und auf den Chart gelegt, aber einige Indikatoren zeigen nichts an ((.
Sollte das so sein, oder habe ich etwas falsch gemacht?
Die Indikatoren CrossMa.mq5, Toned_WPR.mq5 und HistogramSample.mq5 werden nicht angezeigt.
die anderen funktionieren
Was bedeutet "falsch"? Sie sollten konkrete Beispiele anführen, anstatt allgemeine Aussagen wie "alles ist schlecht" zu machen.
Versuchen Sie, das Beispiel aus dem Abschnitt CopyHigh() auszuführen:
Das ist, was ich bekommen habe, es zeigt alles korrekt an.
Kopieren Sie das gesamte Array der Daten?
Ich denke, es ist sehr unwirtschaftlich, 1 Element zu kopieren.
Prival:
Soll das so sein, oder habe ich etwas falsch gemacht?
Hallo, Sergei. Dieser Artikel wurde in der Hitze des Gefechts geschrieben, für die allerersten öffentlichen Builds. Seitdem hat sich viel geändert, vielleicht müssen einige Indikatoren verbessert werden.
Ich werde ihn überarbeiten, sobald ich Zeit habe.

- 2010.02.25
- MetaQuotes Software Corp.
- www.mql5.com
Ich konnte dieses Problem beheben, indem ich nur einen Puffer mit dem Flag INDICATOR_DATA definierte und alle anderen in INDICATOR_CALCULATIONS verschob. Auf diese Weise geben CopyBuffer/GetData die richtigen kopierten Elemente in die Ziel-Arrays zurück.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Eine neue Schiene: Benutzerdefinierte Indikatoren in MQL5 :
Ich werde nicht alle neuen Möglichkeiten und Funktionen des neuen Terminals und der Sprache aufzählen. Sie sind zahlreich und einige der Neuheiten sind eine Diskussion in einem eigenen Beitrag wert. Auch gibt es hier keinen Code, der mit objektorientierter Programmierung geschrieben wurde. Das Thema ist zu wichtig, um es nur im Kontext zusätzlicher Vorteile für Entwickler zu erwähnen. In diesem Beitrag gehen wir auf Indikatoren, ihre Struktur, Zeichnung, Typen und Programmierdetails im Vergleich zu MQL4 ein. Ich hoffe, dass dieser Beitrag für Einsteiger und erfahrene Entwickler hilfreich sein wird. Vielleicht entdeckt auch jemand etwas Neues.
Autor: Комбинатор