老話說(shuō),沒(méi)出正月都是年,我在這兒給大家拜個(gè)晚年,祝大家晚年幸福! 農(nóng)歷新年還沒(méi)有過(guò)完(元宵沒(méi)到),大家都已經(jīng)陸陸續(xù)續(xù)回到工作崗位上,年初立的flag要執(zhí)行起來(lái)。 每當(dāng)這個(gè)時(shí)候,很多萌新開始學(xué)習(xí)量化,但有相當(dāng)一部分最終沒(méi)有'上岸',從入門到放棄,從然后到?jīng)]有然后,并不是因?yàn)樗麄儾粔蚵斆骰虿粔蚺?,原因有很多,我覺得大部分只是方向或方法沒(méi)對(duì)。 特別是對(duì)于沒(méi)有編程基礎(chǔ)的萌新,為了入門量化,先買了一本Python編程書,看著看著就昏昏欲睡,這個(gè)很正常,這的確很無(wú)趣,因?yàn)檫@只是為了學(xué)習(xí)而學(xué)習(xí),記住了很多知識(shí),卻感覺無(wú)法落地。 就跟很多國(guó)人從小學(xué)到大學(xué)學(xué)了十幾年的英語(yǔ)一樣,記住語(yǔ)法單詞只是為了考試,覺得很無(wú)趣,要是說(shuō)你附近有一群漂亮的外國(guó)妹子,你要用英語(yǔ)去勾搭她們,是不是就來(lái)勁了。 一開始,你只能一個(gè)一個(gè)單詞往外蹦,什么'helllo'啊,什么'welcome'啊,什么'beautiful'啊,可能一個(gè)主謂賓的整句都說(shuō)不了,加上肢體語(yǔ)言,不妨礙你們的大體溝通。 跟她們混久了,聽著相互之間的溝通,慢慢就會(huì)短句了,再過(guò)久一些,不僅長(zhǎng)句復(fù)合句會(huì)了,連口語(yǔ)發(fā)音味道兒都正了。 你瞧瞧,同樣是學(xué)英語(yǔ),為什么一個(gè)是無(wú)趣至極,一個(gè)是相當(dāng)來(lái)勁呢,他們之間的差別主要在哪里? 我個(gè)人覺得主要是兩點(diǎn):一是目的動(dòng)機(jī),二是即時(shí)反饋。 高效率做事講究'以終為始',要緊扣目標(biāo),不要走彎路跑偏了,以考試為目的,not cool,因?yàn)榇蟛糠秩烁杏X自己都是被動(dòng)應(yīng)付考試,勾搭妹子,very cool,因?yàn)槟阌X得自己在做一件自己認(rèn)可且有趣的事情。 你以提高考試分?jǐn)?shù)作為學(xué)習(xí)目標(biāo),但是努力學(xué)習(xí)到分?jǐn)?shù)明顯提高之間有非常大的時(shí)間間隔,也就是你要在這段長(zhǎng)時(shí)間里面忍受無(wú)趣,而跟外國(guó)友人學(xué)英語(yǔ),學(xué)了馬上就能用,別人提了一個(gè)新詞兒'pretty',你轉(zhuǎn)頭就能對(duì)妹子說(shuō)'you look so pretty today',換來(lái)莞爾一笑,也就是這種即時(shí)反饋,將無(wú)趣碎片化了,從忍受變?yōu)橄硎堋?/p> 用高大上的話來(lái)說(shuō)就是'正向飛輪',在這個(gè)學(xué)習(xí)的過(guò)程中,你學(xué)了一個(gè)知識(shí)點(diǎn),然后學(xué)以致用完成了一件小事兒,完成這個(gè)行為給你帶來(lái)了滿足感和正反饋,激勵(lì)你樂(lè)樂(lè)呵呵學(xué)新的知識(shí)點(diǎn),如此反復(fù)循環(huán),像滾雪球一樣,滾著滾著你就不知不覺入門了。 那學(xué)量化交易也是如此,首先要想清楚自己為什么要學(xué)量化。 是看到媒體宣傳量化對(duì)沖基金賺錢,自己也想從事該行業(yè)? 看到身邊有人學(xué)習(xí)量化交易,自己也想學(xué)習(xí)一下? 自己有投資想法,想形成交易系統(tǒng),并用量化分析方法驗(yàn)證其準(zhǔn)確性? 自己已經(jīng)有穩(wěn)定的盈利系統(tǒng),想解放雙手和堅(jiān)持紀(jì)律性,用程序化自動(dòng)交易? 學(xué)量化的動(dòng)機(jī)和目的是什么都可以,關(guān)鍵是看自己的渴望掌握這項(xiàng)技能的程度,為自己的學(xué)習(xí)賦予自己認(rèn)可的意義。 比如說(shuō),你學(xué)量化純粹是為了賺錢,入門量化需要學(xué)100個(gè)知識(shí)點(diǎn),你預(yù)計(jì)將來(lái)可以提高交易勝率,多賺或少虧10w,這樣一個(gè)知識(shí)點(diǎn)就相當(dāng)于多賺或少虧1000塊錢,這樣一換算,是不是學(xué)習(xí)動(dòng)力就足一點(diǎn)了。 學(xué)習(xí)量化,為了投資賺錢可以,為了談資裝X也可以,為了勾搭寬客也可以,只要自己足夠認(rèn)可足夠渴求就可以了,這樣咱就能保持著未來(lái)燎原的星星之火。 接下來(lái),最重要的就是營(yíng)造能有即時(shí)正反饋的學(xué)習(xí)過(guò)程,形成正向飛輪,入門量化就跟滑滑梯似的。 上面都是虛頭巴腦的大道理,都是自己淺薄的想法,以下正式嘮嘮具體的學(xué)習(xí)路徑: 投資想法 -> 量化基礎(chǔ) -> 量化平臺(tái) -> 量化策略 這是抽象的概括,下文會(huì)把每個(gè)步驟詳細(xì)講講,這里需要確定快速入門的學(xué)習(xí)原則:適度學(xué)習(xí),夠用就行。 2021版《新華字典》中,收錄了13000多個(gè)漢字,而日常生活中只需要用到其中3000多個(gè),也就是說(shuō),不用啃完編程書籍等大部頭才可以開始,按常用按需學(xué)習(xí)就行。 一、投資想法 很多人做量化,都是因?yàn)樽约河谐跏嫉耐顿Y想法,想驗(yàn)證正確性提高交易勝率,或想解放雙手追求效率,全自動(dòng)程序化盯盤交易,量化跟人工智能AI一樣,都是手段,用來(lái)實(shí)現(xiàn)自己想要的目的,不是為了量化或AI本身而學(xué)習(xí)。 有初始的投資想法,在開始學(xué)習(xí)的時(shí)候有一個(gè)好處,就是可以在學(xué)習(xí)量化時(shí)有的放矢,聽到相關(guān)的知識(shí)點(diǎn)的時(shí)候,腦子就會(huì)在想,我想要的功能能不能這樣實(shí)現(xiàn)。比如,你想實(shí)現(xiàn)均線交易策略,那么你在學(xué)習(xí)pandas模塊時(shí),聽到rolling和mean函數(shù),就會(huì)有“確認(rèn)過(guò)眼神,找到對(duì)的人”的趕腳。 如果在投資想法這邊還是沒(méi)有感覺,不介意的話可以看看我之前的文章,里面很多策略想法都是從交易書籍、研報(bào)論文和市場(chǎng)觀察中發(fā)現(xiàn)的。
股票&ETF相關(guān)策略:
《手把手教你,利用機(jī)器學(xué)習(xí)模型,構(gòu)建量化擇時(shí)策略(附全流程代碼)》
《Barra太復(fù)雜,嘮一個(gè)適合萌新Quant上手的量化基本面多因子模型F-Score》
《ETF輪動(dòng)策略在阻力支撐相對(duì)強(qiáng)度RSRS指標(biāo)加持下起飛》
《兩個(gè)簡(jiǎn)單的GARP因子,幫這位量化基金經(jīng)理,躋身同類Top10(含復(fù)現(xiàn))》
《跟蹤『聰明錢』,巧用北向資金進(jìn)行大盤擇時(shí)》
《量化萌新向ETF擇時(shí)策略:當(dāng)北上資金遇上布林帶》
《跟著“基金一哥”張坤量化選股的快樂(lè),你想象不到!》
商品期貨相關(guān)策略:
《嘮一嘮曾在全球量化策略熱榜上排名第9的TrendModelSys策略》
《又來(lái)嘮一嘮曾在全球量化策略熱榜上排名第6的RUMI策略》
《又來(lái)嘮一個(gè)另類異質(zhì)量化策略:20后的Trendflex策略》
《『導(dǎo)數(shù)』在量化策略中的妙用:日內(nèi)波動(dòng)極值vs低階多項(xiàng)式擬合策略》
《K線標(biāo)準(zhǔn)化結(jié)構(gòu)圖:構(gòu)建一個(gè)趨勢(shì)策略,就是那么樸實(shí)無(wú)華》
《CTA策略中的Alpha:期限結(jié)構(gòu)之展期收益率策略》
《量化本無(wú)妙手,背后都是堅(jiān)實(shí)的本手:波動(dòng)率不對(duì)稱性RSJ量化策略》
《兄弟家量化策略很多,拿一個(gè)『波動(dòng)率收斂突破策略』盤一下》
《兄弟家量化策略很多,又拿一個(gè)『操盤手策略』盤一下》
《量化同質(zhì)越來(lái)越嚴(yán)重,如何保持策略的長(zhǎng)久優(yōu)勢(shì)?(附異質(zhì)化另類量化策略)》
二、量化基礎(chǔ)
這里面主要包含兩大部分,一個(gè)是量化通識(shí),另一個(gè)是編程基礎(chǔ)。
關(guān)于量化通識(shí),看量化故事類的書籍都可以有所了解,以前我也列過(guò)一個(gè)書單。
如果沒(méi)有那么多時(shí)間,想快速了解量化投資的方方面面,開始的時(shí)候只看這本就夠了。
關(guān)于編程基礎(chǔ),因?yàn)椴煌炕脚_(tái)的編程語(yǔ)言都不一樣,這里只好拿在量化界廣泛使用的Python舉例。
對(duì)于Python的快速學(xué)習(xí),墻裂推薦廖雪峰老師的Python教程,不僅免費(fèi)寫得非常簡(jiǎn)單易懂,而且每個(gè)小節(jié)之后,都有編程互動(dòng)小題目給你即時(shí)反饋,非常有趣,不用再想著自己啃完編程大部頭再去編寫策略,教程鏈接:
https://www.liaoxuefeng.com/wiki/1016959663602400
廖老師的教程非常詳盡,連Web開發(fā)都講了,但是再次重申咱的快速入門學(xué)習(xí)原則:不貪多,夠用就行。對(duì)于量化基礎(chǔ)而言,學(xué)到“錯(cuò)誤、調(diào)試和測(cè)試”章節(jié)就可以了,后面等有時(shí)間再看。
遺憾的是,里面沒(méi)有講到量化常用的numpy和pandas模塊,這個(gè)可以在學(xué)了廖老師課程之后,再單獨(dú)度娘學(xué)習(xí)一下。
三、量化平臺(tái)
對(duì)于量化初學(xué)者而言,不建議自己搭建量化框架/平臺(tái),應(yīng)該以實(shí)現(xiàn)量化策略為主,把數(shù)據(jù)獲取清洗、回測(cè)框架搭建和對(duì)接實(shí)盤接口等工作交給專業(yè)團(tuán)隊(duì)打理,因此強(qiáng)烈建議使用現(xiàn)成的第三方量化平臺(tái),這里給大家推薦一些。
如果你打算做股票量化交易,可以選擇以下5個(gè)量化平臺(tái),在他們的官網(wǎng)的“幫助中心”里面,都可以找到對(duì)應(yīng)的上手教程和策略模板。
聚寬JoinQuant:
https://www.joinquant.com
優(yōu)礦Uqer:
https://uqer.datayes.com
米筐RiceQuant:
https://www.ricequant.com
掘金量化:
https://www.myquant.cn
迅投QMT:
http://www.thinktrader.net
如果你打算做期貨/期權(quán)/大餅的量化交易,可以選擇以下5個(gè)量化平臺(tái)。
交易開拓者TB:
http://www.tradeblazer.net
vn.py:
https://www.vnpy.com
文華:
https://www.wenhua.com.cn
金字塔:
https://www.weistock.com
MultiCharts:
https://www.multicharts.cn
TB研究策略和回測(cè)什么的都是免費(fèi),只有開啟實(shí)盤時(shí)才會(huì)在基礎(chǔ)手續(xù)費(fèi)上加收一些,以個(gè)人觀察,現(xiàn)存的很多系列源碼,都是以TB居多。
vn.py是一款基于Python的開源量化交易系統(tǒng)開發(fā)框架,后來(lái)更名為VeighNa,不過(guò)大伙兒還是習(xí)慣地稱之為vn.py。由知乎量化大V『用Python的交易員』開發(fā),定位是量化交易平臺(tái),提供從交易API對(duì)接到策略自動(dòng)交易的完整解決方案,對(duì)接了國(guó)內(nèi)外諸多不同類型的金融市場(chǎng):證券、期貨、期權(quán)、外匯、數(shù)字貨幣等。
后面三個(gè)就都是收費(fèi)的了,優(yōu)點(diǎn)就是編程相對(duì)簡(jiǎn)單一些,缺點(diǎn)就是貴,大家也可以去看看。
四、量化策略
有了編程基礎(chǔ),又選定了量化平臺(tái),恭喜你,你終于有能力實(shí)現(xiàn)自己最初的投資想法了,量化策略是投資想法的邏輯化和程序化展現(xiàn)。
由于每個(gè)人的投資想法不盡相同,只好舉一個(gè)簡(jiǎn)單的雙均線交易策略為例進(jìn)行描述,因?yàn)椤半p均線”這是一個(gè)接觸到投資交易,都基本會(huì)聽過(guò)的詞兒,“專家”告訴你在金叉的時(shí)候買,在死叉的時(shí)候賣,那實(shí)際效果到底是怎么樣的呢?
在聚寬JoinQuant量化平臺(tái)上,拿茅臺(tái)作為交易標(biāo)的,咱定義5日均線和20日均線在出現(xiàn)金叉的時(shí)候,第二天一開盤就全倉(cāng)買入,出現(xiàn)死叉時(shí),就把所有持倉(cāng)全部賣出,策略代碼如下。
# 導(dǎo)入函數(shù)庫(kù)
from jqdata import *
# 初始化函數(shù),設(shè)定基準(zhǔn)等等
def initialize(context):
# 交易的股票
g.stock = '600519.XSHG'
# 長(zhǎng)短均線參數(shù)
g.short_len = 5
g.long_len = 20
# 設(shè)定滬深300作為基準(zhǔn)
set_benchmark('000300.XSHG')
# 開啟動(dòng)態(tài)復(fù)權(quán)模式(真實(shí)價(jià)格)
set_option('use_real_price', True)
# 過(guò)濾掉order系列API產(chǎn)生的比error級(jí)別低的log
log.set_level('order', 'error')
# 打開防未來(lái)函數(shù)
set_option('avoid_future_data', True)
# 股票類每筆交易時(shí)的手續(xù)費(fèi)是:買入時(shí)傭金萬(wàn)分之三,賣出時(shí)傭金萬(wàn)分之三加千分之一印花稅, 每筆交易傭金最低扣5塊錢
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
# 開盤時(shí)運(yùn)行
run_daily(stock_trade, time='open', reference_security='000300.XSHG')
## 開盤時(shí)運(yùn)行函數(shù)
def stock_trade(context):
stock = g.stock
short_len = g.short_len
long_len = g.long_len
# 獲取股票的收盤價(jià)
# 當(dāng)取日線數(shù)據(jù)時(shí), 不包括當(dāng)天的, 即使是在收盤后,沒(méi)有未來(lái)
data = attribute_history(stock, long_len+1, '1d', ['close'])
# 計(jì)算雙均線數(shù)據(jù)
data['ma5'] = data['close'].rolling(short_len).mean()
data['ma20'] = data['close'].rolling(long_len).mean()
# 昨日MA5和MA20數(shù)值
ma5 = data['ma5'].iloc[-1]
ma20 = data['ma20'].iloc[-1]
# 前日MA5和MA20數(shù)值
pre_ma5 = data['ma5'].iloc[-2]
pre_ma20 = data['ma20'].iloc[-2]
# 取得當(dāng)前的可使用的資金
cash = context.portfolio.available_cash
# 如果昨日出現(xiàn)金叉,則今日開盤買入
if (pre_ma5 < pre_ma20) and (ma5 > ma20) and (cash > 0):
# 用所有資金買入股票
order_value(stock, cash)
# 輸出買入信息
log.info('>>> %s 買入 %d 股 %s' % (str(context.current_dt),
context.portfolio.positions[stock].today_amount, stock))
# 如果昨日出現(xiàn)死叉,則今日開盤全部賣出
elif (pre_ma5 > pre_ma20) and (ma5 < ma20) and (stock in context.portfolio.positions.keys()):
# 輸出賣出信息
log.info('<<< %s 賣出 %d 股 %s' % (str(context.current_dt),
context.portfolio.positions[stock].total_amount, stock))
# 賣出所有股票,使這只股票的最終持有量為0
order_target(stock, 0)
如果已經(jīng)看完廖老師的前幾章課程,這代碼就大概能看懂七七八八了,剩下的再結(jié)合平臺(tái)的API說(shuō)明就能全部弄清楚了。
大概的實(shí)現(xiàn)流程就是,在初始化函數(shù)initialize中設(shè)置了交易標(biāo)的、策略參數(shù)和交易費(fèi)率,以及定義了一個(gè)每天在開盤運(yùn)行的函數(shù)stock_trade,并且開啟了“防未來(lái)函數(shù)”功能。在stock_trade函數(shù)里面,計(jì)算昨天和前天的5日均線和20日均線,如果金叉就買入,死叉就賣出。
運(yùn)行策略,就會(huì)不斷輸出自定義的交易信息。
并且在運(yùn)行過(guò)程中,收益率曲線也在不斷地生成。
大家覺得這個(gè)回測(cè)績(jī)效怎么樣?雙均線策略算有效嗎?你可以自己貼代碼跑回測(cè)試試,同時(shí)再調(diào)整交易標(biāo)的和雙均線參數(shù)試一試,一般情況下回測(cè)很快,不需要一個(gè)東的時(shí)間。
雖然我這里以JoinQuant策略為例,但所有量化平臺(tái)的實(shí)現(xiàn)邏輯都是想通的,你只需要定義自己的函數(shù),告訴系統(tǒng)“你要在什么時(shí)間?交易什么標(biāo)的?交易數(shù)量是多少?”,你只要解決這3個(gè)“什么”的問(wèn)題,所有的量化平臺(tái)你都可以玩得轉(zhuǎn)了。
如果你能完全理解并且復(fù)現(xiàn)這個(gè)雙均線策略,可以說(shuō)明量化已經(jīng)初步入門了,接下來(lái)要轉(zhuǎn)起“正向飛輪”,實(shí)現(xiàn)和玩轉(zhuǎn)更多策略,把多標(biāo)的交易加進(jìn)去,把基本面數(shù)據(jù)加進(jìn)去,把滑點(diǎn)設(shè)置加進(jìn)去,把倉(cāng)位控制加進(jìn)去......
等你回測(cè)出心儀的策略效果,接著上模擬盤跟蹤,然后就是實(shí)盤,接著就是不斷迭代優(yōu)化,慢慢地就變成合格寬客,最后就變成量化大神了。
2023,量化入門,早成大神!??!
★
聯(lián)系客服