机器学习预测指数

news2024/11/26 15:31:08

导包,收集数据

import numpy as np
import pandas as pd
import talib
import warnings
warnings.filterwarnings('ignore')
import tushare as ts

data = ts.get_k_data(code='hs300', start='2005-04-08', end='2023-11-08', ktype='D')
data = data.set_index('date')
data = data[['open', 'high', 'low', 'close']]
print('样本数目:%d' %data.shape[0])
print(data.head(10))
print(45*'-')
print(data.tail(10))

 数据准备,制定因子:

data['ema'] = talib.EMA(data['close'].values, timeperiod=20)
data['stddev']= talib.STDDEV(data['close'].values, timeperiod=20, nbdev=1)
data['slope'] = talib.LINEARREG_SLOPE(data['close'].values, timeperiod=5)
data['rsi'] = talib.RSI(data['close'].values, timeperiod = 14)
data['wr'] = talib.WILLR(data['high'].values, data['low'].values, data['close'].values, timeperiod=7)
data.tail(10)

 计算涨跌幅:


data['pct'] = data['close'].shift(-1) / data['close'] - 1.0
data['rise'] = data['pct'].apply(lambda x: 1 if x>0 else 0)
#删除缺失值
data = data.dropna()
data.tail(10)

 训练模型:

# 划分训练集和测试集
num_train = round(len(data)*0.8)
data_train = data.iloc[:num_train, :]
data_test = data.iloc[num_train:, :]
# 训练集数据和标签
X_train = data_train[['ema', 'stddev', 'slope', 'rsi', 'wr']].values
y_train = data_train['rise']
# 测试集数据和标签
X_test = data_test[['ema', 'stddev', 'slope', 'rsi', 'wr']].values
y_test = data_test['rise']
print(X_train[:10])
print(45*'-')
print(X_test[:10])

标准化:

from sklearn.preprocessing import StandardScaler

print('---标准化之前---')
print('训练集的均值:')
print(X_train.mean(axis=0))
print('训练集的标准差:')
print(X_train.std(axis=0))

# 对数据进行标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

print('---标准化之后---')
print('训练集的均值:')
print(X_train.mean(axis=0))
print('训练集的标准差:')
print(X_train.std(axis=0))
from sklearn.svm import SVC

classifier = SVC(C=1.0, kernel='rbf')
classifier.fit(X_train, y_train)
print(classifier)

测试模型:


y_train_pred = classifier.predict(X_train)
y_test_pred = classifier.predict(X_test)
data_train['pred'] = y_train_pred
data_test['pred'] = y_test_pred
accuracy_train = 100 * data_train[data_train.rise==data_train.pred].shape[0] / data_train.shape[0]
accuracy_test = 100 * data_test[data_test.rise==data_test.pred].shape[0] / data_test.shape[0]
print('训练集预测准确率:%.2f%%' %accuracy_train)
print('测试集预测准确率:%.2f%%' %accuracy_test)

假设指数可以多空交易,如果模型预测为1(上涨),第二天策略的收益率就是指数的涨幅,如果模型预测为0(下跌),第二天策略的收益率就是指数的涨幅的相反数,有了每天的日收益率之后,通过dataframe自带的累乘函数cumprod,就可以得到择时策略和沪深300指数的净值曲线,为了方(tou)便(lan)起见,不考虑交易费率,以及按照收盘价成交。

import matplotlib.pyplot as plt

#策略日收益率
data_test['strategy_pct'] = data_test.apply(lambda x: x.pct if x.pred>0 else -x.pct, axis=1)
#策略和沪深300的净值
data_test['strategy'] = (1.0 + data_test['strategy_pct']).cumprod()
data_test['hs300'] = (1.0 + data_test['pct']).cumprod()
# 粗略计算年化收益率
annual_return = 100 * (pow(data_test['strategy'].iloc[-1], 250/data_test.shape[0]) - 1.0)
print('SVM 沪深300指数择时策略的年化收益率:%.2f%%' %annual_return)

#将索引从字符串转换为日期格式,方便展示
data_test.index = pd.to_datetime(data_test.index)
ax = data_test[['strategy','hs300']].plot(figsize=(16,9), color=['SteelBlue','Red'],
                                          title='SVM 沪深300指数择时策略净值')
plt.show()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/782144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ftp和sftp区别,以及xftp的使用

网上找链接找的很辛苦对吧! 网上下载的破解版还不用。而且用没多久又说要更新了,又得重新找。 这下直接把官方免费获取链接发给你,就不用在被这种事情麻烦了。 家庭/学校免费 - NetSarang Website (xshell.com):家庭/学校免费 - NetSarang W…

JVM运行时数据区——方法区、堆、栈的关系

方法区存储加载的字节码文件内的相关信息和运行时常量池,方法区可以看作是独立于Java堆的内存空间,方法区是在JVM启动时创建的,其内存的大小可以调整,是线程共享的,并且也会出现内存溢出的情况,也可存在垃圾…

Idea中git push to origin/master was rejected错误解决方案

Idea中git push to origin/master was rejected错误解决方案 问题描述解决方法 问题描述 idea开发中,需要将项目发布到gitee上,在gitee上创建仓库后,通过idea中git推送项目代码提示: push to origin/master was rejected 解决方法 gitee创建仓库时创建了README.md文件,本地…

C# 通用OCR识别 文字识别 中文识别 服务

软件说明 基于以下开源项目,做了再次封装 GitHub - sdcb/PaddleSharp: .NET/C# binding for Baidu paddle inference library and PaddleOCR 自带模型,可离线部署; 技术路线:VS2022Sdcb.PaddleInferenceSdcb.PaddleOCRNLogNan…

uniapp 微信小程序 文章详情页顶部标题动态对应文章列表页返回的标题

文章详情页代码图&#xff1a; 代码&#xff1a; template <template><view class"policy-detail"><view class"title">{{description}}</view><view class"time">{{createTime}}</view><view class&q…

FIO的安装及使用

简介 FIO是一款测试IOPS的工具&#xff0c;用于对磁盘进行压力测试和验证&#xff0c;磁盘I/O是检查磁盘性能的重要指标&#xff0c;可以按照负载情况分成照顺序读写&#xff0c;随机读写两大类&#xff0c;FIO可产生很多线程或进程并执行用户指定的特定类型的I/O操作&#xf…

python_day12_map

map方法&#xff08;算子&#xff09; 导包 from pyspark import SparkConf, SparkContext import os为pyspark指向python解释器 os.environ[PYSPARK_PYTHON] "D:\\dev\\python\\python3.10.4\\python.exe"创建SparkContext对象 conf SparkConf().setMaster(&qu…

Flask 页面展示文件目录及文件,通过勾选复习框删除

(45条消息) flask 读取文件夹文件&#xff0c;展示在页面&#xff0c;可以通过勾选删除_U盘失踪了的博客-CSDN博客 基本实现 针对上面的功能再优化 项目结构 app.py import os import shutil from flask import Flask, render_template, request, redirect, url_forapp F…

【蓝牙AVDTP A2DP协议】

蓝牙AVDTP A2DP 一.AVDTP1.1 AVDTP概念1.2 Source Sink整体框架1.3 AVDTP术语1.3.2 Stream1.3.2 SRC and Sink1.3.3 INT and ACP1.3.4 SEP&#xff1a; 1.4 AVDTP体系1.4.1 体系概括1.4.2 Transport Services 1.5 Signaling Procedures1.5.1 General Requirements1.5.2 Transac…

学习 C语言第一天 :C语言常见概念

1.C语言是什么&#xff1f; 那人和计算机是怎么交流的呢&#xff1f;使用计算机语言。 C语言就是众多计算机语言中的一种&#xff0c;当然C/Java/Go/Python都是计算机语言。 2.了解 C语言的历史和辉煌 初衷&#xff1a;C语言最初是作为 Unix系统开发工具而发明的。 历史过程&am…

uniapp uni.$emit()失效

1.业务场景 settle.vue页面引入bjs-settle.vue组件&#xff0c;bjs-settle.vue组件点击后在settle.vue中进行结算操作&#xff08;过程中有跳转&#xff09; 本来以为使用vue的this.$emit()就可以实现子组件回调父组件中的方法&#xff0c;但是发现没用。 然后看到uniapp中需…

Linux性能与统计命令

目录&#xff1a; linux常用命令之性能统计linux常用统计命令linux进程与线程Linux性能统计 1.linux常用命令之性能统计 为什么要学习性能统计&#xff1f; 性能统计是衡量系统性能的重要手段&#xff0c;通过对系统各项指标的监控和分析&#xff0c;可以及时发现系统瓶颈和…

山西电力市场日前价格预测【2023-07-24】

日前价格预测 预测明日&#xff08;2023-07-24&#xff09;山西电力市场全天平均日前电价为338.25元/MWh。其中&#xff0c;最高日前电价为377.59元/MWh&#xff0c;预计出现在20: 30。最低日前电价为283.56元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a;实…

Linux系统初装后的配置

目录 1、学习环境关闭SElinux 2、关闭防火墙 3、添加用户 4、使用sudo进行权限管理 5、修改ssh服务的默认配置 6、修改网卡参数 环境&#xff1a;centOS7 1、学习环境关闭SElinux 临时关闭 &#xff1a;setenforce 0;查看状态&#xff1a;getenforce;临时开启&#xff…

uniapp 小程序 查看评价

查看评价效果图&#xff1a; 评分组件在上一篇文章&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; <template><view class"view-comments"><view class"evaluate-box"><view class"ti…

C++ | set与map的用法指南

前言 前面我们学习了vector、list等容器&#xff0c;其实他们都属于序列式容器&#xff0c;因为其底层为线性结构&#xff1b;今天我们学习使用的set与map是属于关联式容器&#xff0c;关联式容器更注重于数据检索访问的效率&#xff1b;本文所有的资料均查阅于文档&#xff0c…

Python实战项目——旅游数据分析(四)

由于有之前的项目&#xff0c;所以今天我们直接开始&#xff0c;不做需求分析&#xff0c;还不会需求分析的可以看我之前的文章。Python实战项目——用户消费行为数据分析&#xff08;三&#xff09; 导入库 import numpy as np import pandas as pd import matplotlib.pyplo…

Sentinel授权规则与规则持久化

&#x1f333;&#x1f333;&#x1f333;&#x1f333;&#x1f333;&#x1f333;&#x1f333; 学习授权规则前&#xff0c;先想想SpringCloud Gateway的黑白名单&#xff0c;请求过网关&#xff0c;gateway会去鉴权。但如果有人把微服务信息泄露出去了呢&#xff1f;此时微…

输出函数print

print("hello world") # 可以输出数字 print(1111) print(2222) # 可以输出字符串 print(helloworld) print("helloworld") # 可以输出运算符的表达式 print(56) # 将数据输出文件中&#xff0c;注意点&#xff1a;1.所指定的盘符存在&#xff0c;2.使…

「苹果安卓」手机搜狗输入法怎么调整字体大小及键盘高度?

手机搜狗输入法怎么调整字体大小及键盘高度&#xff1f; 1、在手机上准备输入文字&#xff0c;调起使用的搜狗输入法手机键盘&#xff1b; 2、点击搜狗输入法键盘左侧的图标&#xff0c;进入更多功能管理&#xff1b; 3、在搜狗输入法更多功能管理内找到定制工具栏&#xff0c…