Hikyuu交易系统
系统框架
系统是指针对针对单个交易对象的完整策略,包括环境判断、系统有效条件、资金管理、止损、止盈、盈利目标、移滑价差的完整策略,用于模拟回测。
公共参数:
- 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])
参数:
tm (TradeManager) – 交易管理实例
mm (MoneyManager) – 资金管理策略
ev (EnvironmentBase) – 市场环境判断策略
cn (ConditionBase) – 系统有效条件
sg (SignalBase) – 信号指示器
st (StoplossBase) – 止损策略
tp (StoplossBase) – 止盈策略
pg (ProfitGoalBase) – 盈利目标策略
sp (SlippageBase) – 移滑价差算法
返回:
system实例
创建简单系统实例(每次交易不进行多次加仓或减仓,即每次买入后在卖出时全部卖出), 系统实例在运行时(调用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))
系统部件枚举定义

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_stock(self) 获取关联的证券 返回类型: Stock get_trade_record_list(self) 获取交易记录 返回类型: TradeRecordList get_buy_trade_request(self) 获取买入请求,“delay”模式下查看下一时刻是否存在买入操作 返回类型: TradeRequest get_sell_trade_request(self) 获取卖出请求,“delay”模式下查看下一时刻是否存在卖出操作 返回类型: TradeRequest run(self, stock, query[, reset=True]) 运行系统,执行回测 参数: stock (Stock) – 交易的证券 query (Query) – K线数据查询条件 reset (bool) – 是否同时复位所有组件,尤其是tm实例 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 因操作失败,连续延迟的次数
市场环境判定策略
内建市场环境判定策略

hikyuu.trade_sys.EV_TwoLine(fast, slow[, market = 'SH']) 快慢线判断策略,市场指数的快线大于慢线时,市场有效,否则无效。 参数: fast (Indicator) – 快线指标 slow (Indicator) – 慢线指标 market (string) – 市场名称
自定义市场环境判定策略
自定义市场环境判定策略接口:
EnvironmentBase._calculate()
- 【必须】子类计算接口EnvironmentBase._clone()
- 【必须】克隆接口EnvironmentBase._reset()
- 【可选】重载私有变量
市场环境判定策略基类

class hikyuu.trade_sys.EnvironmentBase 市场环境判定策略基类 name 名称 query 设置或获取查询条件 __init__(self[, name='EnvironmentBase']) 初始化构造函数 参数: name (str) – 名称 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! 不支持的参数类型 is_valid(self, datetime) 指定时间系统是否有效 参数: datetime (Datetime) – 指定时间 返回: True 有效 | False 无效 _add_valid(self, datetime) 加入有效时间,在_calculate中调用 参数: datetime (Datetime) – 有效时间 reset(self) 复位操作 clone(self) 克隆操作 _calculate(self) 【重载接口】子类计算接口 _reset(self) 【重载接口】子类复位接口,用于复位内部私有变量 _clone(self) 【重载接口】子类克隆接口
系统有效条件
内建系统有效条件

hikyuu.trade_sys.CN_OPLine(ind)
固定使用股票最小交易量进行交易,计算权益曲线的op值,当权益曲线高于op时,系统有效,否则无效。
参数: ind (Indicator) – Indicator实例
返回: 系统有效条件实例
返回类型: ConditionBase
自定义系统有效条件
快速创建不带私有属性的自定义系统有效条件

hikyuu.trade_sys.crtCN(func, params={}, name='crtSG') 快速创建自定义不带私有属性的系统有效条件 参数: func – 系统有效条件函数 params ({}) – 参数字典 name (str) – 自定义名称 返回: 自定义系统有效条件实例 自定义系统有效条件接口: ConditionBase._calculate() - 【必须】子类计算接口 ConditionBase._clone() - 【必须】克隆接口 ConditionBase._reset() - 【可选】重载私有变量
系统有效条件基类

class hikyuu.trade_sys.ConditionBase 系统有效条件基类 name 名称 to 设置或获取交易对象 tm 设置或获取交易管理账户 sg 设置或获取交易信号指示器 __init__(self[, name="ConditionBase"]) 初始化构造函数 参数: name (str) – 名称 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! 不支持的参数类型 is_valid(self, datetime) 指定时间系统是否有效 参数: datetime (Datetime) – 指定时间 返回: True 有效 | False 无效 _add_valid(self, datetime) 加入有效时间,在_calculate中调用 参数: datetime (Datetime) – 有效时间 reset(self) 复位操作 clone(self) 克隆操作 _calculate(self) 【重载接口】子类计算接口 _reset(self) 【重载接口】子类复位接口,复位内部私有变量 _clone(self) 【重载接口】子类克隆接口
信号指示器
信号指示器负责产生买入、卖出信号。
公共参数:
- alternate (bool|True) :买入和卖出信号是否交替出现。单线型的信号通常通过拐点、斜率等判断信号的产生,此种情况下可能出现连续出现买入信号或连续出现卖出信号的情况,此时可通过该参数控制买入、卖出信号是否交替出现。而双线交叉型的信号通常本身买入和卖出已经是交替出现,此时该参数无效。
通用信号指示器
通常使用技术指标判断买入、卖出时,依据的是快线和慢线的交叉、或是单曲线的拐点。下面的通用信号指示器足够应付大部分的情况。
双线交叉信号指示器

hikyuu.trade_sys.SG_Cross(fast, slow[, kpart = "CLOSE"]) 双线交叉指示器,当快线从下向上穿越慢线时,买入;当快线从上向下穿越慢线时,卖出。如:5日MA上穿10日MA时买入,5日MA线下穿MA10日线时卖出: SG_Cross(OP(MA(n=10)), OP(MA(n=30))) 参数: fast (Indicator) – 快线 slow (Indicator) – 慢线 kpart (string) – OPEN|HIGH|LOW|CLOSE|AMO|VOL|KDATA 返回: 信号指示器
金叉信号指示器

ikyuu.trade_sys.SG_CrossGold(fast, slow[, kpart = "CLOSE"]) 金叉指示器,当快线从下向上穿越慢线且快线和慢线的方向都是向上时为金叉,买入; 当快线从上向下穿越慢线且快线和慢线的方向都是向下时死叉,卖出。: SG_CrossGold(OP(MA(n=10)), OP(MA(n=30))) 参数: fast (Indicator) – 快线 slow (Indicator) – 慢线 kpart (string) – OPEN|HIGH|LOW|CLOSE|AMO|VOL|KDATA 返回: 信号指示器
单线拐点信号指示器

hikyuu.trade_sys.SG_Single(ind[, filter_n = 10, filter_p = 0.1, kpart='CLOSE']) 生成单线拐点信号指示器。使用《精明交易者》 [BOOK1] 中给出的曲线拐点算法判断曲线趋势,公式见下: filter = percentage * STDEV((AMA-AMA[1], N) Buy When AMA - AMA[1] > filter or Buy When AMA - AMA[2] > filter or Buy When AMA - AMA[3] > filter 参数: ind (Indicator) – filer_n (int) – N日周期 filter_p (float) – 过滤器百分比 kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL 返回: 信号指示器

hikyuu.trade_sys.SG_Single2(ind[, filter_n = 10, filter_p = 0.1, kpart='CLOSE']) 生成单线拐点信号指示器2 [BOOK1]: filter = percentage * STDEV((AMA-AMA[1], N) Buy When AMA - @lowest(AMA,n) > filter Sell When @highest(AMA, n) - AMA > filter 参数: ind (Indicator) – filer_n (int) – N日周期 filter_p (float) – 过滤器百分比 kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL 返回: 信号指示器
自交叉单线拐点指示器

hikyuu.trade_sys.SG_Flex(ind, slow_n[, kpart = 'CLOSE']) 使用自身的EMA(slow_n)作为慢线,自身作为快线,快线向上穿越慢线买入,快线向下穿越慢线卖出。 参数: ind (Indicator) – slow_n (int) – 慢线EMA周期 kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL 返回: 信号指示器
布尔信号指示器

hikyuu.trade_sys.SG_Bool(buy, sell[, kpart='CLOSE']) 布尔信号指示器,使用运算结果为类似bool数组的Indicator分别作为买入、卖出指示。 参数: buy (Indicator) – 买入指示(结果Indicator中相应位置>0则代表买入) sell (Indicator) – 卖出指示(结果Indicator中相应位置>0则代表卖出) kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL 返回: 信号指示器
自定义信号指示器
快速创建不带私有属性的自定义信号指示器

hikyuu.trade_sys.crtSG(func, params={}, name='crtSG') 快速创建自定义不带私有属性的信号指示器 参数: func – 信号策略函数 params ({}) – 参数字典 name (str) – 自定义名称 返回: 自定义信号指示器实例

#!/usr/bin/python # -*- coding: utf8 -*- # cp936 #=============================================================================== # Aothor: fasiondog # History: 20160407, Added by fasiondog #=============================================================================== from hikyuu.trade_sys.signal import crtSG from hikyuu.indicator import HHV, LLV, CLOSE, REF def TurtleSG(self): n = self.getParam("n") k = self.getTO() c = CLOSE(k) h = REF(HHV(c, n), 1) #前n日高点 L = REF(LLV(c, n), 1) #前n日低点 for i in range(h.discard, len(k)): if (c[i] >= h[i]): self._addBuySignal(k[i].datetime) elif (c[i] <= L[i]): self._addSellSignal(k[i].datetime) if __name__ == "__main__": from examples_init import * sg = crtSG(TurtleSG, {'n': 20}, 'TurtleSG') s = getStock("sh000001") k = s.getKData(Query(-500)) #只有设置交易对象时,才会开始实际计算 sg.setTO(k) dates = k.getDatetimeList() for d in dates: if (sg.shouldBuy(d)): print("买入:%s" % d) elif (sg.shouldSell(d)): print("卖出: %s" % d)
自定义的信号指示器接口:
SignalBase._calculate()
- 【必须】子类计算接口SignalBase._clone()
- 【必须】克隆接口SignalBase._reset()
- 【可选】重载私有变量

#!/usr/bin/python # -*- coding: utf8 -*- # cp936 #=============================================================================== # Aothor: fasiondog # History: 20160407, Added by fasiondog #=============================================================================== from hikyuu.trade_sys.signal import SignalBase from hikyuu.indicator import HHV, LLV, CLOSE, REF class TurtleSignal(SignalBase): def __init__(self, n = 20): super(TurtleSignal, self).__init__("TurtleSignal") self.setParam("n", 20) def _clone(self): return TurtleSignal() def _calculate(self): n = self.getParam("n") k = self.getTO() c = CLOSE(k) h = REF(HHV(c, n), 1) #前n日高点 L = REF(LLV(c, n), 1) #前n日低点 for i in range(h.discard, len(k)): if (c[i] >= h[i]): self._addBuySignal(k[i].datetime) elif (c[i] <= L[i]): self._addSellSignal(k[i].datetime) if __name__ == "__main__": from examples_init import * sg = TurtleSignal() s = getStock("sh000001") k = s.getKData(Query(-500)) #只有设置交易对象时,才会开始实际计算 sg.setTO(k) dates = k.getDatetimeList() for d in dates: if (sg.shouldBuy(d)): print("买入:%s" % d) elif (sg.shouldSell(d)): print("卖出: %s" % d)

class SignalPython(SignalBase): def __init__(self): super(SignalPython, self).__init__("SignalPython") self._x = 0 #私有属性 self.setParam("test", 30) def _reset(self): self._x = 0 def _clone(self): p = SignalPython() p._x = self._x return p def _calculate(self): self._addBuySignal(Datetime(201201210000)) self._addSellSignal(Datetime(201201300000))
信号指示器基类

class hikyuu.trade_sys.SignalBase 信号指示器基类 name 名称 __init__(self[, name="SignalBase"]) 参数: name (str) – 名称 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! 不支持的参数类型 should_buy(self, datetime) 指定时刻是否可以买入 参数: datetime (Datetime) – 指定时刻 返回类型: bool should_sell(self, datetime) 指定时刻是否可以卖出 参数: datetime (Datetime) – 指定时刻 返回类型: bool get_buy_signal(self) 获取所有买入指示日期列表 返回类型: DatetimeList get_sell_signal(self) 获取所有卖出指示日期列表 返回类型: DatetimeList _add_buy_signal(self, datetime) 加入买入信号,在_calculate中调用 参数: datetime (Datetime) – 指示买入的日期 _add_sell_signal(self, datetime) 加入卖出信号,在_calculate中调用 参数: datetime (Datetime) – 指示卖出的日期 reset(self) 复位操作 clone(self) 克隆操作 _calculate(self) 【重载接口】子类计算接口 _reset(self) 【重载接口】子类复位接口,复位内部私有变量 _clone(self) 【重载接口】子类克隆接口
止损止盈策略
Hikyuu中将止损和止盈分别作为交易系统的两个策略组件。两者之间在概念和执行上有所区别。比如,一般系统通常在使用跟随性的指标曲线作为止盈退出时,经常会发生滞后的情况,原本希望收盘价低于指标时卖出止盈,但实际上指标和收盘价同时都在下跌,这样实际的退出发生在收盘价向下穿越指标线时,这样造成滞后反映,另外,如果在盘中实时跟踪,由于收盘价不停的变动,止损的指标线也会发生变动,这样会出现噪音误判,导致一般系统里实盘和回测的结果出现偏差。Hikyuu里,当前Bar里止损/止盈都是不变的固定是上一时刻的值,同时,Hikyuu里系统是保证止盈始终单调递增的!比如某个指标值,前天值为11,昨天的值为9,今天的收盘价10,那么这个指标作为止损部件(今日收盘价10大于止损价9),不会触发退出,而作为止盈部件,系统则会发出卖出指示,因为当前的收盘价已经低于11。
常用止损止盈策略
止损是指买入后,价格的走势和预期相反,当价格低于某一水平时卖出,防止进一步的损失。 止赢是在买入后,价格符合预期走势,当价格回落至某一水平时卖出,获得足够的收益。 进行交易时,即可使用相同的止损和止赢策略,也可使用不同的止损和止赢策略,如使用固定百分比3%作为止损,使用吊灯安全线作为止赢。
固定百分比止损

hikyuu.trade_sys.ST_FixedPercent([p=0.03]) 固定百分比止损策略,即当价格低于买入价格的某一百分比时止损 参数: p (float) – 百分比(0,1] 返回: 止损/止赢策略实例
技术指标止损

hikyuu.trade_sys.ST_Indicator(op[, kpart="CLOSE"]) 使用技术指标作为止损价。如使用10日EMA作为止损:: ST_Indicator(OP(EMA(n=10))) 参数: op (Indicator) – kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL 返回: 止损/止赢策略实例
亚历山大埃尔德安全地带止损

hikyuu.trade_sys.ST_Saftyloss([n1=10, n2=3, p=2.0])
参见《走进我的交易室》(2007年 地震出版社) 亚历山大.艾尔德(Alexander Elder) P202 计算说明:在回溯周期内(一般为10到20天),将所有向下穿越的长度相加除以向下穿越的次数, 得到噪音均值(即回溯期内所有最低价低于前一日最低价的长度除以次数),并用今日 最低价减去(前日噪音均值乘以一个倍数)得到该止损线。为了抵消波动并且保证止损线的 上移,在上述结果的基础上再取起N日(一般为3天)内的最高值
参数:
n1 (int) – 计算平均噪音的回溯时间窗口,默认为10天
n2 (int) – 对初步止损线去n2日内的最高值,默认为3
p (double) – 噪音系数,默认为2
返回:
止损/止赢策略实例
自定义止损止盈策略
自定义止损/止赢策略接口:
SignalBase._calculate()
- 【必须】子类计算接口SignalBase._clone()
- 【必须】克隆接口SignalBase._reset()
- 【可选】重载私有变量
止损止盈策略基类

class hikyuu.trade_sys.StoplossBase 止损/止赢算法基类 name 名称 tm 设置或获取交易管理实例 to 设置或获取交易对象 __init__(self[, name="StoplossBase"]) 参数: name (str) – 名称 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! 不支持的参数类型 reset(self) 复位操作 clone(self) 克隆操作 get_price(self, datetime, price) 【重载接口】获取本次预期交易(买入)时的计划止损价格,如果不存在止损价,则返回0。用于系统在交易执行前向止损策略模块查询本次交易的计划止损价。 注解 一般情况下,止损/止赢的算法可以互换,但止损的getPrice可以传入计划交易的价格,比如以买入价格的30%做为止损。而止赢则不考虑传入的price参数,即认为price为0.0。实际上,即使止损也不建议使用price参数,如可以使用前日最低价的30%作为止损,则不需要考虑price参数。 参数: datetime (Datetime) – 交易时间 price (float) – 计划买入的价格 返回: 止损价格 返回类型: float _calculate(self) 【重载接口】子类计算接口 _reset(self) 【重载接口】子类复位接口,复位内部私有变量 _clone(self) 【重载接口】子类克隆接口
资金管理策略
公共参数:
- auto-checkin=False (bool) : 当账户现金不足以买入资金管理策略指示的买入数量时,自动向账户中补充存入(checkin)足够的现金。
- max-stock=20000(int) : 最大持有的证券种类数量(即持有几只股票,而非各个股票的持仓数)
- disable_ev_force_clean_position=False(bool) : 禁用市场环境失效时强制清仓
- disable_cn_force_clean_position=False (bool) : 禁用系统有效条件失效时强制清仓
内建资金管理策略
不做资金管理策略

hikyuu.trade_sys.MM_Nothing()
特殊的资金管理策略,相当于不做资金管理,有多少钱买多少。
固定交易数量资金管理策略

hikyuu.trade_sys.MM_FixedCount([n = 100])
固定交易数量资金管理策略。每次买入固定的数量。
参数: n (float) – 每次买入的数量(应该是交易对象最小交易数量的整数,此处程序没有此进行判断)
返回: 资金管理策略实例
固定风险资金管理策略

hikyuu.trade_sys.MM_FixedRisk([risk = 1000.00]) 固定风险资金管理策略对每笔交易限定一个预先确定的或者固定的资金风险,如每笔交易固定风险1000元。公式:交易数量 = 固定风险 / 交易风险。 参数: risk (float) – 固定风险 返回: 资金管理策略实例
固定资本资金管理策略

hikyuu.trade_sys.MM_FixedCapital([capital = 10000.0])
固定资本资金管理策略
参数: capital (float) – 固定资本单位
返回: 资金管理策略实例
固定比例资金管理策略
固定单位资金管理策略

hikyuu.trade_sys.MM_FixedUnits([n = 33])
固定单位资金管理策略
参数: n (int) – n个资金单位
返回: 资金管理策略实例
威廉斯固定风险资金管理策略

hikyuu.trade_sys.MM_WilliamsFixedRisk([p=0.1, max_loss=1000.0])
威廉斯固定风险资金管理策略
固定百分比资金管理策略

hikyuu.trade_sys.MM_FixedPercent([p = 0.03]) 固定百分比风险模型。公式:P(头寸规模)= 账户余额 * 百分比 / R(每股的交易风险)。[BOOK3], [BOOK4] . 参数: p (float) – 百分比 返回: 资金管理策略实例
固定波幅资金管理策略
自定义资金管理策略
自定义资金管理策略接口:
MoneyManagerBase.buyNotify()
- 【可选】接收实际买入通知,预留用于多次增减仓处理MoneyManagerBase.sellNotify()
- 【可选】接收实际卖出通知,预留用于多次增减仓处理MoneyManagerBase._getBuyNumber()
- 【必须】获取指定交易对象可买入的数量MoneyManagerBase._getSellNumber()
- 【可选】获取指定交易对象可卖出的数量,如未重载,默认为卖出全部已持仓数量MoneyManagerBase._reset()
- 【可选】重置私有属性MoneyManagerBase._clone()
- 【必须】克隆接口
资金管理策略基类

class hikyuu.trade_sys.MoneyManagerBase 资金管理策略基类 name 名称 tm 设置或获取交易管理对象 query 设置或获取查询条件 __init__(self[, name="MoneyManagerBase]) 初始化构造函数 参数: name (str) – 名称 get_param(self, name) 获取指定的参数 注解 所有的资金管理策略具有参数“auto-checkin”(bool类型,默认为False),其含义为“当账户现金不足以买入资金管理策略指示的买入数量时,自动向账户中补充存入(checkin)足够的现金。 参数: name (str) – 参数名称 返回: 参数值 引发: out_of_range – 无此参数 set_param(self, name, value) 设置参数 参数: name (str) – 参数名称 value (int | bool | float | string) – 参数值 引发: logic_error – Unsupported type! 不支持的参数类型 reset(self) 复位操作 clone(self) 克隆操作 get_buy_num(self, datetime, stock, price, risk, part_from) 获取指定交易对象可买入的数量 参数: datetime (Datetime) – 交易时间 stock (Stock) – 交易对象 price (float) – 交易价格 risk (float) – 交易承担的风险,如果为0,表示全部损失,即市值跌至0元 part_from (System.Part) – 来源系统组件 返回: 可买入数量 返回类型: float get_sell_num(self, datetime, stock, price, risk, part_from) 获取指定交易对象可卖出的数量 参数: datetime (Datetime) – 交易时间 stock (Stock) – 交易对象 price (float) – 交易价格 risk (float) – 新的交易承担的风险,如果为0,表示全部损失,即市值跌至0元 part_from (System.Part) – 来源系统组件 返回: 可卖出数量 返回类型: float buy_notify(self, trade_record) 【重载接口】交易系统发生实际买入操作时,通知交易变化情况,一般存在多次增减仓的情况才需要重载 参数: trade_record (TradeRecord) – 发生实际买入时的实际买入交易记录 sell_notify(self, trade_record) 【重载接口】交易系统发生实际卖出操作时,通知实际交易变化情况,一般存在多次增减仓的情况才需要重载 参数: trade_record (TradeRecord) – 发生实际卖出时的实际卖出交易记录 _get_buy_num(self, datetime, stock, price, risk, part_from) 【重载接口】获取指定交易对象可买入的数量 参数: datetime (Datetime) – 交易时间 stock (Stock) – 交易对象 price (float) – 交易价格 risk (float) – 交易承担的风险,如果为0,表示全部损失,即市值跌至0元 part_from (System.Part) – 来源系统组件 返回: 可买入数量 返回类型: float _get_sell_num(self, datetime, stock, price, risk, part_from) 【重载接口】获取指定交易对象可卖出的数量。如未重载,默认为卖出全部已持仓数量。 参数: datetime (Datetime) – 交易时间 stock (Stock) – 交易对象 price (float) – 交易价格 risk (float) – 新的交易承担的风险,如果为0,表示全部损失,即市值跌至0元 part_from (System.Part) – 来源系统组件 返回: 可卖出数量 返回类型: float _reset(self) 【重载接口】子类复位接口,复位内部私有变量 _clone(self) 【重载接口】子类克隆接口
盈利目标策略
内建盈利目标策略

hikyuu.trade_sys.PG_FixedPercent([p = 0.2]) 固定百分比盈利目标,目标价格 = 买入价格 * (1 + p) 参数: p (float) – 百分比 返回: 盈利目标策略实例

hikyuu.trade_sys.PG_FixedHoldDays([days=5])
固定持仓天数盈利目标策略
参数: days (int) – 允许持仓天数(按交易日算),默认5天
返回: 盈利目标策略实例

hikyuu.trade_sys.PG_NoGoal()
无盈利目标策略,通常为了进行测试或对比。
返回: 盈利目标策略实例
自定义盈利目标策略
自定义盈利目标策略接口:
ProfitGoalBase.getGoal()
- 【必须】获取目标价格ProfitGoalBase._calculate()
- 【必须】子类计算接口ProfitGoalBase._clone()
- 【必须】克隆接口ProfitGoalBase._reset()
- 【可选】重载私有变量ProfitGoalBase.buyNotify()
- 【可选】接收实际买入通知,预留用于多次增减仓处理ProfitGoalBase.sellNotify()
- 【可选】接收实际卖出通知,预留用于多次增减仓处理
盈利目标策略基类

class hikyuu.trade_sys.ProfitGoalBase 盈利目标策略基类 name 名称 to 设置或获取交易对象 tm 设置或获取交易管理账户 __init__(self[, name="ProfitGoalBase"]) 初始化构造函数 参数: name (str) – 名称 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! 不支持的参数类型 reset(self) 复位操作 clone(self) 克隆操作 get_goal(self, datetime, price) 【重载接口】获取盈利目标价格,返回constant.null_price时,表示未限定目标;返回0意味着需要卖出 参数: datetime (Datetime) – 买入时间 price (float) – 买入价格 返回: 目标价格 返回类型: float buy_notify(self, trade_record) 【重载接口】交易系统发生实际买入操作时,通知交易变化情况,一般存在多次增减仓的情况才需要重载 参数: trade_record (TradeRecord) – 发生实际买入时的实际买入交易记录 sell_notify(self, trade_record) 【重载接口】交易系统发生实际卖出操作时,通知实际交易变化情况,一般存在多次增减仓的情况才需要重载 参数: trade_record (TradeRecord) – 发生实际卖出时的实际卖出交易记录 _calculate(self) 【重载接口】子类计算接口 _reset(self) 【重载接口】子类复位接口,复位内部私有变量 _clone(self) 【重载接口】子类克隆接口
移滑价差算法
内建移滑价差算法

hikyuu.trade_sys.SP_FixedPercent([p=0.001]) 固定百分比移滑价差算法,买入实际价格 = 计划买入价格 * (1 + p),卖出实际价格 = 计划卖出价格 * (1 - p) 参数: p (float) – 偏移的固定百分比 返回: 移滑价差算法实例

hikyuu.trade_sys.SP_FixedValuet([p=0.001]) 固定价格移滑价差算法,买入实际价格 = 计划买入价格 + 偏移价格,卖出实际价格 = 计划卖出价格 - 偏移价格 参数: p (float) – 偏移价格 返回: 移滑价差算法实例
自定义移滑价差算法
自定义移滑价差接口:
SlippageBase.getRealBuyPrice()
- 【必须】计算实际买入价格SlippageBase.getRealSellPrice()
- 【必须】计算实际卖出价格SlippageBase._calculate()
- 【必须】子类计算接口SlippageBase._clone()
- 【必须】克隆接口SlippageBase._reset()
- 【可选】重载私有变量
移滑价差算法基类

class hikyuu.trade_sys.SlippageBase 移滑价差算法基类 name 名称 __init__(self[, name="SlippageBase"]) 初始化构造函数 参数: name (str) – 名称 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_real_buy_price(self, datetime, price) 【重载接口】计算实际买入价格 参数: datetime (Datetime) – 买入时间 price (float) – 计划买入价格 返回: 实际买入价格 返回类型: float get_real_sell_price(self, datetime, price) 【重载接口】计算实际卖出价格 参数: datetime (Datetime) – 卖出时间 price (float) – 计划卖出价格 返回: 实际卖出价格 返回类型: float reset(self) 复位操作 clone(self) 克隆操作 _calculate(self) 【重载接口】子类计算接口 _reset(self) 【重载接口】子类复位接口,复位内部私有变量 _clone(self)
自定义移滑价差接口:
SlippageBase.getRealBuyPrice()
- 【必须】计算实际买入价格SlippageBase.getRealSellPrice()
- 【必须】计算实际卖出价格SlippageBase._calculate()
- 【必须】子类计算接口SlippageBase._clone()
- 【必须】克隆接口SlippageBase._reset()
- 【可选】重载私有变量