Schlüsselworte
AddOutput()
AddLine()
Beschreibung
Mit der Methode Add() werden dem Chart Plot - bzw. Line-Objekte hinzugefügt. Wenn mit Add() ein neues Plot-Objekt hinzugefügt wird, wird automatisch auch eine Datenserie vom Typ DataSeries erzeugt, die diesem Plot zugeordnet ist. Auf diese Datenserie kann über die Value-Collection zugegriffen werden. Add() kann in der OnInit() Methode und in der OnCalculate() Methode verwendet werden..
Parameter
plot – ein OutputDescriptor Objekt line – ein LevelLine Objekt
Verwendung
AddOutput(new OutputDescriptor(Color.FromKnownColor(KnownColor.Black), "MyPlot1"));
Add(LevelLine line)
Beispiel
#region Usings
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Xml;
using System.Xml.Serialization;
using AgenaTrader.API;
using AgenaTrader.Custom;
using AgenaTrader.Plugins;
using AgenaTrader.Helper;
#endregion
namespace AgenaTrader.UserCode
{
[Description("Enter the description for the new custom indicator here")]
public class MyIndicator : UserIndicator
{
protected override void OnInit()
{
// 2 blaue Linien in den Chart legen, eine bei 70 und eine bei 30
Add(new LevelLine(Color.Blue, 70, "UpperLine"));
Add(new LevelLine(Color.Blue, 30, "LowerLine"));
// 2 Plots hinzufügen
Add(new OutputDescriptor(Color.Red, "myFastSMA"));
Add(new OutputDescriptor(Color.Blue, "mySlowSMA"));
}
protected override void OnCalculate()
{
//Mit der Set-Methode wird der Wert für den aktuellen Bar zugewiesen.
FastSMA.Set( SMA(8)[0] ); // ist identisch mit Values[0].Set( SMA(8)[0] );
SlowSMA.Set( SMA(50)[0] );// ist identisch mit Values[1].Set( SMA(50)[0] );
}
/ Hier werden 2 Datenserien zur Verfügung gestellt.
// Zur Darstellung des Indikators auf dem Chart sind diese nicht notwendig.
// Mit Hilfe dieser Datenserien kann von anderen Indikatoren aus auf diesen Indikator
// zugegriffen werden.
// Z.B. mit double d = MeinIndikator.FastSMA[0] - MeinIndikator.SlowSMA[0];
[Browsable(false)]
[XmlIgnore()]
public DataSeries FastSMA
{
get { return Outputs[0]; }
}
[Browsable(false)]
[XmlIgnore()]
public DataSeries SlowSMA
{
get { return Outputs[1]; }
}
}
}
AllowRemovalOfChartDrawings
Beschreibung
AllowRemovalOfDrawObjects ist eine Eigenschaft von Indikatoren, die in der Methode OnInit() gesetzt werden kann..
AllowRemovalOfChartDrawings = true
Zeichenobjekte (DrawObjects), die von einem Indikator bzw. einer Strategie in einen Chart gezeichnet wurden, können manuell aus dem Chart entfernt werden.
AllowRemovalOfChartDrawings = false (default)
Zeichenobjekte (DrawObjects), die von einem Indikator bzw. einer Strategie in einen Chart gezeichnet wurden, können nicht manuell aus dem Chart entfernt werden. Sie werden erst dann vom Chart entfernt, wenn auch der Indikator bzw. die Strategie entfernt wird.
Die Eigenschaft kann abgefragt werden, und liefert "true" bzw. "false".
Verwendung
AllowRemovalOfChartDrawings
Beispiel
protected override void OnInit()
{
Add(new OutputDescriptor(Color.FromKnownColor(KnownColor.Red), "MyPlot1"));
//DrawObjects können aus dem Chart manuell entfernt werden
AllowRemovalOfChartDrawings = true;
}
Attribute
Attribute sind Bestandteil der Programmiersprache C#. In eigenen AgenaScript-Indikatoren bzw. Strategien können Attribute genauso verwendet werden, wie es auch in C# selbst möglich ist. Informationen über Die Verwendung von Attributen finden Sie u.a. hier:
http://msdn.microsoft.com/de-de/library/z0w1kczw%28v=vs.80%29.aspx
Die in AgenaScript am häufigsten verwendeten Attribute sind:
Browsable
Browsable ist ein Attribute in AgenaScript.
In AgenaScript werden öffentliche Variablen (public variables) zum einen für die Eingabe von Parametern für Indikatoren genutzt (z.B. die Periode für einen SMA) und zum anderen für die Ausgabe von Ergebnissen einer Berechnung innerhalb eines Indikators (z.B. Datenserien). Variablen, die der Eingabe von Parametern dienen, müssen im Eigenschaften-Dialog angezeigt werden. Datenserien hingegen nicht.
Eine public Variable, die mit dem Attribut Browsable=false gekennzeichnet wurde, wird nicht im Eigenschaftendialog von AgenaTrader angezeigt.
Standardmäßig wird Browsable = true angenommen. Daher kann bei einer Variable, die einen Eingabeparameter beinhaltet, das Attribut Browsable auch weggelassen weren.
Beispiel für einen Parameter:
Der Parameter soll im Eigenschaftsfenster angezeigt und abgefragt werden. Daher ist "Browsable = true" zu setzen oder das Attribut kann entfallen.
[Description("Numbers of bars used for calculations")]
[Category("InputParameter")]
public int Period
{
get { return period; }
set { period = Math.Max(1, value); }
}
Beispiel für eine Datenserie:
[Browsable(false)]
[DisplayName("Lower band")]
[XmlIgnore]
public DataSeries Lower
{
get { return Outputs[0]; }
}
Category
Category ist ein Attribute in AgenaScript.
Das Attribut Category gibt für einen Parameter an, unter welcher Kategorie im Eigenschaften-Dialog der Parameter erscheint.
Wenn das Attribut fehlt, wird standardmäßig die Kategorie "InputParameter" angenommen.
Das folgende Beispiel erzeugt im Eigenschaften-Dialog die neue Kategorie "My InputParameter".
[Category("My InputParameter")]
[DisplayName("Period number")]
public double _period
{
get { return _period; }
set { _period = value; }
}
Category ist ein Attribute in AgenaScript.
Das Attribut Category gibt für einen Parameter an, unter welcher Kategorie im Eigenschaften-Dialog der Parameter erscheint.
Wenn das Attribut fehlt, wird standardmäßig die Kategorie "InputParameter" angenommen.
Das folgende Beispiel erzeugt im Eigenschaften-Dialog die neue Kategorie "My InputParameter".
namespace AgenaTrader.UserCode
{
[Description("Description what this indicator doing.")]
[Category("My Package")]
public class MyHolyGrail_Indicator : UserIndicator
{
/* your code here */
}
}
ConditionalValue
ConditionalValue ist ein Attribute in AgenaScript.
Normalerweise werden im ConditionEscort für Vergleiche die von Indikatoren bereitgestellten Datenserien (DataSeries) benutzt. Beispielsweise wird geprüft, ob ein gleitender Durchschnitt über oder unter einem bestimmten Kurswert liegt. Ein Indikator kann aber auch Werte als Ergebnis haben, die keine Datenserien sind, also z.B. Werte vom Typ int, double, char, boolean, string usw.
Um diese Werte im Scanner oder im Condition-Escort nutzen zu können, müssen sie mit dem Attribut "ConditionalValue" gekennzeichnet sein.
[Browsable(false)]
[XmlIgnore]
[ConditionalValue]
public int PublicVariable
{
get
{
Update();
return _internVariable;
}
}
Description
Description ist ein Attribute in AgenaScript.
Das Attribute Description wird In AgenaScript für die Klasse und für public-Variablen verwendet.
Als Attribut der Klasse ist der Text eine Beschreibung der Funktion des gesamten Indikators (bzw. der Strategie usw.)
[Description("Displays the tick count of a bar.")]
public class TickCounter : UserIndicator
{
As an attribute of a public variable, the text is a description of the function of the parameter.
[Description("Number of standard deviations")]
[DisplayName("# of std. dev.")]
public double NumStdDev
{
get { return numStdDev; }
set { numStdDev = Math.Max(0, value); }
}
}
Die Beschreibungen werden jeweils im Eigenschaften-Dialog angezeigt.
DisplayName
DisplayName ist ein Attribute in AgenaScript.
Das Attribute DisplayName legt den Text fest, der im Eigenschaften-Dialog für den Parameter verwendet werden soll.
Wird dieses Attribut nicht angegeben, wird der Name der public Variable verwendet.
[Description("Number of standard deviations")]
[DisplayName("# of std. dev.")]
public double NumStdDev
{
get { return numStdDev; }
set { numStdDev = Math.Max(0, value); }
}
TimeFrameRequirements
TimeFrameRequirements ist ein Attribute in AgenaScript.
Sollen in einem AgenaScript Daten verschiedener Zeiteinheiten verwendet werden, ist der Klasse das Attribut "TimeFrameRequirements" voranzustellen. Es können hier auch mehrere Zeiteinheiten angegeben werden:
[TimeFrameRequirements("1 day")]
[TimeFrameRequirements("15 minutes", "1 day", "1 week")]
Es werden immer so viele Daten der anderen Zeiteinheit(en) bereitgestellt, wie auch Kerzen im Chart geladen sind. Sind in einem 5 Minuten-Chart beispielsweise 500 Kerzen geladen, werden auch 500 Kerzen einer anderen Zeiteinheit geladen. Im Beispiel oben also 500 Tageskerzen bzw. im 2. Beispiel 500 15-Minuen-Kerzen, 500 Tageskerzen und 500 Wochenkerzen. Die Datenmengen können schnell sehr groß werden. Das Attribut ist daher mit Umsicht zu verwenden.
siehe auch MultiBars.
Wichtig:
Wenn in einer Klasse ein anderer Indikator verwendet wird, der seinerseits eine (oder mehrere) sekundäre Zeiteinheit(en) erfordert, muß für die aufrufende Klasse ebenfalls das Attribut "TimeFrameRequirements" angegeben werden. Ein Beispiel hierzu siehe unter GetDayBar.
XMLIgnore
XML ignore st ein Attribute in AgenaScript.
AgenaTrader speichert in einem Template u.a. auch alle Parameter-Einstellungen eines Indikators. Die Template-Files liegen im XML-Format vor. Um zu verhindern, dass ein Parameter als Teil eines Templates gespeichert wird, kann das Attribut "XmlIgnore" angegeben werden.
Um Parameter in einem XML-File speichern zu können, müssen die Werte zuvor serialisiert werden. In den meisten Fällen, d.h. für alle gängigen Variablentypen geschieht dies durch AgenaTrader automatisch. Selbst definierte Datentypen können jedoch nicht automatisch serialisiert werden. Der Programmierer muß selbst für die korrekte Serialisierung sorgen.
Im Beispiel werden Farbe und Schriftart als Parameter eines Indikators verwendet. In AgenaTrader existieren für die Serialisierung von Farb- und Schriftart-Informationen 2 Methoden (TextColorSerialize und TextFontSerialize), die die Serialisierung übernehmen. Die beiden Parameter "TextColor" und "TextFont" sind daher mit dem Attribute "XmlIgnore" zu kennzeichnen.
private Color _textColor = Color.Blue;
private Font _textFont = new Font("Arial", 12, FontStyle.Bold);
[XmlIgnore]
[Description("Textcolor")]
public Color TextColor
{
get { return _textColor; }
set { _textColor = value; }
}
[Browsable(false)]
public string TextColorSerialize
{
get { return SerializableColor.ToString(_textColor); }
set { _textColor = SerializableColor.FromString(value); }
}
[XmlIgnore()]
[Description("TextFont")]
public Font TextFont
{
get { return _textFont; }
set { _textFont = value; }
}
[Browsable(false)]
public string TextFontSerialize
{
get { return SerializableFont.ToString(_textFont); }
set { _textFont = SerializableFont.FromString(value); }
}
CalculateOnClosedBar
Beschreibung
Die Eigenschaft "CalculateOnClosedBar" legt fest, für welche Ereignisse AgenaTrader die Methode OnCalculate() aufrufen soll.
CalculateOnClosedBar = true
OnCalculate() wird aufgerufen, wenn ein Bar beendet ist, und der nächste hereinkommende Tick einen neuen Bar entstehen läßt.
CalculateOnClosedBar = false
OnCalculate() wird für jeden neu hereinkommenden Tick aufgerufen. Achtung bei älterer Hardware: dies führt bei sehr liquiden Werten zu einer erhöhten Rechnerbelastung. Die Eigenschaft kann im Script abgefragt werden und liefert einen Wert vom Typ Boolean (true bzw. false). CalculateOnClosedBar kann sowohl in OnInit() aals auch in OnCalculate() eingesetzt werden.. OnCalculate wird für historische Daten immer nur für den Schlusskurs eines jeden Bars aufgerufen, auch wenn CalculateOnClosedBar=false gesetzt ist. Wird ein Indikator von einem anderen Indikator aufgerufen, so wird die Eigenschaft CalculateOnClosedBar des aufgerufenen Indikators vom aufrufenden Indikator überschrieben.
Verwendung
CalculateOnClosedBar
Weitere Informationen
Siehe auch die Beschreibung zu Bars.
Beispiel
protected override void OnInit()
{
//Indikatorberechnung nur, wenn ein Bar fertig ausgeprägt ist
CalculateOnClosedBar = true;
}
Chart
Chart ist ein Objekt, über welches der lesende Zugriff auf verschiedene Eigenschaften des Charts möglich ist.
Die wichtigsten Eigenschaften sind:
- ChartFontColor, BackColor
- UpColor, DownColor
- Font
- BarMarginLeft, BarMarginRight
- BarSpace, BarWidth
- BarsPainted
- FirstBarPainted, LastBarPainted
- BarsVisible
- FirstBarVisible, LastBarVisible
- GetXByBarIdx, GetYByValue
Zur Verwendung der wichtigsten Eigenschaften von Chart siehe Beispiel PlotSample.
BarsPainted und BarsVisible:
BarsPainted enthält die Anzahl der Bars, die ein Chart von seinem linken Rand zu seinem rechten Rand mit der momentanen Breite der
Kerzen und dem Abstand der Kerzen zueinander anzeigen könnte.
BarsVisible enthält die Anzahl der Bars, die tatsächlich zu sehen sind.
FirstBarPainted und FirstBarVisible:
FirstBarPainted enthält die Nummer des Bars, der am linken Rand des Charts angezeigt werden würde.
FirstBarVisible enthält die Nummer des Bars, der tatsächlich als erster Bar links im Chart angezeigt wird.
Beispiel: der Chart ist so verschoben, dass der erste Bar des Charts erst in der Mitte des Charts angezeigt wird.
FirstBarPainted wäre in diesem Fall negativ.
FirstBarVisible wäre 0.
LastBarPainted und LastBarVisible:
LastBarPainted enthält die Nummer des Bars, der am rechten Rand des Charts angezeigt werden würde.
LastBarVisible enthält die Nummer des Bars, der tatsächlich als letzter Bar rechts im Chart angezeigt wird.
Beispiel: der Chart ist so verschoben, dass der letzte Bar des Charts bereits in der Mitte des Charts angezeigt wird.
LastBarPainted wäre in diesem Fall größer als Bars.Count.
LastBarVisible wäre in Bars.Count -1.
ClearTraceWindow()
Beschreibung
Die Methode ClearTraceWindow() leert das Output-Fenster. Die Methode kann sowohl in OnInit() als auch in OnCalculate() eingesetzt werden. Das OutputWindow beinhaltet alle Ausgaben, die mit dem Print() -Befehl erstellt wurden. Der Einsatz des OutputWindows ist eine sehr gute Möglichkeit für Code-Debugging.
Verwendung
ClearTraceWindow()
Parameter
keiner
Rückgabewert
keiner
Beispiel
protected override void OnInit()
{
//Inhalt des OutputWindow löschen
ClearTraceWindow();
}
Colors
In AgenaSript stehen die folgenden Befehle für Farbfestlegungen bzw. -änderungen im Chart zur Verfügung:
BackColor Hintergrundfarbe des Kurs-Charts
BackColorAll Hintergrundfarbe des Kurs-Charts und aller Indikator-Panels
Chart.UpColor Farbe für Up Ticks (Up Bars) Chart.DownColor Farbe für Down Ticks (Down Bars)
Für jeden Bar werden seine Farben in folgenden Dataserien gespeichert. Wird in diese Datenserien geschrieben, ändern sich die Farben des referenzierten Bars.
BarColor Farbe eines Bars
BackColor
Beschreibung
BackColor ändert die Hintergrundfarbe eines Bars bzw. gibt die aktuelle Hintergrundfarbe eines Bars zurück.
Siehe auch Colors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color
Verwendung
BackColor
Beispiele
// immer montags Bar-Hintergrundfarbe auf Blau ändern
if (Time[0].DayOfWeek == DayOfWeek.Monday)
BackColor = Color.Blue;
// Ändern der Bar-Hintergrundfarbe in Abhängigkeit von einem gl. Durchschnitt
// Kurs über SMA(14) --> Grün
// Kurs unter SMA(14) --> Maroon
BackColor = SMA(14)[0] >= Close[0] ? Color.Maroon : Color.LimeGreen;
BackColorAll
Beschreibung
BackColorAll ändert die Hintergrundfarbe eines Bars im Chartfenster und in allen Subcharts bzw. gibt die aktuelle Hintergrundfarbe eines Bars zurück. Siehe auch Colors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color
Verwendung
BackColorAll
Beispiel
// immer montags Bar-Hintergrundfarbe auf Blau ändern
if (Time[0].DayOfWeek == DayOfWeek.Monday)
BackColorAll = Color.Blue;
BackColorAllSeries
Beschreibung
BackColorAllSeries ist eine Datenserie, die für jeden Bar die Hintergrundfarbe speichert. Im Unterschied zu BackColorSeries wird die Hinterrundfarbe der Subcharts mit berücksichtigt.
Siehe auch Colors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color
int barsAgo
Verwendung
BackColorAllSeries
BackColorAllSeries[int barsAgo]
Bei Verwendung der Methode mit einem Index [int barsAgo] wird die Hintergrundfarbe für den referenzierten Bar geändert bzw. ausgegeben.
Beispiel
siehe BackColorSeries.
BackColorSeries
Beschreibung
BackColorSeries ist eine Datenserie, die für jeden Bar die Hintergrundfarbe speichert. Soll die Hintergrundfarbe von Subcharts mit berücksichtigt werden, ist "BackColorAllSeries" zu verwenden.
Siehe auch Colors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color
int barsAgo
Verwendung
BackColorSeries
BackColorSeries[int barsAgo]
ei Verwendung der Methode mit einem Index [int barsAgo] wird die Hintergrundfarbe für den referenzierten Bar geändert bzw. ausgegeben.
Beispiele
// Welche Hintergrundfarbe hat der aktuelle Bar? (im ARGB-Format)
Print (BackColorSeries[0]);
// Hintergrundfarbe des aktuellen Bars auf Blau setzen
// Dies ist identisch mit BackColor = Color.Blue
BackColorSeries[3] = Color.Blue;
// Hintergrundfarbe des vorhergehenden Bars auf Grün setzen
BackColorSeries[1] = Color.Green;
BarColor
Beschreibung
BarColor ändert die Farbe eines Bars
Siehe auch Colors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color
Verwendung
BarColor
Beispiel
// Wenn der Schlusskurs über dem SMA(14) liegt, den Bar orange einfärben
if (Close[0] > SMA(14)[0]) BarColor = Color.Orange;
BarColorSeries
Beschreibung
BarColorSeries ist eine Datenserie, die für jeden Bar die Farbe speichert.
Siehe auchColors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color
int barsAgo
Verwendung
BarColorSeries
BarColorSeries[int barsAgo]
Bei Verwendung der Methode mit einem Index [int barsAgo] wird die Farbe für den referenzierten Bar geändert bzw. ausgegeben.
Achtung: Es wird nur die Farbe eines Bars zurückgegeben, dessen Farbe vorher explizit verändert wurde. In allen anderen Fällen wird Color.Empty zurückgegeben.
Beispiel
protected override void OnCalculate()
{
if (ProcessingBarIndex == Bars.Count-1-(CalculateOnClosedBar?1:0))
{
// Farbe des aktuellen Bars auf Blau setzen
// Dies ist identisch mit BarColor = Color.Blue
BarColorSeries[0] = Color.Blue;
// Farbe des vorhergehenden Bars auf Grün setzen
BarColorSeries[1] = Color.Orange;
// Farbe des 3. Bars auf Gelb setzen
BarColorSeries[2] = Color.Yellow;
}
}
CandleOutlineColor
Beschreibung
CandleOutlineColor ändert die Randfarbe (incl. "Dochte" und "Lunte") eines Bars.
Wenn die Farbe eines Bars mit BarColor geändert wird, und die Umrandung des Bars wurde nicht mit CandleOutlineColor verändert, wird die Randfarbe auf die Farbe des Bars angepasst.
Siehe auchColors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color
Verwendung
CandleOutlineColor
Beispiel
if (SMA(14)[0] > SMA(200)[0])
CandleOutlineColor = Color.LimeGreen;
else
CandleOutlineColor = Color.Red;
CandleOutlineColorSeries
Beschreibung
CandleOutlineColorSeries ist eine Datenserie, die für jeden Bar die Randfarbe speichert.
Siehe auch Colors, BarColor, BackColor, BackColorAll, BarColorSeries, BackColorAll, CandleOutlineColor.
Parameter
ein Color-Objekt vom Typ public struct Color int barsAgo
Verwendung
CandleOutlineColorSeries
CandleOutlineColorSeries[int barsAgo]
Bei Verwendung der Methode mit einem Index [int barsAgo] wird die Randfarbe für den referenzierten Bar ausgegeben.
Achtung: Es wird nur die RandFarbe eines Bars zurückgegeben, dessen Randfarbe vorher explizit verändert wurde. In allen anderen Fällen wird Color.Empty zurückgegeben.
Beispiel
// Randfarbe des aktuellen Bars auf Blau setzen
CandleOutlineColorSeries[0] = Color.Blue;
// Randfarbe auf Chart-default zurücksetzen
CandleOutlineColorSeries[0] = Color.Empty;
CrossAbove()
Beschreibung
Mit der Methode CrossAbove() kann geprüft werden, ob es innerhalb einer festgelegten Anzahl von Perioden eine Überkreuzung zweier Werte von unten nach oben gab. Die Werte können dabei der Kurs, ein Indikator, jede beliebige Datenserie oder ein fester Wert sein.
Siehe auch CrossAbove(), CrossBelow(), IsSerieRising(), IsSerieFalling().
Verwendung
CrossAbove(IDataSeries series1, double value, int lookBackPeriod)
CrossAbove(IDataSeries series1, IDataSeries series2, int lookBackPeriod)
Rückgabewert
true eine Überkreuzung hat stattgefunden false eine Überkreuzung hat nicht stattgefunden
Parameter
lookBackPeriod | Anzahl der Bars innerhalb derer nach dem Aufterten einer Überkreuzung gesucht wird |
series1 und series2 | eine Datenserie, wie z.B. ein Indikator, Close, High o.ä |
value | ein fester Wert vom Typ double |
Beispiele
// Hinweis ausgeben, wenn der SMA(20) über SMA(50) kreuzt
if (CrossAbove(SMA(20), SMA(50), 1))
Print("SMA(20) has risen above SMA(50)!");
// Hinweis ausgeben, wenn der SMA(20) über den Wert 40 steigt
if (CrossAbove(SMA(20), 40, 1))
Print("SMA(20) has risen above 40!");
// Hinweis auf Long-Einstieg ausgeben, wenn innerhalb der letzten 5 Bars
// der SMA(20) über SMA(50) kreuzt und der Kurs innerhalb des letzten Bars gestiegen ist
if (CrossAbove(SMA(20), SMA(50), 1) && Close[0] > Close[1])
Print("Long entry !!!");
CrossBelow()
Beschreibung
Mit der Methode CrossBelow() kann geprüft werden, ob es innerhalb einer festgelegten Anzahl von Perioden eine Überkreuzung zweier Werte von oben nach unten gab. Die Werte können dabei der Kurs, ein Indikator, jede beliebige Datenserie oder ein fester Wert sein.
Siehe auch CrossAbove(), CrossBelow(), IsSerieRising(), IsSerieFalling().
Verwendung
CrossBelow(IDataSeries series1, double value, int lookBackPeriod)
CrossBelow(IDataSeries series1, IDataSeries series2, int lookBackPeriod)
Rückgabewert
true eine Überkreuzung hat stattgefunden false eine Überkreuzung hat nicht stattgefunden
Parameter
lookBackPeriod | Anzahl der Bars innerhalb derer nach dem Aufterten einer Überkreuzung gesucht wird |
series1 und series2 | eine Datenserie, wie z.B. ein Indikator, Close, High o |
value | ein fester Wert vom Typ double |
Beispiele
// Hinweis ausgeben, wenn der SMA(20) unter SMA(50) kreuzt
if (CrossBelow(SMA(20), SMA(50), 1))
Print("SMA(20) has fallen below SMA(50)!");
// Hinweis ausgeben, wenn der SMA(20) unter den Wert 40 fällt
if (CrossBelow(SMA(20), 40, 1))
Print("SMA(20) has fallen below 40!");
// Hinweis auf Short-Einstieg ausgeben, wenn innerhalb der letzten 5 Bars
// der SMA(20) unter SMA(50) kreuzt und der Kurs innerhalb des letzten Bars gefallen ist.
if (CrossBelow(SMA(20), SMA(50), 1) && Close[1] > Close[0])
Print("Short entry !!!");
DatafeedHistoryPeriodicity
Beschreibung
DatafeedHistoryPeriodicity ist ein Datentyp.
Definition
public enum DatafeedHistoryPeriodicity - DatafeedHistoryPeriodicity.Tick - DatafeedHistoryPeriodicity.Second - DatafeedHistoryPeriodicity.Minute - DatafeedHistoryPeriodicity.Hour - DatafeedHistoryPeriodicity.Day - DatafeedHistoryPeriodicity.Week - DatafeedHistoryPeriodicity.Month - DatafeedHistoryPeriodicity.Volume - DatafeedHistoryPeriodicity.Range - DatafeedHistoryPeriodicity.Quarter - DatafeedHistoryPeriodicity.Year - DatafeedHistoryPeriodicity.HeikinAshi - DatafeedHistoryPeriodicity.Renko - DatafeedHistoryPeriodicity.LineBreak - DatafeedHistoryPeriodicity.Kagi - DatafeedHistoryPeriodicity.PointAndFigure - DatafeedHistoryPeriodicity.Custom
Siehe TimeFrame, TimeFrames.
DataSeries
Beschreibung
Datenserien (DataSeries) sind eine sehr komfortable und sehr mächtige Möglichkeit, zusätzliche Werte für jeden einzelnen Bar zu speichern. Z.B. wird bei der Berechnung eines gleitenden Durchschnitts jedem Bar der für diesen Bar errechnete Wert zugeordnet. Eine Datenserie ist ein Array, welches exakt so viele Elemente enthält, wie Bars im Chart angezeigt werden. AgenaTrader sorgt dafür, dass die Datenserien zu jedem Zeitpunkt korrekt mit den Bars synchronisiert sind. Datenserien werden exakt so benutzt, wie z.B. die Serien Close oder Time. Sie können deshalb natürlich auch als Eingangsdaten (Input) für weitere Indikatoren verwendet werden. In der Tabelle ist zu sehen, dass 4 neue Datenserien (farbig markiert) angelegt worden sind. Jede dieser Datenserien kann genau einen Wert eines speziellen Datentyps (int, bool, string, DateTime) je Bar aufnehmen. Die Indizierung mit barsAgo ist dabei identisch mit den vom System bereitgestellten Datenserien..
In AgenaTrader verwendbare Datenserien
Darüberhinaus gibt es die Datenserie ColorSeries, die jedoch nur für interne Zwecke bestimmt ist und nicht direkt verwendet werden sollte. Um die Farbe von Plots zu ändern, verwenden Sie bitte PlotColors.
Set(), Reset() und ContainsValue()
Jede Datenserie verfügt über die Methoden Set(), Reset() und ContainsValue(). Mit Set(value) bzw. Set(int barsAgo, value) werden Werte in die Datenserie an der aktuellen Position bzw. an der Position "barsAgo" übernommen. Mit Reset() bzw. Reset(int barsAgo) kann an der aktuellen Position bzw. an der Position "barsAgo" ein Wert aus der Datenserie gelöscht werden, d.h. an dieser Position existiert kein gültiger Wert mehr. Die Programmierung mit Hilfe der Reset-Methode kann eine ansonsten sehr komplexe Logik spürbar vereinfachen.Insbesondere bei Bool-Serien, die nur true oder false enthalten können, ist diese Eigenschaft extrem hilfreich. Mit ContainsValue() kann geprüft werden, ob die Datenserie an einer bestimmten Position einen gültigen Wert enthält.
Informationen zu den einzelnen Datentypen
http://msdn.microsoft.com/de-de/library/s1ax56ch%28v=vs.80%29.aspx
BoolSeries
Beschreibung
BoolSeries ist eine Datenserie, die für jeden Bar einen boolschen Wert (true oder false) aufnehmen kann. Die Anzahl der Elemente dieser Serie entspricht genau der Anzahl der Bars im Chart.
Neue BoolSeries anlegen
Im Bereich für die Deklaration von Variablen eine neue Variable anlegen:
//Variablendeklaration
private BoolSeries myBoolSeries;
In der Methode OnInit()dieser Variable eine neue Instanz von BoolSeries zuweisen:
protected override void OnInit()
{
myBoolSeries = new BoolSeries(this);
CalculateOnClosedBar = true;
}
Werte zuweisen
Der Datenserie an aktueller Position einen Wert zuweisen:
myBoolSeries.Set(true);
Einen Wert in der Vergangenheit in die Datenserie schreiben:
myBoolSeries.Set(int barsAgo, bool Value);
Werte löschen
Den aktuellen Wert aus der Datenserie entfernen:
myBoolSeries.Reset();
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myBoolSeries.Reset(int barsAgo);
Werte auf Gültigkeit prüfen
myBoolSeries.ContainsValue(int barsAgo);
Wert auslesen
Print ("Für den Bar von " + Time[0] + " ist der Wert der Datenserie: " + myBoolSeries[0]);
Beispiel
protected override void OnCalculate()
{
if (Close[0] > Open[0])
myBoolSeries.Set(true);
else
myBoolSeries.Set(false);
}
DataSeries
Beschreibung
DataSeries ist eine DataSeries die für jeden Bar einen double-Wert aufnehmen kann. Die Anzahl der Elemente dieser Serie entspricht genau der Anzahl der Bars im Chart.
Datenserien für double-Werte sind die für Indikatoren am häufigsten genutzen Datenserien.
Neue DatenSerie anlegen
Im Bereich für die Deklaration von Variablen eine neue Variable anlegen:
//Variablendeklaration
private DataSeries myDataSeries;
In der Methode OnInit() dieser Variable eine neue Instanz von DataSeries zuweisen:
protected override void OnInit()
{
myDataSeries = new DataSeries(this);
CalculateOnClosedBar = true;
}
Werte zuweisen
Der Datenserie an aktueller Position einen Wert zuweisen:
myDataSeries.Set(Bars[0].Close);
Einen Wert in der Vergangenheit in die Datenserie schreiben:
myDataSeries.Set(int barsAgo, double Value);
Werte löschen
Den aktuellen Wert aus der Datenserie entfernen:
myDataSeries.Reset();
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myDataSeries.Reset(int barsAgo);
Werte auf Gültigkeit prüfen
myDataSeries.ContainsValue(int barsAgo);
Wert auslesen
Print ("Für den Bar von " + Time[0] + "ist der Wert der Datenserie: " + myDataSeries[0]);
Beispiel
//Speichert die Spanne zwischen dem Hoch und dem Tief eines Bars
myDataSeries.Set(Math.Abs(High[0]-Low[0]));
DateTimeSeries
Beschreibung
Date time series ist eine DataSeries die für jeden Bar einen DateTime-Wert aufnehmen kann. Die Anzahl der Elemente dieser Serie entspricht genau der Anzahl der Bars im Chart.
Neue DatenSerie anlegen
Im Bereich für die Deklaration von Variablen eine neue Variable anlegen:
//Variablendeklaration
private DateTimeSeries myDataSeries;
In der Methode OnInit() dieser Variable eine neue Instanz von StringSeries zuweisen:
protected override void OnInit()
{
myDataSeries = new DateTimeSeries(this);
CalculateOnClosedBar = true;
}
Werte zuweisen
Der Datenserie an aktueller Position einen Wert zuweisen:
myDataSeries.Set(DateTime Value);
Einen Wert in der Vergangenheit in die Datenserie schreiben:
myDataSeries.Set(int barsAgo, DateTime Value);
Werte löschen
Den aktuellen Wert aus der Datenserie entfernen:
myDataSeries.Reset();
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myDataSeries.Reset(int barsAgo);
Werte auf Gültigkeit prüfen
myDataSeries.ContainsValue(int barsAgo);
Wert auslesen
Print ("Für den Bar von" + Time[0] + " ist der Wert der Datenserie: " + myDataSeries[0]);
Beispiel
//Speichert einen Versatz von -6 Stunden (Eastern Time, New York) für eine Zeitzonenumrechnung
myDataSeries.Set(Time[0].AddHours(-6));
FloatSeries
Beschreibung
FloatSeries ist eine Datenserie, die für jeden Bar einen Float-Wert aufnehmen kann. Die Anzahl der Elemente dieser Serie entspricht genau der Anzahl der Bars im Chart.
Neue DatenSerie anlegen
Im Bereich für die Deklaration von Variablen eine neue Variable anlegen:
//Variablendeklaration
private FloatSeries myDataSeries;
In der Methode OnInit() dieser Variable eine neue Instanz von StringSeries zuweisen:
protected override void OnInit()
{
myDatatSeries = new FloatSeries(this);
CalculateOnClosedBar = true;
}
Werte zuweisen
Der Datenserie an aktueller Position einen Wert zuweisen:
myDataSeries.Set(float Value);
Einen Wert in der Vergangenheit in die Datenserie schreiben:
myDataSeries.Set(int barsAgo, float Value);
Werte löschen
Den aktuellen Wert aus der Datenserie entfernen:
myDataSeries.Reset();
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myDataSeries.Reset(int barsAgo);
Werte auf Gültigkeit prüfen
myDataSeries.ContainsValue(int barsAgo);
Wert auslesen
Print ("Für den Bar von" + Time[0] + " ist der Wert der Datenserie: " + myDataSeries[0]);
Beispiel
//Speichert die Spanne zwischen dem Hoch und dem Tief eines Bars
myDataSeries.Set(Math.Abs((float) High[0] - (float) Low[0]));
IntSeries
Beschreibung
IntSeries ist eine Datenserie, die für jeden Bar einen Integer-Wert aufnehmen kann. Die Anzahl der Elemente dieser Serie entspricht genau der Anzahl der Bars im Chart.
Neue DatenSerie anlegen
Im Bereich für die Deklaration von Variablen eine neue Variable anlegen:
//Variablendeklaration
private IntSeries myDataSeries;
In der Methode OnInit() dieser Variable eine neue Instanz von StringSeries zuweisen:
protected override void OnInit()
{
myDataSeries = new IntSeries(this);
CalculateOnClosedBar = true;
}
Werte zuweisen
Der Datenserie an aktueller Position einen Wert zuweisen:
myDataSeries.Set(int Value);
Einen Wert in der Vergangenheit in die Datenserie schreiben:
myDataSeries.Set(int barsAgo, int Value);
Werte löschen
Den aktuellen Wert aus der Datenserie entfernen:
myDataSeries.Reset();
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myDataSeries.Reset(int barsAgo);
Werte auf Gültigkeit prüfen
myDataSeries.ContainsValue(int barsAgo);
Wert auslesen
Print ("Für den Bar von " + Time[0] + "ist der Wert der Datenserie"+ myDataSeries[0]);
Beispiel
//Speichert für jeden Bar die Spanne in Ticks zwischen dem Hoch und dem Tief
myDataSeries.Set((int) ((High[0] - Low[0]) / TickSize));
LongSeries
Beschreibung
LongSeries ist eine Datenserie, die für jeden Bar einen Integer-Wert aufnehmen kann. Die Anzahl der Elemente dieser Serie entspricht genau der Anzahl der Bars im Chart.
Neue DatenSerie anlegen
Im Bereich für die Deklaration von Variablen eine neue Variable anlegen:
//Variablendeklaration
private LongSeries myDataSeries;
In der Methode OnInit() dieser Variable eine neue Instanz von LongSeries zuweisen:
protected override void OnInit()
{
myDataSeries = new LongSeries(this);
CalculateOnClosedBar = true;
}
Werte zuweisen
Der Datenserie an aktueller Position einen Wert zuweisen:
myDataSeries.Set(long Value);
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myDataSeries.Set(int barsAgo, long Value);
Werte löschen
Den aktuellen Wert aus der Datenserie entfernen:
myDataSeries.Reset();
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myDataSeries.Reset(int barsAgo);
Werte auf Gültigkeit prüfen
myDataSeries.ContainsValue(int barsAgo);
Wert auslesen
Print ("Für den Bar von " + Time[0] + "ist der Wert der Datenserie: " + myDataSeries[0]);
Beispiel
//Speichert für jeden Bar die Spanne in Ticks zwischen dem Hoch und dem Tief
myDataSeries.Set((long) ((High[0] - Low[0]) / TickSize));
StringSeries
Beschreibung
StringSeries ist eine Datenserie, die für jeden Bar einen String-Wert aufnehmen kann. Die Anzahl der Elemente dieser Serie entspricht genau der Anzahl der Bars im Chart.
Neue DatenSerie anlegen
Im Bereich für die Deklaration von Variablen eine neue Variable anlegen:
//Variablendeklaration
private StringSeries myDataSeries;
In der Methode OnInit() dieser Variable eine neue Instanz von StringSeries zuweisen:
protected override void OnInit()
{
myDataSeries = new StringSeries(this);
CalculateOnClosedBar = true;
}
Werte zuweisen
Der Datenserie an aktueller Position einen Wert zuweisen:
myDataSeries.Set(string Value);
Einen Wert in der Vergangenheit in die Datenserie schreiben:
myDataSeries.Set(int barsAgo, string Value);
Werte löschen
Den aktuellen Wert aus der Datenserie entfernen:
myDataSeries.Reset();
Einen Wert in der Vergangenheit aus der Datenserie entfernen:
myDataSeries.Reset(int barsAgo);
Werte auf Gültigkeit prüfen
myDataSeries.ContainsValue(int barsAgo);
Wert auslesen
Print ("Für den Bar von " + Time[0] + "ist der Wert der Datenserie: " + myDataSeries[0]);
Beispiel
//Speichert für jeden Bar den Wochentag (Montag, Dienstag ...)
myDataSeries.Set(string.Format("{0:dddd}", Time[0]));
DayOfWeek
Beschreibung
"DayOfWeek" gibt den zu einem DateTime-Wert, wie z.B. dem Zeitstempel eines Bars, gehörenden Wochentag aus.
Darüberhinaus sind natürlich auch alle Methoden verwendbar, die in C# für DateTime-Objekte definiert sind, z.B. Day, Month, Year, Hour, Minute, Second, DayOfWeek usw.
Siehe http://msdn.microsoft.com/de-de/library/03ybds8y.aspx
Definition
Eigenschaft DayOfWeek
public enum DayOfWeek - DayOfWeek.Monday - DayOfWeek.Tuesday - DayOfWeek.Wednesday - DayOfWeek.Thursday - DayOfWeek.Friday - DayOfWeek.Saturday - DayOfWeek.Sunday
Beispiele
//Ausgabe des Wochentages für jeden Bar
Print(Time[0].DayOfWeek);
//An einem Freitag keine Trades ausführen
if (Time[0].DayOfWeek == DayOfWeek.Friday)
return;
Displacement
Beschreibung
Mit der Angabe Displacement kann eine gezeichnete Indikatorlinie auf der Zeitachse (x-Achse) nach links bzw. rechts verschoben werden. Die Eigenschaft kann im Script abgefragt werden und liefert einen int-Wert.
Blue line: Displacement = 0 (Original) Red line: Displacement = -5 Green line: Displacement = +5
Verwendung
Displacement
Parameter
int Offfset Anzahl Bars, um die der Indikator verschoben werden soll.
Beispiel
protected override void OnInit()
{
Add(new (Color.FromKnownColor(KnownColor.Red), "MyPlot1"));
//Displacement of the plot by one bar to the right
Displacement = 1;
}
Email function
Beschreibung
Override-Methode zum Senden von E-Mails.
Parameter
keine
Rückgabewert
string
Verwendung
Verwendet für komplizierte Berechnung auf einem letzten Bar
Beispiel
protected override void OnOrderExecution(IExecution execution)
{
if (execution.Order != null && execution.Order.OrderState == OrderState.Filled)
{
if (oEnter != null && execution.Name == oEnter.Name)
{
// Enter-Order gefüllt
if (_sendMail) this.SendEmail(Core.AccountManager.Core.Settings.MailDefaultFromAddress, Core.PreferenceManager.DefaultEmailAddress,
execution.Instrument.Symbol + " order " + execution.Name + " executed.", "The order for " + execution.Instrument.Name + " was executed. Invest: " + (Trade.Quantity * Trade.AvgPrice).ToString("F2"));
}
else if (oTStop != null && execution.Name == oTStop.Name)
{
OrderStatus = 0; // Trend-Stopp-Order gefüllt
if (_sendMail) this.SendEmail(Core.AccountManager.Core.Settings.MailDefaultFromAddress, Core.PreferenceManager.DefaultEmailAddress,
execution.Instrument.Symbol +" order " + execution.Name + " executed.",
execution.Instrument.Symbol +" order " + execution.Name + " executed. Profit:" + Trade.ClosedProfitLoss.ToString("F2"));
}
}
}
FirstTickOfBar
Beschreibung
FirstTickOfBar ist eine Eigenschaft, vom Type bool, die immer dann "true" ergibt, wenn der aktuell hereinkommende Tick einem neuen Bar zugeordnet wird, dieser Tick also der erste Tick eines neuen Bars ist. Die Eigenschaft kann nur sinnvoll eingesetzt werden, wenn der Indikator bzw. die Startegie im Tick-by-Tick-Modus läuft, d.h. wenn CalculateOnClosedBar = false gesetzt ist und der verwendete Datenfeed Realtime-Kurse liefert. Bei Verwendung von EoD-Daten in einem Tageschart ist FirstTickOfBar für den letzten Bar immer true. FirstTickOfBar sollte nicht außerhalb der OnCalculate() Methode verwendet werden..
siehe auch Bars.TicksCountForLastBar.
Verwendung
FirstTickOfBar
Beispiel
// Innerhalb einer Tick-By-Tick-Strategie einen Teil nur Bar-by-Bar ausführen
if (FirstTickOfBar)
{
if (CCI(20)[1] < -250)
OpenLong();
return;
}
FirstTickOfBarMtf
Beschreibung
FirstTickOfBarMtf ist die multi-time frame Variante von FirstTickOfBar.
Die Einstellung von CalculateOnClosedBar wirkt sich nur auf die primäre Zeiteinheit (Chart-Zeiteinheit) aus. Wenn jedoch mit multi-bars gearbeitet wird, werden die Ticks der sekundären Zeiteinheit(en) unabhängig von der Einstellung von CalculateOnClosedBar immer Tick-by-Tick bereitgestellt. Mit Hilfe von FirstTickOfBarMtf, ist es möglich, festzustellen, wann in einer sekundären Zeiteinheit ein neuer Bar beginnt.
Verwendung
FirstTickOfBarMtf(ProcessingBarSeriesIndex)
Parameter
FirstTickOfBarMtf(ProcessingBarSeriesIndex).
siehe ProcessingBarSeriesIndex.
Beispiel
if (FirstTickOfBarMtf(ProcessingBarSeriesIndex))
Print("A new bar has begun.");
GetCurrentAsk()
Beschreibung
Die Methode GetCurrentAsk() liefert den aktuellen Kurs auf der Ask-Seite des Orderbuchs. Wenn AgenaTrader keine Level1-Daten zur Verfügung stehen, liefert die Funktion den Kurs des letzten Umsatzes.
siehe auch GetCurrentBid() und OnLevel1().
Verwendung
GetCurrentAsk()
Rückgabewert
double value
Parameter
keiner
Beispiel
Wenn eine Einstiegsbedingung erfüllt ist, soll 1 Kontrakt zum aktuellen Ask-Kurs verkauft werden.
private IOrder entryOrder = null;
protected override void OnCalculate()
{
// Einstiegsbedingung
if (Close[0] < SMA(20)[0] && entryOrder == null)
// Verkauf 1 Kontrakt zum aktuellen AskKurs
entryOrder = SubmitOrder(0, OrderAction.SellShort, OrderType.Limit, 1, GetCurrentAsk(), 0, "", "Enter short");
}
GetCurrentAskVolume()
Beschreibung
Die Methode GetCurrentAskVolume() liefert das aktuelle Volumen auf der Ask-Seite des Orderbuchs. Diese Funktion ist nur lauffähig, wenn der Datenanbieter Level2-Daten liefert.
siehe auch GetCurrentBidVolume(), GetCurrentBid() und OnLevel1().
Verwendung
GetCurrentAskVolume()
Rückgabewert
Long value
Parameter
keiner
Beispiel
protected override void OnCalculate()
{
if (GetCurrentAskVolume() < GetCurrentBidVolume())
Print("AskVolume {0} < BidVolume {1}", GetCurrentAskVolume(), GetCurrentBidVolume());
}
GetCurrentBid()
Beschreibung
Die Methode GetCurrentBid() liefert den aktuellen Kurs auf der Bid-Seite des Orderbuchs. Wenn AgenaTrader keine Level1-Daten zur Verfügung stehen, liefert die Funktion den Kurs des letzten Umsatzes.
siehe auch GetCurrentAsk() und OnLevel1().
Verwendung
GetCurrentBid()
Rückgabewert
double value
Parameter
keiner
Beispiel
Wenn eine Einstiegsbedingung erfüllt ist, soll 1 Kontrakt zum aktuellen Bid-Kurs gekauft werden.
private IOrder entryOrder = null;
protected override void OnCalculate()
{
// Einstiegsbedingung
if (Close[0] > SMA(20)[0] && entryOrder == null)
// Kauf 1 Kontrakt zum aktuellen BidKurs
entryOrder = SubmitOrder(0, OrderAction.Buy, OrderType.Limit, 1, GetCurrentBid(), 0, "", "Enter long");
}
GetCurrentBidVolume()
Beschreibung
Die Methode GetCurrentBidVolume() liefert das aktuelle Volumen auf der Bid-Seite des Orderbuchs. Diese Funktion ist nur lauffähig, wenn der Datenanbieter Level2-Daten liefert.
siehe auch GetCurrentAskVolume, GetCurrentBid() und OnLevel1().
Verwendung
GetCurrentBidVolume()
Rückgabewert
Long value
Parameter
keiner
Beispiel
protected override void OnCalculate()
{
if (GetCurrentAskVolume() < GetCurrentBidVolume())
Print("AskVolume {0} < BidVolume {1}", GetCurrentAskVolume(), GetCurrentBidVolume());
}
GetCurrentPrice()
Beschreibung
Die Methode GetCurrentPrice() liefert den aktuellen Kurs (Latest). Wenn AgenaTrader keine Level1-Daten zur Verfügung stehen, liefert die Funktion den Kurs des letzten Umsatzes.
siehe auch GetCurrentAsk, GetCurrentBid() und OnLevel1().
Verwendung
GetCurrentPrice()
Rückgabewert
keiner
Parameter
double value
Beispiel
Wenn eine Einstiegsbedingung erfüllt ist, soll 1 Kontrakt zum aktuellen Kurs gekauft werden.
private IOrder entryOrder = null;
protected override void OnCalculate()
{
// Einstiegsbedingung
if (Close[0] > SMA(20)[0] && entryOrder == null)
// Kauf 1 Kontrakt zum aktuellen BidKurs
entryOrder = SubmitOrder(0, OrderAction.Buy, OrderType.Limit, 1, GetCurrentPrice(), 0,"", "Enter Long");
}
GetCurrentSpread()
Beschreibung
Die Methode GetCurrentSpread() liefert den aktuellen Spread.
siehe auch GetCurrentAsk, GetCurrentBid() and OnLevel1().
Verwendung
GetCurrentSpread()
Rückgabewert
keiner
Parameter
double
Beispiel
Wenn eine Anfangsbedingung erfüllt ist, sollte ein Vertrag zum aktuellen Wechselkurs gekauft werden.
protected override void OnCalculate()
{
Print("Der aktuelle Spread ist {0}", GetCurrentSpread());
}
GetDayAsInt()
Beschreibung
GetDayAsIntist eine Methode, die sich speziell an unerfahrene Programmierer richtet, die mit der durchaus komplizierten .Net-DateTime-Struktur aus C# Schwierigkeiten haben. Erfahrene Programmierer können die DateTime-Funktionen auch direkt verwenden.
GetDayAsInt liefert eine int-Repräsentation im Format yyyyMMdd. (yyyy = Jahr, MM = Monat, dd = Tag)
Die Zahl für den 13.08.2012 lautet damit 20120813.
Siehe auch GetTimeAsInt.
Hilfe zu DateTime: http://msdn.microsoft.com/de-de/library/system.datetime.aspx
Verwendung
GetDayAsInt(DateTime time)
Beispiele
// Am 11. September besser keine Trades eingehen
if (GetDayAsInt(Time[0]) = 20130911)
return;
GetSeriesHighestValue
Beschreibung
Die Methode GetSeriesHighestValue() sucht in einer vorgegebenen Anzahl von Perioden nach dem höchsten Bar und gibt an, vor wievielen Bars dieser höchste Bar zu finden ist
Siehe auch GetSeriesLowestValue().
Parameter
period Anzahl von Bars, innerhalb derer gesucht werden soll
series Jede Datenserie, wie Close, High, Low usw.
Rückgabewert
int barsAgo Vor wievielen Bars trat das Hoch auf
Verwendung
GetSeriesHighestValue(IDataSeries series, int period)
Beispiele
// Vor wievielen Bars lag das höchste Hoch der aktuellen Session?
Print(GetSeriesHighestValue(High, Bars.BarsCountForSession - 1));
// Welchen Kurs hatte das bisher höchste Open der aktuellen Session?
Print("The highest price for the session was: " + Open[GetSeriesHighestValue(High, Bars.BarsCountForSession - 1)]);
GetSeriesLowestValue
Beschreibung
Die Methode GetSeriesLowestValue() sucht in einer vorgegebenen Anzahl von Perioden nach dem tiefsten Bar und gibt an, vor wievielen Bars dieser tiefste Bar zu finden ist.
Siehe auch GetSeriesHighestValue().
Parameter
period Anzahl von Bars, innerhalb derer gesucht werden soll
series Jede Datenserie, wie Close, High, Low usw.
Rückgabewert
int barsAgo Vor wievielen Bars trat das Tief auf
Verwendung
GetSerieLowestValue(IDataSeries series, int period)
Beispiele
// Vor wievielen Bars lag das tiefste Tief der aktuellen Session?
Print(GetSeriesLowestValue(Low, Bars.BarsCountForSession - 1));
// Welchen Kurs hatte das bisher tiefste Open der aktuellen Session?
Print("The lowest open price of the current session was: " + Open[GetSeriesLowestValue(Low, Bars.BarsCountForSession - 1)]);
GetTimeAsInt()
Beschreibung
GetTimeAsInt ist eine Methode, die sich speziell an unerfahrene Programmierer richtet, die mit der durchaus komplizierten .Net-DateTime-Struktur aus C# Schwierigkeiten haben. Erfahrene Programmierer können die DateTime-Funktionen auch direkt verwenden..
GetTimeAsInt liefert eine int-Repräsentation im Format HHmmss. (HH = Stunde, mm = Minute, ss = Sekunde)
Die Uhrzeit 07:30 Uhr wird dargestellt als 73000 und 14:15:12 wird zu 141512.
Siehe auch GetDayAsInt.
Hilfe zu DateTime: http://msdn.microsoft.com/de-de/library/system.datetime.aspx
Verwendung
GetTimeAsInt(DateTime time)
Beispiele
// Nur zwischen 08:15 Uhr und 16:35 Uhr Trades eingehen
if (GetTimeAsInt(Time[0]) >= 81500 && GetTimeAsInt(Time[0]) <= 163500)
{
// irgendeine Handelslogic
}
Historical
Beschreibung
Mit Historical läßt sich überprüfen, ob AgenaScript mit historen Daten oder mit Real-Time-Daten arbeitet. Solange OnCalculate() für historische Daten aufgerufen wird, ist Historical = true, in dem Moment, in dem die Verarbeitung von Live-Daten beginnt, wird Historical = false. Während ein Backtest ausgeführt wird, ist Historical immer true.
Verwendung
Historical
Rückgabewert
true bei Verarbeitung von historischen Daten false bei Verarbeitung von Real-Time-Daten
Beispiele
protected override void OnCalculate()
{
// Nur für realtime-Daten ausführen
if (IsHistoricalMode) return;
// irgendeine Handelslogik
}
InputPriceType
Beschreibung
Die Eigenschaft InputPriceType legt fest, welche Kursreihe bei der Berechnung in Indikatoren als Standard verwendet werden soll, wenn keine Datenreihe explizit angegeben ist. InputPriceType kann in der OnInit()-Methode stehen. Die Angabe hat dann für alle weiteren Berechnungen im Indikator Gültigkeit. Steht InputPriceType in OnCalculate(), gilt die Änderung der Eingangsdatenreihe ab der nächsten Anweisung. Jedes weitere Auftreten von InputPriceType wird ignoriert!
Siehe auch PriceType
Verwendung
InputPriceType
Beispiel1
protected override void OnInit()
{
ClearTraceWindow();
InputPriceType = PriceType.Low;
}
protected override void OnCalculate()
{
// Die Eingangsdatenreihe für den Indikator (Input) ist Low
Print(Low[0] + " " + InSeries[0] + " " + InputPriceType);
}
Beispiel2
protected override void OnCalculate()
{
// Diese Werte sind identisch,
// da standardmäßig Close als Inputdatenreihe verwendet wird
Print(SMA(20)[0] + " " + SMA(Close, 20)[0]);
InputPriceType = PriceType.Low;
// ab hier wird Low anstatt Close als Standard verwendet
// Die beiden Werte sind identisch
Print(SMA(20)[0] + " " + SMA(Low, 20)[0]);
InputPriceType = PriceType.High;
// Diese Anweisung wird ignoriert.
// Es gilt weiterhin Input = Low !!!
}
Instrument
Beschreibung
Mit Instrument werden Informationen zum Handelsinstrument (Aktie, Future etc.) bereitgestellt, für welches ein Indikator, eine Strategie usw. gerade läuft.
Ausführliche Details finden sich unter Instruments.
IsAddDrawingsToPricePanel
Beschreibung
Die Eigenschaft "IsAddDrawingsToPricePanel" legt fest, in welchem Panel Zeichenobjekte gezeichnet werden.
IsAddDrawingsToPricePanel = true (default)
Zeichenobjekte werden im Preischart gezeichnet
IsAddDrawingsToPricePanel = false
Zeichenobjekte werden in dem Panel (Subchart) gezeichnet, das dem Indikator zugeordnet ist.
Ist der Indikator bereits dem Preischart zugeordnet (Overlay = true) ist diese Eigenschaft wirkungslos, d.h. es wird in diesem Fall kein neuer Subchart geöffnet.
Die Eigenschaft kann im Script abgefragt werden und liefert einen Wert vom Typ Boolean (true bzw. false)
Verwendung
IsAddDrawingsToPricePanel
Beispiel
protected override void OnInit()
{
// Indikator in einem neuen Subchart zeichnen
IsOverlay = false;
(Color.FromKnownColor(KnownColor.Red), "MyPlot1"));
// Zeichenobjekte im Preischart zeichnen
IsAddDrawingsToPricePanel = true;
}
protected override void OnCalculate()
{
// zeichnet im Preischart eine vertikale Linie am Bar von vor 5 Perioden
AddChartVerticalLine("MyVerticalLine", 5, Color.Black);
}
IsAutoAdjustableScale
Beschreibung
Auto scale is a property of indicators that can be set within the OnInit() method.
IsAutoAdjustableScale = true (default)
Die Preisachse (y-Achse) des Charts wird so eingestellt, dass alle Plots und Lines eines Indikators bzw. einer Strategie im Chart sichtbar sind.
IsAutoAdjustableScale = false
Plots und Lines eines Indikators bzw. einer Strategie werden nicht in die Skalierung der Preisachse (y-Achse) eines Charts mit einbezogen. Sie können auch ausserhalb des sichtbaren Chartbereichs liegen.
Die Eigenschaft kann abgefragt werden, und liefert "true" bzw. "false".
Verwendung
IsAutoAdjustableScale
Beispiel
protected override void OnInit()
{
//Chart so skalieren, dass alle Zeichenobjekte sichtbar sind
IsAutoAdjustableScale = true;
}
IsOverlay
Beschreibung
Die Eigenschaft Overlay legt fest, ob die Indikatorausgaben, wie Plots und Linien, im Preischart über die Kursbars gezeichnet werden oder ob ein neues separates Chartfenster unterhalb des Preischarts geöffnet wird.
IsOverlay = true
Es wird über den Kurs gezeichnet (wie z.B. ein SMA)
IsOverlay = false (default)
Es wird ein separates Chartfenster geöffnet (wie z.B. ein RSI)
Die Eigenschaft kann im Script abgefragt werden und liefert einen Wert vom Typ Boolean (true bzw. false).
Verwendung
IsOverlay
Beispiel
protected override void OnInit()
{
(Color.FromKnownColor(KnownColor.Red), "MyPlot1"));
//Der Indikator soll in einem separaten Fenster dargestellt werden
IsOverlay = false;
}
IsProcessingBarIndexLast
Description
Indicates if current bar is last in calculation.
Parameter
None
Return value
Type bool
Usage
used for complicated calculation on a last bar
Example
protected override void OnCalculate()
{
base.OnCalculate();
if (!IsProcessingBarIndexLast)
return;
bool isUpdated;
}
IsSerieRising()
Beschreibung
Mit der Methode IsSerieRising() kann geprüft werden, ob eine "ist steigend"-Bedingung vorliegt, d.h. ob der aktuelle Wert größer ist als der Wert des vorhergehenden Bars.
Siehe auch CrossAbove(), CrossBelow(), IsSerieRising(), IsSerieFalling().
Verwendung
IsSerieRising(IDataSeries series)
Rückgabewert
true wenn die Datenreihe steigt false wenn die Datenreihe nicht steigt
Parameter
series eine Datenserie, wie z.B. ein Indikator, Close, High o.ä
Beispiele
// Prüfen, ob der SMA(20) steigt
if (IsSerieRising(SMA(20)))
Print("The SMA(20) is currently rising.");
IsSeriesFalling()
Beschreibung
Mit der Methode IsSeriesFalling() kann geprüft werden, ob eine "ist fallend"-Bedingung vorliegt, d.h. ob der aktuelle Wert kleiner ist als der Wert des vorhergehenden Bars.
Siehe auch CrossAbove(), CrossBelow(), IsSerieRising(), IsSerieFalling().
Verwendung
IsSerieFalling(IDataSeries series)
Rückgabewert
true wenn die Datenreihe fällt false wenn die Datenreihe nicht fällt
Parameter
series eine Datenserie, wie z.B. ein Indikator, Close, High o.ä
Beispiele
// Prüfen, ob der SMA(20) fällt
if (IsSerieFalling(SMA(20)))
Print("The SMA(20) is currently falling.");
IsShowChartVerticalGrid
Beschreibung
Die Eigenschaft IsShowChartVerticalGrid legt fest, ob in regelmäßigen Abständen vertikale Linien im Chart (das sog. vertikale Grid) angezeigt werden sollen.
IsShowChartVerticalGrid = true (default)
Vertikale Gitternetzlinien werden im Chart angezeigt.
IsShowChartVerticalGrid = false
Vertikale Gitternetzlinien werden nicht im Chart angezeigt.
Die Eigenschaft kann im Script abgefragt werden und liefert einen Wert vom Typ Boolean (true bzw. false).
Verwendung
IsShowChartVerticalGrid
Beispiel
protected override void OnInit()
{
(Color.FromKnownColor(KnownColor.Black), "MyPlot1"));
// Vertikale Gitternetzlinien sollen nicht im Chart angezeigt werden
IsShowChartVerticalGrid = false;
}
IsShowInDataBox
Beschreibung
Die Eigenschaft "IsShowInDataBox" gibt an, ob die Werte des Indikators (Datenserien) in der DataBox des Charts enthalten sein sollen oder nicht.
Die Eigenschaft kann im Script abgefragt werden und liefert einen Wert vom Typ Boolean (true bzw. false)
IsShowInDataBox = true (default)
Die Indikatorwerte werden in der DataBox angezeigt.
IsShowInDataBox = false
Die Indikatorwerte werden nicht in der DataBox angezeigt.
Im Bild werden die Werte von 3 gleitenden Durchschnitten in der DataBox angezeigt.
Verwendung
IsShowInDataBox
Beispiel
protected override void OnInit()
{
(Color.FromKnownColor(KnownColor.Black), "MyPlot1"));
//Werte sollen nicht in der DataBox angezeigt werden
IsShowInDataBox = false;
}
IsShowPriceMarkers
Beschreibung
Die Eigenschaft PaintPriceMarkers legt fest, ob für die Indikatorausgaben, am rechten Chartrand (in der Preisachse) die sog. PriceMarkers angezeigt werden sollen oder nicht. In manchen Fällen ist es sinnvoll, dies für eine bessere Übersicht im Chart auszuschalten. IsShowPriceMarkers = true (default)
PriceMarkers werden in der Preisachse angezeigt.
IsShowPriceMarkers = false
PriceMarkers werden nicht in der Preisachse angezeigt.
Die Eigenschaft kann imScript abgefragt werden und liefert einen Wert vom Typ Boolean (true bzw. false).
Verwendung
IsShowPriceMarkers
Beispiel
protected override void OnInit()
{
(Color.FromKnownColor(KnownColor.Black), "MyPlot1"));
//IsShowPriceMarkers sollen nicht angezeigt werden
IsShowPriceMarkers = false;
}
Level1Args
Beschreibung
Der Datentyp MarketDataEventArgs repräsentiert eine Änderung in den Level-I-Daten und wird als Parameter in der Funktion OnLevel1() verwendet.
AskSize | Das aktuelle Ordervolumen auf der Ask-Seite. |
AskPrice | Der aktuelle Ask-Kurs |
BidSize | Das aktuelle Ordervolumen auf der Bid-Seite |
BidPrice | Der aktuelle Bid-Kurs. |
Instrument | Ein Objekt des Types IInstrument, das das Handelsinstrument beinhaltet, für welches die Level-I-Daten geliefert werden. Siehe Instruments |
LastPrice | Der letzte durch einen Umsatz entstandene Kurs |
MarketDataType | Mögliche Werte sind: MarketDataType.Ask, MarketDataType.AskSize, MarketDataType.Bid, MarketDataType.BidSize, MarketDataType.Last, MarketDataType.Volume |
Price | Tenthält den gleichen Wert wie LastPrice. Das Feld ist nur aus Kompatibilitätsgründen vorhanden. |
Time | Ein DateTime-Wert, der den Zeitstempel der Änderung beinhaltet. |
Volume | Ein long-Wert, der das Volumen, d.h. den letzten realen Umsatz angiebt. |
Beispiel
siehe Beispiel unter OnLevel1().
Level2Args
Beschreibung
Der Datentyp Level2Args repräsentiert eine Änderung in den Level-II-Daten (Markttiefe) und wird als Parameter in der Funktion OnLevel2() verwendet.
MarketDataType | Mögliche Werte sind: MarketDataType.Ask, MarketDataType.Bid |
MarketMaker | Ein string-Wert, der die Market Maker ID enthällt |
Position | Ein int-Wert, der die Position innerhalb der Markttiefe angiebt |
Operation | Steht für die Aktion, die durch die Änderung in einem Orderbuch ausgelöst wird. Mögliche Werte sind: Operation.Insert, Operation.Remove, Operation.Update |
Price | Eine double-Wert, der den jeweiligen Bid/Ask-Kurs |
Time | Ein DateTime-Wert, der den Zeitstempel der Änderung beinhaltet |
Volume | Ein long-Wert, der das Volumen angiebt |
Beispiel
siehe Beispiel unter OnLevel2().
LevelLine()
Beschreibung
EinA LevelLine object wird genutzt, um eine horizontale Linie in einen Chart zu zeichnen. Üblicherweise sind dies obere und untere Triggerlinien wie z.B. beim RSI-Indikator die 70 und die 30 Linie. Diese hier beschriebenen Linien sind nicht zu verwechseln mit der Linie aus den Zeichenobjekten (siehe "AddChartHorizontalLine"). LevelLine objectwerden einem Indikator mit Hilfe der Add()-Methode hinzugefügt und damit in die Lines-Collection aufgenommen.
Siehe auch OutputDescriptor.
Parameter
Color | Linienfarbe |
Name | Bezeichnung |
Pen | ein Pen-Objekt |
Value | Gibt an, bei welchem Wert auf der y-Achse (Preisachse) die Linie gezeichnet werden soll |
Verwendung
LevelLine(Color color, double value, string name)
LevelLine(Pen pen, double value, string name)
Weitere Informationen
Informationen zur Klasse Pen: http://msdn.microsoft.com/de-de/library/system.drawing.pen.aspx
Beispiele
// Beispiel 1
// Eine Linie mit Standardwerten bei 70 in den Chart zeichnen
Add(new LevelLine(Color.Black, 70, "Upper"));
// Beispiel 2
// Eine Linie mit selbstdefinierten Werten in den Chart zeichnen
private LevelLine line;
private Pen pen;
protected override void OnInit()
{
// einen roten Stift mit der Linienstärke 1 definieren
pen = new Pen(Color.Red, 1);
// eine horizontale Linie bei 10 definieren
line = new LevelLine(pen, 10, "MyLine");
// die oben def. Linie dem Indikator hinzufügen
Add(line);
}
// Beispiel 3
// Kurzform für die Linie aus Bespiel 2
Add(new LevelLine(new Pen(Color.Red, 1), 10, "MyLine"));
Log()
Beschreibung
Mit Log() ist es möglich, Ausgaben in das LogFile (Log Tab) von AgenaTrader zu schreiben. Es werden 5 verschiedene LogLevel unterstützt.
Hinweis: Ist der Log-Tab nicht sichtbar, kann er mit Tools-Log angezeigt werden.
Verwendung
**Log**(string message, LogLevel logLevel)
Parameter
message | Text (message) |
logLevel | Mögliche Werte sind: InfoLogLevel.Info, InfoLogLevel.Message, InfoLogLevel.Warning, InfoLogLevel.ShowAlert, InfoLogLevel.Error |
Beispiel
//Tab protocol
Log("Das ist eine Information.", InfoLogLevel.Info); //white
Log("Das ist eine Nachricht.", InfoLogLevel.Message); // white
Log("Das ist eine Warnung.", InfoLogLevel.Warning); // blue
Log("Das ist ein Alarm.", InfoLogLevel.ShowAlert); //green
Log("Das ist ein Fehler.", InfoLogLevel.Error); // red
//Tab messages
Log("This is a message (messages).", InfoLogLevel.Message); //white
//PopUp & protocoll
Log("This is an alert popup window.", InfoLogLevel.ShowAlert); //green
//Output-Tab:
//InfoLogLevel.Message = send to Tab "Messages" not "Log"
//Action:
/*
InfoLogLevel.Error: also the AT-Status-Line is red and flashes
InfoLogLevel.ShowAlert: opens also a modeless messagebox
*/
/*
Summary: * - InfoLogLevel.ShowAlert Color: green Tab: Log Action: modeless Messagebox * - InfoLogLevel.Warning Color: blue Tab: Log * - InfoLogLevel.Info Color: white Tab: Log * - InfoLogLevel.Error Color: red Tab: Log Action: AT-Status-Line: red + flashing (Error) * - InfoLogLevel.Message Color: white Tab: Messages
*/
Crossreference: a crossreference to Print() and ShowAlert()
Occurred
Beschreibung
Diese DataSeries werden unter Bedingungen verwendet und geben an, ob ein Signal aufgetreten ist(1-long, -1 short, 0- kein signal )
Parameter
keiner
Rückgabewert
Int
Verwendung
Im Skriptzustand für short, long, kein Signal
Beispiel
protected override void OnCalculate()
{
if ( ProcessingBarIndex %2 == 0 )
Occurred.Set(1); // Long
else if ( ProcessingBarIndex %3 == 0 )
Occurred.Set(-1); // Short
else
Occurred.Set(0);
}
OnBarsRequirements()
Beschreibung
Die OnBarsRequirements() Methode wird einmal zu Beginn einer Indikator- bzw. Strategieberechnung aufgerufen. Die Methode ist nur bei Verwendung von MultiBars notwendig. Innerhalb von InitRequirements werden keine weiteren Programmierbefehle ausgeführt. Für eigene Initialisierungen sind die MethodenOnInit() bzw. OnStart() zu verwenden.
Parameter
keiner
Rückgabewert
keiner
Beispiel
protected override void OnBarsRequirements()
{
Add(DatafeedHistoryPeriodicity.Day, 1);
Add(DatafeedHistoryPeriodicity.Week, 1);
}
OnInit()
Beschreibung
Die OnInit()-Methode wird einmal zu Beginn einer Indikator- bzw. Strategieberechnung aufgerufen. Die Methode kann verwendet werden um Indikatoreigenschaften zu setzen, eigene Variablen zu initialisieren oder Plots hinzuzufügen.
Parameter
keiner
Rückgabewert
keiner
Verwendung
protected override void OnInit()
wichtige Schlüsselworte
- Add()
- AllowRemovalOfChartDrawings
- IsAutoScale
- RequiredBarsCount
- CalculateOnClosedBar
- ClearTraceWindow
- Displacement
- IsShowInDataBox
- IsAddDrawingsToPricePanel
- InputPriceType
- IsOverlay
- IsShowPriceMarkers
- IsShowChartVerticalGrid
zusätzlich für Strategien
- DefaultOrderQuantity
- EntriesPerDirection
- SetUpStopLoss()
- SetUpProfitTarget()
- SetUpTrailStop()
- TimeInForce
- TraceOrders
Weitere Informationen
Achtung: Die OnInit()-Methode wird nicht nur am Beginn einer Indikator- bzw. Strategieberechnung aufgerufen, sondern auch unerwartet z.B. wenn ein Chart neu geladen wird oder der Eigenschaftsdialog von Indikatoren geöffnet wird usw. Entwickler von eigenen AgenaScripts sollten diese Methode NICHT verwenden, um eigene Routinen laufen zu lassen, Forms zu öffnen, Lizenzchecks auszuführen u. dgl. mehr. Hierzu ist die Methode OnStart() zu verwenden.
Beispiel
protected override void OnInit()
{
AddOutput(new OutputDescriptor(Color.FromKnownColor(KnownColor.Black), "MyPlot1"));
ClearTraceWindow();
IsAutoScale = false;
IsOverlay = true;
IsShowPriceMarkers = false;
IsShowInDataBox = false;
CalculateOnClosedBar = true;
}
OutputDescriptor()
Beschreibung
Ein OutputDescriptor (drawing)wird genutzt, um einen Indikator in einem Chart graphisch darzustellen. Plot-Objekte werden einem Indikator mit Hilfe der Add()-Methode hinzugefügt und damit in die Plots-Collection aufgenommen. Siehe auch LevelLine.
Parameter
Color | Zeichenfarbe |
Pen | ein Pen-Objekt |
PlotStyle | Linienart: PlotStyle.Bar, PlotStyle.Block, PlotStyle.Cross, PlotStyle.Dot, PlotStyle.Hash, PlotStyle.LevelLine, PlotStyle.Square, PlotStyle.TriangleDown, PlotStyle.TriangleUp |
Name | Bezeichnung |
Verwendung
OutputDescriptor(Color color, string name)
OutputDescriptorOutputDescriptorOutputDescriptor(Pen pen, string name)
OutputDescriptorOutputDescriptor(Color color, PlotStyle plotStyle, string name)
OutputDescriptor(Pen pen, PlotStyle plotStyle, string name)
Weitere Informationen
Informationen zur Klasse Pen: http://msdn.microsoft.com/de-de/library/system.drawing.pen.aspx
Beispiele
// Beispiel 1
// Plot mit Standardwerten (Linie mit Linienstärke 1)
Add(new OutputDescriptor(Color.Green, "MyPlot"));
// Beispiel 2
// benutzerdefinierte Werte für Pen und PlotStyle
private OutputDescriptor plot;
private Pen pen;
protected override void OnInit()
{
// einen roten Stift mit der Linienstärke 6 definieren
pen = new Pen(Color.Blue, 6);
// eine Punkt-Linie mit dem dicken roten Stift von oben definieren
plot = new OutputDescriptor(pen, PlotStyle.Dot, "MyPlot");
// den oben def. Plot als Darstellung für den Indikator verwenden
Add(plot);
}
// Beispiel 3
// Kurzform von Beispiel 2
protected override void OnInit()
{
Add(new OutputDescriptor(new Pen(Color.Blue, 6), PlotStyle.Dot, "MyPlot"));
}
InputParameter()
Beschreibung
Attribut, das für die Anpassung der Indikatoren verwendet wird
Rückgabewert
keiner
Parameter
keiner
Beispiele
[Description("Period for the medium mean average")]
[InputParameter]
[DisplayName("MA Medium")]
public int MA_Medium
{
get
{
return _ma_medium;
}
set
{
_ma_medium = value;
}
}
PlaySound()
Beschreibung
Die Methode PlaySound() dient dazu, ein Wav-File abzuspielen.
Verwendung
PlaySound(wavFile)
Rückgabewert
keiner
Parameter
wavFile Dateiname der Wav-Datei zum Abspielen
Beispiel
using System.IO;
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string file = "\\\\AgenaTrader\\\\Sounds\\\\Alert1.wav";
PlaySound(path + file);
PlotMethod
Beschreibung
In jedem Indikator kann die Plot-Methode überschrieben werden um mit Mittlen der Graphics-Klasse (System.Drawing) dem Preis-Chart eigene Grafiken hinzuzufügen (GDI+).
Siehe http://msdn.microsoft.com/de-de/library/system.drawing.graphics.aspx.
Das Objekt Chart bietet einige nützliche Parameter.
Weitere Beispiele: Bar Numbering, PlotSample, Chart Background Image.
Parameter
graphics Das graphics-Objekt des Preischarts (der sog. context)
rectangle Die Größe der Zeichenfläche (Type public struct rectangle)
double min Der kleinste Kurs in der y-Achse
double max Der größte Kurs in der y-Achse
Rückgabewert
keiner
Verwendung
public override void OutputDescriptor(Graphics graphics, Rectangle r, double min, double max)
Beispiel
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using AgenaTrader.API;
using AgenaTrader.Custom;
using AgenaTrader.Plugins;
namespace AgenaTrader.UserCode
{
[Description("Example for the usage of the plot method.")]
public class PlotSample : UserIndicator
{
private StringFormat stringFormat = new StringFormat();
private SolidBrush brush = new SolidBrush(Color.Black);
private Font font = new Font("Arial", 10);
protected override void OnInit()
{
IsChartOnlyIndicator = true;
IsOverlay = true;
}
protected override void OnCalculate()
{}
protected override void OnDispose()
{
brush.Dispose();
stringFormat.Dispose();
}
public override void OutputDescriptor(Graphics graphics, Rectangle r, double min, double max)
{
// Ausfuellen eines Rechtecks
SolidBrush tmpBrush = new SolidBrush(Color.LightGray);
graphics.FillRectangle(tmpBrush, new Rectangle (0, 0, 300, 300));
tmpBrush.Dispose();
// Zeichnen einer roten Linie von oben links nach unten recht
Pen pen = new Pen(Color.Red);
graphics.AddChartLine(pen, r.X, r.Y, r.X + r.Width, r.Y + r.Height);
// Zeichnen einer roten Linie von unten links nach oben rechts
// Verwenden von AnitAlias (Die Linie erscheint glatter)
// Die aktuellen Einstellungen fuer die Glaettung werden gesichert
// und nach dem Zeichnen wiederhergestellt
SmoothingMode oldSmoothingMode = graphics.SmoothingMode; //Einstellung sichern
graphics.SmoothingMode = SmoothingMode.AntiAlias; // hohe Glaettung verwenden
graphics.AddChartLine(pen, r.X, r.Y + r.Height, r.X + r.Width, r.Y);
graphics.SmoothingMode = oldSmoothingMode; // Einstellungen wiederherstellen
pen.Dispose();
// Text in die obere linke Ecke (Position 10,35) schreiben
stringFormat.Alignment = StringAlignment.Near; // Text links ausrichten
brush.Color = Color.Blue;
graphics.DrawString("Hello world!", font, brush, r.X + 10, r.Y + 35, stringFormat);
// Text in die linke untere Ecke schreiben und eine Linie darum herumzeichnen
brush.Color = Color.Aquamarine;
graphics.FillRectangle(brush, r.X + 10, r.Y + r.Height - 20, 140, 19);
// Aeussere Linie zeichnen
pen = new Pen(Color.Black);
graphics.AddChartRectangle(pen, r.X + 10, r.Y + r.Height - 20, 140, 19);
pen.Dispose();
// Text schreiben
brush.Color = Color.Red;
graphics.DrawString("Here is bottom left!", font, brush, r.X + 10, r.Y + r.Height - 20, stringFormat);
}
}
}
PriceType
Beschreibung
PriceType beschreibt die Art von Kursdaten.
Siehe auch InputPriceType
Folgende Werte stehen zur Verfügung: - PriceType.Close - PriceType.High - PriceType.Low - PriceType.Median - PriceType.Open - PriceType.Typical - PriceType.Volume - PriceType.Weighted
Verwendung
PriceType
Beispiel
Siehe Beispiel unter InputPriceType
Print()
Beschreibung
Die Methode Print() schreibt Ausgaben in das AgenaTrader Output-Window. Siehe auch ClearTraceWindow.
Verwendung
Print(string message)
Print(bool value)
Print(double value)
Print(int value)
Print(DateTime value)
Print(string format, string message)
Parameter
string Text ein individueller Meldungstext
Rückgabewert
keiner
Weitere Informationen
Hinweise zum Formatieren von Ausgaben finden Sie unter Formatting numbers.
Hinweise zur String.Format()-Methode: http://msdn.microsoft.com/de-de/library/fht0f5be%28v=vs.80%29.aspx
Beispiel
// "Quick&Dirty"-Formatierung einer Zahl mit 2 Nachkommastellen
Print(Close[0].ToString("0.00"));
// Wochentag aus dem Zeitstempel des Bars ausgeben
Print(string.Format("{0:dddd}", Time[0]));
// Ein zusätzlicher Zeilenvorschub mit ESC-Sequenz
Print("One empty row afterwards \\n");
ProcessingBarIndex
Beschreibung
ProcessingBarIndex ist eine Nummerierung von Bars, die in der Methode OnCalculate() verwendet wird. Wenn in einem Chart z.B. 500 Bars dargestellt werden und auf diese ein Indikator berechnet werden soll, so beginnt AgenaTrader mit der Berechnung (also dem Aufruf von OnCalculate() bei dem ältesten Bar. Dieser bekommt die Nummer 0. Ist die Berechnung für diesen Bar abgeschlossen, wird OnCalculate() für den nächsten Bar aufgerufen. Dieser bekommt dann die Nummer 1 usw. bis zum letzten Bar, der die Nummer 499 bekommt.
Parameter
keiner
Rückgabewert
ProcessingBarIndex ist eine Variable vom Typ int, die immer die Nummer des sich gerade in Bearbeitung befindenden Bars enthält.
Verwendung
ProcessingBarIndex
Weitere Informationen
Die in der Methode OnCalculate() verwendete Nummerierung mit ProcessingBarIndex unterscheidet sich vom Barindex und Bars. Das Verständnis dieses Unterschiedes ist sehr wichtig! Bitte das folgende genau lesen!
ProcessingBarIndex nummeriert fortlaufend vom ältesten zum jüngsten Bar beginnend bei 0. Der Barindex ist für den jüngsten Bar immer 0. Im Beispiel unten steht Time[0] für den Zeitstempel des aktuellen Bars. Der Index des ältesten Bars wird mit jedem neu hinzukommenden Damit wird eine logische Zählung für barsAgo möglich. Der Zeitstempel für den Bar von vor 5 Perioden ist damit Time[5]. Bei Verwendung mehrerer Zeiteinheiten (multi-bars)in einem Indikator siehe ProcessingBarIndexes.
Beispiel
protected override void OnCalculate()
{
Print("Call of OnCalculate for bar nr. " + ProcessingBarIndex + " of " + Time[0]);
}
RemoveChartDrawing()
Beschreibung
Die Methode RemoveChartDrawing() entfernt ein bestimmtes Zeichenobjekt vom Chart anhand einer eindeutigen Kennzeichnung (tag). Siehe auch RemoveChartDrawings().
Verwendung
RemoveChartDrawings(string tag)
Rückgabewert
keiner
Parameter
string tag Der Name eines Zeichenobjekts zur eindeutigen Identifizierung
Beispiel
RemoveChartDrawings("Meine Linie");
RemoveChartDrawings()
Beschreibung
Die Methode RemoveDrawObjects() entfernt alle Zeichenobjekte vom Chart. Siehe auch RemoveChartDrawings().
Verwendung
RemoveChartDrawings()
Rückgabewert
keiner
Beispiel
//Alle Zeicheobjekte vom Chart löschen
RemoveChartDrawings();
RequiredBarsCount
Beschreibung
Die Eigenschaft BarsRequired gibt an, wieviele historische Bars mindestens benötigt werden, damit ein Indikator bzw. eine Strategie erstmal die Methode OnCalculate() aufrufen und mit den Berechnungen beginnen kann. BarsRequired sollte in der OnInit() Methode angegeben werden. Die Einstellung sollte sorgfältig gewählt werden. Z.B. braucht man zur Berechnung eines gleitenden Durchschnittes über 100 Tage auch mindestens 100 Tage historische Daten, damit das Ergebnis korrekt ist.
Die Eigenschaft kann im Script abgefragt werden und liefert einen int-Wert.
Wenn OnBarUpdate erstmals aufgerufen wird, ist ProcessingBarIndex property = 0, unabhängig vom Wert von RequiredBarsCount.
Verwendung
RequiredBarsCount
Beispiel
protected override void OnInit()
{
//Der Indikator benötigt mindestens 50 Bars Historie
RequiredBarsCount = 50;
}
ShowAlert()
Beschreibung
Mit der Methode ShowAlert wird ein akustischer und/oder visueller Alarm erzeugt.
Verwendung
ShowAlert(string message, bool showMessageBox, string soundLocation);
//Aus Kompatibilitätsgründen ist noch eine veraltete Signatur enthalten. Bei Nutzung dieses Aufrufvariante werden die Farbangaben und "rearmSeconds" ignoriert.
ShowAlert(string id, AlertPriority priority, string message, string soundLocation, int rearmSeconds, Color backColor, Color forColor);
Rückgabewert
keiner
Parameter
message | Nachrichtentext, der im Messages-Tab angezeigt wird. |
soundLocation | Name eines Sound-Files im *.wav Format. Ist kein Pfad angegeben, wird "Eigene Dokumente\AgenaTrader\Sounds" verwendet. |
showMessageBox | wenn true, wird zusätzlich zum Sound eine Messagebox auf dem Bildschim angezeigt. |
Beispiel
// Hinweis ausgeben, wenn der SMA(20) unter SMA(50) kreuzt
if (CrossBelow(SMA(20), SMA(50), 1))
Alert("Check short signal!", true, "Alert4.wav");
Um Musikdateien in anderen Verzeichnissen wiederzugeben, muss der vollständige Pfad angegeben werden, z.B.:
string pathOfSoundfile = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+@"\\MyAlertSounds\\";
string nameOfSoundFile = "MyAlertSoundFile.wav";
Alert("Message text", true, pathOfSoundfile + nameOfSoundFile);
TickSize
Ein Tick ist die kleinst mögliche Kursänderung eines Finanzinstruments an einer Börse. Wenn die Handelspreise z.B. mit zwei Stellen nach dem Komma angegeben werden, beträgt ein Tick 0,01. Im Forexhandel (Währungshandel) wird mit 4 bzw. 5 Stellen nach dem Komma gearbeitet. Ein Tick - der im Forexhandel als Pip bezeichnet wird - beträgt dementsprechend 0,0001 bzw. 0,00001. Der Tickwert wird durch die Börse fest vorgegeben und ändert sich (in der Regel) nicht. Siehe auch Instrument.TickSize.
Üblicherweise wird heute ein Tick als Dezimalzahl angegeben. Historisch wurden besonders im amerikanischen Raum Aktien jedoch mit einer Tickgröße von 1/16 von einem Dollar notiert.
Bei Rohstoffen ist diese Notierung noch weit verbreitet. Der Corn-Future (ZC - Mais) wird genau wie Wheat (ZW - Weizen) in ¼ US-Cent/bushel (entspricht 12,50 US-$ je Kontrakt) notiert.
US-Statsanleihen (T-Bonds) werden mit Tickgrößen von 1/32 Punkten gehandelt, was 31,25 US-Dollar entspricht.
Die Notierung erfolgt mit Hochkomma: 149'00 entspricht genau 149, 149'01 entspricht 149 1/32 (also 149,03125), 149'31 enspricht 149 31/32 (149,96875), danach folgt dann 150'00.
In sog. T-Bond-Intermonth Spreads werden die Notierungen in Vierteln von 1/32 angegeben, was dann einem Punktwert von $7.8125 per Kontrakt entspricht.
Die Notierungen erfolgt mit Bindestrich:
17-24 entspricht 17 24/32 Punkten, 17-242 entspricht 17 24,25/32 Punkten, 17-245 entspricht 17 24,5/32 Punkten und 17-247 entspricht 17 24,75/32 Punkten. Die nächste Notierung nach 17-247 ist 17-25, dann wieder 17-252, 17-255 usw. Nach 17-317 folgt 18.
Die Kontraktspezifikationen sind auf den Internetseiten der jeweiligen Börsen veröffentlicht.
CME: http://www.cmegroup.com under Products & Trading Eurex (FDAX): http://www.eurexchange.com/exchange-en/products/idx/dax/17206/
siehe auch Instrument.TickSize.
TimeFrame
siehe Bars.TimeFrame.
Bei Verwendung mehrerer Zeiteinheiten (Multibars) in einem Indikator siehe TimeFrames.
Update()
Beschreibung
Die Methode Update() ruft die OnCalculateMethode einmal auf, um Indikatorwerte neu zu berechnen.
Update() ist mit Vorsicht und nur von erfahrenen Programmierern zu verwenden.
Verwendung
Update()
Rückgabewert
keiner
Parameter
keiner
Beispiel
Die Wirkung von Update läßt sich mit Hilfe von 2 Indikatoren veranschaulichen. Der erste Indikator "Ind1" nutzt eine public Variable aus Indikator "Ind2".
Code von Ind1:
public class Ind1 : UserIndicator
{
protected override void OnCalculate()
{
Print( Ind2().MyPublicVariable );
}
}
Code von Ind2:
private double myPublicVariable = 0;
protected override void OnCalculate()
{
myPublicVariable = 1;
}
public double MyPublicVariable
{
get
{
Update();
return myPublicVariable;
}
}
Ohne Update() - Falsch Wenn Ind2 von Ind1 aufgerufen wird, wird die get-Methode von MyPublicVariable in Ind2 aufgerufen. Ohne Update() würde der Wert von myPublicVariable zurückgegeben werden. In diesem Falle eine 0.
Mit Update() - Richtig Durch den Aufruf von Update() wird zunächst OnBarUpdate() von Ind2 ausgeführt. Damit wird myPublicVariable auf 1 gesetzt. Anschließend wird der Wert 1 an den aufrufenden Indikator Ind1 übergeben.
Value
Beschreibung
Value ist ein DataSeries-Objekt, welches die erste Datenserie eines Indikators enthält.
Beim Aufruf der Add()-Methode wird automatisch ein Value-Objekt erzeugt und der Collection Values hinzugefügt.
Value ist identisch mit Values[0].
Verwendung
Value
Value[int barsAgo]
Weitere Informationen
Die für eine Collection bekannten Methoden Set(), Reset() und Count() sind auf Value anwendbar.
Beispiel
Siehe Values.