https://zhuanlan.zhihu.com/p/23367387
使用聚寬來開始策略。
說起量化交易入門,很多時候得到的答案都是長長的書單,讓人望而卻步。
這里,就為新手准備了這篇文章--十行代碼帶你量化交易入門
數據獲取,策略回測,行情鏈接,交易信號,直接體驗整個量化交易的核心流程,立刻學會並跟着做起來!
這里,就為新手准備了這篇文章--十行代碼帶你量化交易入門
學習內容:
- 學會寫一個簡單的量化交易策略
- 理解策略的基本框架
- 學會建立連接實盤的模擬交易,並使其自動發送交易的信號到微信
首先,進入JoinQuant,點擊導航欄我的策略,新建策略,進入策略編輯畫面,如圖。
左側是編寫策略代碼,右側是策略運行結果。我們就在左側寫策略代碼。
下面教你用10行代碼寫個量化交易策略——單股票均線策略
1 確定策略內容與框架
若昨日收盤價高出過去20日平均價今天開盤買入股票
若昨日收盤價低於過去20日平均價今天開盤賣出股票
只操作一只股票,很簡單對吧,但怎么用代碼說給計算機聽呢?
想想人是怎么操作的,應該包括這樣兩個部分
- 既然是單股票策略,事先決定好交易哪一個股票。
- 每天看看昨日收盤價是否高出過去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,即全賣出
答疑與延伸:
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,按照指示掃描二維碼,綁定微信,就能微信接收交易信號了。
當策略買賣操作,微信會收到信號提醒類似下圖。
答疑與延伸:
- 能不能自動下單?目前不能,國家管制。你可根據信號手動下單買賣,施行策略。
自測與自學
- 能否理解整個策略框架。
- 能否成功編寫單股票均線策略,成功回測,建立模擬,開啟微信通知。
- 能否理解年化收益,最大回撤。
- 瀏覽JoinQuant 導航欄-幫助-常見問題
之后的文章,將在本文的基礎上,進行深入和擴展,比如多股票,指標獲取,大盤擇時等,旨在幫助對量化交易有興趣的人快速入門,能夠自主實現自己心中的想法與策略。
本篇文章和后續將收錄到 量化交易&寬客 - 知乎專欄 , 敬請關注:)
更多進階內容可以到 量化課堂 - JoinQuant 學習,特點是講解細致,代碼規范,可以在聚寬實踐演練。
都看到這里了,不點個贊嘛:)
推薦閱讀:
聚寬新手指南 - JoinQuant,干貨,答疑,指路,一應俱全。