-
Notifications
You must be signed in to change notification settings - Fork 724
交易系统框架
本文档系统性地文档化了Hikyuu交易系统框架的组件化架构。该框架将一个完整的交易策略分解为多个独立的部件,包括市场环境(Environment)、条件(Condition)、信号指示器(Signal)、止损/止盈(Stoploss)、资金管理(MoneyManager)、盈利目标(ProfitGoal)和移滑价差(Slippage)。每个部件都有明确的职责和接口设计,允许用户通过组合这些部件来构建复杂的交易系统。本文档详细解释了每个部件的职责、接口设计和内置实现(如SG_Cross, MM_FixedPercent),并说明了如何通过hub.py注册和管理自定义策略部件。此外,还提供了组合这些部件以构建复杂交易系统的代码示例,并解释了系统(System)的执行流程,从行情数据输入到交易信号生成的全过程。
Hikyuu交易系统框架的项目结构清晰地组织了各个模块和组件。主要目录包括hikyuu/,其中包含了核心的交易系统逻辑,hikyuu_cpp/,其中包含了C++实现的核心组件,以及hikyuu_pywrap/,其中包含了Python包装器。hikyuu/trade_sys/目录下包含了交易系统的各个部件,如condition/、environment/、moneymanager/等。hub.py文件位于hikyuu/目录下,负责注册和管理自定义策略部件。
graph TD
subgraph "hikyuu"
hub[hub.py]
trade_sys[trade_sys/]
indicator[indicator/]
data[data/]
end
subgraph "hikyuu_cpp"
trade_sys_cpp[trade_sys/]
indicator_cpp[indicator/]
data_driver[data_driver/]
end
subgraph "hikyuu_pywrap"
trade_sys_pywrap[trade_sys/]
indicator_pywrap[indicator/]
data_driver_pywrap[data_driver/]
end
hub --> trade_sys
trade_sys --> trade_sys_cpp
trade_sys_cpp --> trade_sys_pywrap
图源
- hub.py
- trade_sys.py
节源
- hub.py
- trade_sys.py
Hikyuu交易系统框架的核心组件包括市场环境(Environment)、条件(Condition)、信号指示器(Signal)、止损/止盈(Stoploss)、资金管理(MoneyManager)、盈利目标(ProfitGoal)和移滑价差(Slippage)。每个组件都有明确的职责和接口设计,允许用户通过组合这些部件来构建复杂的交易系统。
节源
- trade_sys.py
- System.h
Hikyuu交易系统框架采用组件化架构,将一个完整的交易策略分解为多个独立的部件。每个部件都有明确的职责和接口设计,允许用户通过组合这些部件来构建复杂的交易系统。系统(System)是整个框架的核心,负责协调各个部件的执行流程。系统从行情数据输入开始,依次经过市场环境判断、条件判断、信号生成、资金管理、止损/止盈、盈利目标和移滑价差等步骤,最终生成交易信号。
graph TD
A[行情数据输入] --> B[市场环境判断]
B --> C[条件判断]
C --> D[信号生成]
D --> E[资金管理]
E --> F[止损/止盈]
F --> G[盈利目标]
G --> H[移滑价差]
H --> I[交易信号生成]
图源
- System.cpp
- System.h
市场环境部件负责判断当前市场是否适合交易。它通过分析市场数据来确定市场是否处于有效状态。如果市场环境无效,系统将不会进行任何交易操作。
节源
- System.cpp
- System.h
条件部件负责判断系统是否满足特定的交易条件。它通过分析市场数据来确定系统是否处于有效状态。如果系统条件无效,系统将不会进行任何交易操作。
节源
- System.cpp
- System.h
信号指示器部件负责生成买入和卖出信号。它通过分析市场数据来确定何时买入或卖出。信号指示器的实现包括SG_Cross,它在快线从下向上穿越慢线时生成买入信号,在快线从上向下穿越慢线时生成卖出信号。
classDiagram
class SignalBase {
+string name
+KData m_kdata
+bool m_calculated
+bool m_hold_long
+bool m_hold_short
+map<Datetime, double> m_buySig
+map<Datetime, double> m_sellSig
+Datetime m_cycle_start
+Datetime m_cycle_end
+shouldBuy(datetime) bool
+shouldSell(datetime) bool
+getBuyValue(datetime) double
+getSellValue(datetime) double
+getValue(datetime) double
+nextTimeShouldBuy() bool
+nextTimeShouldSell() bool
+getBuySignal() DatetimeList
+getSellSignal() DatetimeList
+_addSignal(datetime, value) void
+_addBuySignal(datetime, value) void
+_addSellSignal(datetime, value) void
+setTO(kdata) void
+getTO() KData
+startCycle(start, end) void
+getCycleStart() Datetime
+getCycleEnd() Datetime
+reset() void
+clone() SignalPtr
+name(name) void
+_reset() void
+_clone() SignalPtr
+_calculate(kdata) void
}
class SG_Cross {
+Indicator fast
+Indicator slow
+_calculate(kdata) void
}
SG_Cross --|> SignalBase : 继承
图源
- SignalBase.h
- SG_Cross.h
节源
- SignalBase.h
- SG_Cross.h
止损/止盈部件负责在市场不利时自动卖出,以限制损失。它通过分析市场数据来确定何时止损或止盈。
节源
- System.cpp
- System.h
资金管理部件负责管理交易资金。它通过分析市场数据来确定可买入或卖出的数量。MM_FixedPercent是资金管理的一个内置实现,它根据总资产的百分比来确定每笔交易的风险。
classDiagram
class MoneyManagerBase {
+string m_name
+KQuery m_query
+TradeManagerPtr m_tm
+unordered_map<Stock, pair<size_t, size_t>> m_buy_sell_counts
+name() string
+name(name) void
+reset() void
+setTM(tm) void
+getTM() TradeManagerPtr
+setQuery(query) void
+getQuery() KQuery
+clone() MoneyManagerPtr
+buyNotify(tr) void
+_buyNotify(tr) void
+sellNotify(tr) void
+_sellNotify(tr) void
+getSellNumber(datetime, stock, price, risk, from) double
+getSellShortNumber(datetime, stock, price, risk, from) double
+getBuyShortNumber(datetime, stock, price, risk, from) double
+getBuyNumber(datetime, stock, price, risk, from) double
+currentBuyCount(stock) size_t
+currentSellCount(stock) size_t
+_getBuyNumber(datetime, stock, price, risk, from) double
+_getSellNumber(datetime, stock, price, risk, from) double
+_getSellShortNumber(datetime, stock, price, risk, from) double
+_getBuyShortNumber(datetime, stock, price, risk, from) double
+_reset() void
+_clone() MoneyManagerPtr
}
class MM_FixedPercent {
+double p
+_getBuyNumber(datetime, stock, price, risk, from) double
}
MM_FixedPercent --|> MoneyManagerBase : 继承
图源
- MoneyManagerBase.h
- MM_FixedPercent.h
节源
- MoneyManagerBase.h
- MM_FixedPercent.h
盈利目标部件负责在市场有利时自动卖出,以实现盈利目标。它通过分析市场数据来确定何时达到盈利目标。
节源
- System.cpp
- System.h
移滑价差部件负责处理交易中的价差问题。它通过分析市场数据来确定实际的买入和卖出价格。
节源
- System.cpp
- System.h
Hikyuu交易系统框架的各个部件之间存在明确的依赖关系。系统(System)依赖于市场环境(Environment)、条件(Condition)、信号指示器(Signal)、止损/止盈(Stoploss)、资金管理(MoneyManager)、盈利目标(ProfitGoal)和移滑价差(Slippage)等部件。每个部件都有明确的接口设计,允许用户通过组合这些部件来构建复杂的交易系统。
graph TD
System --> Environment
System --> Condition
System --> Signal
System --> Stoploss
System --> MoneyManager
System --> ProfitGoal
System --> Slippage
图源
- System.h
- System.cpp
节源
- System.h
- System.cpp
Hikyuu交易系统框架在设计时考虑了性能问题。系统通过缓存和复用机制来提高执行效率。例如,系统在执行过程中会缓存市场数据,避免重复计算。此外,系统还支持并行处理,允许用户在多线程环境中运行多个交易策略。
在使用Hikyuu交易系统框架时,可能会遇到一些常见问题。例如,如果系统无法生成交易信号,可能是由于市场环境或条件判断失败。此时,可以检查市场环境和条件部件的配置,确保它们正确地判断市场状态。如果系统无法执行交易,可能是由于资金管理或移滑价差部件的问题。此时,可以检查资金管理和移滑价差部件的配置,确保它们正确地计算交易数量和价格。
节源
- System.cpp
- System.h
Hikyuu交易系统框架提供了一个灵活且强大的组件化架构,允许用户通过组合多个独立的部件来构建复杂的交易系统。每个部件都有明确的职责和接口设计,使得用户可以轻松地定制和扩展交易策略。通过hub.py注册和管理自定义策略部件,用户可以方便地管理和复用交易策略。系统(System)的执行流程从行情数据输入开始,依次经过市场环境判断、条件判断、信号生成、资金管理、止损/止盈、盈利目标和移滑价差等步骤,最终生成交易信号。这种设计使得Hikyuu交易系统框架成为一个高效且可靠的交易系统开发平台。
以下是一个使用Hikyuu交易系统框架构建复杂交易系统的代码示例:
from hikyuu import *
from hikyuu.trade_sys import crtSG, crtMM
# 创建信号指示器
sg = crtSG(SG_Cross, fast=MA(CLOSE, 5), slow=MA(CLOSE, 10))
# 创建资金管理策略
mm = crtMM(MM_FixedPercent, p=0.02)
# 创建交易系统
sys = System(tm=tm, mm=mm, ev=ev, cn=cn, sg=sg, st=st, tp=tp, pg=pg, sp=sp, name="MySystem")
# 运行交易系统
sys.run(stock, query)节源
- trade_sys.py
- hub.py