Gemeinsam lernen und schreiben in MQL5 - Seite 9

 
gdtt:

der Berater verwendet

Wert vom 0. Balken genommen wird, werden die Werte der Indikatorpuffer dafür bei jedem Tick bis zum Ende der Kerze geändert.

Das ist richtig, ich habe experimentiert, aber im Wesentlichen löst es das Hauptproblem nicht: Wie kann man einen EA dazu bringen, den Indikatorpuffer nicht nur für den angeforderten Balken, sondern auch für mehrere Balken rückwärts neu zu berechnen?

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 

Eine Lösung könnte gefunden worden sein! Einer von ihnen...

Hierfür müssen Sie jedoch eine spezielle Version des Indikators erstellen.

 

Meine Herren,

Ich schreibe einen Indikator: ...
int handle;
double indicatorBuffer[];
...
int OnInit()
{
... handleMA = iMA(_Symbol, _Periode, periodMA, shiftMA, MODE_SMA, AppPrice);
...
}

int OnCalculate (const int rates_total, // Größe des Arrays price[]
const int prev_calculated, // verarbeitete Balken beim vorherigen Aufruf
const int begin, // wo signifikante Daten beginnen
const double& price[]) // Array für Berechnung
{
... etwas tun

Die Frage ist - wie kann man handleMA = iMA(_Symbol, _Periode, periodMA, shiftMA, MODE_SMA, AppPrice) wissen lassen, was AppPrice ist?
oder wie kann man Apply to: aus der Registerkarte Parameter extrahieren, um es im Code zu verwenden?

Vielen Dank im Voraus...

 
FlyAgaric:

Meine Herren,


Die Frage ist, wie man handleMA = iMA(_Symbol, _Periode, periodMA, shiftMA, MODE_SMA, AppPrice) wissen lässt, was AppPrice ist?
oder wie extrahiert man Anwenden auf: aus der Registerkarte Parameter zur Verwendung im Code?

Ich danke Ihnen im Voraus...

Siehe OnCalculate():

Die Auswahl einer notwendigen Zeitreihe oder eines Indikators als Preis[]-Array erfolgt durch den Benutzer beim Start des Indikators in der Registerkarte "Parameter". Zu diesem Zweck muss man in der Dropdown-Liste des Feldes "Anwenden auf" das gewünschte Element angeben.

Um Werte eines benutzerdefinierten Indikators von anderen mql5-Programmen zu erhalten, wird die Funktion iCustom() verwendet, die das Indikator-Handle für nachfolgende Operationen zurückgibt. Sie können auch das entsprechende Preis[]-Array oder den Handle eines anderen Indikators angeben . Dieser Parameter sollte als letzter in der Liste der Eingabevariablen des benutzerdefinierten Indikators übergeben werden.
 
Rosh:

Siehe OnCalculate():


Rosh, danke, aber meine Frage ist genau das. Was sollte ich in der Erklärung angeben?
handleMA = iMA(_Symbol, _Periode, periodMA, shiftMA, MODE_SMA, AppPrice)
als AppPreis?

Ich lese die verfügbare Hilfe sehr sorgfältig. Vielleicht hat die Hitze ihren Tribut gefordert, aber ...

 
FlyAgaric:

Rosh, danke, aber meine Frage ist genau das. Was sollte ich in der Erklärung angeben?
handleMA = iMA(_Symbol, _Periode, periodMA, shiftMA, MODE_SMA, AppPrice)
als AppPreis?

Ich habe die verfügbare Hilfe sehr sorgfältig gelesen. Vielleicht hat die Hitze ihren Tribut gefordert, aber ...

Geben Sie einen Indikator-Handle an, wenn Sie mit den Daten eines anderen Indikators rechnen wollen. Oder die Art der Preise, auf deren Grundlage der Indikator berechnet werden soll.
 
FlyAgaric:

Rosh, danke, aber meine Frage ist genau das. Was sollte ich in der Erklärung angeben?
handleMA = iMA(_Symbol, _Periode, periodMA, shiftMA, MODE_SMA, AppPrice)
als AppPreis?

Ich habe die verfügbare Hilfe sehr sorgfältig gelesen. Vielleicht hat die Hitze ihren Tribut gefordert, aber ...

Wärme. Sie sollten ENUM_APPLIED_PRICE als AppPrice angeben)
input ENUM_APPLIED_PRICE AppPrice=PRICE_CLOSE;
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
Swan:
Wärme. Sie sollten ENUM_APPLIED_PRICE als AppPrice angeben)

Swan, ich danke Ihnen für Ihre Aufmerksamkeit. Aber wenn Sie die
input ENUM_APPLIED_PRICE AppPrice=PRICE_CLOSE; und die erste Form

int OnCalculate (const int rates_total, // Größe des Arrays price[]
const int prev_calculated, // verarbeitete Balken beim vorherigen Aufruf
const int begin, //wo signifikante Daten beginnen
const double& Preis[]) // Array für die Berechnung
Beim Kompilieren erhalten wir eine Warnmeldung: Es sind zwei OnCalculate-Funktionen definiert. Es wird die Funktion Preisdaten verwendet NameIndicator.mq5 (pg)
und das Array price[] ist in keiner Weise mit AppPrice verknüpft, es sei denn, es ist dasselbe wie Apply to: in der dritten Registerkarte "Parameter".

Die Frage ist in der Tat, ob die eingebauten Single-Buffer-Indikatoren wie iMA() und die erste intCalculate()-Form verwendet werden können, wenn price[]-Array irgendwie
in den Berechnungen verwendet.

 
Rosh:
Geben Sie den Indikator-Handle an, wenn Sie mit den Daten eines anderen Indikators rechnen wollen. Oder Art der Preise, auf deren Grundlage der Indikator berechnet wird.

Wir (eher ich) haben ein Missverständnis.

Die Frage ist in der Tat, ob wir eingebaute Single-Buffer-Indikatoren wie iMA() und die erste Form von int OnCalculate() verwenden können, wenn das Array price[] irgendwie
in den Berechnungen verwendet wird.

 
FlyAgaric:

Wir (eher ich) haben ein Missverständnis.

Die Frage ist nämlich, ob man integrierte Ein-Puffer-Indikatoren vom Typ iMA() und die erste Form int OnCalculate() verwenden kann, wenn das Array price[] irgendwie
in den Berechnungen verwendet.

IhrAppPrice-Parameter hat nichts mit OnCalculate() zu tun.

int OnInit()
{
... handleMA = iMA(_Symbol, _Period, periodMA, shiftMA, MODE_SMA, AppPrice);
...
}

Sie können ihm entweder den Wert einer der Preiskonstanten (Option 1) oder das Handle eines anderen Indikators (Option 2) geben. Und dann können Sie:

1. Variante.

In der Funktion OnCalculate() des zweiten Typs

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
   );

alle erforderlichen Daten abrufen und die Berechnung durchführen

2. Variante.

Verwenden Sie OnCalculate() jeder Art, wie es der Code erfordert, und verwenden Sie CopyBuffer(), um Indikatorwerte zu erhalten.