量化交易策略——STOCH(KD指标)
Stoch既是我们常用的KDJ指标中的KD指标,由两条线一条是快速确认线,另外一条是慢速主干线组成。在WMS的基础上发展起来的KD具有WMS的一些特性和原理。
一般在介绍KD时会附带一个J指标,公式:J=3D-2K 或
J=3K-2D
其实,J=D+2(D-K),可见J是D加上一个修正值。J的实质是反应D与K的差值。在实际中,J的使用非常简单,就是高抛低吸。
有四种随机线: FASTK, FASTD,
SLOWK and SLOWD,D是由K经过变化得到。
使用方法:
K线是快速确认线——数值在90以上为超买,数值在10以下为超卖;
D线是慢速主干线——数值在90以上为超买,数值在10以下为超卖;
收益风险
源码:
#此例子采用Talib提供的STOCH(Stochastic Oscillator
Slow),更直接的理解他就是我们常用的KDJ指标中的KD指标。
#是由两条线一条是快速确认线,另外一条是慢速主干线组成。
#K线是快速确认线——数值在90以上为超买,数值在10以下为超卖;
#D线是慢速主干线——数值在90以上为超买,数值在10以下为超卖;
import talib
#import numpy as np
#import pandas as pd
def initialize(context):
# 定义一个全局变量,
保存要操作的证券
context.stocks =
['601328.XSHG','600036.XSHG','600196.XSHG','600010.XSHG']
# 设置我们要操作的股票池
set_universe(context.stocks)
# 初始化此策略
def handle_data(context, data):
# 取得当前的现金
cash =
context.portfolio.cash
# 循环股票列表
for stock in
context.stocks:
# 获取股票的数据
h = attribute_history(stock, 30, '1d',
('high','low','close'))
# 创建STOCH买卖信号,包括最高价,最低价,收盘价和快速线(一般取为9),慢速线
# 注意:STOCH函数使用的price必须是narray
slowk, slowd =
talib.STOCH(h['high'].values,
h['low'].values,
h['close'].values,
fastk_period=9,
slowk_period=3,
slowk_matype=0,
slowd_period=3,
slowd_matype=0)
# 获得最近的kd值
slowk = slowk[-1]
slowd = slowd[-1]
# 获取当前股票的数据
current_position =
context.portfolio.positions[stock].amount
# 获取当前股票价格
current_price = data[stock].price
# 当slowk > 90 or slowd >
90,且拥有的股票数量>=0时,卖出所有股票
if slowk > 90 or slowd > 90 and
current_position >= 0:
order_target(stock, 0)
# 当slowk < 10 or slowd < 10,
且拥有的股票数量<=0时,则全仓买入
elif slowk < 10 or slowd < 10 and
current_position <= 0:
number_of_shares = int(cash/current_price)
#
购买量大于0时,下单
if
number_of_shares > 0:
# 买入股票
order(stock,
+number_of_shares)
# 记录这次买入
log.info("Buying %s" %
(stock))
加载中,请稍候......