Über die API-Referenz von Quantopian übersetze ich den Teil, den Sie interessieren, anstelle eines Memos ins Japanische. Der Autor kann nicht gut Englisch, bitte verstehen Sie den Text.
Der Algorithmus muss zwei Methoden implementieren, "initialize" und "handle_data". Die dritte Methode ist "before_trading_start", was optional ist.
initialize(context)
Wird zu Beginn des Backtests nur einmal aufgerufen. Das Kontextobjekt kann an alle anderen Methoden im Algorithmus übergeben werden.
Kontext: Ein leeres Wörterbuch zum Zeitpunkt der Initialisierung. Sie können entweder in Punkt- oder in Klammernotation auf die Eigenschaft zugreifen.
Rückgabewert Keiner
handle_data(context, data)
Wird jedes Mal aufgerufen, wenn ein Marktereignis (Balkenaktualisierung) auftritt.
Daten: Ein Wörterbuch, das mit der Securities ID (SID) versehen ist, einschließlich Universumsfragen. Stellt eine Momentaufnahme des Aktienuniversums zum Zeitpunkt des Aufrufs dieser Methode dar.
Kontext: Entspricht demjenigen, der bei der Initialisierung angezeigt wurde. Speichert benutzerdefinierte Status- und Portfolioobjekte.
Rückgabewert Keiner
before_trading_start(context, data)
Wird nur einmal am Tag vor Marktöffnung angerufen. Der Hauptzweck besteht darin, die zugrunde liegende Datenbank von Quantopian abzufragen, um die Finanzdaten einzelner Unternehmen zu untersuchen. Anhand der Basisdaten Ihres Unternehmens können Sie das in Ihrem Algorithmus zu verwendende Aktienuniversum anhand von über 600 messbaren Kriterien festlegen.
Kontext: Entspricht demjenigen, der bei der Initialisierung angezeigt wurde. Speichert benutzerdefinierte Status- und Portfolioobjekte.
Rückgabewert Keiner
Der Algorithmus bietet verschiedene Bestellmethoden. Beim Erstellen einer Zielposition mit einer Funktion wie order_target werden abgeschlossene Aufträge berücksichtigt, offene Aufträge jedoch nicht.
Die Bestellmethoden, die im Algorithmus verwendet werden können, sind in der Tabelle aufgeführt. Regelmäßige Bestellungen werden mit der Anzahl der Aktien, dem Betrag und dem Prozentsatz aufgegeben, die durch den Betrag oder den Prozentsatz angegeben werden. Die Zielbestellung berücksichtigt die vorhandene Position und erstellt eine Bestellung, sodass die Position nach der Bestellung der Anzahl der Aktien, des Betrags und des Prozentsatzes entspricht, die durch den Betrag oder den Prozentsatz angegeben werden. Beim Aufbau einer Zielposition mit einem Zielauftrag werden geschlossene Aufträge berücksichtigt, offene Aufträge jedoch nicht.
Auftragsart | Regelmäßige Bestellung | Zielbestellung |
---|---|---|
Geben Sie die Anzahl der Freigaben an | order() | order_target() |
Betragsspezifikation | order_value() | order_target_value() |
Gewichtsspezifikation | order_percent() | order_target_percent() |
Sie können den Auftragstyp style = OrderType für alle Auftragstypen angeben. Der Standardwert ist MarketOrder, mit dem Sie StopOrder, LimitOrder und StopLimitOrder (Limit + Stop) verwenden können.
order(security, amount, style=OrderType)
order_target(security, amount, style=OrderType)
Bestellung erstellt eine Bestellung für die angegebene Marke und Menge. order_target erstellt eine Bestellung, sodass die Anzahl der Aktien nach der Bestellung der Zielanzahl der Aktien entspricht. Wenn keine Position vorhanden ist, wird eine Bestellung für die gesamte Menge erstellt, die durch den Betrag angegeben wird. Wenn eine Position vorhanden ist, entspricht die Differenz zwischen der Zielanzahl der Aktien und der Anzahl der aktuell gehaltenen Aktien der Bestellmenge. Wenn Sie beispielsweise 5 AAPL-Aktien in Ihrem aktuellen Portfolio haben und order_target (Symbol ('AAPL'), 20) ausführen, wird eine Bestellung für die Differenz von 15 Aktien erstellt.
Sicherheit: Wertpapierobjekt Betrag: Geben Sie die Anzahl der Freigaben als Ganzzahl an. Positive Zahlen sind Käufe und negative Zahlen sind Verkäufe. Stil: Geben Sie die Auftragsart an.
Rückgabewert Auftragsnummer
order_value(security, amount, style=OrderType)
order_target_value(security, amount, style=OrderType)
order_value erstellt eine Bestellung mit dem angegebenen Betrag. Wenn Sie beispielsweise AAPL \ $ 1000 kaufen möchten, geben Sie order_value (Symbol ('AAPL'), 1000) an. Wenn der Preis für AAPL \ $ 105 beträgt, werden 9 Aktien gekauft. Brüche werden abgeschnitten. order_target_value erstellt eine Bestellung, sodass der Betrag nach der Bestellung der Zielbetrag ist. Wenn keine Position vorhanden ist, wird eine vollständige Bestellung erstellt, die durch den Betrag angegeben wird. Wenn Sie eine bestehende Position haben, ist die Differenz zwischen dem Zielbetrag und dem aktuellen Haltebetrag der Auftragsbetrag. Wenn Sie beispielsweise \ $ 500 in AAPL in Ihrem aktuellen Portfolio haben, wird durch Ausführen von order_target_value (Symbol ('AAPL'), 2000) eine Bestellung mit einer Differenz von \ $ 1500 erstellt.
Sicherheit: Wertpapierobjekt Geben Sie den Betrag mit dem Betrag an: float. Positive Zahlen sind Käufe und negative Zahlen sind Verkäufe. Stil: Geben Sie die Auftragsart an.
Rückgabewert Auftragsnummer
order_percent(security, amount, style=OrderType)
order_target_percent(security, percent, style=OrderType)
order_percent erstellt einen Auftrag mit einer bestimmten Gewichtung für den Wert des Portfolios. Der Wert des Portfolios ist der Wert der Position und der Gesamtbetrag an Bargeld. Der Prozentsatz muss als Bruch angegeben werden. Beispielsweise erstellt order_percent (Symbol ('AAPL'), .5) einen Kaufauftrag für AAPL mit 50% des Werts des aktuellen Portfolios. order_target_percent erstellt eine Bestellung, sodass das Gewicht nach der Bestellung das Ziel ist. Wenn keine Position vorhanden ist, wird eine vollständige Bestellung in Prozent erstellt. Wenn eine Position vorhanden ist, ist die Differenz zwischen dem Zielgewicht und dem aktuell gehaltenen Gewicht die Bestellmenge. Wenn das aktuelle Portfolio beispielsweise eine AAPL-Gewichtung von 5% hat, wird durch Ausführen von order_target_percent (Symbol ('AAPL'), 0.1) eine Order mit einer Differenz von 5% erstellt.
Sicherheit: Wertpapierobjekt Menge: Geben Sie das Gewicht an. Positive Zahlen sind Käufe und negative Zahlen sind Verkäufe. Prozent: Geben Sie das Gewicht an. Positive Zahlen sind Käufe und negative Zahlen sind Verkäufe. Stil: Geben Sie die Auftragsart an.
Rückgabewert Auftragsnummer
cancel_order(order)
Bricht die angegebene Bestellung ab.
Bestellung: Bestellnummer
Rückgabewert Keiner
get_open_orders(sid=sid)
Wenn keine Wertpapier-ID oder Keine angegeben ist, wird ein durch die Wertpapier-ID verschlüsseltes Wörterbuch zurückgegeben. Das Wörterbuch speichert eine Liste mit Bestellinformationen für jede Wertpapier-ID in der Reihenfolge vom ältesten zum neuesten.
Wenn eine Wertpapier-ID angegeben ist, wird eine Liste der bestellten Bestellungen für die Wertpapier-ID zurückgegeben, sortiert nach der ältesten.
sid: (optional) Wertpapier-ID
Rückgabewert Wörterbuch oder Liste
get_order(order) Gibt die angegebenen Bestellinformationen zurück.
Bestellung: Bestellnummer
Rückgabewert Gibt ein lesbares und beschreibbares Auftragsobjekt zurück, wird jedoch am Ende von handle_data zerstört.
Relative Order
order(security, amount, style=RelativeOrder(offset, pct_offset, limit_price, exchange))
RelativeOrder ist ein Bestellformular, mit dem Sie zu einem aggressiveren Preis als NBBO (National Best Bid & Offer) [^ 1] ausführen können. Indem Sie ein aggressiveres Gebot und Angebot als NBBO abgeben, können Sie die Wahrscheinlichkeit erhöhen, dass Ihre Bestellung ausgeführt wird.
Es gibt feste Offsets (z. B. 2 Cent über und unter Bid / Offer) und prozentuale Offsets, die auch in Kombination verwendet werden können. Die Quotes werden automatisch an die Marktbewegung angepasst.
[^ 1]: ... Von den Preisen, die von allen inländischen Börsen und Market Makern angeboten werden, ist derjenige mit dem Gebot und Angebot, der für den Anleger am günstigsten ist.
Um dieses Bestellformular zu verwenden, abonnieren Sie die Marktdaten von IB für Relative Orders. Andernfalls liefert der IB Angebote, die 15 Minuten zu spät sind.
Wenn bei einer Kauforder der NBB (National Best Bid) steigt, wird der Orderpreis automatisch nach oben angepasst. Wenn die NBB fällt, wird der Bestellpreis nicht angepasst. Dies liegt daran, dass der Rückgang der NBB die bestehenden Aufträge aggressiver gemacht haben dürfte.
Bei Verkaufsaufträgen wird der Bestellpreis automatisch nach unten angepasst, wenn das NBO (National Best Offer) fällt. Wenn der NBO steigt, wird der Bestellpreis nicht angepasst. Dies liegt daran, dass der Anstieg der NBO die bestehenden Aufträge aggressiver gemacht haben dürfte.
Wenn Sie sowohl einen festen Versatz als auch einen prozentualen Versatz angeben, wählt der IB den aggressiveren und möglicheren der beiden Preise. (Höher zum Kaufen, niedriger zum Verkaufen)
In diesem Bestellformular können Sie auch ein Limit festlegen, damit es beim Kauf nicht über dem angegebenen Preis und beim Verkauf unter dem angegebenen Preis ausgeführt wird.
Bei einem erneuten Test mit diesem Bestellformular handelt es sich um eine einfache Marktbestellung. Es funktioniert wirklich nur als Relative Order, wenn es mit einem IB Real Money-Konto ausgeführt wird.
Wenn Backtester dieses Bestellformular unterstützen, werden sie in Zukunft ein benutzerdefiniertes Slippage-Modell einrichten.
Um dieses Bestellformular verwenden zu können, müssen Sie RelativeOrder aus der Bibliothek brokers.ib importieren.
Sicherheit: Wertpapierobjekt Betrag: Anzahl der bestellten Aktien. Offset: Fester Offsetwert von der aktuellen NBB oder NBO. In Dollar-Einheiten. pct_offset: Prozentualer Versatzwert von der aktuellen NBB oder NBO. Geben Sie zwischen 0 und 100 an. limit_price: Gibt den höchsten Kaufpreis oder den niedrigsten Verkaufspreis an. Austausch: Nicht verwendet. Für dieses Bestellformular gibt IB Live Trading eine Bestellung bei SMART [^ 2] auf. Wird ignoriert, wenn nicht Live Trading. Das Routing zum IEX-Exchange ist nicht zulässig.
[^ 2]: Ein Auftrag, der automatisch den Markt mit dem besten Preis aus mehreren Märkten wie SMART ... Smart Order Routing (SOR), Inlandsbörsen und Privatbörsen (PTS) auswählt und Verkäufe ausführt.
VWAPBestEffort
python
order(security, amount, style=VWAPBestEffort(limit_price=price1, start_date=date1,
end_date=date2, max_pct_vol=percent,
avoid_liquidity=False, exchange=Exchange))
VWAPBestEffort versucht, sich dem volumengewichteten Durchschnittspreis (VWAP) anzunähern, indem Aufträge in kleinere Teile unterteilt und über einen bestimmten Zeitraum ausgeführt werden. Dieses Bestellformular ist nur für den IB Live-Handel verfügbar. IB unterstützt Best Effort VWAP für Markt- und Limitaufträge. Stop Order und Limit + Stop Order werden nicht unterstützt. Dieses Bestellformular ist kompatibel mit Bestellformularen, die order, order_target, order_value, order_target_percent enthalten. Sobald eine Markt- oder Limit-Order bei der IB platziert wurde, verwendet der Broker den Best-Effort-Algorithmus, um die Order zu erfüllen.
Bei dieser Methode wird die Bestellung innerhalb des Zeitraums teilweise und bis zum Enddatum vollständig ausgeführt. Es wird dringend empfohlen, dass der Algorithmus nach offenen Aufträgen sucht, damit die Auftragslogik funktioniert.
Sie müssen die VWAPBestEffort-Klasse aus brokers.ib importieren, um eine VWAP-Bestellung aufzugeben.
Sicherheit: Wertpapierobjekt Betrag: Anzahl der bestellten Aktien. limit_price: (optional) Geben Sie den Limitpreis der Bestellung mit einer Bruchzahl an. Wenn Keine angegeben ist, handelt es sich um eine Marktorder. start_date: (optional) Gibt die VWAP-Startperiode an. Der Standardwert ist 1 Minute nach der Algorithmuszeit. BestEffort-Aufträge werden ab der nächsten Minute des IB ausgeführt. end_date: (optional) Gibt die VWAP-Endperiode an. Der Standardwert ist die Transaktionsendzeit. max_pct_volume: (optional) Gibt den Prozentsatz des täglichen Volumens an, das gehandelt werden darf. Der mögliche Bereich liegt zwischen 0,01 und 0,5. Der Standardwert ist 0,25. Vermeiden Sie Liquidität: (optional) Verhindert, dass Aufträge das Gebot / Angebot erfüllen. Dies hilft Ihnen, die Liquiditätsbeschaffungsgebühr [^ 3] zu vermeiden, und Sie erhalten einen Liquiditätsangebotsrabatt. Die Abweichung von der Benchmark kann jedoch zunehmen. Dieser Parameter ist ein boolescher Wert und standardmäßig False. Austausch: (optional) Gibt die Weiterleitung der Bestellung an. Die Standardeinstellung für IB Live Trading ist SMART. Wird ignoriert, wenn nicht Live Trading. Das Routing zum IEX-Exchange ist nicht zulässig.
Rückgabewert Auftragsnummer
// Wird separat zusammengefasst
history(bar_count, frequency, field, ffill=True)
Abrufen variabler historischer Daten für jeden Tag.
bar_count: Geben Sie die Anzahl der Balken als Ganzzahl an. Die Nummer enthält den aktuellen Balken. Häufigkeit: Gibt an, wie oft Daten abgerufen werden. '1d' und '1m' sind verfügbar. Feld: Geben Sie den Wert an, der aus den historischen Daten erhalten werden soll. Sie können zwischen 'open_price', 'close_price', 'price', 'high', 'low' und 'volume' angeben. ffill: Gibt an, ob die vorherigen Daten zum Ausfüllen der fehlenden historischen Daten verwendet werden sollen. Der Standardwert ist True. Bei der Einstellung False wird np.nan für Preisdaten und 0 für das Volumen zurückgegeben.
Rückgabewert Im Format pandas.DataFrame ist die Anzahl der Zeilen bar_count, der Wert der durch das Feld angegebene Wert und die Spalte die Sicherheits-ID des aktuellen Universums.
record(series1_name=value1, series2_name=value2, ...)
record('series1_name', value1, 'series2_name', value2, ...)
Zeichnet den durch das Argument angegebenen Wert auf. Gibt ein Diagramm für alle aufgezeichneten Inhalte aus.
Werte: Sie können bis zu 5 Schlüsselwörter und Werte festlegen.
Rückgabewert Keiner
schedule_function(func=myfunc, date_rule=date_rule, time_rule=time_rule, half_days=True)
Führt die Funktion automatisch nach einem vordefinierten Zeitplan aus. Es kann nur innerhalb von initialize aufgerufen werden.
func: Definiert den Funktionsnamen. Die Funktion muss Kontext und Daten als Parameter haben. date_rule: Gibt den Datumsteil des Zeitplans an. Termine können täglich, wöchentlich oder vom Anfang oder Ende eines jeden Monats an verrechnet werden. Der Standardwert ist täglich und der Offset ist 0. Mit anderen Worten, wenn Sie keine Datumsregel angeben, wird die Funktion täglich ausgeführt. Die geltenden Regeln lauten wie folgt.
date_rules.every_day()
date_rules.week_start(days_offset=0)
date_rules.week_end(days_offset=0)
date_rules.month_start(days_offset=0)
date_rules.month_end(days_offset=0)
time_rule: Gibt den Zeitteil des Zeitplans an. Die Zeit kann als Versatz vom Beginn bzw. Ende der Transaktion bzw. vom Ende der Transaktion angegeben werden. Die Standardeinstellung ist zu Beginn der Transaktion und 1 Minute vor dem Ende der Transaktion. Die geltenden Regeln lauten wie folgt.
time_rules.market_open(hours=0, minutes=1)
time_rules.market_close(hours=0, minutes=1)
half_days: Ein boolescher Wert, der das Verhalten des halben Hitachi-Tages angibt. Bei der Einstellung False wird die Funktion am Tag des Semi-Hitachikai nicht aufgerufen. Der Standardwert ist True.
Rückgabewert Keiner
set_symbol_lookup_date('YYYY-MM-DD')
Geben Sie ein Datum an und machen Sie das zu diesem Zeitpunkt gültige Tickersymbol zum Universum. Muss beim Initialisieren ausgeführt werden, bevor das Symbol oder die Symbolfunktion aufgerufen wird.
Datum: Zeichenfolge im Format JJJJ-MM-TT
Rückgabewert Keiner
sid(int)
Holen Sie sich das Wertpapierobjekt, indem Sie die Wertpapier-ID angeben.
int: Wertpapier-ID
Rückgabewert Wertpapierobjekt
symbol('symbol1')
Holen Sie sich das Wertpapierobjekt, indem Sie das Tickersymbol angeben.
'symbol1': Tickersymbol
Rückgabewert Wertpapierobjekt
symbols('symbol1', 'symbol2', ...)
Ruft eine Liste von Wertpapierobjekten ab, indem durch Kommas getrennte Tickersymbole angegeben werden.
'symbol1', 'symbol2', ...: Tickersymbol
Rückgabewert Liste der Wertpapierobjekte
update_universe(sids)
Aktualisieren Sie das Aktienuniversum. Wird vor before_trading_start aufgerufen.
sids: Liste der Wertpapier-IDs
Rückgabewert Keiner