Original (English)
BarPeriod
The duration of one bar in minutes (default = 60). The
theoretical minimum bar period is one second (1./60) for normal scripts, and 1 ms (0.001/60) for HFT simulation.
Typical price curve inefficiencies disappear on low time frames, so don't go
below 60 for indicators, filters, or analysis functions. Use 1440 for daily and 10080 for weekly bar periods. The bar period is the basic time frame in the script. It determines the width of a candle in the chart, and the frequency of the run function that is called after every bar. If not explicitly set up in the script, it can be determined with the [Period] slider.
User-defined bars (see bar function) have no fixed bar period; in that case BarPeriod should be set to the average duration of a bar.
Type:
var
BarOffset
Bar start/end time offset in minutes; 0 or a positive number smaller than BarPeriod
(default = 940 with daily bars, otherwise 0). Bars and frames normally start at a date/time boundary; f.i. 60-minute bars start at every full hour, and daily bars
normally start at UTC midnight when BarOffset is 0. For daily bars,
use BarOffset shift the bar begin to the desired trading time
of the day; the 940 default sets it to 15:40 in the bar
time zone. BarOffset is also automatically set by NumSampleCycles
for dividing a bar into equal time intervals and decreasing the offset by one interval per cycle; on the last cycle, BarOffset
is 0.
TimeFrame
Time frame in bars (default = 1) used for all subsequent price, time, series, advise, and trade calls. This variable can be set within a strategy for using multiple time frames,
for skipping bars, for synchronizing time frames to external events, or for for
emulating special bars such as Range or Renko Bars. For instance, with a bar period of 5 minutes (BarPeriod = 5) and a time frame of 12 bars (TimeFrame = 12), series and trade signals use a one hour time frame (5*12 = 60 minutes).
For synchronizing time frames to a
certain event, time, or date, skip the bars inbetween by setting TimeFrame to 0.
Count the skipped bars, and set TimeFrame to the negative number of skipped bars
when the event happens. The time frame synchronizing mechanism only affects the
shifting of series; price and other functions are
unaffected. See remarks and example; see also frameSync
and AssetFrame.
FrameOffset
Time frame offset in bars (default = 0 = no offset) used for all subsequent price, time, series, and trade calls; must be smaller than TimeFrame. When fixed time frames are used, this variable determines the bar number within a time frame when series are shifted and trades are executed.
This variable allows to generate trade signals at different times dependent on the asset.
Type:
int
Remarks:
- Use the bar function for special bars that are not bound to a certain bar period.
- BarPeriod can be set by script from one second (1./60)
to one week (7*24*60 = 10080). Bar periods above 1 are rounded to a multiple of minutes. The [Period] slider moves in fixed steps corresponding to the
standard bar periods of trading platforms; directly setting BarPeriod places the slider at the position closest to the BarPeriod value. If BarPeriod
is set directly in the script, the slider is locked.
- In [Test] mode, bar generation is based on the
UTC time stamps of ticks in the historical price data.
All ticks that fall in the bar period contribute to the bar. For instance, a
10-minute bar ending at 12:00 contains all ticks with timestamps from
11:50:00.000 until 11:59:59.999. If the tick covers several prices, its time stamp
should be from its close price. If historical time stamps are from the open or
the middle price instead, you can use the TickFix
variable for adjusting them. In [Trade] mode, bar generation is based on UTC time from the PC clock, not on the broker's server time for avoiding sync problems by connection interruptions and Internet lag.
- On short bar periods it is recommended to set the TICKS flag and use high resolution .t1 price data. It's mandatory on bar periods of less than a minute. For this, set History to ".t1" and BarPeriod to the number of seconds divided by 60, f.i. BarPeriod = 5./60. for 5 seconds. Mind the decimal; 5/60 would be considered an int and thus evaluate to 0. For extremely short bar periods, make sure that TickTime is always less than a bar period.
- For bar periods longer than a week, set BarPeriod = 1440 and use TimeFrame
for setting up monthly or quarterly time periods.
- BarPeriod and BarOffset affect the
sampling of price data. Therefore they must be set in the first run
before selecting the
asset, must not change afterwards, and must not be
optimized. TimeFrame and FrameOffset can be set anytime and can be optimized without restrictions.
- Historical price data should have sufficient resolution so
that any BarPeriod contains at least one historical tick
during market hours. If BarOffset is nonzero, historical
and lookback data need accordingly higher resolution. For instance, with a
daily bar period price data should have at least 10-minutes resolution when
BarOffset is set so that bars end at 15:40.
- If BarOffset is 0, bars begin and end at day/hour boundaries.
For preventing that daily bars would begin and end at 00:00
midnight (and thus reflect the prices from the previous, not
from the current day), BarOffset has a
default value of 940 (equivalent to 15:40) on daily and
weekly bars. Alternatively, set BarOffset to the
time when you want the script to trade; for example, BarOffset
= 60*9+30; for trading at market open at 9:30. Witb the default bar
offset, weekly bars end on Friday 15:40.
- All time zone settings assume UTC time for price history. If price
history is in local time and the time of day is relevant for the system,
either convert the timestamps to UTC or use the BarZone.
TimeFrame vs. BarPeriod:
- TimeFrame is not the same
as a longer BarPeriod. The differences are listed below. If multiple time frames or time offsets are not required, set the time frame with BarPeriod only. This uses the lowest possible number of bars and results in the highest speed for testing and training.
- Barperiod determines the bar chart and the frequency of the
run function, while TimeFrame affects the
price functions, the shifting of
data
series, and the bars at which
advise and trade calls are executed.
- Commands to enter or exit trades in the run
function are only executed when the
TimeFrame has ended at the current bar. But trade entry,
stop, or profit targets are observed at any bar period. The
run function itself is executed at any bar period,
but the frame function can be used for restricting
code execution to the end of the current time frame.
-
TimeFrame is normally not
synchronized to day/hour boundaries, while BarPeriod
is. For synchronizing time frames to days or hours, use the
frameSync() function. For aligning daily time
frames to a certain market hour in a certain time zone, use the AssetFrame
variable.
- TimeFrame has no effect on variables in bar period units, f.i.
LookBack, UnstablePeriod, LifeTime, or
WaitTime. For extending those time periods, multiply the variable value with the number of bars per time frame.
- TimeFrame does not affect indicators that do not use a
Data series, but directly the current asset price series. This is mentioned in the description of the indicator.
- Recursive indicators from the TA-Lib such as EMA or ATR require
UnstablePeriod to be adapted to their maximum
time frame.
Examples:
#define H24 (1440/Balkenperiode)
#define H4 (240/Balkenperiode)
#define H1 (60/Balkenperiode)
...
Balkenperiode = 60; // 1 Stunde (60 Minuten) Balken
...
// erstelle eine 4-Stunden-Preisserie ///////////////////////////////////
Zehitrahmen = H4;
vars PriceH4 = series(price());
// erstelle eine 24-Stunden-Preisserie /////////////////////////////////
Zehitrahmen = H24;
vars PriceH24 = series(price());
// überspringe Balken außerhalb der Marktzeiten
static int SkippedBars = 0; if(!market(ET,0)) { Zehitrahmen = 0; SkippedBars--; // zähle negative Anzahl der Balken außerhalb der Marktzeiten } else if(Zehitrahmen == 0) { Zehitrahmen = SkippedBars; SkippedBars = 0; } else Zehitrahmen = 1; vars PriceInMarketHours = series(price());
// erstelle eine tägliche Preisserie (entspricht AssetZone) ////////
static int BarsPerDay = 0;
if(hour(0) < hour(1)) { // Tageswechsel
Zehitrahmen = BarsPerDay; // beende den Rahmen
BarsPerDay = 0;
} else {
Zehitrahmen = 0; // innerhalb des Rahmens
BarsPerDay--; // zähle negative Anzahl der Balken pro Tag
}
vars PriceD1 = series(price());
// Alternative: eine auf Mitternacht ausgerichtete Preisserie unter Verwendung von frameSync()
StartWeek = 10000;
Zehitrahmen = frameSync(H24);
vars PriceD1 = series(price());
// zurück zu 1-Stunden-Zeitrahmen
Zehitrahmen = 1;
...
Siehe auch:
Balken und Kerzen, NumBars,
SampleOffset, LookBack, dayHigh, Date, Balkenmodus, AssetFrame, frameSync, bar
► neueste Version online
|
Übersetzung (Deutsch)
Balkenperiode
Die Dauer eines Balkens in Minuten (Standard = 60). Die
theoretisch minimale Balkenperiode beträgt eine Sekunde (1./60) für normale Skripte und 1 ms (0.001/60) für die HFT-Simulation.
Typische Ineffizienzen der Preiskurve verschwinden bei niedrigen Zeitrahmen, daher sollten Sie bei Indikatoren, Filtern oder Analysefunktionen nicht unter 60 gehen. Verwenden Sie 1440 für tägliche und 10080 für wöchentliche Balkenperioden. Die Balkenperiode ist der grundlegende Zeitrahmen im Skript. Sie bestimmt die Breite einer Kerze im Diagramm und die Häufigkeit der run-Funktion, die nach jedem Balken aufgerufen wird. Wenn sie nicht explizit im Skript eingerichtet ist, kann sie mit dem [Period] Schieberegler bestimmt werden.
Benutzerdefinierte Balken (siehe bar-Funktion) haben keine feste Balkenperiode; in diesem Fall sollte Balkenperiode auf die durchschnittliche Dauer eines Balkens gesetzt werden.
Typ:
var
Zeitrahmen
Zeitrahmen in Balken (Standard = 1), der für alle nachfolgenden Preis, Zeit, Serien, Advise und Trade-Aufrufe verwendet wird. Diese Variable kann innerhalb einer Strategie gesetzt werden, um mehrere Zeitrahmen zu verwenden,
Balken zu überspringen, Zeitrahmen an externe Ereignisse zu synchronisieren oder
spezielle Balken wie Range- oder Renko-Balken zu emulieren. Zum Beispiel, bei einer Balkenperiode von 5 Minuten (Balkenperiode = 5) und einem Zeitrahmen von 12 Balken (Zeitrahmen = 12), verwenden Serien und Handelssignale einen einstündigen Zeitrahmen (5*12 = 60 Minuten).
Um den Zeitrahmen an ein
bestimmtes Ereignis, eine
bestimmte Zeit oder ein Datum zu synchronisieren, überspringen Sie die Balken dazwischen, indem Sie Zeitrahmen auf 0 setzen.
Zählen Sie die übersprungenen Balken und setzen Sie Zeitrahmen auf die negative Anzahl der übersprungenen Balken, wenn das Ereignis eintritt. Der Mechanismus zur Synchronisierung des Zeitrahmens beeinflusst nur das
Verschieben der Serien; Preis- und andere Funktionen sind
nicht betroffen. Siehe Bemerkungen und Beispiel; siehe auch frameSync
und AssetFrame.
FrameOffset
Zeitrahmenoffset in Balken (Standard = 0 = kein Offset), der für alle nachfolgenden Preis, Zeit, Serien, und Trade-Aufrufe verwendet wird; muss kleiner als Zeitrahmen sein. Wenn feste Zeitrahmen verwendet werden, bestimmt diese Variable die Balkennummer innerhalb eines Zeitrahmens, bei der Serien verschoben und Trades ausgeführt werden.
Diese Variable ermöglicht es, Handelssignale zu unterschiedlichen Zeiten abhängig vom Asset zu generieren.
Typ:
int
Bemerkungen:
- Verwenden Sie die bar-Funktion für spezielle Balken, die nicht an eine bestimmte Balkenperiode gebunden sind.
- Balkenperiode kann vom Skript von einer Sekunde (1./60)
bis zu einer Woche (7*24*60 = 10080) eingestellt werden. Balkenperioden über 1 werden auf ein Vielfaches von Minuten gerundet. Der [Period] Schieberegler bewegt sich in festen Schritten, die den
Standard-Balkenperioden der Handelsplattformen entsprechen; das direkte Setzen von Balkenperiode platziert den Schieberegler an der Position, die dem Wert der Balkenperiode am nächsten kommt. Wenn Balkenperiode
direkt im Skript gesetzt wird, ist der Schieberegler gesperrt.
- Im [Test]-Modus basiert die Balkenerzeugung auf den
UTC-Zeitstempeln von Ticks in den historischen Preisdaten.
Alle Ticks, die in die Balkenperiode fallen, tragen zum Balken bei. Zum Beispiel enthält ein
10-Minuten-Balken, der um 12:00 endet, alle Ticks mit Zeitstempeln von
11:50:00.000 bis 11:59:59.999. Wenn der Tick mehrere Preise abdeckt, sollte sein Zeitstempel
vom Schlusskurs des Ticks sein. Wenn historische Zeitstempel vom Eröffnungskurs oder
vom Mittelkurs des Ticks stammen, können Sie die TickFix
Variable zur Anpassung verwenden. Im [Trade]-Modus basiert die Balkenerzeugung auf UTC-Zeit von der PC-Uhr, nicht auf der Serverzeit des Brokers, um Synchronisationsprobleme durch Verbindungsunterbrechungen und Internet-Lag zu vermeiden.
- Bei kurzen Balkenperioden wird empfohlen, das TICKS-Flag zu setzen und hochauflösende .t1 Preisdaten zu verwenden. Dies ist bei Balkenperioden von weniger als einer Minute obligatorisch. Dazu setzen Sie History auf ".t1" und Balkenperiode auf die Anzahl der Sekunden geteilt durch 60, z.B. Balkenperiode = 5./60. für 5 Sekunden. Achten Sie auf das Dezimalzeichen; 5/60 würde als int betrachtet und somit zu 0 ausgewertet werden. Für extrem kurze Balkenperioden stellen Sie sicher, dass TickTime immer kleiner als eine Balkenperiode ist.
- Für Balkenperioden länger als eine Woche, setzen Sie Balkenperiode = 1440 und verwenden Sie Zeitrahmen,
um monatliche oder quartalsweise Zeitperioden einzurichten.
- Balkenperiode und Balkenoffset beeinflussen die
Abtastung der Preisdaten. Daher müssen sie im ersten Durchlauf
vor der Auswahl des
Assets gesetzt werden, dürfen danach nicht mehr geändert werden und dürfen nicht
optimiert werden. Zeitrahmen und FrameOffset können jederzeit gesetzt werden und können ohne Einschränkungen optimiert werden.
- Historische Preisdaten sollten eine ausreichende Auflösung haben, damit
jede Balkenperiode während der Marktzeiten mindestens einen historischen Tick enthält. Wenn Balkenoffset ungleich null ist, benötigen historische
und Rückblickdaten entsprechend höhere Auflösung. Zum Beispiel sollten bei einer
täglichen Balkenperiode Preisdaten mindestens eine 10-Minuten-Auflösung haben, wenn
Balkenoffset gesetzt ist, sodass Balken um 15:40 enden.
- Wenn Balkenoffset 0 ist, beginnen und enden Balken an Tag/Stunden-Grenzen.
Um zu verhindern, dass tägliche Balken um 00:00
Mittag beginnen und enden (und somit die Preise vom vorherigen, nicht
vom aktuellen Tag reflektieren), hat Balkenoffset einen
Standardwert von 940 (entspricht 15:40) bei täglichen und
wöchentlichen Balken. Alternativ setzen Sie Balkenoffset auf die
Uhrzeit, zu der das Skript handeln soll; zum Beispiel, Balkenoffset
= 60*9+30; für Handel bei Markteröffnung um 9:30. Mit dem Standard-Balken
offset enden wöchentliche Balken am Freitag um 15:40.
- Alle Zeitzoneneinstellungen gehen von UTC-Zeit für die Preishistorie aus. Wenn die Preishistorie in lokaler Zeit ist und die Tageszeit für das System relevant ist,
entweder konvertieren Sie die Zeitstempel in UTC oder verwenden Sie die BarZone.
Zeitrahmen vs. Balkenperiode:
- Zeitrahmen ist nicht dasselbe
wie eine längere Balkenperiode. Die Unterschiede sind unten aufgeführt. Wenn mehrere Zeitrahmen oder Zeitoffsets nicht erforderlich sind, setzen Sie den Zeitrahmen nur mit Balkenperiode. Dies verwendet die geringstmögliche Anzahl von Balken und führt zu der höchsten Geschwindigkeit beim Testen und Trainieren.
- Balkenperiode bestimmt das Balkendiagramm und die Häufigkeit der
run-Funktion, während Zeitrahmen die
Preis-Funktionen, das Verschieben von
Daten
Serien und die Balken, bei denen
advise und trade-Aufrufe ausgeführt werden, beeinflusst.
- Befehle zum Ein- oder Aussteigen von Trades in der run-Funktion werden nur ausgeführt, wenn der
Zeitrahmen am aktuellen Balken beendet ist. Aber Trade-Einträge,
Stopps oder Gewinnziele werden bei jeder Balkenperiode beobachtet. Die
run-Funktion selbst wird bei jeder Balkenperiode ausgeführt,
aber die frame-Funktion kann verwendet werden, um
die Codeausführung auf das Ende des aktuellen Zeitrahmens zu beschränken.
-
Zeitrahmen ist normalerweise nicht
synchronisiert an Tag/Stunden-Grenzen, während Balkenperiode
dies ist. Um Zeitrahmen an Tage oder Stunden zu synchronisieren, verwenden Sie die
frameSync() Funktion. Um tägliche Zeitrahmen an eine bestimmte Marktstunde in einer bestimmten Zeitzone auszurichten, verwenden Sie die AssetFrame
Variable.
- Zeitrahmen hat keine Wirkung auf Variablen in Balkenperiodeneinheiten, z.B.
LookBack, UnstablePeriod, LifeTime, oder
WaitTime. Um diese Zeitperioden zu verlängern, multiplizieren Sie den Variablenwert mit der Anzahl der Balken pro Zeitrahmen.
- Zeitrahmen beeinflusst keine Indikatoren, die keine
Daten Serien verwenden, sondern direkt die aktuelle Asset-Preis-Serie. Dies ist in der Beschreibung des Indikators erwähnt.
- Rekursive Indikatoren aus der TA-Lib wie EMA oder ATR erfordern, dass
UnstablePeriod an ihren maximalen
Zeitrahmen angepasst wird.
Beispiele:
#define H24 (1440/Balkenperiode)
#define H4 (240/Balkenperiode)
#define H1 (60/Balkenperiode)
...
Balkenperiode = 60; // 1 Stunde (60 Minuten) Balken
...
// erstelle eine 4-Stunden-Preisserie ///////////////////////////////////
Zehitrahmen = H4;
vars PriceH4 = series(price());
// erstelle eine 24-Stunden-Preisserie /////////////////////////////////
Zehitrahmen = H24;
vars PriceH24 = series(price());
// überspringe Balken außerhalb der Marktzeiten
static int SkippedBars = 0; if(!market(ET,0)) { Zehitrahmen = 0; SkippedBars--; // zähle negative Anzahl der Balken außerhalb der Marktzeiten } else if(Zehitrahmen == 0) { Zehitrahmen = SkippedBars; SkippedBars = 0; } else Zehitrahmen = 1; vars PriceInMarketHours = series(price());
// erstelle eine tägliche Preisserie (entspricht AssetZone) ////////
static int BarsPerDay = 0;
if(hour(0) < hour(1)) { // Tageswechsel
Zehitrahmen = BarsPerDay; // beende den Rahmen
BarsPerDay = 0;
} else {
Zehitrahmen = 0; // innerhalb des Rahmens
BarsPerDay--; // zähle negative Anzahl der Balken pro Tag
}
vars PriceD1 = series(price());
// Alternative: eine auf Mitternacht ausgerichtete Preisserie unter Verwendung von frameSync()
StartWeek = 10000;
Zehitrahmen = frameSync(H24);
vars PriceD1 = series(price());
// zurück zu 1-Stunden-Zeitrahmen
Zehitrahmen = 1;
...
Siehe auch:
Balken und Kerzen, NumBars,
SampleOffset, LookBack, dayHigh, Date, Balkenmodus, AssetFrame, frameSync, bar
► neueste Version online
|