量化交易策略——CCI指标

 20世纪80年代,美国股市分析家唐纳德·蓝伯特(Donald Lambert)发明了顺势指标,即CCI指标,早期被用于期货市场的判断,后来被广泛应用在股票市场的研判。与大多数技术分析指标相比,根据统计学原理的CCI指标是比较独特的,它通过测量股价的波动是否已超出其正常范围,来预测股价变化趋势的技术分析指标,属于超买超卖类指标的一种。

 CCI与其他技术分析指标一样,由于选用的计算周期不同,其中包括:分钟CCI指标、日CCI指标、周CCI指标、年CCI指标等很多种类型。其中,日、周CCI指标较为常用在股市研判。

与其他技术分析指标相比,CCI指标的计算是比较复杂的,以日CCI计算为例的两种计算方法:

1.CCI = (TP-MA)÷MD÷0.015

其中:TP=(最高价 最低价 收盘价)÷3;

MA= 最近N日收盘价的累计之和÷N;

MD=最近N日(MA-收盘价)的累计之和÷N;

 0.015为计算系数,N为计算周期。

 2.中价与中价的N日内移动平均的差÷N日内中价的平均绝对偏差

其中:中价=(最高价﹢最低价﹢收盘价)÷3;

平均绝对偏差为统计函数。

CCI指标和其他没有运行区域限制的指标不同之处就是,它有一个相对的技术参照区域,按市场的通行的标准可分为三大类:﹢100、﹣100和﹢100—﹣100之间:

1.当CCI>﹢100时,表示股价已进入超买区间,需要多加关注股价的异动现象;

2.当CCI<﹣100时,表示股价已进入超卖区间,投资者可以逢低吸纳股票;

3.当CCI介于﹢100—﹣100之间时,表示股价处于窄幅振荡整理的区间——常态区间,投资者应以观望为主。

CCI策略

选取CCI处于100—150之间,处于上涨趋势的股票。

 

from CAL.PyCAL import *

import pandas as pd

import numpy as np

 

start = '2010-08-01'                       # 回测起始时间

end = '2014-08-01'                         # 回测结束时间

benchmark = 'HS300'                        # 策略参考标准

universe = set_universe('HS300')           # 证券池,支持股票和基金

capital_base = 100000                      # 起始资金

freq = 'd'                                 # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测

refresh_rate = 20                          # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟

 

def initialize(account):                   # 初始化虚拟账户状态

    pass

 

def handle_data(account):                  # 每个交易日的买入卖出指令    

    eq_CCI = cci(account,85)

    buylist = []        

    for stk in account.universe:

        try:

            if eq_CCI[stk] > 100 and eq_CCI[stk] < 150:

                buylist.append(stk)

        except:

            pass

    for stk in account.valid_secpos:

        order_to(stk, 0)

        

    for stk in buylist[:]:

            if stk not in account.universe or account.referencePrice[stk] == 0 or np.isnan(account.referencePrice[stk]):

                bulist.remove(stk)

    

    for stk in buylist:

        order(stk, account.referencePortfolioValue/account.referencePrice[stk]/len(buylist)) 

样本外测试

 

from CAL.PyCAL import *

import pandas as pd

import numpy as np

 

start = '2014-08-01'                       # 回测起始时间

end = '2015-08-01'                         # 回测结束时间

benchmark = 'HS300'                        # 策略参考标准

universe = set_universe('HS300')           # 证券池,支持股票和基金

capital_base = 100000                      # 起始资金

freq = 'd'                                 # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测

refresh_rate = 20                          # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟

 

def initialize(account):                   # 初始化虚拟账户状态

    pass

 

def handle_data(account):                  # 每个交易日的买入卖出指令    

    eq_CCI = cci(account,85)

    buylist = []        

    for stk in account.universe:

        try:

            if eq_CCI[stk] > 100 and eq_CCI[stk] < 150:

                buylist.append(stk)

        except:

            pass

    

    

    for stk in account.valid_secpos:

        order_to(stk, 0)

        

    for stk in buylist[:]:

            if stk not in account.universe or account.referencePrice[stk] == 0 or np.isnan(account.referencePrice[stk]):

                bulist.remove(stk)

    

    for stk in buylist:

        order(stk, account.referencePortfolioValue/account.referencePrice[stk]/len(buylist)) 

--------------------------------------------------------------------------------------------------------------------------

推荐阅读:

1.一个量化策略师的自白(好文强烈推荐)

2.股票期货经典的量化交易策略都在这里了!(源码)

3.期货/股票数据大全查询(历史/实时/Tick/财务等)

4.史上最全的Python定量金融三方库汇总

5.干货 | 量化选股策略模型大全

6.量化金融经典理论、重要模型、发展简史大全

 

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值