Strategieprogrammierung

Account

Beschreibung

Account ist ein Objekt, welches Informationen zu dem Konto enthält, mit dem die aktuelle Strategie arbeitet.

Die einzelnen Eigenschaften sind:

  • Account.AccountConnection Name der verwendeten Brokerverbindung (der Name, der unter Kontoverbindungen vergeben wurde).

  • Account.AccountType Art des Kontos (Livokonto, Simkonto usw.)

  • Account.Broker Bezeichnung des Brokers

  • Account.BuyingPower Der Kontostand unter Berücksichtigung des vom Broker gewährten Hebels.(IB hebelt das Kontoguthaben z.B. aktuell mit 4. Ein Guthaben von 10.000 Euro hat so eine "Kaufkraft" von 40.000 Euro.

  • Account.CashValue Betrag (double)

  • Account.Currency Währung, in der das Konto geführt wird

  • Account.ExcessEquity Überschuss

  • Account.InitialMargin Initial Margin (abh. vom jeweiligen Broker, double)

  • Account.InstrumentType Art des Handelsinstrumentes (Typ AgenaTrader.Plugins.InstrumentTypes)

  • Account.IsDemo true, wenn es sich um ein Demokonto handelt

  • Account.Name Name des Kontos (i.d.R. mit Account. AccountConnection identisch)

  • Account.OverNightMargin Übernacht-Margin (abh. vom jeweiligen Broker, double)

  • Account.RealizedProfitLoss realisierter Gewinn bzw. Verlust (double)

Beispiel

Print("AccountConnection " + Account.AccountConnection);
Print("AccountType " + Account.AccountType);
Print("Broker " + Account.Broker);
Print("BuyingPower " + Account.BuyingPower);
Print("CashValue " + Account.CashValue);
Print("Currency " + Account.Currency);
Print("ExcessEquity " + Account.ExcessEquity);
Print("InitialMargin " + Account.InitialMargin);
Print("InstrumentTypes " + Account.InstrumentTypes);
Print("IsDemo " + Account.IsDemo);
Print("Name " + Account.Name);
Print("OverNightMargin " + Account.OverNightMargin);
Print("RealizedProfitLoss " + Account.RealizedProfitLoss);

BarsCountFromTradeClose()

Beschreibung

Die Eigenschaft "BarsCountFromTradeClose" liefert die Anzahl der Bars, die seit dem letzten Ausstieg (Exit) aus dem Markt vergangen sind.

Verwendung

BarsCountFromTradeClose()
BarsCountFromTradeClose(string strategyName)

Für Multibar-Strategieen

BarsCountFromTradeClose(int multibarSeriesIndex, string strategyName, int exitsAgo)

Parameter

strategyName Der Signalname (string), der in einer Ausstiegsmethode zur eindeutigen Kennzeichnung des Ausstiegs vergeben wurde
multibarSeriesIndex Für *Multibar*MultiBars Strategieen. Index der Datenreihe, für die die Ausstiegsorder ausgeführt wurde. Siehe ProcessingBarSeriesIndex.
exitsAgo Anzahl der in der Vergangenheit liegenden Ausstiege. Eine 0 (Null) an dieser Stelle liefert die Anzahl der Bars, die sich nach dem letzten Ausstieg ausgebildet haben.

Beispiel

Print("Der letzte Ausstieg liegt " + BarsCountFromTradeClose() + " Bars zurück.");

BarsCountFromTradeOpen()

Beschreibung

Die Eigenschaft "BarsCountFromTradeOpen" liefert die Anzahl der Bars, die seit dem letzten Einstieg (Entry) in den Markt vergangen sind.

Verwendung

BarsCountFromTradeOpen()
BarsCountFromTradeOpen(string strategyName)

Für Multibar-Strategieen

BarsCountFromTradeOpen(int multibarSeriesIndex, string strategyName, int entriesAgo)

Parameter

strategyName Der Signalname (string), der in einer Einstiegsmethode zur eindeutigen Kennzeichnung des Einstiegs vergeben wurde.
multibarSeriesIndex Für *Multibar*, MultiBars Strategieen.Index der Datenreihe, für die die Einstiegsorder ausgeführt wurde. Siehe ProcessingBarSeriesIndex, ProcessingBarSeriesIndex.
entriesAgo Anzahl der in der Vergangenheit liegenden Einstiege. Eine 0 (Null) an dieser Stelle liefert die Anzahl der Bars, die sich nach dem letzten Einstieg ausgebildet haben.

Beispiel

Print("Der letzte Einstieg liegt " + BarsCountFromTradeOpen() + " Bars zurück.");

CancelAllOrders()

Beschreibung

CancelAllOrders löscht alle Oders (cancel), die von der Strategie verwaltet werden. Es wird ein Cancel-Request an den Broker verschickt. Ob eine Oder dort wirklich gelöscht wird, kann nicht garantiert werden. Es kann vorkommen, dass eine Order eine Teilausführung erhalten hat, ehe sie gelöscht wird. Es ist daher ratsam, den jeweils aktuellen Status einer Order mit OnOrderChanged() zu kontrollieren.

Verwendung

CancelAllOrders()

Parameter

kein Parameter

Beispiel

protected override void OnCalculate()
{
   if (BarsCountFromTradeOpen() >= 30)
       CancelAllOrders();
}

Order.Cancel()

Beschreibung

Cancel order löscht eine Oder (cancel).

Es wird ein Cancel-Request an den Broker verschickt. Ob eine Oder dort wirklich gelöscht wird, kann nicht garantiert werden. Es kann vorkommen, dass eine Order eine Teilausführung erhalten hat, ehe sie gelöscht wird. Es ist daher ratsam, den jeweils aktuellen Status einer Order mit OnOrderChanged() zu kontrollieren.

Verwendung

Order.Cancel(IOrder order)

Parameter

Ein order-Objekt vom Typ IOrder

Beispiel

private IOrder entryOrder = null;
private int barNumber = 0;
protected override void OnCalculate()
{
   // An das Hoch des aktuellen Bars einen Einstiegsstop legen
    if (entryOrder == null)
    {
        entryOrder = OpenLongStop(High[0], "stop long");
        barNumber = ProcessingBarIndex;
    }
    // Nach 3 Bars die Order löschen
    if (Position.PositionType == PositionType.Flat &&
    ProcessingBarIndex > barNumber + 3)
        Order.Cancel(entryOrder);
}

CreateIfDoneGroup()

Beschreibung

Wenn zwei Orders über eine CreateIfDoneGroup miteinander verknüpft werden, so bedeutet dies, dass wenn die eine Order ausgeführt wurde, die zweite verbundene Order aktiviert wird.

Verwendung

CreateIfDoneGroup(IEnumerable<IOrder> orders)

Parameter

Ein order-Objekt vom Typ IOrder als List

Beispiel

private IOrder oopenlong = null;
private IOrder osubmitbuy = null;


protected override void OnInit()
{
   IsAutoConfirmOrder = false;
}


protected override void OnCalculate()
{

 oopenlong =  SubmitOrder(new StrategyOrderParameters
                {
                    Direction = OrderDirection.Buy,
                    Type = OrderType.Market,
                    Quantity = DefaultOrderQuantity,
                    SignalName = "strategyName",
                });

osubmitbuy =  SubmitOrder(new StrategyOrderParameters
                {
                    Direction = OrderDirection.Sell,
                    Type = OrderType.Stop,
                    Quantity = DefaultOrderQuantity,
            StopPrice = Close[0] * 1.1,
                    SignalName = "strategyName",
                });

   CreateIfDoneGroup(new List<IOrder> { oopenlong, osubmitbuy });

   oopenlong.ConfirmOrder();
}

CreateOCOGroup()

Beschreibung

Wenn zwei Orders über eine CreateOCOGroup miteinander verknüpft werden, so bedeutet dies, dass sobald die eine Order ausgeführt wurde, die zweite verbundene Order gelöscht wird.

Verwendung

CreateOCOGroup(IEnumerable<IOrder> orders)

Parameter

Ein order-Objekt vom Typ IOrder als List

Beispiel

private IOrder oopenlong = null;
private IOrder oEnterShort = null;


protected override void OnInit()
{
   IsAutoConfirmOrder = false;
}


protected override void OnCalculate()
{

oopenlong =  SubmitOrder(new StrategyOrderParameters
                {
                    Direction = OrderDirection.Buy,
                    Type = OrderType.Stop,
                    Quantity = DefaultOrderQuantity,
            StopPrice = Close[0] * 1.1,
                    SignalName = "strategyName",
                });


oEnterShort =  SubmitOrder(new StrategyOrderParameters
                {
                    Direction = OrderDirection.Sell,
                    Type = OrderType.Stop,
                    Quantity = DefaultOrderQuantity,
            StopPrice = Close[0] * -1.1,
                    SignalName = "strategyName",
                });



   CreateOCOGroup(new List<IOrder> { oopenlong, oEnterShort });

   oopenlong.ConfirmOrder();
   oEnterShort.ConfirmOrder();
}

CreateOROGroup()

Beschreibung

Wenn zwei Orders über eine CreateOROGroup miteinander verknüpft werden, so bedeutet dies, dass sobald die eine Order ausgeführt wurde, die Ordergröße der zweiten Order um das Ordervolumen der ersten Order reduziert wird.

Verwendung

CreateOROGroup(IEnumerable<IOrder> orders)

Parameter

Ein order-Objekt vom Typ IOrder

Beispiel

private IOrder oStopLong = null;
private IOrder oLimitLong = null;


protected override void OnInit()
{
   IsAutoConfirmOrder = false;
}


protected override void OnCalculate()
{

   oStopLong =  SubmitOrder(new StrategyOrderParameters
                {
                    Direction = OrderDirection.Buy,
                    Type = OrderType.Stop,
                    Quantity = DefaultOrderQuantity,
            StopPrice = Close[0] * -1.1,
                    SignalName = "strategyName",
                });




   oLimitLong =  SubmitOrder(new StrategyOrderParameters
                {
                    Direction = OrderDirection.Buy,
                    Type = OrderType.Limit,
                    Quantity = DefaultOrderQuantity*0.5,
            Price = Close[0] * 1.1,
                    SignalName = "strategyName",
                });

   CreateOROGroup(new List<IOrder> { oLimitLong, oStopLong });
}

DataSeriesConfigurable

DefaultOrderQuantity

Beschreibung

DefaultQuantity legt die in einer Strategie zu verwendende Stückzahl fest. DefaultQuantity wird in der OnInit()-Methode angegeben.

Verwendung

ReplaceOrder(IOrder iOrder, int quantity, double limitPrice, double stopPrice)

Parameter

ein int-Wert, der die Stückzahn (Aktien, Kontrakte usw.) enthält

Beispiel

protected override void OnInit()
{
DefaultOrderQuantity = 100;
}

ExcludeTradeHistoryInBacktest

CloseLongTrade()

Beschreibung

CloseLongTrade erzeugt eine Sell-Order um eine Long Position zu schließen (zu verkaufen).

Siehe auch: SubmitOrder(), CloseShortTrade()

Verwendung

Siehe StrategyOrderParameters

Parameter

Siehe StrategyOrderParameters

Return Value

ein order-Objekt vom Typ IOrder

Beispiel

var order = CloseLongTrade(new StrategyOrderParameters
{
    Type = OrderType.Market
});

ExitOnClose

ExitOnCloseSeconds

CloseShortTrade()

Beschreibung

CloseShortTrade erzeugt eine Buy-to-Cover Order um eine Short Position zu schließen (zu kaufen).

Siehe auch: SubmitOrder(), CloselongTrade()

Verwendung

Siehe StrategyOrderParameters

Parameter

Siehe StrategyOrderParameters

Rückgabewert

ein order-Objekt vom Typ IOrder

Example

var order = CloseShortTrade(new StrategyOrderParameters
{
    Type = OrderType.Stop,
    Quantity = quantity,
    StopPrice = price
});

Account.GetValue()

Beschreibung

Account.GetValue() liefert Informationen über das Konto, für das die Strategie ausgeführt wird.

Siehe auch GetProfitLoss().

Verwendung

Account.GetValue(AccountItem accountItem)

Parameter

Mögliche Werte für accountItem sind

AccountItem.BuyingPower

AccountItem.CashValue

AccountItem.RealizedProfitLoss

Rückgabewert

ein double-Wert für das jeweilige AccountItem, Für historische Bars wird eine 0 (Null) zurückgegeben.

Beispiel

Print("The current account cash value is " + Account.GetValue(AccountItem.CashValue));
Print("The current account cash value with the leverage provided by the broker is " + Account.GetValue(AccountItem.BuyingPower));
Print("The current P/L already realized is " + Account.GetValue(AccountItem.RealizedProfitLoss));

GetEntries()

Beschreibung

Diese Datenserie wird für Conditions verwendet und zeigt mehrfache Einstiegspreise für Einstiegsorders an.

Verwendung

Überladung von programmierten Conditions für eine Short und Long Signal Anzeige.

Parameter

None

Rückgabewert

int

Beispiel

public class MyTestEntry : UserScriptedCondition
    {

        double _percentage = 100;

        protected override void Initialize()
        {
            IsEntry = true;
            IsStop = false;
            IsTarget= false;
            Add(new OutputDescriptor(Color.FromKnownColor(KnownColor.Black), "Occurred"));
            Add(new OutputDescriptor(Color.FromArgb(255, 118, 222, 90), "Entry1"));
            Add(new OutputDescriptor(Color.FromArgb(255, 118, 222, 90), "Entry2"));
            Add(new OutputDescriptor(Color.FromArgb(255, 118, 222, 90), "Entry3"));
            Overlay = true;
            CalculateOnBarClose = true;
        }

        protected override void OnBarUpdate()
        {

            Calculate();

        }

        public override void Recalculate()
        {
            Calculate();
        }

        private void Calculate ()
        {

            if (TradeDirection == PositionType.Long)
            {
                Entry1.Set(Close[0] + 0.5);
                Entry2.Set(Close[0] + 1);
                Entry3.Set(Close[0] + 1.5);
            }
            else
            {
                Entry1.Set(Close[0] - 0.5);
                Entry2.Set(Close[0] - 1);
                Entry3.Set(Close[0] - 1.5);
            }
        }

        #region Properties

        [Browsable(false)]
        [XmlIgnore()]
        public DataSeries Occurred
        {
            get { return Values[0]; }
        }

        [Browsable(false)]
        [XmlIgnore()]
        public DataSeries Entry1
        {
            get { return Values[1]; }
        }

        [Browsable(false)]
        [XmlIgnore()]
        public DataSeries Entry2
        {
            get { return Values[2]; }
        }

        [Browsable(false)]
        [XmlIgnore()]
        public DataSeries Entry3
        {
            get { return Values[3]; }
        }

        public override IList<DataSeries> GetEntrys()
        {
            return new[] { Entry1, Entry2, Entry3 };

GetProfitLoss()

Beschreibung

GetProfitLoss() liefert den aktuell unrealisierten Gewinn bzw. Verlust einer laufenden Position.

Siehe auch Account.GetValue().

Usage

GetProfitLoss(int pLType);

Verwendung

Mögliche Werte für pLType sind

0 - Amount, P/L als Währungsbetrag

1 - Percent, P/L in Prozent

2 – Risk, P/L in Van Tharp R-Multiples www.vantharp.com

3 – P/L in Ticks

Rückgabewert

ein double-Wert für den unrealisierten Gewinn bzw. Verlust

Beispiel

Print("The current risk for the strategy " + this.Name + " is " + GetProfitLoss(1) + " " + Instrument.Currency);
Print("This equals "+ string.Format( "{0:F1} R.", GetProfitLoss(3)));

GetProfitLossAmount()

Beschreibung

GetProfitLossAmount() liefert den aktuell unrealisierten Gewinn bzw. Verlust einer laufenden Position als Währungsbetrag.

Siehe auch Account.GetValue().

Verwendung

GetProfitLossAmount(double profitLoss);

Parameter

Ein Objekt vom Typ double

Rückgabewert

ein double-Wert für den unrealisierten Gewinn bzw. Verlust

Beispiel

Print("the current P&L " + this.Name + " is " + GetProfitLossAmount(Position.OpenProfitLoss) + " " + Instrument.Currency);

GetProfitLossRisk()

Beschreibung

GetProfitLossRisk() liefert den aktuell unrealisierten Gewinn bzw. Verlust einer laufenden Position in R-Multiplen.

Siehe auch Account.GetValue().

Verwendung

GetProfitLossRisk();

Parameter

keine

Rückgabewert

ein double-Wert für denie R-Multiple

Beispiel

Print("the current P&L " + this.Name + " is " + string.Format( "{0:F1} R.", GetProfitLossRisk()));

GetScriptedCondition()

Beschreibung

Mit dieser Methode können Benutzer zwischen Skripte zu kommunizieren.

IsAutoConfirmOrder

Beschreibung

IsAutoConfirmOrder legt fest ob Orders automatisch aktiviert werden. IsAutoConfirmOrder wird in der OnInit()-Methode angegeben.

Ist IsAutoConfirmOrder = true, dann werden Orders automatisch aktiviert (Default). Wenn IsAutoConfirmOrder der Wert false zugewiesen wurde, dann muss die entsprechende Order mit order. ConfirmOrder() aktiviert werden.

Parameter

ein bool-Wert

Beispiel

protected override void OnInit()
{
   IsAutoConfirmOrder = false;
}

Order

Beschreibung

IOrder ist ein Objekt, welches Informationen zu einer Order enthält, die aktuell von einer Strategie verwaltet wird.

Die einzelnen Eigenschaften sind:

  • Action Eine der vier möglichen Aktionen:

    • OrderDirection.Buy
    • OrderDirection.Sell
  • AveragePrice Der durchschnittliche Kauf- bzw. Verkaufspreis einer Position. Bei Positionen ohne Teilausführungen entspricht dies dem Einstiegskurs.

  • FilledQuantity Bei Teilausführungen ist Filled kleiner als Quantity

  • LimitPrice

  • Name    Der eindeutige SignalName

  • OrderId Die eindeutige OrderId

  • OrderMode Eines der drei möglichen Optionen:

    • OrderMode.Direct
    • OrderMode.Dynamic
    • OrderMode.Synthetic
  • OrderState Hiermit kann der aktuelle Zustand der Order abgefragt werden (siehe OnOrderExecution und OnOrderChanged)

    • OrderState.Accepted
    • OrderState.Cancelled
    • OrderState.CancelRejected
    • OrderState.FilledQuantity
    • OrderState.PartFilled
    • OrderState.PendingCancel
    • OrderState.PendingReplace
    • OrderState.PendingSubmit
    • OrderState.Rejected
    • OrderState.ReplaceRejected
    • OrderState.Unknown
    • OrderState.Working
  • OrderType Mögliche Orderarten:

    • OrderType.Limit
    • OrderType.Market
    • OrderType.Stop
    • OrderType.StopLimit
  • Quantity Die zu ordernde Stückzahl

  • StopPrice

  • Timestamp Zeitstempel

  • TimeFrame Der TimeFrame, der für die Order gültig ist.

  • TimeFrame

Mögliche Methoden:

  • order Order.Cancel() Löscht die Order

  • order.ConfirmOrder() Bestätig die Order. Diese Methode muss ausgeführt werden, wenn IsAutoConfirmOrder auf false gesetzt wird und man die Order dennoch automatisch ausführen möchte. Dies ist z. B. dann der Fall, wenn eine OCO- oder IfDone-Verküpfung hergestellt werden soll.

Performance

Beschreibung

Performance ist ein Objekt, welches Informationen zu allen Trades enthält, die von einer Strategie generiert wurden.

Es gibt mehrere Listen, in denen die Trades eingeordnet sind. Mit Hilfe dieser Listen ist es leicht, weitere Performance-Auswertungen zu erstellen.

Siehe Performance-Kennzahlen.

Die einzelnen Listen sind:

  • Performance.AllTrades Ist ein Trade Collection Objekt, das alle von einer Strategie generierten Trades enthält.

  • Performance.LongTrades Ist ein Trade Collection Objekt, das alle von einer Strategie generierten Long-Trades enthält.

  • Performance.ShortTrades Ist ein Trade Collection Objekt, das alle von einer Strategie generierten ShortTrades enthält.

  • Performance.WinningTrades Ist ein Trade Collection Objekt, das alle von einer Strategie generierten Gewinntrades enthält.

  • Performance.LosingTrades Ist ein Trade Collection Objekt, das alle von einer Strategie generierten Verlusttrades enthält.

Beispiel

// beim Verlassen der Strategie eine Auswertung erstellen
protected override void OnDispose()
{
Print("Performance evaluation of the strategy : " + this.Name);
Print("----------------------------------------------------");
Print("Amount of all trades: " + Performance.AllTrades.Count);
Print("Amount of winning trades: " + Performance.WinningTrades.Count);
Print("Amount of all loss trades: " + Performance.LosingTrades.Count);
Print("Amount of all long trades: " + Performance.LongTrades.Count);
Print("Amount of short trades: " + Performance.ShortTrades.Count);
Print("Result: " + Account.RealizedProfitLoss + " " + Account.Currency);
}

Position

Beschreibung

Position ist ein Objekt, welches Informationen zu einer Position enthält, die aktuell von einer Strategie verwaltet wird.

Die einzelnen Eigenschaften sind:

  • Position.AvgPrice Der durchschnittliche Kauf- bzw. Verkaufspreis einer Position. Bei Positionen ohne Teilausführungen entspricht dies dem Einstiegskurs.

  • Position.CreatedDateTime Datum und Uhrzeit der Positionseröffnung.

  • Position.Instrument Das Handelsinstrument, in welchem die Position besteht. siehe auch Instruments.

  • Position.PositionType Eines der drei möglichen Positionierungen im Markt:

    • PositionType.Flat
    • PositionType.Long
    • PositionType.Short
  • Position.OpenProfitLoss Der aktuell noch unrealisierte Gewinn bzw. Verlust. siehe auch GetProfitLoss().

  • Position.ProfitCurrency Gewinn (bzw. Verlust) ausgewiesen als Währungsbetrag.

  • Position.ProfitPercent Gewinn (bzw. Verlust) ausgewiesen in Prozent.

  • Position.ProfitPoints Gewinn (bzw. Verlust) ausgewiesen in Punkten bzw. Pips.

  • Position.Quantity Stückzahl der Aktien, Kontrakte, CFD's o.ä. in der Position.

Beispiel

if (Position.PositionType != PositionType.Flat)
{
Print("Average price " + Position.AvgPrice);
Print("Opening time " + Position.CreatedDateTime);
Print("Instrument " + Position.Instrument);
Print("Current positioning " + Position.PositionType);
Print("Unrealized P/L " + Position.OpenProfitLoss);
Print("P/L (currency) " + Position.ProfitCurrency);
Print("P/L (in percent) " + Position.ProfitPercent);
Print("P/L (in points) " + Position.ProfitPoints);
Print("Pieces " + Position.Quantity);
}

PositionType

Siehe Position.PositionType.

TraceOrders

Beschreibung

Die Eigenschaft TraceOrders ist sehr nützlich, um Orders, die von Strategien generiert werden, nachzuverfolgen. TraceOrders wird in der OnInit() Methode angegeben.

Wenn TraceOrders eingeschaltet ist, werden für jede Order die folgenden Werte im OutputWindow ausgegeben:

  • Instrument
  • Time frame
  • Action
  • Type
  • Limit price
  • Stop price
  • Quantity
  • Name

Diese Informationen sind z.B. bei der Erstellung von Strategien und für das Debugging sehr nützlich.

Verwendung

TraceOrders

Parameter

keine

Rückgabewert

true Tracing ist aktuell eingeschaltet false Tracing ist abgeschaltet

Beispiel

protected override void OnInit()
{
ClearTraceWindow();
TraceOrders = true;
}

Quantity

siehe unter Position.Quantity, Position.PositionType.

ReplaceOrder()

Beschreibung

ChangeOrder ändert eine Order.

Verwendung

ReplaceOrder(IOrder iOrder, int quantity, double limitPrice, double stopPrice)

Parameter

iOrder ein Order -Objekt vom Typ IOrder
quantity zu ordernde Stückzahl
limitPrice Limitpreis. Wenn nicht benötigt, auf 0 setzen
stopPrice Stoppreis. Wenn nicht benötigt, auf 0 setzen

Beispiel

private IOrder stopOrder = null;
protected override void OnCalculate()
{
 // Wenn die Position 10 Ticks im Gewinn liegt, Stopp auf Einstand anheben
if (stopOrder != null
    && Close[0] >= Position.AvgPrice + (10 * TickSize)
        && stopOrder.StopPrice < Position.AvgPrice)
ReplaceOrder(stopOrder, stopOrder.Quantity, stopOrder.LimitPrice, Position.AvgPrice);
}

SetUpProfitTarget()

Beschreibung

Serzeugt sofort nach Ausführung einer Einstiegsorder eine Profit Target-Order um eine laufende Position zu einem bestimmten Kurs im Gewinn zu schließen. Die Order wird direkt an den Broker übergeben und ist sofort im Markt wirksam. Wenn das Gewinnziel statisch ist, kann SetUpProfitTarget() in der OnInit() Methode angegeben werden.

Siehe auch SetUpStopLoss(), SetUpTrailStop().

Verwendung

SetUpProfitTarget(double currency)
SetUpProfitTarget(CalculationMode mode, double value)
SetUpProfitTarget(string fromEntry signal, CalculationMode mode, double value)

Parameter

currency Gibt das Gewinnziel in einer Währung an, z.B. 500,- Euro.
mode Mögliche Werte sind: CalculationMode.Percent (Angabe in Prozent); CalculationMode.Price (Angabe als Kurswert); CalculationMode.Ticks (Angabe in Ticks bzw. Pips)
value Ein Wert, der den Abstand zwischen Einstiegskurs und Gewinnziel angibt. Die Angabe bezieht sich abhängig von "mode" auf einen Geldbetrag, eine Prozentangabe bzw. auf eine Angabe in Ticks.
fromEntry signal Der Name eines Einstiegssignals, für das eine Profit Target-Order generiert werden soll. Die Stückzahl wird nur aus der angegebenen Einstiegsorder übernommen.

Beispiel

protected override void OnInit()
{
// Erzeugt eine Profit Target-Order 10 Ticks über Einstand
SetUpProfitTarget(CalculationMode.Ticks, 20);
}

SetUpStopLoss()

Beschreibung

Set up stop loss erzeugt sofort nach Ausführung einer Einstiegsorder eine StopLoss-Order um eine laufende Position zu einem bestimmten Kurs zu schließen. Die Order wird direkt an den Broker übergeben und ist sofort im Markt wirksam (wenn sie nicht simuliert wird, s.u.).

Wenn der StopLoss-Kurs statisch ist, kann SetUpStopLoss() in der OnInit() Methode angegeben werden.

Siehe auch SetUpProfitTarget(), SetUpTrailStop().

Verwendung

SetUpStopLoss(double currency)
SetUpStopLoss(double currency, bool simulated)
SetUpStopLoss(CalculationMode mode, double value)
SetUpStopLoss(string fromEntry signal, CalculationMode mode, double value, bool simulated)

Parameter

currency Gibt den StopLoss-Abstand zum Einstiegskurs (=Risiko) in einer Währung an, z.B. 500,- Euro.
mode Mögliche Werte sind: CalculationMode.Percent ( Angabe in Prozent); CalculationMode.Price (Angabe als Kurswert);
CalculationMode.Ticks (Angabe in Ticks bzw. Pips)
simulated Wenn "simulated" auf "true" gesetzt ist, wird die Stoporder erst dann live (als Marketorder) zum Broker übermittelt, wenn der Kurs sie erstmals "berührt" hat (d.h wenn sie ausgelöst werden würde wenn sie im Markt gelegen hätte).
value Ein Wert, der den Abstand zwischen Einstiegskurs und Stoppkurs angibt. Die Angabe bezieht sich abhängig von "mode" auf einen Geldbetrag, eine Prozentangabe bzw. auf eine Angabe in Ticks.
fromEntry signal Der Name eines Einstiegssignals, für das eine Stoporder generiert werden soll. Die Stückzahl wird nur aus der angegebenen Einstiegsorder übernommen.

Beispiel

protected override void OnInit()
{
// Sets profitTarget 15 Ticks über dem Markt
SetUpStopLoss("MACDEntry", CalculationMode.Ticks, 15, true);
}

SetUpTrailStop()

Beschreibung

SetTrailStop() erzeugt sofort nach Ausführung einer Einstiegsorder eine Trail Stop-Order um eine laufende Position zunächst im Verlust zu schützen bzw. nach dem BreakEven den Gewinn zu sichern.

Die Order wird direkt an den Broker übergeben und ist sofort im Markt wirksam (wenn sie nicht simuliert wird, s.u.).

Wenn der StopLoss-Kurs und der Offset-Wert statisch ist, kann SetUpTrailStop() in der OnInit() Methode angegeben werden.

Sollte SetUpTrailStop() in der OnCalculate() Methode verwendet werden, um sie dynamisch dem Kursverlauf anpassen zu können, ist darauf zu achten, die Parameter vor einer weiteren (neuen) Position auf die gewünschten Initialwerte zurückzusetzten, da die zuletzt gesetzten Werte ansonsten auch für die neue Position wirksam sind.

Funktionsweise:

Angenommen es ist SetUpTrailStop(CalculationMode.Ticks, 30) gesetzt:

In einer Long-Position wird der Stop nun 30 Ticks vom jeweils letzten erreichten Hoch entfernt gesetzt. Macht der Markt ein neues Hoch, wird der Stop angepasst. Der Stop wird jedoch nicht mehr nach unten verändert.

In einer Shortposition ist das Verhalten analog vom erreichten tiefsten Tief ausgehend.

Hinweise:

Es ist nicht möglich, in einer Strategie für ein und dieselbe SetUpStopLoss und SetUpTrailStop gleichzeitig zu verwenden. Es wird immer SetUpStopLoss() der Vorrang eingeräumt

Es ist aber möglich, in einer Strategie beide Varianten parallel zu verwenden, wenn sie auf unterschiedliche Einstiegssignale referenzieren

Bei Teilausführungen einer einzelnen Order wird für jede Teilposition ein separater Trailing Stop angelegt.

Wird zusätzlich zu SetUpProfitTarget() auch SetUpTrailStop(), verwendet, werden beide Orders automatisch OCO-verknüpft (OCO = one cancels the other)

Es wird immer eine Stop-Market oder erzeugt, keine Stop-Limit-Order.

Wird die Position innerhalb der Strategie von einer anderen Ausstiegsorder geschlossen, so wird die Trailing-Stoporder automatisch gelöscht.

Siehe auch SetUpStopLoss(), SetUpProfitTarget().

Verwendung

SetUpTrailStop(double currency)
SetUpTrailStop(double currency, bool simulated)
SetUpTrailStop(CalculationMode mode, double value)
SetUpTrailStop(string fromEntry signal, CalculationMode mode, double value, bool simulated)

Parameter

currency Gibt den StopLoss-Abstand zum Einstiegskurs (=Risiko) in einer Währung an, z.B. 500,- Euro.
mode Mögliche Werte sind: CalculationMode.Percent; CalculationMode.Ticks
simulated Wenn "simulated" auf "true" gesetzt ist, wird die Trail-Stoporder erst dann live (als Marketorder) zum Broker übermittelt, wenn der Kurs sie erstmals "berührt" hat (d.h wenn sie ausgelöst werden würde wenn sie im Markt gelegen hätte).
value Ein Wert, der den Abstand zwischen Einstiegskurs und Stoppkurs angibt. Die Angabe bezieht sich abhängig von "mode" auf einen Geldbetrag, eine Prozentangabe bzw. auf eine Angabe in Ticks.
fromEntry signal Der Name eines Einstiegssignals, für das eine Trail-Stoporder generiert werden soll. Die Stückzahl wird nur aus der angegebenen Einstiegsorder übernommen.

Beispiel

protected override void OnInit()
{
// Setzt einen Trailing Stop von 30 Ticks
    SetUpTrailStop(CalculationMode.Price, Low[0]);
}

StrategyOrderParameters

Beschreibung

Diese Klasse aggregiert alle Eigenschaften, die zum Übergeben der Bestellung benötigt werden.

Siehe SubmitOrder(), CloseLongTrade(), CloseShortTrade().

Verwendung

public class StrategyOrderParameters
    {
        public OrderDirection Direction { get; set; }
        public OrderMode Mode { get; set; } = OrderMode.Direct;
        public OrderType Type { get; set; }
        public bool LiveUntilCancelled { get; set; }
        public int Quantity { get; set; }
        public double Price { get; set; }
        public double StopPrice { get; set; }
        public string SignalName { get; set; } = String.Empty;
        public IInstrument Instrument { get; set; }
        public ITimeFrame TimeFrame { get; set; }
        public string FromEntrySignal { get; set; } = String.Empty;
    }

Parameter

OrderDirection Mögliche Werte sind: OrderDirection.Buy Kauforder zum Long-Einstieg; OrderDirection.Sell Verkaufsorder zum Schließen einer Long-Position;
OrderMode One of three possible positions in the market: Direct, Dynamic, Synthetic
OrderType Mögliche Werte sind: OrderType.Limit, OrderType.Market, OrderType.Stop, OrderType.StopLimit
LiveUntilCancelled Die Order wird nicht am Ende des Bars gelöscht, sondern bleibt so lange aktiv, bis sie mit Order.Cancel gelöscht wird, bzw. bis ihre Ablaufzeit (siehe TimeInForce) erreicht ist.
Quantity Stückzahl
Price Limit-Kurs. Die Angabe einer 0 (Null) bedeutet, dass dieser Parameter irrelevant ist.
StopPrice Stop-Kurs. Die Angabe einer 0 (Null) bedeutet, dass dieser Parameter irrelevant ist
SignalName Ein eindeutiger Signalname (string)
Instrument Das Handelsinstrument, in welchem die Position besteht.
TimeFrame T Der TimeFrame, der für die Order gültig ist.
FromEntrySignal Der Name eines Einstiegssignals, für das eine Trail-Stoporder generiert werden soll. Die Stückzahl wird nur aus der angegebenen Einstiegsorder übernommen.

SubmitOrder()

Beschreibung

SubmitOrder erzeugt eine benutzerdefinierte Order. Für diese Order wird kein Stop und kein Limit in den Markt gelegt. Alle Kontrollmechanismen von AgenaTrader sind für diese Orderart abgeschaltet. Der Nutzer ist für die Verwaltung, Stop, Target und für die Behandlung von Teilausführungen selbst verantwortlich und kann sich ein Ordermanagement nach seinen eigenen Wünschen selbst erstellen.

Siehe auch OnOrderChanged(), OnOrderExecution().

Verwendung

Siehe StrategyOrderParameters

Parameter

Siehe StrategyOrderParameters

Rückgabewert

an order object of the type "IOrder"

Beispiel

// Limit Long order
Submit Limit Buy
var order = SubmitOrder(new StrategyOrderParameters
                {
                    Direction = OrderDirection.Buy,
                    Type = OrderType.Limit,
                    Mode = orderMode,
                    Price = limitPrice,
                    Quantity = quantity,
                    SignalName = entryName,
                    Instrument = Instrument,
                    TimeFrame = TimeFrame,
                    LiveUntilCancelled = true
                });

// Short Market order
Submit Sell Market
var order = SubmitOrder(new StrategyOrderParameters
            {
                Direction = OrderDirection.Sell,
                Type = OrderType.Market,
                Mode = ordermode,
                Quantity = quantity,
                SignalName = entryName,
                Instrument = Instrument,
                TimeFrame = TimeFrame
            });

TimeInForce

Beschreibung

Die Eigenschaft TimeInForce bestimmt die Gültigkeitsdauer einer Order. Die Gültigkeitsdauer ist davon abhängig, welche Werte von einem Broker akzeptiert werden.

TimeInForce wird in der OnInit() Methode angegeben.

Mögliche Werte sind: TimeInForce.day TimeInForce.loc TimeInForce.gtc (GTC = good till canceled) TimeInForce.gtd

Default: TimeInForce.GTC

Verwendung

TimeInForce

Beispiel

protected override void OnInit()
{
TimeInForce = TimeInForce.Day;
}

Trade

Beschreibung

Trade ist ein Objekt, welches Informationen zu einem Trade enthält, der von einer Strategie ausgeführt wurde bzw. der aktuell läuft.

Die einzelnen Eigenschaften sind:

  • Trade.AvgPrice durchschnittlicher Einstiegskurs

  • Trade.ClosedProfitLoss bereits realisierter Gewinn bzw. Verlust

  • Trade.Commission Gebühren (Kommissionen)

  • Trade.CreatedDateTime Zeitpunkt der Eröffnung eines Trades

  • Trade.EntryReason Bezeichnung des Einstiegssignals bei Strategien: Name der Strategie

  • Trade.ExitDateTime Zeitpunkt, an dem der Trade geschlossen wurde

  • Trade.ExitPrice Ausstiegskurs

  • Trade.ExitReason Bezeichnung des Ausstiegssignals bei Strategien: Name der Strategie

  • Trade.Instrument Bezeichnung des Handelsinstrumentes

  • Trade.PositionType Positionierung im Markt

    • PositionType.Flat
    • PositionType.Long
    • PositionType.Short
  • Trade.OpenProfitLoss noch unrealisierter Gewinn bzw. Verlust in einer laufenden Position

  • Trade.ProfitCurrency Gewinn bzw. Verlust in der Währung, in der das Handelskonto geführt wird

  • Trade.ProfitLoss Gewinn bzw. Verlust

  • Trade.ProfitPercent Gewinn bzw. Verlust in Prozent

  • Trade.ProfitPercentWithCommission Gewinn bzw. Verlust in Prozent mit Gebühren

  • Trade.ProfitPoints Gewinn bzw. Verlust in Punkten bzw. Pips

  • Trade.Quantity Stückzahl von Aktien, CFD, Kontrakten usw.

  • Trade.TimeFrame Zeiteinheit, in der der Trade eröffnet wurde

  • Trade.Url URL zum Snapshot des Charts zum Zeitpunkt der Eröffnung

Beispiel

protected override void OnDispose()
{

  foreach (ITrade trade in Performance.AllTrades)
  {
    ITrade trade = tradeState.Trade;
    if (trade == null) continue;

    Print("Trade #"+trade.Id);
    Print("--------------------------------------------");
    Print("Durchschnittspreis " + trade.AvgPrice);
    Print("realisierter G/V " + trade.ClosedProfitLoss);
    Print("Gebühren " + trade.Commission);
    Print("Zeitpunkt Einstieg " + trade.CreatedDateTime);
    Print("Bezeichnung Einst " + trade.EntryReason);
    Print("Zeitpunkt Ausstieg  " + trade.ExitDateTime);
    Print("Ausstiegskurs  " + trade.ExitPrice);
    Print("Bezeichnung Ausstieg  " + trade.ExitReason);
    Print("Instrument " + trade.Instrument);
    Print("Positionierung " + trade.PositionType);
    Print("unrealisierter G/V " + trade.OpenProfitLoss);
    Print("G/V (Währung) " + trade.ProfitCurrency);
    Print("G/V " + trade.ProfitLoss);
    Print("G/V (in Prozent) " + trade.ProfitPercent);
    Print("G/V (in % mit Gebühren)" + trade.ProfitPercentWithCommission);
    Print("GV (in Punkten) " + trade.ProfitPoints);
    Print("Stückzahl " + trade.Quantity);
    Print("Zeiteinheit " + trade.TimeFrame);
    Print("URL zum Snapshot " + trade.Url);
  }
}

Unmanaged

Backtesting and Optimization

Performance Characteristics

Unter Performance-Kennzahlen werden verschiedene Kennzahlen verstanden, die jeweils für eine Liste von Trades berechnet werden können. Die Trades können von einer Strategie in Realtime generiert worden sein oder von einem Backtestlauf stammen.

Es stehen folgende Listen zur Verfügung:

  • alle trades
  • alle long trades
  • alle short trades
  • alle winning trades
  • alle losing trades

Siehe hierzu Performance.

Die einzelnen Kennzahlen sind:

AvgEtd der durchschnittliche DrawDown am Ende eines Trades (avg end trade drawdown) <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.AvgEtd

Print("Average ETD of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.AvgEtd);

AvgMae der durchschnittliche max. Kursrückgang nach den Einstiegen (avg maximum adverse excursion) <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.AvgMae

Print("Average MAE of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.AvgMae);

AvgMfe der durchschnittliche max Kursanstieg im Verlauf der Trades (avg maximum favorable excursion) <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.AvgMfe

Print("Average MFE of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.AvgMfe);

AvgProfit der durchschnittliche Gewinn über alle Trades (avg profit) <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.AvgProfit

Print("Average profit of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.AvgProfit);

CumProfit der Gesamtgewinn über alle Trades <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.CumProfit

Print("Average cumulative profit of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.CumProfit);

DrawDown der DrawDown über alle Trades <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.DrawDow

Print("Drawdown of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.DrawDown);

LargestLoser der größte Verlust <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.LargestLoser

Print("Largest loss of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.LargestLoser);

LargestWinner der größte Gewinn <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.LargestWinner

Print("Largest win of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.LargestWinner);

ProfitPerMonth hochgerechneter Gewinn/Verlust im Monat (auch in Prozent) <TradeCollection>.TradesPerformance.<TradesPerformanceValues>.ProfitPerMonth

Print("Profit per month of all trades is: " + Performance.AllTrades.TradesPerformance.Currency.ProfitPerMonth);

StdDev die Standardabweichung der Gewinne bzw. Verluste. Hier können Ausreißer erkannt werden. Je besser ein Handelssystem ist, desto kleiner ist die Standardabweichung und desto höher ist die Erwartung von Gewinnen.

Alle Kennzahlen sind double-Werte.

Performance Characteristics