Simulierte Handelsplattform: Konfiguration und Betrieb

Dieses Kapitel führt Sie von „bestehenden Backtesting-Strategien“ zum „ersten stabilen Start eines simulierten Live-Handelskontos“: Es zeigt Ihnen, welche Elemente Sie konfigurieren müssen, wie Sie diese bestätigen und worauf Sie nach dem Start achten sollten.

Lieber Nutzer, falls Sie bereits einen Operator (Trader-Container) besitzen, der Backtests ermöglicht, ist dieses Kapitel der schnellste Weg zum Live-Testing. Wir erläutern zunächst die notwendigen Konfigurationen und gehen anschließend auf optionale erweiterte Funktionen wie „Strategie-Snapshots“ und „Startzugriffskontrolle“ ein.

0. 适用场景

  • Sie verfügen über einen funktionierenden Operator und sind bereit, vom Backtesting zur Live-Simulation überzugehen.

  • Sie sollten zunächst den kürzesten Weg testen, bevor Sie schrittweise Risikokontrolle, Zugriffskontrolle und betriebliche Details hinzufügen.

1. 核心概念(本章术语)

Bevor Sie mit dem Live-Betrieb beginnen, überprüfen Sie bitte die Zusammenhänge zwischen den drei Komponenten. In Qteasy ist der Operator für die Berechnung von Signalen zuständig, das Live-Konto für die Kontoführung und Positionsverwaltung und die lokale Datenquelle für die Bereitstellung von Kursen und historischen Daten. Ohne eine dieser Komponenten kann der Trader nicht stabil funktionieren. Die folgende Tabelle veranschaulicht die Position jeder Komponente im Live-Subsystem und die erforderlichen Vorbereitungen.

Bedeutung der einzelnen Spalten: Rolle ist der Komponentenname; Funktion ist die Verantwortung in der Live-Pipeline; Was Sie vorbereiten müssen sind die Vorstartprüfungen.

Anwendung: Markieren Sie die Kästchen nacheinander; falls eine Spalte nicht ausreicht, fügen Sie zuerst die Daten oder Kontoinformationen hinzu und führen Sie dann qt.run(op) aus.

Rolle

Wirkung

Was müssen Sie vorbereiten?

Operator

Haltestrategie und Signallogik

Dasselbe op-Objekt wie beim Backtesting

Live-Konto

Bargeld, Lagerbestände und Aufträge erfassen.

live_trade_account_id oder live_trade_account_name

Lokale Datenquelle

Bietet historische und Echtzeitkurse

Häufigkeit der Tabellendatenabdeckungsstrategie (z. B. erfordert eine minutenbasierte Strategie minutenbasierte Tabellen)

LiveTradeConfig (Live-Konfigurations-Snapshot): Vor dem Start von Trader überprüft und speichert qteasy die in qt.configure(...) enthaltenen, lauffähigen Einstellungen in einem unveränderlichen Snapshot – vergleichbar mit einer Checkliste vor dem Start –, um versehentliche Konfigurationsänderungen während der Laufzeit zu verhindern. Eine Zusammenfassung können Sie mit liveconfig in der Shell anzeigen.

2. 最小配置集

Im Folgenden sind einige essentielle Konfigurationselemente aufgeführt (fehlende oder falsche Einstellungen führen häufig zu Fehlern beim Start). Diese Schlüssel werden über qt.configure(...) in die globale Konfiguration geschrieben und beim Start in den LiveTradeConfig-Snapshot integriert. Sie bestimmen, ob es sich um einen Live-Handel handelt, welche Vermögenswerte gehandelt werden, welches Konto verwendet wird, woher der Preis stammt und wer die Aufträge ausführt.

Bedeutung der einzelnen Spalten: Der Konfigurationsschlüssel ist der Name in QT_CONFIG; die Bedeutung ist das durch diesen Schlüssel gesteuerte Verhalten; was passiert, wenn er nicht gesetzt ist sind die üblichen Konsequenzen (um festzustellen, ob der aktuelle Fehler mit diesem Schlüssel zusammenhängt).

Anleitung: Bitte nehmen Sie für Ihre erste Live-Sitzung alle Einstellungen explizit vor. Sollte der Start fehlschlagen, finden Sie in der Spalte „Was passiert, wenn ich nichts einstelle?“ Hinweise zur Fehlerbehebung. Beispiele finden Sie in Abschnitt 5 Vorlage A/B.

Konfigurationsschlüssel

Bedeutung

Was würde passieren, wenn wir keinen festlegen würden?

mode=0

Live-/Demo-Handel starten

Ich verwende immer noch Backtesting oder andere Methoden.

Anlagentyp

Anlagearten wie E-Aktien und F-Aktien (ETFs).

Die Handelsregeln und Datentabellen stimmen möglicherweise nicht überein.

live_trade_account_id oder live_trade_account_name

Welches Demokonto soll ich verwenden?

Ledger konnte nicht gebunden werden

live_trade_broker_type

Arten von Brokerfirmen, Anfänger nutzen den Simulator

Kein Transaktionskanal

live_price_acquire_channel

Echtzeit-Preiskanäle wie beispielsweise eastmoney

Live-Preis nicht verfügbar

live_price_acquire_freq

Häufigkeit der Preiserhöhungen, z. B. 15MIN

Daten können fehlen, wenn das Tempo der Strategie nicht koordiniert ist.

Die folgenden Einstellungen sind keine zwingenden Voraussetzungen für den Start, es wird jedoch dringend empfohlen, sie zu überprüfen, da sie die minimale Transaktionseinheit, die Anzahl der Schreibvorgänge auf die Festplatte und die Festplattennutzung beeinflussen. Sie gehören zusammen mit der obigen Tabelle zum Gültigkeitsbereich von qt.configure und können in dasselbe Skript geschrieben werden.

Anwendungshinweise: Falls die Transaktionsmenge nicht „in vollständigen Losen“ angegeben ist oder die Protokolldatei nicht gefunden werden kann, gehen Sie zurück und überprüfen Sie die entsprechende Zeile in dieser Tabelle.

Konfigurationsschlüssel

Bedeutung

Was würde passieren, wenn wir keinen festlegen würden?

trade_batch_size / sell_batch_size

Mindestverkaufsmenge

Standardwerte verwenden

cash_decimal_places / amount_decimal_places

Bargeld/Menge Dezimalstellen

Standardwerte verwenden

sys_log_file_path / trade_log_file_path

System-/Transaktionsprotokollverzeichnis

Verwenden Sie den Standardpfad innerhalb des Pakets

trade_log_keep_days

Aufbewahrungsdauer der Protokolle (einschließlich Risikoprotokolle)

Automatische Bereinigung alle 3 Tage (standardmäßig)

3. 查看配置快照

Python (mit Selbstprüfung im Skript):

from qteasy.live_config import build_live_trade_config
import qteasy as qt

cfg = build_live_trade_config(qt.QT_CONFIG)
print(cfg.to_summary_dict())

CLI (Trader Shell): Befehl liveconfig (Alias live-config)

  • Standard: stabile Feldteilmenge

  • Fügen Sie --detail hinzu: Enthält zusätzlich Schlüssel zum Aktivieren der Zugriffskontrolle, Richtlinien-Snapshots usw.

Hinweis: Die liveconfig-Anweisung in der Shell ist eine Zusammenfassung basierend auf dem aktuellen Trader und keine Speicherreferenz des Objekts beim Start – sie reicht jedoch aus, um die aktuell gültige Konfiguration zu überprüfen.

4. 配置键分组(主要 live 键)

Es gibt zahlreiche Konfigurationsschlüssel für Live. Zur besseren Übersicht haben wir sie nach Funktion gruppiert (keine vollständige API-Liste; die vollständigen Felder basieren auf LiveTradeConfig). In qteasy werden diese Schlüssel vor dem Start validiert und fixiert – nach Änderungen an qt.configure muss der Live-Prozess neu gestartet werden, damit die Änderungen wirksam werden.

Spaltenbedeutungen: Gruppierung repräsentiert den Verantwortungsbereich innerhalb des laufenden Subsystems; Repräsentative Schlüssel listen die am häufigsten geänderten Schlüssel dieser Gruppe auf (es können weitere Schlüssel derselben Gruppe vorhanden sein, die nicht aufgeführt sind); Beschreibungen beschreiben die Rolle dieser Gruppe während des Betriebs.

Anwendung: Wählen Sie die Gruppe entsprechend Ihrer aktuellen Aufgabe aus – um beispielsweise Protokollprobleme zu beheben, sehen Sie sich die Zeile „Protokoll“ an und springen Sie zu: :doc:5-artifacts-and-troubleshooting; wenn Sie eine minutengenaue Strategie öffnen, überprüfen Sie zuerst, ob die „Marktdaten und Nachfüllung“ mit der Frequenz der Strategie übereinstimmen.

Beispiel: Strategien mit sub-täglicher Frequenz modifizieren häufig live_price_acquire_freq in der Gruppe „Marktdaten und Nachfüllen“ und aktivieren bei Bedarf live_trade_split_strategy_prepare in der Gruppe „Strategie-Snapshots (5-A)“.

Gruppierung

Repräsentativer Schlüssel

Anweisungen

Konten und Benutzeroberfläche

live_trade_account_id, live_trade_account_name, live_trade_ui_type

Konto- und CLI/TUI-Auswahl

Marktbedingungen und Nachfüllung

live_price_acquire_channel, live_price_acquire_freq, live_trade_data_refill_channel, live_trade_*_refill_tables

Echtzeit-Preis- und zeitgesteuerte Datenaktualisierungen

Handelsregeln

trade_batch_size, sell_batch_size, stock_delivery_period, cash_delivery_period, pt_buy_threshold, pt_sell_threshold

An Backtesting-Semantik ausrichten

Makler

live_trade_broker_type, live_trade_broker_params

Standardmäßig wird simulator verwendet; siehe doc:4-broker-adapter-and-integration` für Erweiterungen.

Strategieübersicht (5-A)

live_trade_split_strategy_prepare, live_trade_prepare_lead_seconds, live_trade_strategy_snapshot_max_age_seconds

Die Daten werden vor Ausführung der Strategie vorab abgerufen; siehe :doc:6-trader-snapshot-gate für Details.

Zugangskontrolle aktivieren (5-B)

live_trade_startup_gate_mode (off / warn / block)

Sicherheitsprüfung vor Markteinführung; CLI gate

Protokoll

sys_log_file_path, trade_log_file_path, trade_log_keep_days

Beinhaltet die Rotation der Datei *.risk.log; siehe:doc:5-artifacts-and-troubleshooting

Die vollständigen Felder basieren auf LiveTradeConfig; die gültigen Werte für jeden Schlüssel sind in der Konfigurationsvalidierungslogik definiert.

5. 推荐配置模板

Vorlage A: Aktien (E+ Simuliertes Brokerage)

Der folgende Code wird vor qt.run(op) ausgeführt und weist qteasy an, Aktienregeln, den 15-Minuten-Kurs von Eastmoney und simulierten Gegenhandel zu verwenden.

import qteasy as qt

qt.configure(
    mode=0,
    asset_type='E',
    live_trade_broker_type='simulator',
    live_price_acquire_channel='eastmoney',
    live_price_acquire_freq='15MIN',
    trade_log_keep_days=3,
)

Vorlage B: Börsengehandelte Fonds / ETFs (Festgeld + simuliertes Brokerage)

Gleiches gilt wie Vorlage A, nur dass asset_type='FD' für Beispielpfade wie ETF gilt.

import qteasy as qt

qt.configure(
    mode=0,
    asset_type='FD',
    live_trade_broker_type='simulator',
    live_price_acquire_channel='eastmoney',
    live_price_acquire_freq='15MIN',
    trade_log_keep_days=3,
)

Vorlage C: Richtlinien-Snapshot + Zugriffskontrolle aktivieren (Smoke/Erweitert)

In Übereinstimmung mit :doc:7-manual-smoke-live-grid-roadmap wird empfohlen, dieses Dokument erst zu öffnen, nachdem Sie mit der Vorlage A/B vertraut sind.

qt.configure(
    live_trade_split_strategy_prepare=True,
    live_trade_prepare_lead_seconds=60,
    live_trade_strategy_snapshot_max_age_seconds=300.0,
    live_trade_startup_gate_mode='warn',  # 先 warn 观察,稳定后可试 block
)

6. 启动流程(分步说明)

  1. Vervollständigen Sie die Konfiguration: Folgen Sie §2, um qt.configure(...) abzuschließen, und bestätigen Sie die Konto-ID/den Kontonamen.

  2. (Optional) Snapshot prüfen: Führen Sie den Python-Codeausschnitt in §3 aus oder geben Sie nach dem Start in der Shell liveconfig --detail ein.

  3. Startvorgang: qt.run(op); Häufige Befehlszeilenbeispiele verwenden --ui cli, um die Trader Shell zu öffnen.

  4. Hinweis: Prüfen Sie, ob Status, Bestellungen und Protokolle wie erwartet geschrieben werden (§7).

Vor dem Start schnell einige wichtige Konfigurationselemente ausdrucken:

import qteasy as qt

for key in ('mode', 'asset_type', 'live_trade_broker_type',
            'live_price_acquire_channel', 'live_trade_startup_gate_mode'):
    print(key, qt.get_config(key)[key])

7. 启动后建议先看什么(CLI)

Sobald Sie die Trader Shell aufrufen, helfen Ihnen die folgenden Befehle dabei, zu überprüfen, ob die Konfiguration wirksam ist, wo sich die Protokolle befinden, ob das Brokerhaus Ihre Anfrage bearbeiten kann und ob die Zugriffskontrolle erfolgreich war. Diese Befehle entsprechen den Operationen in :doc:8-cli-trader-capability-matrixnicht allen Shell-Befehlen.

Bedeutung der einzelnen Spalten: Befehl: Der an der Eingabeaufforderung eingegebene Name (siehe das Kapitel Matrix für Aliase); Typische Verwendungen: Die Fragen, die am häufigsten mit diesem Befehl beantwortet werden.

Anwendung: Nach dem Start die Tabelle schnell von oben nach unten durchsuchen; falls ein Schritt fehlerhaft ist, die Ausgabe des Befehls an :doc:5-artifacts-and-troubleshooting umleiten.

Beispiel: Unsicher bezüglich des Protokollpfads → Geben Sie artifacts ein → Öffnen Sie den zurückgegebenen sys_log-Pfad, um den Startablauf anzuzeigen.

Befehl

Typische Anwendungen

liveconfig

Zusammenfassung der aktuellen Live-Konfiguration

artifacts

Pfad des Vierbindungsprodukts (wo befinden sich die Protokolle?)

gate

Führen Sie das Zutrittskontrollsystem einmal manuell aus (zur Fehlersuche).

Brokerstatus

Prüfen Sie, ob die simulierte Brokerage-Plattform „verbunden“ ist.

reconcile

Abgleich-Snapshot-JSON

run --task diagnose_pending_orders

Diagnose während der Übertragung (erfordert DEBUG-Modus)

Den vollständigen Befehlssatz finden Sie unter :doc:8-cli-trader-capability-matrix.

7.1 Dashboard und interaktiver Modus

Trader Shell startet standardmäßig im Dashboard-Modus: Ein einzeiliger Statusbereich zeigt den Countdown bis zur nächsten Aufgabe, Echtzeitkurse in der Überwachungsliste und Systemmeldungen an. So können Sie den Betriebsablauf beobachten, ohne Befehle eingeben zu müssen. Um Aufträge manuell zu platzieren, Konfigurationen zu prüfen oder Wartungsbefehle auszuführen, drücken Sie Strg+C, um das Modusmenü zu öffnen, oder geben Sie im interaktiven Modus (Befehlsmodus) dashboard ein, um zum Dashboard zurückzukehren.

Modell

Verhalten

Armaturenbrett

Die Statuszeile und der überwachte Preis werden automatisch aktualisiert; die Hauptschleife des Traders läuft im Hintergrund weiter.

interaktiv (Befehl)

Über die traditionelle Cmd-Eingabeaufforderung können Sie Befehle wie buy, config und artifacts eingeben.

Ctrl+C Modusauswahlmenü (verfügbar sowohl im Dashboard- als auch im Befehlsmodus)

  • Drücken Sie innerhalb von 5 Sekunden die Taste 1 → um in den Befehlsmodus zu wechseln; die Taste 2 → um zum Dashboard zurückzukehren; die Taste 3 → um Trader zu beenden und zu stoppen.

  • Sie müssen nicht die Eingabetaste drücken, die Zifferntasten reagieren sofort.

  • Keine Eingabe innerhalb von 5 Sekunden → Automatische Wiederaufnahme des Modus vor der Unterbrechung.

  • Während der Wartezeit im Menü erneut Strg+C drücken → Sofort beenden (entspricht der Auswahl von 3)

Wenn in der Hauptschleife eine unerwartete Ausnahme auftritt, werden Sie von der Shell aufgefordert, 1 zu drücken, um zum Dashboard zurückzukehren, oder 3, um das Programm zu beenden; wenn 5 Sekunden lang keine Eingabe erfolgt, kehrt das Programm standardmäßig zum Dashboard zurück, und der Trader läuft weiter.

8. 运行前检查清单

  • Die Konto-ID/der Kontoname ist verfügbar und stimmt mit dem Strategie-Asset-Pool überein.

  • asset_type sollte mit asset_pool übereinstimmen (Regeln für Aktien und Fonds dürfen nicht vermischt werden).

  • live_trade_broker_type sollte simulator sein (oder ein Typ, den Sie bereits implementiert haben).

  • Die Häufigkeit der Live-Preise muss mindestens der Laufzeit der Strategie entsprechen (minutenbasierte Strategien erfordern eine ausreichend hohe Häufigkeit der Live-Preise).

  • Der Protokollpfad ist gültig und die Festplatte ist beschreibbar.

  • trade_log_keep_days erfüllt Ihre Aufbewahrungserwartungen (einschließlich Risikoprotokolle).

9. 常见启动失败与处理

Treten beim Systemstart Fehler auf, lassen sich die Symptome häufig in folgende Kategorien einteilen: Konfiguration, Konto, Daten, Pfad, Häufigkeit oder Zugriffskontrolle beim Start. Die folgende Tabelle ist nach den beobachteten Symptomen indiziert, um eine ziellose Suche in den Protokollen zu vermeiden.

Erläuterung der einzelnen Spalten: Phänomen: Das Verhalten beim Start oder auf dem ersten Bildschirm; Mögliche Ursachen: Häufige Ursachen (nicht abschließend); Vorschläge: Die nächsten Schritte.

Anwendung: Gleichen Sie zunächst die Spalte „Phänomen“ ab; falls das Problem weiterhin besteht, verwenden Sie den Befehl §7, um die Pfade nach liveconfig und artifacts zu exportieren, und konsultieren Sie den Entscheidungsbaum in :doc:5-artifacts-and-troubleshooting.

Phänomen

Mögliche Gründe

Anregung

Die Konfigurationsprüfung ist fehlgeschlagen.

Ein bestimmter aktiver Schlüssel ist ungültig oder schließt sich gegenseitig aus.

Nach Behebung der Fehlermeldungen starten Sie das System neu.

Konto nicht verfügbar

ID/Name falsch oder nicht initialisiert

Prüfen Sie die Parameter für die Kontoerstellung.

Daten nicht verfügbar

Kanal-/Frequenz-/Lokaltabelle fehlt

Prüfen Sie die Tabellen refill und stock_1min usw.

Pfadfehler

Das Protokollverzeichnis ist nicht beschreibbar

Prüfen Sie sys_log_file_path usw.

Frequenzinkoordination

Eine kosteneffektive Strategie im Live-Betrieb mit höherer Schrittfrequenz ist seltener.

Erhöhen Sie live_price_acquire_freq oder verringern Sie die Policenfrequenz.

Torblock

Die Zugriffskontrollsperre ist aktiviert, aber die Überprüfung schlägt fehl.

Siehe die Ausgabe des gate-Befehls und den Abschnitt failures im Trace.

10. 相关跳转

  • Risikomanagement und Aufträge: 3-Risiko-und-Auftragslebenszyklus

  • Produkte und Fehlerbehebung: :doc:5-artifacts-and-troubleshooting

  • Broker-Anpassung: :doc:4-Broker-Adapter-und-Integration

  • Snapshot/Zugriffskontrolle: :doc:6-trader-snapshot-gate

  • Rauchliste: :doc:7-manual-smoke-live-grid-roadmap

  • CLI-Referenz: :doc:8-cli-trader-capability-matrix

  • Vollständige Anleitung: tutorials/8-live-trade-risk-and-broker-walkthrough.md

11. 最小验收标准

  • Ein stabiler Start ist im E- oder FD-Pfad möglich.

  • Die Ausgabe von liveconfig / artifacts entspricht den Erwartungen.

  • Mindestens eines der folgenden Ereignisse kann beobachtet werden: Auftragserteilung, Ablehnung aufgrund des Risikomanagements oder Gegenbearbeitung.

  • Wird der Auftrag von der Risikokontrolle abgelehnt, findet sich ein entsprechender Eintrag im risk_log. Wird der Auftrag vom Broker abgelehnt, wird er als rejected markiert und die Brokernummer ist leer.

  • Die entsprechenden Laufzeitartefakte befinden sich im Log-Verzeichnis.