系统框架

系统是指针对针对单个交易对象的完整策略,包括环境判断、系统有效条件、资金管理、止损、止盈、盈利目标、移滑价差的完整策略,用于模拟回测。

公共参数:

  • delay=True (bool) : 是否延迟到下一个bar开盘时进行交易
  • delay_use_current_price=True (bool) : 延迟操作的情况下,是使用当前交易时bar的价格计算新的止损价/止赢价/目标价还是使用上次计算的结果
  • max_delay_count=3 (int) : 连续延迟交易请求的限制次数
  • tp_monotonic=True (bool) : 止赢单调递增
  • tp_delay_n=3 (int) : 止盈延迟开始的天数,即止盈策略判断从实际交易几天后开始生效
  • ignore_sell_sg=False (bool) : 忽略卖出信号,只使用止损/止赢等其他方式卖出
  • support_borrow_cash=False (bool) : 在现金不足时,是否支持借入现金,融资
  • support_borrow_stock=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(initCash = 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))
Parameters:
Returns:

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.getSystemPartName(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 - “–”
Parameters:part (int) – System.Part 枚举值
Return type:str
hikyuu.trade_sys.getSystemPartEnum(part_name)
根据系统部件的字符串名称获取相应的枚举值
Parameters:part_name (str) – 系统部件的字符串名称,参见:getSystemPartName()
Return type:System.Part

系统基类定义

class hikyuu.trade_sys.System

系统基类。需要扩展或实现更复杂的系统交易行为,可从此类继承。

name

系统名称

tm

关联的交易管理实例

mm

资金管理策略

ev

市场环境判断策略

cn

系统有效条件

sg

信号指示器

st

止损策略

tp

止盈策略

pg

盈利目标策略

sp

移滑价差算法

getParam(self, name)

获取指定的参数

Parameters:name (str) – 参数名称
Returns:参数值
Raises:out_of_range – 无此参数
setParam(self, name, value)

设置参数

Parameters:
  • name (str) – 参数名称
  • value (int | bool | float | string) – 参数值
Raises:

logic_error – Unsupported type! 不支持的参数类型

getTO(self)

获取交易对象,即运行 System.run() 方法时,stock + query 获取到的 KData

Return type:KData
setTO(self, kdata)

设置交易对象,即运行 Systemrun() 方法时,stock + query 获取到的 KData

Parameters:kdata (KData) – K线数据
getStock(self)

获取关联的证券

Return type:Stock
getTradeRecordList(self)

获取交易记录

Return type:TradeRecordList
getBuyTradeRequest(self)

获取买入请求,“delay”模式下查看下一时刻是否存在买入操作

Return type:TradeRequest
getSellTradeRequest(self)

获取卖出请求,“delay”模式下查看下一时刻是否存在卖出操作

Return type:TradeRequest
run(self, stock, query[, reset=True])

运行系统,执行回测

Parameters:
  • stock (Stock) – 交易的证券
  • query (Query) – K线数据查询条件
  • reset (bool) – 是否同时复位所有组件,尤其是tm实例
reset(self)

复位操作

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

因操作失败,连续延迟的次数