十行程式碼帶你量化交易入門
說起量化交易入門,很多時候得到的答案都是長長的書單,讓人望而卻步。
這裡,就為新手準備了這篇文章--十行程式碼帶你量化交易入門
資料獲取,策略回測,行情連結,交易訊號,直接體驗整個量化交易的核心流程,立刻學會並跟著做起來!
學習內容:
1、學會寫一個簡單的量化交易策略
2、理解策略的基本框架
3、學會建立連線實盤的模擬交易,並使其自動傳送交易的訊號到微信
首先,進入JoinQuant,點選導航欄我的策略,新建策略,進入策略編輯畫面,如圖。
左側是編寫策略程式碼,右側是策略執行結果。我們就在左側寫策略程式碼。
下面教你用10行程式碼寫歌量化交易策略——單股票均線策略
1 確定策略內容與框架
若昨日收盤價高出過去20日平均價今天開盤買入股票
若昨日收盤價低於過去20日平均價今天開盤賣出股票
只操作一隻股票,很簡單對吧,但怎麼用程式碼說給計算機聽呢?
想想人是怎麼操作的,應該包括這樣兩個部分
1、既然是單股票策略,事先決定好交易哪一個股票。
2、每天看看昨日收盤價是否高出過去20日平均價,是的話開盤就買入,不是開盤就賣出。每天都這麼做,迴圈下去。
對應程式碼也是這兩個部分
def initialize(context):
用來寫最開始要做什麼的地方
def handle_data(context,data):
用來寫每天迴圈要做什麼的地方
答疑與延伸:
· def後面的空格和最後的冒號不能少!
· 符號都要用英文輸入法!
· 為什麼這麼寫?就這麼規定的,先別管了。
· handle_data 按天迴圈時,如此處,其中的操作都是在9:30執行。
· 毫無程式設計基礎?,絲毫不懂變數,函式,if else的,還是先到量化課堂的程式設計部分學習下python語言吧。
幾乎所有策略都基於這個基本的策略框架:先初始化,然後迴圈操作
1、初始化,即最開始要做的事情,如選定股票,設定變數、引數等等
2、週期迴圈:即每個週期要做的事情,如計算指標,買入賣出等,週期可能是分鐘,天等,本文策略的週期是一天。當你要做一些盤中短線操作的時候,週期就要調成分鐘,先彆著急會遇到的。
2 初始化
我們要寫設定要交易的股票的程式碼,比如 兔寶寶(002043)
def initialize(context):
g.security = '002043.XSHE'# 存入兔寶寶的股票程式碼
答疑與延伸:
· “g.”是什麼?全域性變數前都要寫”g.”,全域性變數就是全域性都能用的變數,一般變數只能在該函式下使用。如security不加”g.”,只能在第一部分即initialize裡用,不能在第二部分handle_data裡用。不懂什麼是變數的,到量化課堂的python程式設計裡學習下基礎內容,或者問問度娘。
· “XSHE”是什麼?股票程式碼使用時要加字尾,深交所股票程式碼字尾為 “.XSHE “,上交所股票程式碼字尾為 “.XSHG”。
· 程式碼中“#”是什麼?”#“後的內容都是註釋,是為程式碼做說明的,不會被計算機當做程式碼處理。
3 獲取收盤價與均價
首先,獲取昨日股票的收盤價
# 用法:變數 = data[股票程式碼].close
last_price = data[g.security].close# 取得最近日收盤價,命名為last_price
然後,獲取近二十日股票收盤價的平均價
# 用法:變數 = data[股票程式碼].mavg(天數,‘close’)
# 獲取近二十日股票收盤價的平均價,命名為average_price
average_price = data[g.security].mavg(20, 'close')
答疑與延伸:
4 判斷是否買賣
資料都獲取完,該做買賣判斷了
# 如果昨日收盤價高出二十日平均價, 則買入,否則賣出
if last_price > average_price:
買入
elif last_price < average_price:
賣出
問題來了,現在該寫買賣下單了,但是拿多少錢去買我們還沒有告訴計算機,所以每天還要獲取賬戶裡現金量。
# 用法:變數 = context.portfolio.cash
cash = context.portfolio.cash# 取得當前的現金量,命名為cash
答疑與延伸:
這句看著有點複雜,先記住吧。然後我們看看買入賣出怎麼寫。
5 買入賣出
# 用法:order_value(要買入股票股票的股票程式碼,要多少錢去買)
order_value(g.security, cash)# 用當前所有資金買入股票
# 用法:order_target(要買賣股票的股票程式碼,目標持倉金額)
order_target(g.security, 0)# 將股票倉位調整到0,即全賣出
答疑與延伸:
· 為什麼沒有指定交易價格?此策略是按天回測進行的且使用的較為簡單的市價單下單方法,交易價格為開盤價(加上滑點)
· 無法交易的情況?漲跌停,停牌,T+1制度等無法交易的情況,系統會自動使下單不成交併在日誌中發出警告。
6 策略程式碼寫完,進行回測
把買入賣出的程式碼寫好,策略就寫完了,如下
def initialize(context):#初始化
g.security = '002043.XSHE'# 股票名:兔寶寶
def handle_data(context, data):#每日迴圈
last_price = data[g.security].close# 取得最近日收盤價
# 取得過去二十天的平均價格
average_price = data[g.security].mavg(20, 'close')
cash = context.portfolio.cash# 取得當前的現金
# 如果昨日收盤價高出二十日平均價, 則買入,否則賣出。
if last_price > average_price:
order_value(g.security, cash) # 用當前所有資金買入股票
elif last_price < average_price:
order_target(g.security, 0) # 將股票倉位調整到0,即全賣出
現在,在策略回測介面右上部,設定回測時間從20140101到20160601,設定初始資金100000,設定回測頻率,然後點選執行回測。
答疑與延伸:
· 什麼是回測?回測是量化交易策略研究中的關鍵,是指給定一段時間的歷史資料(如此處是20140101到20160601的每日資料),計算機按照所編寫的策略進行模擬模擬交易,以測試策略效果好壞。
如果你程式碼沒有問題,就會順利的進行回測,回測結果如下圖:
至此,你就完成了一個簡單策略的回測了。
答疑與延伸:
· 如何根據回測結果評價策略好壞?很初級地講,有三:
· 盈利能力:策略收益與年化收益高,則說明盈利能力強。盈利能力不行說啥都沒用。
· 盈利穩定性:最大回撤要低。最大回撤是指最大虧損幅度,50%則意味著歷史上看最大虧損率為50%。
· 回測可靠性:交易次數要多。交易次數越多意味著經歷了越多次的檢驗,回測的結果也越可靠。
更多說明見:風險指標說明
· 這個策略回撤大,交易次數少,只交易一隻股票,並不靠譜。但是結構簡單適合新手入門理解整個流程。
7 建立模擬交易,使策略和行情實時連線自動執行
策略寫好,回測完成,點選回測結果介面(如上圖)右上部紅色模擬交易按鈕,新建模擬交易如下圖。
寫好交易名稱,設定初始資金,資料頻率,此處是每天,設定好後點提交。
答疑與延伸:
· 模擬交易建立成功後,需要等待A股至少開盤一次,才能檢視模擬交易結果。
8 開啟微信通知,接收交易訊號
點選聚寬導航欄我的交易,可以看到建立的模擬交易,如下圖。
點選右邊的微信通知開關,將OFF調到ON,按照指示掃描二維碼,繫結微信,就能微信接收交易訊號了。
當策略買賣操作,微信會收到訊號提醒類似下圖。
答疑與延伸:
· 能不能自動下單?目前不能,國家管制。你可根據訊號手動下單買賣,施行策略。
自測與自學
1、能否理解整個策略框架。
2、能否成功編寫單股票均線策略,成功回測,建立模擬,開啟微信通知。
3、能否理解年化收益,最大回撤。
4、瀏覽JoinQuant 導航欄-幫助-常見問題
之後的文章,將在本文的基礎上,進行深入和擴充套件,比如多股票,指標獲取,大盤擇時等,旨在幫助對量化交易有興趣的人快速入門,能夠自主實現自己心中的想法與策略。
本篇文章和後續將收錄到量化交易&寬客 - 知乎專欄 以及簡書專欄, 敬請關注:)
更多進階內容可以到量化課堂 - JoinQuant學習,特點是講解細緻,程式碼規範,可以在聚寬實踐演練。
推薦閱讀:聚寬新手指南 - JoinQuant,乾貨,答疑,指路,一應俱全。
歡迎關注:知乎專欄【量化交易&寬客】
都看到這裡了,不點個贊嘛:)
相關文章
- 帶你入門比Python更高效的Numpy(附程式碼)Python
- 帶你高效入門 FlutterFlutter
- 量化交易系統開發需求丨量化交易原始碼模式原始碼模式
- CSS快速入門基礎篇,讓你快速上手(附帶程式碼案例)CSS
- “量化交易”系統開發技術詳細丨“量化交易”原始碼原始碼
- 一篇帶你入門面向介面程式設計程式設計
- Cris 帶你快速入門 Flink
- 一文帶你入門 GolangGolang
- 12個例子帶你入門Electron
- 一文帶你入門圖論和網路分析(附Python程式碼)圖論Python
- 合約量化交易開發丨量化交易AI機器人系統開發與技術程式碼示例AI機器人
- 量化交易系統開發技術闡述丨量化交易原始碼開發原始碼
- 一文帶你入門LinuxLinux
- 帶你入門RPC之反向代理RPC
- 一文帶你入門TransformerORM
- 一文帶你入門圖機器學習機器學習
- 帶你進入Angular js的大門AngularJS
- 帶你進入AngularJS的大門AngularJS
- 現貨策略跟單量化交易系統程式設計開發及程式碼示例(量化跟單)程式設計
- 一篇文章帶你入門SQL程式設計GIFUSQL程式設計
- 量化合約機器人開發丨量化系統開發丨合約量化交易策略程式碼示例機器人
- 加密貨幣交易模式系統搭建開發:量化交易帶來的優勢加密模式
- 手把手帶你入門 Spring Security!Spring
- 一篇文章帶你入門Zookeeper
- 23張圖,帶你入門推薦系統
- [譯] 帶你入門 CSS Grid 佈局CSS
- 帶你入門 JavaScript ES6 (五) 集合JavaScript
- 合約現貨量化交易開發系統原始碼|量化交易機器人對沖策略原始碼機器人
- 源中瑞量化交易軟體_量化自動交易平臺
- Android跨平臺入門:手把手帶你快速入門Flutter!AndroidFlutter
- 數字貨幣量化交易平臺 數字貨幣量化交易平臺有哪些 雲度數字貨幣量化交易 什麼是量化交易 雲度量化介紹 數字貨幣市場的量化交易工具有哪些? 量化交易需要注意什麼?
- 數字貨幣/期貨量化交易系統開發(交易演算法)| 量化交易系統開發原始碼示例演算法原始碼
- 量化交易系統開發程式碼部署方案丨合約量化系統開發技術成熟原始碼流程原始碼
- 數字貨幣量化交易系統開發功能詳解丨量化交易開發原始碼模式原始碼模式
- 量化現貨交易系統開發(功能詳解)| 量化現貨交易系統(原始碼demo示例)原始碼
- 10本程式設計書籍推薦,帶你從入門到精通!程式設計
- 量化交易:日內迴轉交易策略
- 十行程式碼實現牛頓方法行程