十行程式碼帶你量化交易入門

weixin_33895657發表於2017-07-05
6766881-962603a55f4d0b5b.jpg

說起量化交易入門,很多時候得到的答案都是長長的書單,讓人望而卻步。

這裡,就為新手準備了這篇文章--十行程式碼帶你量化交易入門

資料獲取,策略回測,行情連結,交易訊號,直接體驗整個量化交易的核心流程,立刻學會並跟著做起來!

學習內容:

1、學會寫一個簡單的量化交易策略

2、理解策略的基本框架

3、學會建立連線實盤的模擬交易,並使其自動傳送交易的訊號到微信

首先,進入JoinQuant,點選導航欄我的策略,新建策略,進入策略編輯畫面,如圖。

左側是編寫策略程式碼,右側是策略執行結果。我們就在左側寫策略程式碼。

6766881-55929d24de30372a.jpg
策略編輯頁面

下面教你用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')

答疑與延伸:

data是什麼?

data[股票程式碼]後面除了平均價.mavg還能接什麼?

4 判斷是否買賣

資料都獲取完,該做買賣判斷了

# 如果昨日收盤價高出二十日平均價, 則買入,否則賣出

if last_price > average_price:    

買入

elif last_price < average_price:    

賣出

問題來了,現在該寫買賣下單了,但是拿多少錢去買我們還沒有告訴計算機,所以每天還要獲取賬戶裡現金量。

# 用法:變數 = context.portfolio.cash

cash = context.portfolio.cash# 取得當前的現金量,命名為cash

答疑與延伸:

context.portfolio 是什麼?

這句看著有點複雜,先記住吧。然後我們看看買入賣出怎麼寫。

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,設定回測頻率,然後點選執行回測。

6766881-8b7cb4c34657c3ae.jpg
設定回測引數

答疑與延伸:

· 什麼是回測?回測是量化交易策略研究中的關鍵,是指給定一段時間的歷史資料(如此處是20140101到20160601的每日資料),計算機按照所編寫的策略進行模擬模擬交易,以測試策略效果好壞。

如果你程式碼沒有問題,就會順利的進行回測,回測結果如下圖:

6766881-9acac0ee39dfd984.jpg
回測結果

至此,你就完成了一個簡單策略的回測了。

答疑與延伸:

· 如何根據回測結果評價策略好壞?很初級地講,有三: 

· 盈利能力:策略收益與年化收益高,則說明盈利能力強。盈利能力不行說啥都沒用。

· 盈利穩定性:最大回撤要低。最大回撤是指最大虧損幅度,50%則意味著歷史上看最大虧損率為50%。

· 回測可靠性:交易次數要多。交易次數越多意味著經歷了越多次的檢驗,回測的結果也越可靠。

  更多說明見:風險指標說明

· 這個策略回撤大,交易次數少,只交易一隻股票,並不靠譜。但是結構簡單適合新手入門理解整個流程。

7 建立模擬交易,使策略和行情實時連線自動執行

策略寫好,回測完成,點選回測結果介面(如上圖)右上部紅色模擬交易按鈕,新建模擬交易如下圖。

6766881-3de283f52c91c04a.jpg
設定模擬交易引數

寫好交易名稱,設定初始資金,資料頻率,此處是每天,設定好後點提交。

答疑與延伸:

· 模擬交易建立成功後,需要等待A股至少開盤一次,才能檢視模擬交易結果。

8 開啟微信通知,接收交易訊號

點選聚寬導航欄我的交易,可以看到建立的模擬交易,如下圖。

6766881-f53110fd8415cb05.jpg
模擬交易列表

點選右邊的微信通知開關,將OFF調到ON,按照指示掃描二維碼,繫結微信,就能微信接收交易訊號了。

當策略買賣操作,微信會收到訊號提醒類似下圖。

6766881-bb8b97e8017723d1.jpg
微信實時推送通知

答疑與延伸:

· 能不能自動下單?目前不能,國家管制。你可根據訊號手動下單買賣,施行策略。

自測與自學

1、能否理解整個策略框架。

2、能否成功編寫單股票均線策略,成功回測,建立模擬,開啟微信通知。

3、能否理解年化收益,最大回撤。

4、瀏覽JoinQuant 導航欄-幫助-常見問題

之後的文章,將在本文的基礎上,進行深入和擴充套件,比如多股票,指標獲取,大盤擇時等,旨在幫助對量化交易有興趣的人快速入門,能夠自主實現自己心中的想法與策略。

本篇文章和後續將收錄到量化交易&寬客 - 知乎專欄 以及簡書專欄, 敬請關注:)

更多進階內容可以到量化課堂 - JoinQuant學習,特點是講解細緻,程式碼規範,可以在聚寬實踐演練。

推薦閱讀:聚寬新手指南 - JoinQuant,乾貨,答疑,指路,一應俱全。

歡迎關注:知乎專欄【量化交易&寬客】

都看到這裡了,不點個贊嘛:)

相關文章