國信證券學習系列(3)

日內回轉策略:做T策略

擇時交易:

 if date[-8:-3] != '14:55':if macd > 0 and macd_pre < 0:# 根據MACD>0則開倉,小于0則平倉if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:order_shares(ContextInfo.get_universe()[0], ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Truesingleemited = TrueContextInfo.MarketPosition[ContextInfo.get_universe()[0]] += ContextInfo.Lotsprint (ContextInfo.get_universe()[0], 'open position at market price', ContextInfo.Lots, '股')elif macd < 0 and macd_pre > 0 and holding[ContextInfo.get_universe()[0]] >= ContextInfo.Lots:order_shares(ContextInfo.get_universe()[0], -ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Falsesingleemited = Trueprint(ContextInfo.get_universe()[0], 'close position at market price', ContextInfo.Lots, '股')ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] -= ContextInfo.Lots# 臨近收盤時若倉位數不等于昨倉則回轉所有倉位

策略代碼全部:
?

# coding:gbk
'''
回測模型示例(非實盤交易策略)本策略首先買入當前股票10000股
隨后根據60s的數據來計算MACD(12,26,9)線,并在MACD>0,MACD_pre<0的時候買入100股,MACD<0,MACD_pre>0的時候賣出100股
但每日操作的股票數不超過原有倉位,并于收盤前把倉位調整至開盤前的倉位
本策略需在個股分鐘線下運行
'''
import numpy as np
import pandas as pd
import talibdef init(ContextInfo):MarketPosition = {}ContextInfo.MarketPosition = MarketPosition  # 初始化持倉ContextInfo.set_universe([ContextInfo.stockcode + '.' + ContextInfo.market])ContextInfo.first = 0ContextInfo.Lots = 100  # 設定交易手數ContextInfo.day = [0, 0]ContextInfo.ending = 0ContextInfo.total = 10000ContextInfo.accountID = 'testS'def handlebar(ContextInfo):d = ContextInfo.barposif d < 35:returnstartdate = timetag_to_datetime(ContextInfo.get_bar_timetag(d - 35), '%Y%m%d%H%M%S')enddate = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y%m%d%H%M%S')##print startdate,enddatedate = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y-%m-%d %H:%M:%S')print('日期', date)flage = Falsesingleemited = Falsedf = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), start_time=startdate,end_time=enddate, period=ContextInfo.period)# print dfif df.empty:return# print dfif ContextInfo.first == 0:order_shares(ContextInfo.get_universe()[0], ContextInfo.total, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Truesingleemited = TrueContextInfo.first = 1ContextInfo.day[-1] = date[8:10]ContextInfo.turnaround = [0, 0]ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.totalreturnContextInfo.day[0] = date# 14:55:00之后不再交易if int(date[-8:-6] + date[-5:-3]) > 1455:returnavaliable = get_avaliable(ContextInfo.accountID, 'STOCK')holding = get_holdings(ContextInfo.accountID, 'STOCK')if ContextInfo.get_universe()[0] not in list(holding.keys()):holding[ContextInfo.get_universe()[0]] = 0# 計算MACD線if ContextInfo.total >= 0:recent_date = np.array(df.iloc[-35:, 0])macd = talib.MACD(recent_date)[0][-1]macd_pre = talib.MACD(recent_date)[0][-2]# 根據MACD>0則開倉,小于0則平倉if date[-8:-3] != '14:55':if macd > 0 and macd_pre < 0:# 根據MACD>0則開倉,小于0則平倉if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:order_shares(ContextInfo.get_universe()[0], ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Truesingleemited = TrueContextInfo.MarketPosition[ContextInfo.get_universe()[0]] += ContextInfo.Lotsprint (ContextInfo.get_universe()[0], 'open position at market price', ContextInfo.Lots, '股')elif macd < 0 and macd_pre > 0 and holding[ContextInfo.get_universe()[0]] >= ContextInfo.Lots:order_shares(ContextInfo.get_universe()[0], -ContextInfo.Lots, 'fix', df.iloc[-1, 0], ContextInfo,ContextInfo.accountID)flage = Falsesingleemited = Trueprint(ContextInfo.get_universe()[0], 'close position at market price', ContextInfo.Lots, '股')ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] -= ContextInfo.Lots# 臨近收盤時若倉位數不等于昨倉則回轉所有倉位else:if ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] > ContextInfo.total:order_shares(ContextInfo.get_universe()[0],-(ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] - ContextInfo.total), 'fix',df.iloc[-1, 0], ContextInfo, ContextInfo.accountID)flage = Falsesingleemited = True# print ContextInfo.get_universe()[0], '回轉操作市價單平多倉', ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] - ContextInfo.total, '股'ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.totalif ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] < ContextInfo.total:order_shares(ContextInfo.get_universe()[0],(ContextInfo.total - ContextInfo.MarketPosition[ContextInfo.get_universe()[0]]), 'fix',df.iloc[-1, 0], ContextInfo, ContextInfo.accountID)flage = Truesingleemited = True# print ContextInfo.get_universe()[0], '回轉操作市價單開多倉', ContextInfo.total - ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] , '股'ContextInfo.MarketPosition[ContextInfo.get_universe()[0]] = ContextInfo.total# 更新過去的日期數據'''ContextInfo.day[-1] = ContextInfo.day[0]if singleemited:if flage:ContextInfo.paint('do_buy',1,-1,0,"yellow",'noaxis')ContextInfo.paint('do_sell',0,-1,0,"red",'noaxis')else:ContextInfo.paint('do_buy',0,-1,0,"yellow",'noaxis')ContextInfo.paint('do_sell',1,-1,0,"red",'noaxis')'''# ContextInfo.paint('holding',ContextInfo.MarketPosition[ContextInfo.get_universe()[0]],-1,0)def get_avaliable(accountid, datatype):result = 0resultlist = get_trade_detail_data(accountid, datatype, "ACCOUNT")for obj in resultlist:result = obj.m_dAvailablereturn resultdef get_holdings(accountid, datatype):holdinglist = {}resultlist = get_trade_detail_data(accountid, datatype, "POSITION")for obj in resultlist:holdinglist[obj.m_strInstrumentID + "." + obj.m_strExchangeID] = obj.m_nCanUseVolumereturn holdinglist

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449340.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

時序數據庫連載系列: 時序數據庫一哥InfluxDB之存儲機制解析

2019獨角獸企業重金招聘Python工程師標準>>> InfluxDB 的存儲機制解析 本文介紹了InfluxDB對于時序數據的存儲/索引的設計。由于InfluxDB的集群版已在0.12版就不再開源&#xff0c;因此如無特殊說明&#xff0c;本文的介紹對象都是指 InfluxDB 單機版 1. InfluxDB 的…

如何在Linux上提高文本的搜索效率

本文由 極客范 - minejo 翻譯自 Xmodulo。歡迎加入極客翻譯小組&#xff0c;同我們一道翻譯與分享。轉載請參見文章末尾處的要求。對于系統管理員或程序員來說&#xff0c;當需要在復雜配置的目錄中或者在大型源碼樹中搜尋特定的文本或模式時&#xff0c;grep類型的工具大概是…

Spring Boot 10:處理Json數據中的null值

Jackson版&#xff1a; /*** Jackson 配置類 對Json數據進行特殊處理** Author YangXuyue* Date 2019/04/02 07:12*/ Configuration public class JacksonConfig {/*** 配置Jackson** param builder* return* Author YangXuyue* Date 2019/04/02 07:14*/BeanPrimaryConditional…

國信證券學習系列(4)

機器學習篇章&#xff0c;本章不過時腳本小子&#xff0c;機器學習最核心的是機器&#xff0c;是模型。 學習&#xff0c;無非就是找些有的沒的因子扔進去&#xff0c;但說實話&#xff0c;機器學習&#xff0c;太過容易過擬合&#xff0c;容易無效化。回測好看的一筆&#xf…

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 可以當做容器類型的…