國信證券學習系列(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.pswp.cn/news/449336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449336.shtml
英文地址,請注明出處:http://en.pswp.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…