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实例
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))
View Code

系统部件枚举定义

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 - 无效值边界,大于等于该值时为无效部件
class System.Part
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_name(part)
hikyuu.trade_sys.get_system_part_enum(part_name)
根据系统部件的字符串名称获取相应的枚举值
参数:    part_name (str) – 系统部件的字符串名称,参见:getSystemPartName()
返回类型:    System.Part
hikyuu.trade_sys.get_system_part_enum(part_name)

系统基类定义

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.System

交易请求记录

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
因操作失败,连续延迟的次数
class hikyuu.trade_sys.TradeRequest

 

市场环境判定策略

内建市场环境判定策略

hikyuu.trade_sys.EV_TwoLine(fast, slow[, market = 'SH'])
快慢线判断策略,市场指数的快线大于慢线时,市场有效,否则无效。

参数:    
fast (Indicator) – 快线指标
slow (Indicator) – 慢线指标
market (string) – 市场名称
hikyuu.trade_sys.EV_TwoLine(fast, slow[, market = 'SH'])

自定义市场环境判定策略

自定义市场环境判定策略接口:

市场环境判定策略基类

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)
【重载接口】子类克隆接口
class hikyuu.trade_sys.EnvironmentBase

 

系统有效条件

内建系统有效条件

hikyuu.trade_sys.CN_OPLine(ind)
固定使用股票最小交易量进行交易,计算权益曲线的op值,当权益曲线高于op时,系统有效,否则无效。

参数:    ind (Indicator) – Indicator实例
返回:    系统有效条件实例
返回类型:    ConditionBase
hikyuu.trade_sys.CN_OPLine(ind)

自定义系统有效条件

快速创建不带私有属性的自定义系统有效条件

hikyuu.trade_sys.crtCN(func, params={}, name='crtSG')
快速创建自定义不带私有属性的系统有效条件

参数:    
func – 系统有效条件函数
params ({}) – 参数字典
name (str) – 自定义名称
返回:    
自定义系统有效条件实例

自定义系统有效条件接口:

ConditionBase._calculate() - 【必须】子类计算接口
ConditionBase._clone() - 【必须】克隆接口
ConditionBase._reset() - 【可选】重载私有变量
hikyuu.trade_sys.crtCN(func, params={}, name='crtSG')

系统有效条件基类

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)
【重载接口】子类克隆接口
class hikyuu.trade_sys.ConditionBase

 

信号指示器

信号指示器负责产生买入、卖出信号。

公共参数:

  • 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
返回:    
信号指示器
hikyuu.trade_sys.SG_Cross(fast, slow[, kpart = "CLOSE"])

金叉信号指示器

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
返回:    
信号指示器
ikyuu.trade_sys.SG_CrossGold(fast, slow[, kpart = "CLOSE"])

单线拐点信号指示器

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_Single(ind[, filter_n = 10, filter_p = 0.1, kpart='CLOSE'])
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_Single2(ind[, filter_n = 10, filter_p = 0.1, kpart='CLOSE'])

自交叉单线拐点指示器

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_Flex(ind, slow_n[, kpart = 'CLOSE'])

布尔信号指示器

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.SG_Bool(buy, sell[, kpart='CLOSE'])

自定义信号指示器

快速创建不带私有属性的自定义信号指示器

hikyuu.trade_sys.crtSG(func, params={}, name='crtSG')
快速创建自定义不带私有属性的信号指示器

参数:    
func – 信号策略函数
params ({}) – 参数字典
name (str) – 自定义名称
返回:    
自定义信号指示器实例
hikyuu.trade_sys.crtSG(func, params={}, name='crtSG')
#!/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)
示例

自定义的信号指示器接口:

#!/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)
示例1(不含私有变量,海龟交易策略)
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))
示例2(含私有属性)

信号指示器基类

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)
【重载接口】子类克隆接口
class hikyuu.trade_sys.SignalBase

止损止盈策略

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_FixedPercent([p=0.03])

技术指标止损

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_Indicator(op[, kpart="CLOSE"])

亚历山大埃尔德安全地带止损

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
返回:    
止损/止赢策略实例
hikyuu.trade_sys.ST_Saftyloss([n1=10, n2=3, p=2.0])

自定义止损止盈策略

自定义止损/止赢策略接口:

止损止盈策略基类

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)
【重载接口】子类克隆接口
class hikyuu.trade_sys.StoplossBase

 

资金管理策略

公共参数:

  • 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_Nothing()

固定交易数量资金管理策略

hikyuu.trade_sys.MM_FixedCount([n = 100])
固定交易数量资金管理策略。每次买入固定的数量。

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

固定风险资金管理策略

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

参数:    risk (float) – 固定风险
返回:    资金管理策略实例
hikyuu.trade_sys.MM_FixedRisk([risk = 1000.00])

固定资本资金管理策略

hikyuu.trade_sys.MM_FixedCapital([capital = 10000.0])
固定资本资金管理策略

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

固定比例资金管理策略

固定单位资金管理策略

hikyuu.trade_sys.MM_FixedUnits([n = 33])
固定单位资金管理策略

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

威廉斯固定风险资金管理策略

hikyuu.trade_sys.MM_WilliamsFixedRisk([p=0.1, max_loss=1000.0])
威廉斯固定风险资金管理策略
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) – 百分比
返回:    资金管理策略实例
hikyuu.trade_sys.MM_FixedPercent([p = 0.03])

固定波幅资金管理策略

自定义资金管理策略

自定义资金管理策略接口:

  • 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)
【重载接口】子类克隆接口
class hikyuu.trade_sys.MoneyManagerBase

盈利目标策略

 内建盈利目标策略

hikyuu.trade_sys.PG_FixedPercent([p = 0.2])
固定百分比盈利目标,目标价格 = 买入价格 * (1 + p)

参数:    p (float) – 百分比
返回:    盈利目标策略实例
hikyuu.trade_sys.PG_FixedPercent([p = 0.2])
hikyuu.trade_sys.PG_FixedHoldDays([days=5])
固定持仓天数盈利目标策略

参数:    days (int) – 允许持仓天数(按交易日算),默认5天
返回:    盈利目标策略实例
hikyuu.trade_sys.PG_FixedHoldDays([days=5])
hikyuu.trade_sys.PG_NoGoal()
无盈利目标策略,通常为了进行测试或对比。

返回:    盈利目标策略实例
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)
【重载接口】子类克隆接口
class hikyuu.trade_sys.ProfitGoalBase

 

移滑价差算法

内建移滑价差算法

hikyuu.trade_sys.SP_FixedPercent([p=0.001])
固定百分比移滑价差算法,买入实际价格 = 计划买入价格 * (1 + p),卖出实际价格 = 计划卖出价格 * (1 - p)

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

参数:    p (float) – 偏移价格
返回:    移滑价差算法实例
hikyuu.trade_sys.SP_FixedValuet([p=0.001])

自定义移滑价差算法

自定义移滑价差接口:

移滑价差算法基类

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)
class hikyuu.trade_sys.SlippageBase

 

自定义移滑价差接口:

posted @ 2021-02-09 15:57  KnowledgePorter  阅读(750)  评论(0)    收藏  举报