系统框架¶
系统是指针对单个交易对象的完整策略,包括环境判断、系统有效条件、资金管理、止损、止盈、盈利目标、移滑价差的完整策略,用于模拟回测。
公共参数:
- buy_delay=True (bool) : 买入操作是否延迟到下一个bar开盘时进行交易
- sell_delay=True (bool) : 卖出操作是否延迟到下一个bar开盘时进行交易
- delay_use_current_price=True (bool) : 延迟操作的情况下,是使用当前交易时bar的价格计算新的止损价/止赢价/目标价还是使用上次计算的结果
- max_delay_count=3 (int) : 连续延迟交易请求的限制次数,应大于等于0,0表示只允许延迟1次
- tp_monotonic=True (bool) : 止赢单调递增
- tp_delay_n=3 (int) : 止盈延迟开始的天数,即止盈策略判断从实际交易几天后开始生效
- ignore_sell_sg=False (bool) : 忽略卖出信号,只使用止损/止赢等其他方式卖出
- ev_open_position=False (bool): 是否使用市场环境判定进行初始建仓
- cn_open_position=False (bool): 是否使用系统有效性条件进行初始建仓
创建系统并执行回测¶
-
hikyuu.trade_sys.
SYS_Simple
([tm=None, mm=None, ev=None, cn=None, sg=None, st=None, tp=None, pg=None, sp=None])¶ 创建简单系统实例(每次交易不进行多次加仓或减仓,即每次买入后在卖出时全部卖出), 系统实例在运行时(调用run方法),至少需要一个配套的交易管理实例、一个资金管理策略 和一个信号指示器),可以在创建系统实例后进行指定。如果出现调用run时没有任何输出, 且没有正确结果的时候,可能是未设置tm、sg、mm。进行回测时,使用 run 方法,如:
#创建模拟交易账户进行回测,初始资金30万 my_tm = crtTM(init_cash = 300000) #创建信号指示器(以5日EMA为快线,5日EMA自身的10日EMA作为慢线,快线向上穿越慢线时买入,反之卖出) my_sg = SG_Flex(OP(EMA(n=5)), slow_n=10) #固定每次买入1000股 my_mm = MM_FixedCount(1000) #创建交易系统并运行 sys = SYS_Simple(tm = my_tm, sg = my_sg, mm = my_mm) sys.run(sm['sz000001'], Query(-150))
参数: - tm (TradeManager) – 交易管理实例
- mm (MoneyManager) – 资金管理策略
- ev (EnvironmentBase) – 市场环境判断策略
- cn (ConditionBase) – 系统有效条件
- sg (SignalBase) – 信号指示器
- st (StoplossBase) – 止损策略
- tp (StoplossBase) – 止盈策略
- pg (ProfitGoalBase) – 盈利目标策略
- sp (SlippageBase) – 移滑价差算法
返回: system实例
系统部件枚举定义¶
-
class
System.
Part
¶ 系统部件枚举值,系统的买入/卖出等操作可由这些部件触发,用于标识实际交易指令的来源,参见:
TradeRecord
。实际使用中,可使用 System.ENVIRONMENT 的简化方式 代替 System.Part.ENVIRONMENT,其他与此类似。
- System.Part.ENVIRONMENT - 市场环境判断策略
- System.Part.CONDITION - 系统有效条件
- System.Part.SIGNAL - 信号指示器
- System.Part.STOPLOSS - 止损策略
- System.Part.TAKEPROFIT - 止盈策略
- System.Part.MONEYMANAGER - 资金管理策略
- System.Part.PROFITGOAL - 盈利目标策略
- System.Part.SLIPPAGE - 移滑价差算法
- System.Part.INVALID - 无效值边界,大于等于该值时为无效部件
-
hikyuu.trade_sys.
get_system_part_name
(part)¶ 获取部件的字符串名称
- System.Part.ENVIRONMENT - “EV”
- System.Part.CONDITION - “CN”
- System.Part.SIGNAL - “SG”
- System.Part.STOPLOSS - “ST”
- System.Part.TAKEPROFIT - “TP”
- System.Part.MONEYMANAGER - “MM”
- System.Part.PROFITGOAL - “PG”
- System.Part.SLIPPAGE - “SP”
- System.Part.INVALID - “–”
参数: part (int) – System.Part 枚举值 返回类型: str
-
hikyuu.trade_sys.
get_system_part_enum
(part_name)¶ - 根据系统部件的字符串名称获取相应的枚举值
参数: part_name (str) – 系统部件的字符串名称,参见: getSystemPartName()
返回类型: System.Part
系统基类定义¶
-
class
hikyuu.trade_sys.
System
¶ 系统基类。需要扩展或实现更复杂的系统交易行为,可从此类继承。
-
name
¶ 系统名称
-
tm
¶ 关联的交易管理实例
-
mm
¶ 资金管理策略
-
ev
¶ 市场环境判断策略
-
cn
¶ 系统有效条件
-
sg
¶ 信号指示器
-
st
¶ 止损策略
-
tp
¶ 止盈策略
-
pg
¶ 盈利目标策略
-
sp
¶ 移滑价差算法
-
get_param
(self, name)¶ 获取指定的参数
参数: name (str) – 参数名称 返回: 参数值 引发: out_of_range – 无此参数
-
set_param
(self, name, value)¶ 设置参数
参数: - name (str) – 参数名称
- value (int | bool | float | string) – 参数值
引发: logic_error – Unsupported type! 不支持的参数类型
-
get_trade_record_list
(self)¶ 获取实际执行的交易记录,和 TM 的区别是不包含权息调整带来的交易记录
返回类型: TradeRecordList
-
get_buy_trade_request
(self)¶ 获取买入请求,“delay”模式下查看下一时刻是否存在买入操作
返回类型: TradeRequest
-
get_sell_trade_request
(self)¶ 获取卖出请求,“delay”模式下查看下一时刻是否存在卖出操作
返回类型: TradeRequest
-
run
(self, stock, query[, reset=True])¶ 运行系统,执行回测
参数:
-
reset
(self, with_tm, with_ev)¶ 复位操作。TM、EV是和具体系统无关的策略组件,可以在不同的系统中进行共享,复位将引起系统运行时被重新清空并计算。尤其是在共享TM时需要注意!
参数: - with_tm (bool) – 是否复位TM组件
- with_ev (bool) – 是否复位EV组件
-
clone
(self)¶ 克隆操作。
-
交易请求记录¶
-
class
hikyuu.trade_sys.
TradeRequest
¶ 交易请求记录。系统内部在实现延迟操作时登记的交易请求信息。暴露该结构的主要目的是用于在“delay”模式(延迟到下一个bar开盘时进行交易)的情况下,系统实际已知下一个Bar将要进行交易,此时可通过
System.getBuyTradeRequest()
、System.getSellTradeRequest()
来获知下一个BAR是否需要买入/卖出。主要用于提醒或打印下一个Bar需要进行操作。对于系统本身的运行没有影响。-
valid
¶ 该交易请求记录是否有效(True | False)
-
business
¶ 交易业务类型,参见:
hikyuu.trade_manage.BUSINESS
-
datetime
¶ 发出交易请求的时刻
-
stoploss
¶ 发出交易请求时刻的止损价
-
part
¶ 发出交易请求的来源,参见:
System.Part
-
count
¶ 因操作失败,连续延迟的次数
-