Python金融編程:移動(dòng)平均?Hurst指數(shù)計(jì)算?(摘抄)

鄭志勇 ArisZheng

文本是使用Python實(shí)現(xiàn)Hurst指數(shù)計(jì)算惦辛,作者王瑋珩寝优,從事股票策略研發(fā)兼回測(cè)系統(tǒng)開發(fā)且轨;

Hurst指數(shù)是分形技術(shù)在金融量化分析中的典型應(yīng)用。分形是以非整數(shù)維形式充填空間的形態(tài)特征分形可以說是來自于一種思維上的理論存在1973年,曼德勃羅(B.B.Man-

delbrot) 在法蘭西學(xué)院講課時(shí),首次提出了分維和分形幾何的設(shè)想礁叔。分形(Fractal)一詞,是曼 德勃羅創(chuàng)造出來的,其原意具有不規(guī)則、支離破碎等意義,分形幾何學(xué)是一門以非規(guī)則幾何形態(tài)為研究對(duì)象的幾何學(xué)迄薄。由于不規(guī)則現(xiàn)象在自然界是普遍存在的,因此分形幾何又稱為描述 大自然的幾何學(xué)琅关。分形幾何建立以后,很快就引起了許多學(xué)科的關(guān)注,這是由于它不僅在理論 上,而且在實(shí)用上都具有重要價(jià)值。

一讥蔽、Hurst指數(shù)簡(jiǎn)介

基于重標(biāo)極差(R/S)分析方法基礎(chǔ)上的 Hurst(赫斯特)指數(shù)(H)研究是由英國(guó)水文專家 H.E.Hurst(1900—1978)在研究尼羅河水庫(kù)水流量和貯存能力的關(guān)系時(shí),發(fā)現(xiàn)用有偏的隨機(jī) 游走(分形布朗運(yùn)動(dòng))能夠更好地描述水庫(kù)的長(zhǎng)期貯存能力,并在此基礎(chǔ)上提出了用重標(biāo)極差 (R/S)分析方法來建立 Hurst指數(shù),作為判斷時(shí)間序列數(shù)據(jù)遵從隨機(jī)游走還是有偏的隨機(jī)游 走過程的指標(biāo)涣易。

Hurst指數(shù)有三種形式:

① 如果 H=0.5,表明時(shí)間序列可以用隨機(jī)游走來描述;

② 如果0.5

③ 如果0≤H<0.5,表明粉紅噪聲(反持續(xù)性),即均值回復(fù)過程。< span="">

也就是說,只要 H ≠0.5,就可以用有偏的布朗運(yùn)動(dòng)(分形布朗運(yùn)動(dòng))來描述該時(shí)間序列

數(shù)據(jù)冶伞。

Mandelbrot在1972年首次將 R/S分析應(yīng)用于美國(guó)證券市場(chǎng),分析股票收益的變化,Pe-ters把這種方法作為其分形市場(chǎng)假說最重要的研究工具進(jìn)行了詳細(xì)的討論和發(fā)展,并做了很

多實(shí)證研究新症。經(jīng)典的金融理論一般認(rèn)為股票市場(chǎng)是有效的,已有的信息已經(jīng)充分在股價(jià)上得到了反映,無法幫助預(yù)測(cè)未來走勢(shì),下一時(shí)刻的變動(dòng)獨(dú)立于歷史價(jià)格變動(dòng)。因此股市變化沒有 記憶响禽。實(shí)際上中國(guó)股市并非完全有效,在一定程度上表現(xiàn)出長(zhǎng)期記憶性(LongTermMemo-

ry)徒爹。中國(guó)股市的牛熊交替(2001—2017),伴隨著對(duì)股市趨勢(shì)的記憶的加強(qiáng)和減弱的輪換,分 形理論中的重標(biāo)極差法導(dǎo)出的 Hurst指數(shù)可以反映股市的長(zhǎng)期記憶性的強(qiáng)弱。用移動(dòng)時(shí)間 區(qū)間的 Hurst指數(shù)來對(duì)照股指的變化,可以分析Hurst指數(shù)的高低與市場(chǎng)指數(shù)走勢(shì)的關(guān)系芋类。

赫斯特指數(shù)預(yù)測(cè)股票市值走勢(shì)的三種形式:

① 如果 H=0.5,表明時(shí)間序列可以用隨機(jī)游走來描述瀑焦。股市未來方向(上漲或者下跌)

無法確定,市場(chǎng)處于震蕩行情中。

有方向,若時(shí)間周期序列長(zhǎng)度為120,當(dāng)最近半年市場(chǎng)上漲(橫盤梗肝、下跌),則市場(chǎng)很可能將繼續(xù) 上漲(橫盤榛瓮、下跌),H 值越大市場(chǎng)保持原有趨勢(shì)的慣性越大。

③ 如果0≤H<0.5,表明粉紅噪聲(反持續(xù)性),即均值回復(fù)過程巫击。股市將改變?cè)蟹较? 若時(shí)間周期序列長(zhǎng)度為120,當(dāng)最近半年市場(chǎng)上漲(橫盤禀晓、下跌),則市場(chǎng)很可能將繼續(xù)下跌或="" 者橫盤(上漲或下跌精续、橫盤或上漲),h值越小市場(chǎng)改變?cè)汹厔?shì)的可能性越大。<="" span="">

中國(guó)的證券市場(chǎng)隨著金融產(chǎn)品豐富粹懒、監(jiān)管效率的提高,未來的中國(guó)證券市場(chǎng)的有效性將越 來越高重付。

二、R/S方法計(jì)算 Hurst指數(shù)

具體參見《金融數(shù)量分析基于Matlab編程》第16章

三凫乖、 移動(dòng)平均 Hurst指數(shù)計(jì)算程序

(1)時(shí)間序列分段

子區(qū)間長(zhǎng)度n 是可變的,如果回歸分析需要將時(shí)間序列進(jìn)行分段,例如若時(shí)間序列長(zhǎng)度為

240,則其可以分解成4段長(zhǎng)度為60的等長(zhǎng)子區(qū)間,或者6段長(zhǎng)度為40的等長(zhǎng)子區(qū)間……

時(shí)間序列分段函數(shù)(除因子2外,例如240分為2與120或者120與2,因數(shù)據(jù)段數(shù)太少或

者子區(qū)間長(zhǎng)度太短將影響回歸效果)語法如下:

FactorMatrix,FactorNum = HurstFactorization(x)

x:時(shí)間序列長(zhǎng)度确垫。

輸出參數(shù):

FactorMatrix:時(shí)間序列分段方案;

FactorNum:時(shí)間序列分段方案數(shù)量。

py文件 HurstFactorization.py如下:

# -*- coding: utf-8 -*-

import math

def HurstFactorization(x): # hurstFactorization

# codebyawang6254978@163.com

# 2017 09 20

# 因子分解,以4開始以X/4結(jié)束

# floor函數(shù)表示四舍五入

FactorMatrix = []

N = int(math.floor(x / 4))

# 方案數(shù)量初始為0

FactorNum = 0

for i in range(4, N + 1):

# i可以被x整除,即得到一組分解方案

if x % i == 0:

# 方案數(shù)量+1

FactorNum = FactorNum + 1

# 將可行方案存儲(chǔ)到FactorMatrix中

FactorMatrix.append([i, x / i])

return FactorMatrix, FactorNum

函數(shù)測(cè)試240共有14個(gè)分段方案:

X=240

%調(diào)用HurstFactorization函數(shù)

﹥﹥[FactorMatrix,FactorNum]=HurstFactorization(x)

%分解方案序列

FactorMatrix=

4 60

……

60 4

FactorNum=

14

(2) Hurst指數(shù)計(jì)算

時(shí)間序列 Hurst指數(shù)計(jì)算函數(shù)語法如下:

HurstExponent=HurstCompute(Xtimes)

輸入?yún)?shù):

Xtimes:時(shí)間序列數(shù)據(jù)帽芽。

HurstExponent:為二元向量,第一元素為時(shí)間序列的 Hurst指數(shù),第二元素為回歸分 析常數(shù)項(xiàng)删掀。

注:回歸模型log((R/S)n)=log(K)+Hlog(n)。

PY文件 HurstCompute.py如下:

# -*- coding: utf-8 -*-

import numpy as np

from numpy.matlib import repmat

from HurstFactorization import HurstFactorization

def HurstCompute(Xtimes):

# HurstCompute

#codebyawang6254978@163.com

# 2017-09-20

# 輸入?yún)?shù)為Xtimes

LengthX = len(Xtimes)

# 進(jìn)行因式分解

FactorMatrix, FactorNum =HurstFactorization(LengthX)

# 定義LogRS

LogRS = []

# 定義LogN

#LogN=np.zeros([FactorNum, 1])

LogN = []

# 分組計(jì)算

for i in range(0,FactorNum):

# 根據(jù)因式分解方案,將數(shù)量進(jìn)行分組

# 例如 FactorMatrix(i,:)=[8 30]

# 將240個(gè)元素的列向量,轉(zhuǎn)換為8X30的矩陣

dataM = np.reshape(Xtimes,FactorMatrix[i])

# print dataM.shape

#dataM=reshape(Xtimes,FactorMatrix(i,:))

# 計(jì)算矩陣每列的均值

MeanM = np.mean(dataM, axis=0)

SubM = dataM - repmat(MeanM, FactorMatrix[i][0], 1)

RVector = np.zeros([FactorMatrix[i][1], 1])

SVector = np.zeros([FactorMatrix[i][1], 1])

# 計(jì)算(R/S)n的累加

for j in xrange(0, FactorMatrix[i][1]):

SubVector = np.cumsum(SubM[:, j])

RVector[j] = max(SubVector) - min(SubVector)

SVector[j] = np.std(dataM[:, j])

# 分別計(jì)算LogRS导街、LogN

LogRS.append(np.log(np.sum(RVector / SVector) / FactorMatrix[i][1]))

LogN.append(np.log(FactorMatrix[i][0]))

# 使用最小二乘法進(jìn)行回歸,計(jì)算赫斯特指數(shù)HurstExponent

HurstExponent = np.polyfit(LogN, LogRS, 1)

return HurstExponent

return HurstExponent函數(shù)測(cè)試的 PY 文件testHurstCompute.py如下測(cè)試方法生成一組布朗運(yùn)動(dòng)序列,計(jì)算布朗運(yùn)動(dòng)序列對(duì)數(shù)序列的 Hurst指數(shù),共測(cè)試10次:

# -*- coding: utf-8-*-

from HurstCompute import HurstCompute

import matplotlib.pyplot as plt

testNum = 10

# 并將結(jié)果存儲(chǔ)在result中

result = np.zeros([testNum, 2])

for i in xrange(0, testNum):

n = 120 *(i + 1)

dt = 1

# 生存長(zhǎng)度不同的布朗運(yùn)動(dòng)序列

y =np.cumsum(dt ** 0.5 * np.random.random((1, n)))

# 計(jì)算每組序列的Hurst值

result[i,:] = HurstCompute(np.log(y))

#生成圖表

plt.plot(range(len(result)), result[:, 0], '*')

#設(shè)置標(biāo)題

plt.title("PyPlot First Example")

#顯示圖表

plt.show()

測(cè)試結(jié)果圖像如圖所示披泪。

圖片發(fā)自簡(jiǎn)書App

結(jié)果說明:圖16.1橫軸表示1~10共10次計(jì)算測(cè)試,縱軸表示每次測(cè)試計(jì)算出的 Hurst

指數(shù)值。

(3) 移動(dòng)平均 Hurst指數(shù)計(jì)算

使用上證指數(shù)2000至2017年上證綜指時(shí)間序列數(shù)據(jù),計(jì)算其給定移動(dòng)平均長(zhǎng)度的 Hurst指數(shù)搬瑰。編寫 MoveHurst.m函數(shù),其中cyclength為計(jì)算周期,用戶可根據(jù)需求 進(jìn)行修改款票。

例如計(jì)算120個(gè)交易日的 Husrt指數(shù),使用的數(shù)據(jù)為[t-119,t]的價(jià)格數(shù)據(jù),移動(dòng)平均的意思為根據(jù)t的向前移動(dòng),計(jì)算指數(shù)的數(shù)據(jù)為[t-119,t]的價(jià)格數(shù)據(jù),同時(shí)根據(jù)t進(jìn)行移動(dòng)。代碼如下:

import xlrd

# MoveHurst

# codebyawwheng 2017 9 20

# 讀取xlsx文件

workbook = xlrd.open_workbook("shindex.xlsx")

# 讀取Sheet1工作簿

sheet1 = workbook.sheet_by_name('Sheet1')

# 獲取行指針

rows = sheet1.nrows

Prices = []

dates = []

for i inxrange(rows): # 循環(huán)指針并讀取價(jià)格與時(shí)間數(shù)據(jù)至Prices,dates Prices.append(sheet1.row_values(i)[0])

dates.append(int(sheet1.row_values(i)[1]))

# 數(shù)據(jù)長(zhǎng)度

DataLength = len(Prices)

# 計(jì)算周期

cyclength = 120

# 數(shù)據(jù)長(zhǎng)度是否大于計(jì)算周期,若只有100個(gè)數(shù)據(jù)

# 不可能計(jì)算出120計(jì)算周期的Hurst指數(shù)的

if cyclength> DataLength:

plt.plot(range(1, 100), range(1,100), "r*", range(1, 100), range(100, 1, -1), "ro")

else:

# 將價(jià)格數(shù)據(jù)轉(zhuǎn)換為對(duì)數(shù)數(shù)據(jù)

logData = np.log(Prices)

# 計(jì)算價(jià)格的對(duì)數(shù)數(shù)據(jù)對(duì)應(yīng)的每日收益率

IndexReturn=(np.array(logData[1:])-np.array(logData[:-1]).tolis())

# 生成Hurst指數(shù)并初始化為NaN

hurstE = np.array([np.nan] *DataLength)

# 計(jì)算移動(dòng)的hurst指數(shù)

for i in xrange(0, DataLength -cyclength + 1):

HurstExponent =HurstCompute(IndexReturn[i:i + cyclength - 1])

hurstE[cyclength + i - 1] =HurstExponent[0]

# 創(chuàng)建圖表

plt.figure(1)

# 在圖表1中創(chuàng)建HurstExponent子圖

ax1 = plt.subplot(211)

# 設(shè)置y軸標(biāo)簽

plt.ylabel("HurstExponent")

# 設(shè)置X軸刻度

ax.set_xticklabels(dates,rotation=1)

# 設(shè)置數(shù)據(jù)與數(shù)據(jù)寬度

plt.plot(hurstE, linewidth=0.5)

# 在圖表2中創(chuàng)建logIndex子圖2

ax2 = plt.subplot(212)

plt.ylabel("logIndex")

plt.plot(logData, linewidth=0.5)

圖片發(fā)自簡(jiǎn)書App
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泽论,一起剝皮案震驚了整個(gè)濱河市艾少,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翼悴,老刑警劉巖姆钉,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抄瓦,居然都是意外死亡潮瓶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門钙姊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毯辅,“玉大人,你說我怎么就攤上這事煞额∷伎郑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵膊毁,是天一觀的道長(zhǎng)胀莹。 經(jīng)常有香客問我,道長(zhǎng)婚温,這世上最難降的妖魔是什么描焰? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上荆秦,老公的妹妹穿的比我還像新娘篱竭。我一直安慰自己,他們只是感情好步绸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布掺逼。 她就那樣靜靜地躺著,像睡著了一般瓤介。 火紅的嫁衣襯著肌膚如雪吕喘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天刑桑,我揣著相機(jī)與錄音氯质,去河邊找鬼。 笑死漾月,一個(gè)胖子當(dāng)著我的面吹牛病梢,可吹牛的內(nèi)容都是我干的胃珍。 我是一名探鬼主播梁肿,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼觅彰!你這毒婦竟也來了吩蔑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤填抬,失蹤者是張志新(化名)和其女友劉穎烛芬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飒责,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赘娄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宏蛉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遣臼。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拾并,靈堂內(nèi)的尸體忽然破棺而出揍堰,到底是詐尸還是另有隱情,我是刑警寧澤嗅义,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布屏歹,位于F島的核電站,受9級(jí)特大地震影響之碗,放射性物質(zhì)發(fā)生泄漏蝙眶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一褪那、第九天 我趴在偏房一處隱蔽的房頂上張望械馆。 院中可真熱鬧胖眷,春花似錦、人聲如沸霹崎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尾菇。三九已至境析,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間派诬,已是汗流浹背劳淆。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留默赂,地道東北人沛鸵。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缆八,于是被迫代替她去往敵國(guó)和親曲掰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 算法技術(shù)解構(gòu) 1奈辰、Python基礎(chǔ)知識(shí) (1)IPythonIPython的開發(fā)者吸收了標(biāo)準(zhǔn)解釋器的基本概念栏妖,在此...
    shenciyou閱讀 5,274評(píng)論 0 10
  • 一、概述 深度學(xué)習(xí)的一個(gè)重要手段是訓(xùn)練數(shù)據(jù)和訓(xùn)練過程的可視化奖恰,因此吊趾,我們關(guān)于深度學(xué)習(xí)的系列介紹文章就從Matplo...
    aoqingy閱讀 6,126評(píng)論 0 24
  • 作者:blue(又名一書and一世界) 我的github 環(huán)境:Ubuntu 14.04lts 執(zhí)行的命令: $d...
    一書and一世界閱讀 3,675評(píng)論 2 2
  • 10 (1)沐春風(fēng) 一直覺得,有些人瑟啃,確實(shí)有著與生俱來的美好氣質(zhì)论泛。 在那里娓娓交談,總是面帶微笑蛹屿,無形中屁奏,...
    漫步百花園閱讀 385評(píng)論 7 4