加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

量化交易策略——STOCH(KD指标)

(2016-10-13 18:28:17)
量化交易策略——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))


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有