国信证券学习系列(4)

机器学习篇章,本章不过时脚本小子,机器学习最核心的是机器,是模型。

学习,无非就是找些有的没的因子扔进去,但说实话,机器学习,太过容易过拟合,容易无效化。回测好看的一笔,实盘垃圾的不行。

获取训练数据:

        #获取训练数据#用20160101到20170101一年间的数据生成训练集df = ContextInfo.get_market_data(['open','high','low','close','volume'],stock_code=[ContextInfo.stock],start_time='20160101',end_time='20200101',dividend_type='front')df = df.sort_index()days = df.index.valuesdays_close = df['close'].values

 获取训练因子:

 #计算训练因子for i in range(14, len(days) - 5):start_day = days[i - 14]end_day = days[i]data = ContextInfo.get_market_data(['open','high','low','close','volume'],stock_code=[ContextInfo.stock],end_time=end_day,count=15,skip_paused=False,dividend_type='front')data = data.sort_index()open = data['open'].valuesclose = data['close'].valuesmax = data['high'].valuesmin = data['low'].valuesvolume = data['volume'].valuesclose_mean = close[-1] / np.mean(close)volume_mean = volume[-1] / np.mean(volume)max_mean = max[-1] / np.mean(max)min_mean = min[-1] / np.mean(min)vol = volume[-1]return_now = close[-1] / close[0]std = np.std(np.array(close), axis = 0)#features用于存放因子features = [close_mean, volume_mean, max_mean, min_mean, vol, return_now, std]           #计算出的6个因子作为特征x_all.append(features)for i in range(len(days_close) - 19):if days_close[i+19] > days_close[i+14]:label = 1else:label = 0y_all.append(label)

 生成训练模型:

        x_train = x_all[:-1]y_train = y_all[:-1]#生成训练好的模型ContextInfo.clf = svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, verbose=False, max_iter=-1, decision_function_shape='ovr', random_state=None)try:ContextInfo.clf.fit(x_train, y_train)except:e = traceback.format_exc()

运用模型,判断涨跌信号:

 #运用模型,判断涨跌信号try:prediction = ContextInfo.clf.predict(features)[0] # 机器学习判断涨跌if prediction == 1:ContextInfo.holding = int(ContextInfo.money*0.95/(open_today))/100order_shares(ContextInfo.stock,ContextInfo.holding*100,'fix',open_today,ContextInfo,ContextInfo.accountid)ContextInfo.buyprice = open_todaybuy_condition = Trueprint(today)print('open long position to 0.95')except :print(('predict error occur,bar:', d))

 策略代码:

#coding:gbk
#!/usr/bin/python
"""
回测模型示例(非实盘交易策略)#单股机器学习模型,在主图下直接运行即可
#模型中以过去15个交易日数据生成特征变量以预测5个交易日后的涨跌,
#特征变量我们选取了平均收盘价,平均成交量,平均最高价,平均最低价,总收益,收盘价的标准差
#训练结束后,回测过程中在每个星期一预测本周五的涨跌,以此为据开仓
"""
import pandas as pd
import numpy as np
import time
from datetime import *
from sklearn import svm
import traceback
def init(ContextInfo):ContextInfo.stock = ContextInfo.stockcode + '.' + ContextInfo.marketContextInfo.set_universe([ContextInfo.stock])ContextInfo.holding = 0ContextInfo.days = 0ContextInfo.money = ContextInfo.capitalContextInfo.accountid = "testS"def handlebar(ContextInfo):buy_condition = Falsesell_condition = Falsed = ContextInfo.barposif ContextInfo.days == 0:#用20160101到20170101一年间的数据生成训练集df = ContextInfo.get_market_data(['open','high','low','close','volume'],stock_code=[ContextInfo.stock],start_time='20160101',end_time='20170101',dividend_type='front')df = df.sort_index()days = df.index.valuesdays_close = df['close'].valuesprint('start training SVM')x_all = []y_all = []for i in range(14, len(days) - 5):start_day = days[i - 14]end_day = days[i]data = ContextInfo.get_market_data(['open','high','low','close','volume'],stock_code=[ContextInfo.stock],end_time=end_day,count=15,skip_paused=False,dividend_type='front')data = data.sort_index()open = data['open'].valuesclose = data['close'].valuesmax = data['high'].valuesmin = data['low'].valuesvolume = data['volume'].valuesclose_mean = close[-1] / np.mean(close)volume_mean = volume[-1] / np.mean(volume)max_mean = max[-1] / np.mean(max)min_mean = min[-1] / np.mean(min)vol = volume[-1]return_now = close[-1] / close[0]std = np.std(np.array(close), axis = 0)#features用于存放因子features = [close_mean, volume_mean, max_mean, min_mean, vol, return_now, std]           #计算出的6个因子作为特征x_all.append(features)for i in range(len(days_close) - 19):if days_close[i+19] > days_close[i+14]:label = 1else:label = 0y_all.append(label)x_train = x_all[:-1]y_train = y_all[:-1]ContextInfo.clf = svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, verbose=False, max_iter=-1, decision_function_shape='ovr', random_state=None)try:ContextInfo.clf.fit(x_train, y_train)except:e = traceback.format_exc()print(('value error, bar:', e))print('training finish!')timetag = ContextInfo.get_bar_timetag(d)timetag_start = ContextInfo.get_bar_timetag(d-15)timetag_end = ContextInfo.get_bar_timetag(d-1)           #过去15个交易日的起止时间today = timetag_to_datetime(timetag, '%Y%m%d')start_date = timetag_to_datetime(timetag_start, '%Y%m%d')end_date = timetag_to_datetime(timetag_end, '%Y%m%d')weekday = datetime.strptime(today, '%Y%m%d').isoweekday()open_today = ContextInfo.get_market_data(['open'],stock_code=[ContextInfo.stock],skip_paused=False,dividend_type='front')close_today = ContextInfo.get_market_data(['close'],stock_code=[ContextInfo.stock],skip_paused=False,dividend_type='front')#print ContextInfo.holding#print weekdayif ContextInfo.holding == 0 and weekday == 1:            #每个星期一判断是否开仓data = ContextInfo.get_market_data(['open','high','low','close','volume'],stock_code=[ContextInfo.stock],end_time=end_date,count=15,skip_paused=False, dividend_type='front')data = data.sort_index()close = data['close'].valuesmax = data['high'].valuesmin = data['low'].valuesvolume = data['volume'].valuesclose_mean = close[-1] / np.mean(close)volume_mean = volume[-1] / np.mean(volume)max_mean = max[-1] / np.mean(max)min_mean = min[-1] / np.mean(min)vol = volume[-1]return_now = close[-1] / close[0]std = np.std(np.array(close), axis = 0)features = [close_mean, volume_mean, max_mean, min_mean, vol, return_now, std]features = np.array(features).reshape(1, -1)try:prediction = ContextInfo.clf.predict(features)[0]if prediction == 1:ContextInfo.holding = int(ContextInfo.money*0.95/(open_today))/100order_shares(ContextInfo.stock,ContextInfo.holding*100,'fix',open_today,ContextInfo,ContextInfo.accountid)ContextInfo.buyprice = open_todaybuy_condition = Trueprint(today)print('open long position to 0.95')except :print(('predict error occur,bar:', d))elif ContextInfo.holding > 0 and close_today/ContextInfo.buyprice >= 1.1:        #每个交易日判断止盈止损order_shares(ContextInfo.stock,-ContextInfo.holding*100,'fix',close_today,ContextInfo,ContextInfo.accountid)ContextInfo.holding = 0sell_condition = Trueprint(today)print('reach profit stop limit, close position')elif ContextInfo.holding > 0 and close_today/ContextInfo.buyprice < 0.98 and weekday == 5:order_shares(ContextInfo.stock,-ContextInfo.holding*100,'fix',close_today,ContextInfo,ContextInfo.accountid)ContextInfo.holding = 0sell_condition = Trueprint(today)print('reach lose stop limit, close position')ContextInfo.days += 1ContextInfo.paint('do_buy', int(buy_condition), -1, 0)ContextInfo.paint('do_sell', int(sell_condition), -1, 0)

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

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

相关文章

JSch - Java Secure Channel : java 代码实现服务器远程操作

一、前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JSch是SSH2的纯Java实现 。 JSch允许您连接到sshd服务器并使用端口转发&#xff0c;X11转发&#xff0c;文件传输等&#xff0…

前嗅ForeSpider教程:数据建表

今天&#xff0c;小编为大家带来的教程是&#xff1a;如何在前嗅ForeSpider中&#xff0c;进行数据建表操作及各注意事项。主要内容包括&#xff1a;快速建表&#xff0c;自由建表&#xff0c;字段参数&#xff0c;数据表的创建&#xff0c;关联与删除&#xff0c;以及表单变更…

世纪大争论:Linux还是GNU/Linux?

本文由 极客范 - 爱开源的贡献开源社区 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。我们在网上已经习惯用“Linux”来称呼Linux操作系统了&#xff0c;然而&#xff0c;偶尔也用“GNU/Linux”来称呼和指代同…

PyTorch Softmax

PyTorch provides 2 kinds of Softmax class. The one is applying softmax along a certain dimension. The other is do softmax on a spatial matrix sized in B, C, H, W. But it seems like some problems existing in Softmax2d. : ( 转载于:https://www.cnblogs.com/hiz…

国信证券学习系列(5)

网格策略&#xff0c;号称胜率100%的策略&#xff0c;只要扛得住回撤&#xff0c;怎么说呢&#xff0c;它包含了最简单的思想&#xff0c;大道至简&#xff0c;真的是没有什么复杂的&#xff0c;原理清晰&#xff0c;思路简单。可以明确知道我挣的是那笔钱&#xff0c;为什么获…

promise

## 前言 今天来分享下promise的用法&#xff0c;es6伟大发明之一&#xff0c;当初我学习的时候也是蛮头大的&#xff0c;不知道为啥&#xff0c;整个脑子就是&#xff0c;我在哪&#xff0c;我要干啥的懵圈&#xff0c;后面认真学习之后&#xff0c;觉得真是十分好用&#xff0…

计算机集群 解说

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 计算机集群简称集群是一种计算机系统&#xff0c;它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。 在某…

同时寻找最大数和最小数的最优算法 第二大数

我们知道&#xff0c;在一个容量为n的数据集合中寻找一个最大数&#xff0c;不管用什么样的比较算法&#xff0c;至少要比较n-1次&#xff0c;就算是用竞标赛排序也得比较n-1次&#xff0c;否则你找到的就不能保证是最大的数。那么&#xff0c;在一个容量为n的数据集合中同时寻…

浅谈mpvue项目目录和文件结构

2019独角兽企业重金招聘Python工程师标准>>> 在Visual Studio Code里面打开项目文件夹&#xff0c;我们可以看到类似如下的文件结构&#xff1a; 1、package.json文件 package.json是项目的主配置文件&#xff0c;里面包含了mpvue项目的基本描述信息、项目所依赖的各…

[AHOI2009]最小割(最大流+tarjan)

继续填坑了&#xff0c;啦啦啦 这道题本来是准备枚举每个边&#xff0c;暂时去除它&#xff0c;但发现时间会爆炸的 于是决定另辟蹊径 于是这篇题解就应运而生 首先还是网络流跑一边 毕竟题目叫最小割嘛&#xff0c;给个面子 然后跑一边tarjan对满流的边处理掉&#xff0c;即不…

进程间通信---信号

什么是信号&#xff1f; 】 信号处理流程 信号类型 发送信号的函数 参数sig&#xff1a;代表 信号 接收信号的函数 参数 handle 的处理方式有几种&#xff1f; 实例代码 实例逻辑 图中的等待操作使用&#xff1a;pause&#xff08;&#xff09;函数 代码 在这里插入代码片…

大白话解说,半分钟就懂 --- 分布式与集群是什么 ? 区别是什么?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 PS&#xff1a;这篇文章算是笔记&#xff0c;仅部分文字是原创&#xff0c;相当内容只是收集、整理、提炼、总结别人写的。 没有标为原创…

国信证券学习系列(6)

行业轮动策略&#xff1a; 本策略每隔1个月定时触发计算1000能源&#xff08;399381.SZ&#xff09;、1000材料&#xff08;399382.SZ&#xff09;、1000工业&#xff08;399383.SZ&#xff09;、1000可选&#xff08;399384.SZ&#xff09;、1000消费&#xff08;399385.SZ&a…

用Linux命令行修图——缩放、编辑、转换格式——一切皆有可能

本文由 极客范 - 八卦爱好者 翻译自 How-To Geek。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。ImageMagick是一系列的用于修改、加工图像的命令行工具。ImageMagick能够快速地使用命令行对图片进行操作&#xff0c;对大量的图片进行…

剑指offer:二维数组中的查找

目录 题目解题思路具体代码题目 题目链接剑指offer&#xff1a;二维数组中的查找题目描述 在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&a…

函数对象 函数嵌套 名称空间与作用域

函数对象&#xff1a; 函数是第一类对象&#xff0c;即函数可以当做数据传递 1 可以被引用 2 可以当做参数传递 3 返回值可以是函数 &#xff08;函数名 不带&#xff08;&#xff09; 就是函数名的内存地址&#xff0c;带括号就是执行函数&#xff09; 4 可以当做容器类型的…

国信证券学习系列(7)

跨品种套利策略&#xff1a; 本策略根据计算滚动的.过去的30个bar的均值正负0.5个标准差得到布林线 并在最新价差上穿上轨来做空价差,下穿下轨来做多价差 并在回归至上下轨水平内的时候平仓 获取数据&#xff1a; # 获取两个品种的收盘价时间序列closesContextInfo.get_ma…

dubbo-admin管理平台搭建

一、前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 dubbo的使用&#xff0c;其实只需要有注册中心&#xff0c;消费者&#xff0c;提供者这三个就可以使用了&#xff0c;但是并不能…

不朽传奇-云计算技术背后的那些天才程序员:Qemu的作者法布里斯贝拉

作者&#xff1a;Liu Guo Hui&#xff0c;OpenStack中国社区&#xff0c;转载请注明出处 众所周知&#xff0c;虚拟化技术是构建云基础架构不可或缺的关键技术之一&#xff0c;而在众多虚拟化技术实现当中&#xff0c;KVM&#xff08;Kernel Virtual Machine&#xff09;因为L…

C学习笔记-字符串

对于C语言来说&#xff0c;字符串其实就是最后一个元素为’\0’的char数组 字符数组的初始化 字符数组常见的有两种初始化方式 char str[] "hello";或者 char str[] {h, e, l, l, o};当使用sizeof&#xff08;str&#xff09;时&#xff0c;得到的大小为6&#xff…