信号指示器

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

公共参数:

  • 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)))
Parameters:
  • fast (Operand) – 快线
  • slow (Operand) – 慢线
  • kpart (string) – OPEN|HIGH|LOW|CLOSE|AMO|VOL|KDATA
Returns:

信号指示器

金叉信号指示器

hikyuu.trade_sys.SG_CrossGold(fast, slow[, kpart = "CLOSE"])

金叉指示器,当快线从下向上穿越慢线且快线和慢线的方向都是向上时为金叉,买入; 当快线从上向下穿越慢线且快线和慢线的方向都是向下时死叉,卖出。:

SG_CrossGold(OP(MA(n=10)), OP(MA(n=30)))
Parameters:
  • fast (Operand) – 快线
  • slow (Operand) – 慢线
  • kpart (string) – OPEN|HIGH|LOW|CLOSE|AMO|VOL|KDATA
Returns:

信号指示器

单线拐点信号指示器

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
Parameters:
  • ind (Operand) –
  • filer_n (int) – N日周期
  • filter_p (float) – 过滤器百分比
  • kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL
Returns:

信号指示器

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
Parameters:
  • ind (Operand) –
  • filer_n (int) – N日周期
  • filter_p (float) – 过滤器百分比
  • kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL
Returns:

信号指示器

自交叉单线拐点指示器

hikyuu.trade_sys.SG_Flex(ind, slow_n[, kpart = 'CLOSE'])

使用自身的EMA(slow_n)作为慢线,自身作为快线,快线向上穿越慢线买入,快线向下穿越慢线卖出。

Parameters:
  • ind (Operand) –
  • slow_n (int) – 慢线EMA周期
  • kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL
Returns:

信号指示器

布尔信号指示器

hikyuu.trade_sys.SG_Bool(buy, sell[, kpart='CLOSE'])

布尔信号指示器,使用运算结果为类似bool数组的Operand分别作为买入、卖出指示。

Parameters:
  • buy (Operand) – 买入指示(结果Indicator中相应位置>0则代表买入)
  • sell (Operand) – 卖出指示(结果Indicator中相应位置>0则代表卖出)
  • kpart (string) – KDATA|OPEN|HIGH|LOW|CLOSE|AMO|VOL
Returns:

信号指示器

自定义信号指示器

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

hikyuu.trade_sys.crtSG(func, params={}, name='crtSG')

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

Parameters:
  • func – 信号策略函数
  • params ({}) – 参数字典
  • name (str) – 自定义名称
Returns:

自定义信号指示器实例

示例:

#!/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)

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

示例1(不含私有变量,海龟交易策略):

#!/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)

示例2(含私有属性):

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"])
Parameters:name (str) – 名称
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! 不支持的参数类型

setTO(self, k)
Parameters:k (KData) – 设置交易对象
getTO(self)
Returns:交易对象
Return type:KData
shouldBuy(self, datetime)

指定时刻是否可以买入

Parameters:datetime (Datetime) – 指定时刻
Return type:bool
shouldSell(self, datetime)

指定时刻是否可以卖出

Parameters:datetime (Datetime) – 指定时刻
Return type:bool
getBuySignal(self)

获取所有买入指示日期列表

Return type:DatetimeList
getSellSignal(self)

获取所有卖出指示日期列表

Return type:DatetimeList
_addBuySignal(self, datetime)

加入买入信号,在_calculate中调用

Parameters:datetime (Datetime) – 指示买入的日期
_addSellSignal(self, datetime)

加入卖出信号,在_calculate中调用

Parameters:datetime (Datetime) – 指示卖出的日期
reset(self)

复位操作

clone(self)

克隆操作

_calculate(self)

【重载接口】子类计算接口

_reset(self)

【重载接口】子类复位接口,复位内部私有变量

_clone(self)

【重载接口】子类克隆接口