欢迎大神拍砖。
Stochastic Oscillator Slow (Stoch)更直接的理解就是我们常用的KDJ指标中的KD指标。是由两条线一条是快速确认线,另外一条是慢速主干线组成。可以参考链接Talib推荐STOCH参考
计算方法:
随机线有四种,分别是: 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 = [&# 39;601328.XSHG',&# 39;600036.XSHG',&# 39;600196.XSHG',&# 39;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&# 39;, ('high&# 39;,'low&# 39;,'close&# 39;))
# 创建STOCH买卖信号,包括最高价,最低价,收盘价和快速线(一般取为9),慢速线
# 注意:STOCH函数使用的price必须是narray
slowk, slowd = talib.STOCH(h['high&# 39;].values,
h['low&# 39;].values,
h['close&# 39;].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&# 34; % (stock))