量化交易,相較于傳統人為主觀投資,本質并沒有區別。簡單來說,通過程序選出合適的股票(或其他),在合適的時機,發起買入或賣出的交易,從中追求盈利。

量化沒有創造出新的投資邏輯,也不改變市場的運行和結構,但它用新的科學技術、對實現方法和工具進行了創新——利用了數學統計/人工智能等方法取代人工決策。一般情況,市場研究、基本面分析、選股、擇時、下單等都可以由計算機自動完成,在市場進行投資。

而量化投資的核心優勢在于:通過計算機分析挖掘因子的能力更強,可以從低信噪比的大數據中獲取有價值的信息,可以更好量化風險及收益,決策也更為及時及客觀可靠,可以克服情緒及人為操作的局限性。

2、量化交易的市場

量化投資廣泛地出現在各種交易市場,如股市、期貨、基金、期權、外匯、債券、比特幣、NFT等等,有資源交換需求的地方就可以量化交易。這里主要展開介紹下股票和期貨市場。

2.1 股市

股票市場:是股票發行和交易的場所,是已經發行的股票轉讓、買賣和流通的場所。股份公司通過面向社會發行股票,迅速集中大量資金,實現生產的規模經營。而社會資金也可以購買股份公司的股票,謀求財富的增值。

國內股票市場(簡稱A股)更多的是融資市場的角色,而不是投資市場。主要是為融資服務,賣力IPO,穩定地助力實體經濟。(也難怪大A投資層面比較拉胯,畢竟市場的態度就在這。。)

再者,國內市場上各種面的分析,諸如基本面分析、技術面、市場面、政策面,各種面都很好,但在我們A股都不夠(流淚吃面是大A韭菜的必備休養?。?。各種理論也是層出不窮,比如纏論、莊家理論、以及美股推崇的長期價值理論,盡管都很有道理,但經不住現實A股的打擊。

歸根結底在于,「市場的核心還是基于信息差,真正重要的信息你獲取不到的,可能很多還是制造烏煙瘴氣的煙霧彈。只能寄望更好的經濟預期,以及信息披露及制度完善,打造一個更公平的市場吧!

那股票量化能不能賺錢?個人感覺量化會比散戶有優勢(并不是絕對優勢)。畢竟股票量化的盈利來源和其他市場上的參與者,并無本質區別,主要可以歸因成幾個部分:

一是,源于企業自身的價值和成長。

能夠實現這個收益可能只是A股的理想,因為現實中還是很受各種打擊的。畢竟辛苦成長了那么多年,還在3000點徘徊。再遙望下美麗國、阿三的股市,真的格外尷尬。

二是,源于股票價格的非理性波動,并提供更準確的定價。

量化的盈利基于市場的失效的前提下,用較低的價格買入被市場低估的“商品”,推動市場價格達到更好的平衡。在熱衷跟風炒作的A股上面,這點還是有不錯的空間的,量化可以通過大數據中挖掘更多有價值的信息,形成更為理性合理的決策。只要跑贏散戶的非理性就有一定的收益。

2.2 期貨市場

期貨合約(Futures contract),簡稱期貨(Futures),是一種跨越時間的交易方式。買賣雙方透過簽訂合約,同意按指定的時間、價格與其他交易條件,交收指定數量的現貨。通常期貨集中在期貨交易所,以標準化合約進行買賣,但亦有部分期貨合約可透過柜臺交易進行買賣,稱為場外交易合約。交易的資產通常是商品或金融工具。期貨的品種有:

一樣的,期貨市場在于買賣期貨賺取差價。但與股市不同,期貨市場的投資操作空間更多(可以做多、做空;支持T+0交易等等),同時杠桿也更大,回撤大,風險高,風險收益可能也高。

個人的感覺,期貨是一個負和博弈市場,贏得收益主要來自市場中對手的失誤,贏的只有少數信息優勢的人。可能期貨更適合行業人員,需要敏銳地捕捉行業的機遇。再者通過期現套利對沖實業經營的風險也是很不錯的手段。

3、量化交易常見策略

量化策略的方法有五花八門的,搞簡單點可以通過基本面、技術面分析獲得一些因子進行交易(比如股票猛漲并且近期有所收緩,利用相關指標簡單設定一個 RSI大于80就拋出股票),復雜點還可以利用各種各樣數據,結合人工智能分析預測、高頻交易什么的。

這里我按照個人不深刻的理解,如下歸類大概量化策略:

A. 多因子選股模型:用“因子”來識別股票和市場的特征,在因子的幫助下評估價格,買入價格偏低的,賣出價格偏高的股票。比如根據RSI設計一個反轉因子,RSI非常高,過度高漲,后面可能就容易跌。再根據過去時間T內的加權平均漲幅設計動量因子,通過結合多個因子做打分/回歸建模預測未來收益。

?

常見的因子有:

  1. 價值因子:市盈率、市凈率、現金流等財務指標(估值低的票容易漲)
  2. 成長因子:過去三年期間的凈利潤和營收的復合增長率(高增長的票容易漲)
  3. 動量因子:過去時間T內的加權平均漲幅(趨勢是否確立)
  4. 波動率因子:如果股票的波動率偏低,它后續往往會漲(市場風險偏好)
  5. 流動性因子:如果股票的換手率偏低,它后續往往會漲(縮量筑底)
  6. 情緒因子:如果統計分析顯示,市場參與者普遍偏樂觀,一般會漲
  7. 資金流因子:如果大盤、板塊、個股持續有資金流入,往往會漲
  8. 板塊因子:如果一個板的熱點股票漲了,往往整個板塊的股票都會漲。
  9. 盤口因子:在十檔盤口上,如果買掛單比賣掛單強勢,短期往往會漲
  10. 反轉因子,通俗地說,就是漲多了的股票可能要跌,跌多了的股票可能要漲。(來源:幻方量化18問)

?

市場常見的多因子模型有:

多因子模型有:

B. 價值投資策略:通過基本面分析,如市盈率、市凈率、現金流、凈利潤和營收的復合增長率等財務指標,分析公司的盈利模式是否可靠,預估未來價值,在價格較低的時候考慮買入。

C. 事件驅動策略:及時根據政策變化(貨幣政策、外匯、行業政策)、自然因素變化制定對應策略,這個應該是炒股、期貨必知策略。比如:當有加息計劃,大家就會考慮把股票的錢存銀行,獲得更多無風險利益,可能要適當減持些股票;當有自然災害,可能農作物期貨價值就會上升,可以做多。

D. 對沖策略:通過投資組合的多樣化來降低市場風險的策略。對沖策略的核心思想是利用不同資產之間的價格波動來抵消彼此的風險,從而降低整體投資組合的風險。對沖策略的具體操作方式有很多種,包括配對交易、套利交易、期權交易、alpha對沖等。比如經典的配對交易對沖策略,當兩個合約有很強的相關性時,可能存在相似的變動關系,兩種合約之間的價差會維持在一定的水平上。當市場出現變化時,兩種合約之間的價差會偏離均衡水平。此時,可以買入其中一份合約同時賣出其中一份合約,當價差恢復到正常水平時平倉,獲取收益。

E. 高頻交易策略:其核心思想是利用市場價格的短期波動來獲取利潤。通過高頻數據分析和預測,投資者可以快速地買入和賣出股票、期貨和其他金融產品,以捕捉微小的價格差異和波動。這種策略通常依賴于高速交易系統和算法,以在毫秒或更短的時間內執行交易決策,具有較高的交易頻率和風險,但同時也具有較高的潛在收益。

F. 量化擇時策略:通過分析歷史數據、市場趨勢、投資者情緒等因素,預測未來的市場走勢,做為投資決策。常用的有趨勢擇時、市場情緒擇時、牛熊線、神經網絡預測、統計套利等方法。比如經典的雙均線趨勢跟蹤策略,當近短期上升趨勢比之前有所突破就可以考慮入手,反之可以考慮拋出。如下附上經典的雙均線策略示例:

#encoding:gbk
import pandas as pd
import numpy as np
import datetime

"""
示例說明:
當短期均線由上向下穿越長期均線時做空
當短期均線由下向上穿越長期均線時做多
策略講解:https://www.myquant.cn/docs/python_strategyies/153
"""

class a():
pass
A = a() #創建空的類的實例 用來保存委托狀態
#ContextInfo對象在盤中每次handlebar調用前都會被深拷貝, 如果調用handlebar的分筆不是k線最后分筆 ContextInfo會被回退到深拷貝的內容 所以ContextInfo不能用來記錄快速交易的信號

def init(C):
# 回測代碼
A.acct = '88'
A.acct_type= "STOCK"
A.stock= C.stockcode + '.' + C.market #品種為模型交易界面選擇品種
#A.acct= account #賬號為模型交易界面選擇賬號
#A.acct_type= accountType #賬號類型為模型交易界面選擇賬號
A.amount = 10000 #單筆買入金額 觸發買入信號后買入指定金額
A.line1=5 #快線周期
A.line2=20 #慢線周期
A.waiting_list = [] #未查到委托列表 存在未查到委托情況暫停后續報單 防止超單
A.buy_code = 23 if A.acct_type == 'STOCK' else 33 #買賣代碼 區分股票 與 兩融賬號
A.sell_code = 24 if A.acct_type == 'STOCK' else 34
#設置股票池 訂閱品種行情
C.set_universe([A.stock])
print(f'設置雙均線{A.line1},{A.line2}實盤示例{A.stock} {A.acct} {A.acct_type} 單筆買入金額{A.amount}')
def handlebar(C):
#跳過歷史k線
if not C.is_last_bar() : #回測
print('is last null')
return
now = datetime.datetime.now()
now_time = now.strftime('%H%M%S')

#跳過非交易時間
if now_time < '093000' or now_time > "150000":
print('非交易時間')
return
# 獲取賬戶信息
#print(get_trade_detail_data(A.acct, A.acct_type, "account"))
#print(get_trade_detail_data(A.acct, A.acct_type, "ACCOUNT"))
account = get_trade_detail_data(A.acct, A.acct_type, "account")
if len(account)==0:
print(f'賬號{A.acct} 未登錄 請檢查')
return
account = account[0]
available_cash = int(account.m_dAvailable)
#如果有未查到委托 查詢委托
if A.waiting_list:
found_list = []
orders = get_trade_detail_data(A.acct, A.acct_type, 'order')
print('wait-orders',A.waiting_list,orders)
for order in orders:
if order.m_strRemark in A.waiting_list:
found_list.append(order.m_strRemark)
A.waiting_list = [i for i in A.waiting_list if i not in found_list]
A.waiting_list = [] #回測修改為0
if A.waiting_list:
print(f"當前有未查到委托 {A.waiting_list} 暫停后續報單")
return
holdings = get_trade_detail_data(A.acct, A.acct_type, 'position')
#print('holdings',holdings)
holdings = {i.m_strInstrumentID + '.' + i.m_strExchangeID : i.m_nCanUseVolume for i in holdings}
#print('holdings',holdings)
####核心邏輯代碼
# 獲取行情數據 1d
data = C.get_history_data(max(A.line1, A.line2)+1, '1d', 'close',dividend_type='front_ratio')
close_list = data[A.stock]
if len(close_list) < max(A.line1, A.line2)+1:
print('行情長度不足(新上市或最近有停牌) 跳過運行')
return
pre_line1 = np.mean(close_list[-A.line1-1: -1])
pre_line2 = np.mean(close_list[-A.line2-1: -1])
current_line1 = np.mean(close_list[-A.line1:])
current_line2 = np.mean(close_list[-A.line2:])
## # 舊短大于舊長 新短小于新長 死叉拋;舊短小于舊長 新短大于新長 自下而上穿均線金叉入
#如果快線穿過慢線,則買入委托 當前無持倉 買入
vol = int(A.amount / close_list[-1] / 100) * 100 #買入數量 向下取整到100的整數倍
if A.amount < available_cash and vol >= 100 and A.stock not in holdings and pre_line1 < pre_line2 and current_line1 > current_line2:
#下單開倉 ,參數說明可搜索PY交易函數 passorder
msg = f"雙均線實盤 {A.stock} 上穿均線 買入 {vol}股"
passorder(A.buy_code, 1101, A.acct, A.stock, 14, -1, vol, '雙均線實盤', 1 , msg, C)
print(msg)
A.waiting_list.append(msg)
#如果快線下穿慢線,則賣出委托
if A.stock in holdings and holdings[A.stock] > 0 and pre_line1 > pre_line2 and current_line1 < current_line2:
msg = f"雙均線實盤 {A.stock} 下穿均線 賣出 {holdings[A.stock]}股"
passorder(A.sell_code, 1101, A.acct, A.stock, 14, -1, holdings[A.stock], '雙均線實盤', 1 , msg, C)
print(msg)
A.waiting_list.append(msg)

量化策略設計開發中,Python編程的入門并不難,前期編程只要入門夠用就行了,只有交易的思路才是始終的核心!我們除了積累交易經驗、學習經典策略,還可以研究各大公司的研報,學習前沿的策略設計,才比較有可能跟得上市場。(有時找ChatGPT聊聊策略,激發些思路也是不錯~)

特別地,對于新手而言,個人覺得先學習寫一個止盈止損策略是門必修課,先學會如何控制好風險是首要的,其次才是折騰怎么盈利。

4、完整量化交易的流程

可能很多文章講到量化策略就戛然而止,對于新手很不友好。梳理下量化主要的流程:開通證券賬號→搭建量化交易系統及開通實盤交易→設計量化策略→數據獲取及處理→開發策略→策略回測→調試優化→實盤交易

入門量化其實較大的門檻是*搭建并開通好量化交易環境,然后才是開發策略代碼。*

量化交易系統環境的準備,個人不建議在沒有較多量化經驗的基礎就從頭折騰交易系統,諸如 編寫交易的框架(還有個折中方案,可以折騰下開源的框架)、回測框架、穿透測試、對接實盤接口及調試bugs等等的會很耗費精力。(當然技術過硬的有興趣折騰的人還是可以試試。)

前期,我們可以直接使用現成量化交易框架,現成的軟件可以方便 數據獲取,回測驗證效果,交易,可以專攻量化策略的實現及優化。先達成效果,再過度優化,也會有比較有效率。

比較常用的量化交易系統有:云核、iquant、迅投QMT、GTrade、極智量化、文華、TB開拓者、聚寬等,這些平臺也大都支持股票、ETF、期貨、期權交易。(筆者用的是iquant,目前感覺夠用。)

實盤過程主要還是注意控制風險,設定好止損及合理的倉位,開發好的策略需要梳理好邏輯以及充足的回測,調試好再上實盤交易會比較穩妥,根據實盤表現,定期復盤,改進交易策略,嘗試新的交易思路和方法,不斷精進交易策略。另外的,最好將前期的資金投入控制少一點,即使已經過充足的回測可以盈利,但回測結果也可能是過擬合,所以實盤前期投入點先試試水也是很有必要的!

我個人是直接先入個幾百塊做股票量化:實盤買些便宜且穩定的ETF股票(買一手也就100來塊),既可以手動交易下熟悉下股票交易流程,也可以掛機跑些簡單策略,晚上下班在分析下策略運行結果,做一些調整優化。小資金實盤交易試水,過段時間看下策略效果及市場行情穩定后,再投入較大資金。個人實踐表明這樣的量化入門效率是比較高的。

文章轉自微信公眾號@算法進階

上一篇:

圖神經網絡加速綜述: 算法、系統和硬件

下一篇:

TimeGPT:第一個時間序列的大模型
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費