信号指示器¶
信号指示器负责产生买入、卖出信号。
公共参数:
- alternate (bool|True) :买入和卖出信号是否交替出现。单线型的信号通常通过拐点、斜率等判断信号的产生,此种情况下可能出现连续出现买入信号或连续出现卖出信号的情况,此时可通过该参数控制买入、卖出信号是否交替出现。而双线交叉型的信号通常本身买入和卖出已经是交替出现,此时该参数无效。
通用信号指示器¶
通常使用技术指标判断买入、卖出时,依据的是快线和慢线的交叉、或是单曲线的拐点。下面的通用信号指示器足够应付大部分的情况。
双线交叉信号指示器¶
金叉信号指示器¶
单线拐点信号指示器¶
-
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.
crtSG
(func, params={}, name='crtSG')¶ 快速创建自定义不带私有属性的信号指示器
参数: - func – 信号策略函数
- params ({}) – 参数字典
- name (str) – 自定义名称
返回: 自定义信号指示器实例
示例:
#!/usr/bin/python
# -*- coding: utf8 -*-
# cp936
#===============================================================================
# Aothor: fasiondog
# History: 20160407, Added by fasiondog
#===============================================================================
from hikyuu import *
def TurtleSG(self):
n = self.get_param("n")
k = self.to
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._add_buy_signal(k[i].datetime)
elif (c[i] <= L[i]):
self._add_sell_signal(k[i].datetime)
if __name__ == "__main__":
from examples_init import *
sg = crtSG(TurtleSG, {'n': 20}, 'TurtleSG')
s = get_stock("sh000001")
k = s.get_kdata(Query(-500))
#只有设置交易对象时,才会开始实际计算
sg.to = k
dates = k.get_datetime_list()
for d in dates:
if (sg.should_buy(d)):
print("买入:%s" % d)
elif (sg.should_sell(d)):
print("卖出: %s" % d)
自定义的信号指示器接口:
SignalBase._calculate()
- 【必须】子类计算接口SignalBase._clone()
- 【必须】克隆接口SignalBase._reset()
- 【可选】重载私有变量
示例1(不含私有变量,海龟交易策略):
#!/usr/bin/python
# -*- coding: utf8 -*-
# cp936
#===============================================================================
# Aothor: fasiondog
# History: 20160407, Added by fasiondog
#===============================================================================
from hikyuu import *
class TurtleSignal(SignalBase):
def __init__(self, n=20):
super(TurtleSignal, self).__init__("TurtleSignal")
self.set_param("n", 20)
def _clone(self):
return TurtleSignal()
def _calculate(self):
n = self.get_param("n")
k = self.to
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._add_buy_signal(k[i].datetime)
elif (c[i] <= L[i]):
self._add_sell_signal(k[i].datetime)
if __name__ == "__main__":
from examples_init import *
sg = TurtleSignal()
s = get_stock("sh000001")
k = s.get_kdata(Query(-500))
#只有设置交易对象时,才会开始实际计算
sg.to = k
dates = k.get_datetime_list()
for d in dates:
if (sg.should_buy(d)):
print("买入:%s" % d)
elif (sg.should_sell(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"])¶ 参数: 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! 不支持的参数类型
-
next_time_should_buy
(self)¶ 下一时刻是否可以买入,相当于最后时刻是否指示买入
-
next_time_should_sell
(self)¶ 下一时刻是否可以卖出,相当于最后时刻是否指示卖出
-
get_buy_signal
(self)¶ 获取所有买入指示日期列表
返回类型: DatetimeList
-
get_sell_signal
(self)¶ 获取所有卖出指示日期列表
返回类型: DatetimeList
-
reset
(self)¶ 复位操作
-
clone
(self)¶ 克隆操作
-
_calculate
(self)¶ 【重载接口】子类计算接口
-
_reset
(self)¶ 【重载接口】子类复位接口,复位内部私有变量
-
_clone
(self)¶ 【重载接口】子类克隆接口
-