1. 程式人生 > >金融市場量化交易配對策略(一):尋找配對股票(基於聚寬python2.7平臺)

金融市場量化交易配對策略(一):尋找配對股票(基於聚寬python2.7平臺)

需要基礎金融理論知識、python numpy、pandas庫知識

量化交易

以先進的數學模型替代人為的主觀判斷,利用計算機技術從龐大的歷史資料中海選能帶來超額收益的多種“大概率”事件以制定策略,極大地減少了投資者情緒波動的影響,避免在市場極度狂熱或悲觀的情況下作出非理性的投資決策。以先進的數學模型替代人為的主觀判斷,利用計算機技術從龐大的歷史資料中海選能帶來超額收益的多種“大概率”事件以制定策略,極大地減少了投資者情緒波動的影響,避免在市場極度狂熱或悲觀的情況下作出非理性的投資決策。

配對交易

        是指八十年代中期華爾街著名投行Morgan Stanley的數量交易員Nunzio Tartaglia成立的一個數量分析團隊提出的一種市場中性投資策略,,其成員主要是物理學家、數學家、以及計算機學家。
  Ganapathy Vidyamurthy在《Pairs Trading: Quantitative Methods and Analysis》一書中定義配對交易為兩種型別:一類是基於統計套利的配對交易,一類是基於風險套利的配對交易。

  基於統計套利的配對交易策略是一種市場中性策略,具體的說,是指從市場上找出歷史股價走勢相近的股票進行配對,當配對的股票價格差(Spreads)偏離歷史均值時,則做空股價較高的股票同時買進股價較低的股票,等待他們迴歸到長期均衡關係,由此賺取兩股票價格收斂的報酬。    

                                                                                                                                ——MBA智庫

配對交易的原理

        配對交易策略的基本原理是基於兩個相關性較高的股票或者其他證券,如果在未來時期保持著良好的相關性,一旦兩者之間出現了背離的走勢,且這種背離在未來是會得到糾正的,那麼就可能產生套利的機會。對於配對交易的實踐而言,如果兩個相關性較高的股票或者其他證券之間出現背離,就應該買進表現相對較差的,賣出表現相對較好的。當未來兩者之間的背離得到糾正,那麼可以進行相反的平倉操作來獲取利潤。

  由於配對交易利用配對間的短期錯誤定價,通過持有相對低估,賣空相對高估,因此其本質上是一個反轉投資策略,其核心是學術文獻中的股票價格均值回覆。儘管配對交易策略非常簡單,但卻被廣泛應用,其之所以能被廣泛應用的主要原因是:首先,配對交易的收益與市場相獨立,即市場中性,也就是說它與市場的上漲或者下跌無關;其次,其收益的波動性相對較小;第三,其收益相對穩定。

                                                                                                                                ——MBA智庫

最小距離法

P ti(t=0,1,2…T)表示股票i在第t天的價格,則單期收益率:

                            

            t天內積累的收益率:

                            

            標準化價格偏差平方和:

                            

完成程式碼

計算SSD函式

def SSD(priceX,priceY):
    #都為pd.dataframe
    if priceX is None or priceY is None:
        print('缺少價格序列')
    returnX=(priceX-priceX.shift(1))/priceX.shift(1)[1:]
    returnY=(priceY-priceY.shift(1))/priceY.shift(1)[1:]
    standardX=(returnX+1).cumprod()
    standardY=(returnY+1).cumprod()
    SSD=np.sum((standardX-standardY)**2)
    return(SSD)

選取“酒、飲料和精製茶製造業” 行業成分股的幾十支股票

stocks = get_industry_stocks('C15')

對某兩支股票過去360個交易日內收盤價進行統計

h1 = attribute_history(stocks[i], 360, '1d', ('close'))
h2 = attribute_history(stocks[j], 360, '1d', ('close'))

在股票池中迴圈比較、排序輸出

完整程式碼

import jqdata

def initialize(context):
    stocks = get_industry_stocks('C15')
    ssds={}
    for i in range(len(stocks)-1):
        for j in range(i+1,len(stocks)):
            h1 = attribute_history(stocks[i], 360, '1d', ('close'))
            h2 = attribute_history(stocks[j], 360, '1d', ('close'))
            dis=SSD(h1,h2)['close']
            ssds[stocks[i]+','+stocks[j]]=dis
            #print dis['close']
            #print type(dis['close'])
    
    
    for k,v in sorted(ssds.items(),key = lambda x:x[1]):
        print k+' '+str(v)

def SSD(priceX,priceY):
    if priceX is None or priceY is None:
        print('缺少價格序列')
    returnX=(priceX-priceX.shift(1))/priceX.shift(1)[1:]
    returnY=(priceY-priceY.shift(1))/priceY.shift(1)[1:]
    standardX=(returnX+1).cumprod()
    standardY=(returnY+1).cumprod()
    SSD=np.sum((standardX-standardY)**2)
    return(SSD)
    
def handle_data(context,data):
    pass

部分結果:


得到最適合用來配對的為 中葡股份600084 和 養元飲品603156

接著即可以進行進一步工作。


相關推薦

金融市場量化交易配對策略尋找配對股票基於python2.7平臺

需要基礎金融理論知識、python numpy、pandas庫知識量化交易以先進的數學模型替代人為的主觀判斷,利用計算機技術從龐大的歷史資料中海選能帶來超額收益的多種“大概率”事件以制定策略,極大地減少了投資者情緒波動的影響,避免在市場極度狂熱或悲觀的情況下作出非理性的投資決

量化交易-MACD策略學習

我認為MACD不適合採用輪動策略,經過回測,我將策略改成以下模式:? 選出基本面較好的股票 剔除ST、停牌、退市的股票 在DIF和DEA在0軸上形成金叉時買入 在DIF他DEA的0軸下形成死叉時賣出 加入止損:這次的止損買有根據股票的盈虧來判斷,而是:

量化交易通用策略CTA__01

商品期貨通用策略 通用策略模型是指同一策略在不改變引數、不調換交易週期、不修改出入市條件的前提下,能夠在不同市場的多個交易商品盈利。相對於單品種策略,通用策略儘管績效上不會異常突出,但其穩定性更好,能把握不同市場的特徵共性,依靠共有規律盈利,如此盈利模式無疑是更為穩健的。 本策略測試

【量億資料-金融資料-量化交易】PyAlgoTrade框架研究

最近研究量化交易,看了幾個回測的框架,最後盯上PyAlgoTrade這個專案。感覺很不錯,支援 策略回測和實盤交易,提供全面的技術分析介面,算是python的量化交易框架裡比較出色的作品。所以對這個框架進行了一番研究。 程式化交易系統的程式設計正規化:事件驅動的程式設計

Pro Android學習筆記三七Home Screen Widgets3配置Activity

map onclick widgets info xtra ces extends height appwidget 文章轉載僅僅能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處http://blog.csdn.net/flowingfly

Android項目實戰十六QQ空間實現—— 展示說說中的評論內容並有相應點擊事件

con toast short demo append 集合 obj parent 自帶 原文:Android項目實戰(十六):QQ空間實現(一)—— 展示說說中的評論內容並有相應點擊事件大家都玩QQ空間客戶端,對於每一個說說,我們都可以評論,那麽,對於某一條評論:

日常如它,竟是讓我們敗給庸碌感的元兇習慣一旦形成,對於命運回答我認命,將自己長長的一生“拱手相讓”!

時間 你會 記錄 mda 亂七八糟 效率 工作 可能 HP 這世上最無奈的一句話就是:習慣了。 習慣了安靜、習慣了冷清、習慣了獨行、習慣了日子過得庸庸碌碌,習慣了生活中種種的疲於應付、習慣了亂七八糟的電腦桌面,習慣了匆匆完成的任務,習慣一旦形成,會變成附著在我們身上

Caffe視覺化網路結構視覺化用Caffe自帶程式實現

Caffe視覺化(一):網路結構視覺化(用Caffe自帶程式實現) 本文記錄瞭如何利用Caffe自帶的程式實現網路的視覺化,包括可能遇到的問題和解決方案。更新於2018.10.25。 文章目錄 Caffe視覺化(一):網路結構視覺化(用Caffe自帶程式實現

第十一點一滴學ibatis

一、常見ORM框架1、原生的JDBC。自己寫的JDBC,基本上就只夠程式跑起來,缺陷和漏洞一堆堆。回顧下jdbc的幾個操作,載入驅動,建立連線,預處理語句,執行,結果集遍歷。這個過程中,因為連線Connection要不斷關閉和開啟,頻繁操作,於是有了連線池ConnectionPool。預處理語句的sql要重複

演算法導論 第十散列表 筆記直接定址表、散列表、通過連結法解決碰撞、雜湊函式、開放定址法、完全雜湊

前面討論的各種資料結構中,記錄在各種結構中的相對位置是隨機的,和在記錄的關鍵字之間不存在有確定的關係,因此在查詢記錄是需要進行一系列和關鍵字的比較。而理想的情況是不希望進行任何的比較,一次存取便能得到所查記錄。那就必須在記錄的儲存位置和它的關鍵字之間建立一種確定的關係f,使每個關鍵字和結構中有一

機器學習筆記 TensorFlow實戰三MNIST數字識別問題

1 - MNIST數字識別問題 前面介紹了這樣用TensorFlow訓練一個神經網路模型和主要考慮的問題及解決這些問題的常用方法。下面我們用一個實際的問題來驗證之前的解決方法。 我們使用的是MNIST手寫數字識別資料集。在很多深度學習教程中,這個資料集都會被當做一個案例。 1.1

跨平臺方法獲取檔案大小引數為檔案url

在一些實際的專案中,我們需要去計算某目錄下的某個檔案的大小,從而繼續後續的業務; 如下的方法是各個平臺通用的方法,簡潔實用,已經驗證和測試過: #include <stdint.h> #include <stdio.h> #include <stdlib.h

機器學習筆記二十TensorFlow實戰十三遷移學習

1 - 引言 越複雜的神經網路,需要的訓練集越大,ImageNet影象分類資料集有120萬標註圖片,所以才能將152層的ResNet的模型訓練到大約96.%的正確率。但是在真正的應用中,很難收集到如此多的標註資料。即使收集到也需要花費大量人力物力來標註。並且即使有了大量的資料集,要訓練一

計算機網路_驗證UDP特性次未將報文資料讀完,剩餘部分將被丟棄

一、 思路 伺服器端和客戶端進行報文互動,客戶端每次向伺服器端傳送訊息,伺服器端只讀取5個有效字元,觀察情況: 二、 程式碼實現 #include<netinet/in.h> //struct sockaddr; struct sockaddr_in; #incl

極客講堂之資料結構與演算法之美複雜度分析

(本文根據極客講堂——資料結構與演算法之美專欄的問答區整理修改而成,如有侵權還希望聯絡我鴨~) 一、什麼是複雜度分析? 1.資料結構和演算法解決是“如何讓計算機更快時間、更省空間的解決問題”。 2.因此需從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 3.分別

ARM aarch64彙編學習筆記使用Neon指令

NEON是一種基於SIMD思想的ARM技術。 SIMD, Single Instruction Multiple Data,是一種單條指令處理多個數據的並行處理技術,相比於一條指令處理一個數據,運算速度將會大大提高。 ARMv8 有31 個64位暫存器,1個不同

【譯】你不知道的 Chrome 除錯工具技巧 第十style editors continued樣式編輯器後續

特別宣告 本文是作者 Tomek Sułkowski 釋出在 medium 上的一個系列。據作者透露一共有 24 篇,一直更新到 12 月 24 日 版權歸原作者所有。 作者在Twitter上推薦我們的中文翻譯啦,截圖在最後 譯者在翻譯前已經和作者溝通得到了翻譯整個系列的許可。 為了不影響大家閱讀,許可

面試題58翻轉單詞順序簡單

一、題目 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student. ",則輸出"student. a am I"。 二、關鍵 1.反轉兩次。第一次:“.tneduts a ma

Spring Cloud Stream消費失敗後的處理策略使用DLQ佇列RabbitMQ

應用場景 前兩天我們已經介紹了兩種Spring Cloud Stream對訊息失敗的處理策略: 自動重試:對於一些因環境原因(如:網路抖動等不穩定因素)引發的問題可以起到比較好的作用,提高訊息處理的成功率。 自定義錯誤處理邏輯:如果業務上,訊息處理失敗之後有明確的降級邏輯可以彌補的,可以採用這種

python手記requests寫爬蟲爬蟲簡介

上次將python的圖片處理庫簡單寫了下,也就基本處於玩的地步。哈哈,蠻嘲諷的,這次我嘗試著寫下爬蟲,有多深肯定是不敢保證的,畢竟能力有限。但是我會盡量去從原理上把爬蟲的東西說明白一些。讓大家有個直觀的認識,最後能自己寫出個簡單的定向小爬蟲,爬個小說,爬個圖片,爬首歌曲什麼的