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

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

获取训练数据:

        #获取训练数据#用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)

国信证券学习系列(4)相关推荐

  1. 国信证券学习系列(1)

    软件不错,满足了我对股票,期货,期权的全部要求.而且数据可以提供下载,简直没话说了. 数据清洗问题,我其实很早以前就在思考这个问题,回测,到底在测什么?什么样的数据可以用来回测?什么样的回测才是好的回 ...

  2. 国信证券学习系列(6)

    行业轮动策略: 本策略每隔1个月定时触发计算1000能源(399381.SZ).1000材料(399382.SZ).1000工业(399383.SZ).1000可选(399384.SZ).1000消费 ...

  3. 国信证券学习系列(5)

    网格策略,号称胜率100%的策略,只要扛得住回撤,怎么说呢,它包含了最简单的思想,大道至简,真的是没有什么复杂的,原理清晰,思路简单.可以明确知道我挣的是那笔钱,为什么获利?为什么亏损?可能唯一要关注 ...

  4. 国信证券学习系列(3)

    日内回转策略:做T策略 择时交易: if date[-8:-3] != '14:55':if macd > 0 and macd_pre < 0:# 根据MACD>0则开仓,小于0则 ...

  5. 国信证券学习系列(7)

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

  6. 国信证券学习系列(2)

    获取指数池: def init(ContextInfo):#设置股票池stock300 =ContextInfo.get_stock_list_in_sector('沪深300')ContextInf ...

  7. 国信证券学习系列(8)

    我为什么要用国信,就是这个原因,可以做期权,期货,股票,etf,可转债的回测.满足了我所有的需要,我要做指数增强.通常的做法是股票和期货.但实际上,股票和期权做组合,成本更低. (1)认沽期权和认购期 ...

  8. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  9. OpenCV学习系列教程第五篇:测试和提高代码的效率

    Opencv-Python学习系列教程第五篇 来自opencv-python官方学习文档,本人谨做翻译和注释,以及一些自己的理解 本文由作者翻译并进行代码验证,转载请注明出处~ 官方文档请参阅:htt ...

最新文章

  1. 砂.随笔.三十一.息斯敏
  2. 内核同步机制——信号量
  3. Careercup | Chapter 4
  4. Leetcode 98. 验证二叉搜索树 解题思路及C++实现
  5. 详解“FTP文件传输服务”安装配置实例
  6. 11无监听程序_腾讯开心鼠英语 小程序实践与总结
  7. Mac下ssh支持auto complete
  8. estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作
  9. HDU 6061 RXD and functions(NTT)
  10. node中的Stream-Readable和Writeable解读
  11. 开始学习:Ruby On Rails
  12. Github上Stars最多的53个深度学习项目,TensorFlow遥遥领先(转)
  13. 语文学科html代码,[2018年最新整理]学科分类与代码.doc
  14. SaaSpace:11种最佳免费会计软件工具
  15. RadASM 颜色配置
  16. 小企业会计准则 ——主要账务处理和财务报表(2)
  17. vue在日历中使用 tippyjs 来做悬浮弹框自定义插入html
  18. open-falcon短信报警
  19. 2021年安全员-B证找解析及安全员-B证模拟考试题
  20. 【一文读懂】Spring Bean生命周期详解

热门文章

  1. 台式计算机反复启动,台式机总是一直重启怎么办
  2. Qt开源版下载官网地址 macOS
  3. Parametric Contrastive Learning:长尾问题中的对比学习
  4. ABAP 关键字(1)
  5. python基础语法学习历程5
  6. 立体布局图用什么软件做,制作商场电子地图的软件
  7. 不驰于空想,不骛于虚声
  8. javascript练习题三
  9. 微博个人信息多维度详解
  10. Netty实现连接西门子PLC