使用AdaBoost预测预测大盘涨跌

使用SVM预测大盘涨跌, 使用决策树预测大盘涨跌后的第三个预测大盘涨跌的模型。包括调参的过程以及模型稳健性验证。


  • 经过调参之后,预测准确率可以达到平均90%,上下波动范围约10%。

  • 看到预测的准确率还不错,我提取出了特征的权重值,来思考决策树为什么预测准确率还不错。然后做了策略不加预测大盘和加上预测大盘的对比。可以发现,一般的策略(例如纯随机,小于4购买)在加上了对大盘预测的系数后,收益不一定得到了明显提高,但是风险得到了明显的降低。

  • 经过提取特征值比对,发现对于未来30个交易日后的涨跌预测,最重要的是前30个交易日的最小值,最大值,以及日变化,可以简单理解为市场震荡程度。
  • 可以认为决策树预测大盘是有效的,对量化交易有一定的积极作用。
import numpy as np
import pandas as pd
from CAL.PyCAL import Date
from CAL.PyCAL import Calendar
from CAL.PyCAL import BizDayConvention
from sklearn.tree import DecisionTreeClassifier
start = '2014-01-01'                       # 回测起始时间
end = '2016-12-01'                         # 回测结束时间
benchmark = 'HS300'                        # 策略参考标准
universe = set_universe('HS300')  # 证券池,支持股票和基金
capital_base = 100000                      # 起始资金
freq = 'd'                                 # 策略类型,'d'表示日间策略使用日dw线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1                           # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟

处理数据

×

1
fields = ['tradeDate','closeIndex', 'highestIndex','lowestIndex', 'turnoverVol','CHG','CHGPct']
2
stock = '000300'
3
#tradeDate是交易日、closeIndex是收盘指数、highestIndex是当日最大指数,lowestIndex是当日最小指数,CHG是涨跌
4
index_raw = DataAPI.MktIdxdGet(ticker=stock,beginDate=u"2006-03-01",endDate=u"2015-03-01",field=fields,pandas="1")
5
#获取2006年3月1日到2015年3月1日,上一行代码设定的所有索引的相关信息。
6
​
7
index_date = index_raw.set_index('tradeDate')
8
index_date = index_date.dropna()
9
index_date['max_difference'] = index_date['highestIndex'] - index_date['lowestIndex']
10
​
11
index_date['max_of_30day'] = None
12
index_date['min_of_30day'] = None
13
index_date['max_difference_of_30day'] = None
14
index_date['closeIndex_after30days'] = None
15
#预设需要处理的值为None,方便之后直接用dropna函数去掉无效数据
16
​
17
for i in xrange(len(index_date)-30):
18
    #对数据进行处理
19
    index_date['max_of_30day'][i+30] = max(index_date['highestIndex'][i:i+30])
20
    #找出前30天最大值。
21
    index_date['min_of_30day'][i+30] = min(index_date['lowestIndex'][i:i+30])
22
    #找出前30天最小值
23
    index_date['max_difference_of_30day'][i+30] = max(index_date['max_difference'][i:i+30])
24
    #找出前30天最大日波动
25
    index_date['closeIndex_after30days'][i]=index_date['closeIndex'][i+30]
26
    #找出30天后的收盘价。
27
​
28
index_date = 
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值