@ all MQL4-Gurus: BestPractice ... iBarShift vs. CopyRates

 
Hallo,

gern möchte ich hiermit ein Thema aufgreifen, welches mir im Detail noch nicht wirklich klar ist.

Ein simples Beispiel ->
aktuelles Chart mit EURUSD-M1: attached EA bzw. Indicator benötigt von GBPUSD-M5 die
Highest + Lowest-Quotes innerhalb eines angegebenen Zeitraumes - inkl. der entsprechenden Bars.

(Parallel läuft auf gleicher MT4-Instanz ein EA, der für kontinuierlichen Kursupdate aller
Marketwatch-CurrencyPairs samt aller Timeframes sorgt).

Nun die Frage:
ist ein entsprechender iBarShift/iTime/iHighest/iLowest... ausreichend, um die korrekten
Daten abzurufen, oder sollte grundsätzlich mit CopyRates gearbeitet werden, was etwas mehr
Aufwand bedeutet. Führen o.g. Commands evtl. intern einen CopyRates eigenständig durch ?

Wer möchte mich mit seinem fundierten Wissen erleuchten ?
Vielen Dank !!

Mark
 
M111:
Hallo,

gern möchte ich hiermit ein Thema aufgreifen, welches mir im Detail noch nicht wirklich klar ist.

Ein simples Beispiel ->
aktuelles Chart mit EURUSD-M1: attached EA bzw. Indicator benötigt von GBPUSD-M5 die
Highest + Lowest-Quotes innerhalb eines angegebenen Zeitraumes - inkl. der entsprechenden Bars.

(Parallel läuft auf gleicher MT4-Instanz ein EA, der für kontinuierlichen Kursupdate aller
Marketwatch-CurrencyPairs samt aller Timeframes sorgt).

Nun die Frage:
ist ein entsprechender iBarShift/iTime/iHigest/iLowest... ausreichend, um die korrekten
Daten abzurufen, oder sollte grundsätzlich mit CopyRates gearbeitet werden, was etwas mehr
Aufwand bedeutet. Führen o.g. Commands evtl. intern einen CopyRates eigenständig durch ?

Wer möchte mich mit seinem fundierten Wissen erleuchten ?
Vielen Dank !!

Mark

Wenn Du mit 1-2 Werten auskommst dann reicht jedenfalls iBarShift

wenns mehr werte werden, dann würde ich schon zu CopyRates gehen, das macht den Code auch übersichtlicher.

Wobei die Zeit um die Array zu befüllen auch berücksichtigt werden muss

 
amando:

Wenn Du mit 1-2 Werten auskommst dann reicht jedenfalls iBarShift

wenns mehr werte werden, dann würde ich schon zu CopyRates gehen, das macht den Code auch übersichtlicher.

Wobei die Zeit um die Array zu befüllen auch berücksichtigt werden muss

Hallo amando, vielen Dank für Ihre Response. Gibt es eine rationale, nachvollziehbare Erklärung gerade für den ersten Teil Ihrer Antwort ?
 
Vermutlich ist die Verwendung von Copyrates jene Variante, die die korrektesten Ergebnisse erzielt.

Aber wozu dann iBarShift & Co ?
Worin genau unterscheidet sich die Datenbasis beider Optionen ? In der Aktualität ? und wenn ja, warum?
 
M111:
Vermutlich ist die Verwendung von Copyrates jene Variante, die die korrektesten Ergebnisse erzielt.

Aber wozu dann iBarShift & Co ?
Worin genau unterscheidet sich die Datenbasis beider Optionen ? In der Aktualität ? und wenn ja, warum?

Die datenbasis ist nehm ich an die gleiche

wenn du abfragen machst mit iHigh, iLow,..... dann wird der Code relativ schnell unübersichtlich, du musst ja immer alle parameter angeben


bei copyrates schreibst du dann ja nur rates.high[]

Das ist eine gewisse vereinfachung in der code abfrage

https://www.mql5.com/en/docs/series/copyrates

die abfrage des zeitframe machst du ja beim kopieren in den array


du könntst z.b

MqlRates rates;

MqlRates ratesH1; 

deine array füllen und dann nur nich mit

ratesH1.high[] abfragen

Documentation on MQL5: Timeseries and Indicators Access / CopyRates
Documentation on MQL5: Timeseries and Indicators Access / CopyRates
  • www.mql5.com
Gets history data of MqlRates structure of a specified symbol-period in specified quantity into the rates_array array. The elements ordering of the copied data is from present to the past, i.e., starting position of 0 means the current bar. If you know the amount of data you need to copy, it should better be done to a statically allocated...
 
amando:

Die datenbasis ist nehm ich an die gleiche

wenn du abfragen machst mit iHigh, iLow,..... dann wird der Code relativ schnell unübersichtlich, du musst ja immer alle parameter angeben


bei copyrates schreibst du dann ja nur rates.high[]

Das ist eine gewisse vereinfachung in der code abfrage

https://www.mql5.com/en/docs/series/copyrates

die abfrage des zeitframe machst du ja beim kopieren in den array


du könntst z.b

MqlRates rates;

MqlRates ratesH1; 

deine array füllen und dann nur nich mit

ratesH1.high[] abfragen

amando, wenn Datenbasis inkl. Aktualität identisch sind, macht CopyRates keinen Sinn, da die Verwendung einiges mehr an Aufwand bedeutet -

Commands wie iBarShift, iTimes, iHighest ... müssten hierfür grundsätzlich programmiert werden.


Meine Fragestellung bezieht sich nicht auf die Programmiertechnik bei Copyrates, sondern um das Grundlegende -warum- !

 
  1. iBarShift() gibt es nur für MQL4, nicht mehr in MQL5.
  2. Die anderen Funktionen gibt es für MQL5, und die wurden auch für MQL4 verfügbar gemacht.
Also wenn Du darüber nachdenkst, Dein Programm später auf MQL5 und MT5 zu übertragen (schneller, wird weiterentwickelt,..) würde ich auf iBarShift() verzichten!
 
Carl Schreiber:
  1. iBarShift() gibt es nur für MQL4, nicht mehr in MQL5.
  2. Die anderen Funktionen gibt es für MQL5, und die wurden auch für MQL4 verfügbar gemacht.
Also wenn Du darüber nachdenkst, Dein Programm später auf MQL5 und MT5 zu übertragen (schneller, wird weiterentwickelt,..) würde ich auf iBarShift() verzichten!
Carl, ob ich das möchte oder muss oder überhaupt kann, weiss ich noch nicht, aber Danke für den Hinweis!
Grund der Beschwerde: