c++rs法计算hurst指数_随机过程(1):随机游走,布朗运动,Hurst指数

a75c1493a682b0117aa41c4fd419083e.png

随机过程定义:

  • collection of random variables indexed by time

按时间索引的随机变量集合

  • A probability distribution over paths

路径上的概率分布

随机游走

举个例子:

例如:抛硬币,正面向前走1步,背面向后走1步。因此,向前走的概率是0.5,向后走的概率是0.5,每秒行走一次。假设我们现在处于第10秒。

  1. 马尔可夫(Markov Chain):我们“知道第10秒的位置,第11秒的概率分布”和“知道前10秒所有位置,第11秒的概率分布”相同。解释一下,比如说我们知道第十秒的位置在1,那么第11秒的位置在2的概率为0.5,在0的概率为0.5,在其他位置的概率为0。但是我们得到这个结论,与前9秒位置无关。 Markov Chain英文定义为“Stochastic process whose effect of the past on future is summarized only by the current state."
  2. 鞅过程(Martingale):假设我们知道第10秒的位置为1,预测第12秒的位置,那么最佳预测是什么呢?答案是,在第10秒的位置不变,即维持在1不变。这是一个简单的例子,有四种可能性,(+1,+1),(+1,-1),(-1,+1,)(-1,-1)。他们的概率均为0.25,因此期望为0. 那如果预测100秒的位置呢?答案还是在10秒的位置不变,即维持在1不变。假设Fk为已知信息,则l时刻的期望值为
  3. 二次变差(Quadratic variation): 相邻时间间隔内差值的平方和。 假设现在从0时刻开始:
  4. 方差(variance):
    .假设现在从0时刻开始:

注意二次变差(Quadratic variation)和方差(variance)的区别,前者基于已实现的路径,后者描述未来的不确定性。虽然结果相同

我们来模拟几条随机游走曲线

import 

用二项分布产生随机产生0,1个数,从0时刻到100时刻,左侧是模拟的四条随机游走曲线,右侧是模拟100条随机游走曲线在终点的位置。(黑色曲线为

,由图可知,由于不服从大数定律,因此时刻100的概率分布
不服从正态分布

7371adc63ce8210325a6298521e5ff80.png

标准布朗运动

如果每秒投掷n次(足够大),每次向前行走

步,那么简单随机游走就变成了标准布朗运动

性质:

  1. 马尔可夫(Markov Chain):标准布朗运动与随机游走均为马尔可夫过程。
  2. 鞅过程(Martingale):标准布朗运动与随机游走均为鞅过程
  3. 二次变差(Quadratic variation): 相邻时间间隔内差值的平方和。 假设现在从0时刻开始,且t和t-1间隔无穷小,则:
    。可以得到一个
    重要结论
  4. 方差(variance):
    .服从
    正态分布。(随机游走不服从正态分布,因为不服从大数定律)

我们来模拟几条随机游走曲线:

def Brown_movement(length):
    line =[]
    line.append(float(0))
    for i in range (1,length):
        each_step = float((2*np.random.binomial(1,0.5,1)-1)/math.sqrt(length))
        add=float(line[i-1]+each_step)
        line.append(add)
    return line

y1=np.sqrt(np.array(range(1001))/1000)
y2=2*np.sqrt(np.array(range(1001))/1000)
for i in range(0,4):
    walk=Brown_movement(1000)
    plt.plot(walk)
plt.plot(y1,'k')
plt.plot(-y1,'k')
plt.plot(y2,'k')
plt.plot(-y2,'k')
plt.grid(True)
plt.xticks(range(0,1001,1000),{"0","1"})
plt.show()

nnn=10000
sum = []
for i in range(0,nnn):
    walk=Brown_movement(1000)
    sum.append(walk[-1])
b=np.array(range(-90,91))/30
plt.hist(sum, b)
plt.show()

用二项分布产生随机产生0,1个数,从0时刻到1时刻,每个时刻震动1000次,左侧是模拟的四条标准布朗运动曲线,右侧是模拟10000条随机游走曲线在终点的位置。(黑色曲线为

,由图可知,由于服从大数定律,因此时刻1的概率分布
服从正态分布

89dece9dff1e81538ddbf6f47f55a247.png

下面是分别模拟100,1000,10000,100000条标准布朗运动曲线,可以看出服从正态分布。(大数定律)

64e69afbcc00d5b66498562000686f3b.png

几何布朗运动

通常认为股票的收益率服从几何布朗运动。

,其中
是收益率,
是趋势(drift),
是风险、不确定性(Volatility)。由此可以得出
  1. 不是鞅过程(Martingale):
    因为存在趋势项
  2. 方差(variance):
    .

65b5e2b2b4e3e661794efcfa2217edfb.png

Hurst指数

参考:Gingili的做法,计算Hurst指数。具体计算方法见链接

  • Hurst指数>0.5,保持趋势的可能性强。
  • Hurst 指数< 0.5 ,反转的的可能性强。
  • Hurst指数=0.5 近似于随机游走
大盘趋势预测:R&#x2F;S方法计算Hurst指数​www.ricequant.com
884f59fe879a97bea22a934330b47898.png

计算布朗运动的Hurst指数。

假设标准布朗运动每秒振动1000次(n取向无穷大),计算1000秒布朗运动。计算Hurst指数。

图左表示收益率,即每1秒布朗运动的值,Hurst指数为0.57

图右表示累计收益率,即0秒-1000秒的累计收益(初始价格为1元的股票的股价),Hurst指数为1.00

a427f1e395afcf63cdb7a2098841e16e.png
def Hurst(data):
    pannel_num = 8
    ARS =[]
    lag =[]
    for i in range(pannel_num):
        size = np.size(data) // (2 ** i)
        lag.append(size)
        panel = {}
        for sub_pannel_num in range((2 ** i)):
            panel["sub_pannel:"+str(sub_pannel_num)] = data[sub_pannel_num*size:(sub_pannel_num+1)*size]
        panel = pd.DataFrame(panel)
        mean = panel.mean()
        Dev = (panel - mean).cumsum()
        sigma = panel.std()
        RS = (Dev.max() - Dev.min())/sigma
        ARS.append(RS.mean())

    lag = np.log10(lag)
    ARS = np.log10(ARS)
    hurst_exponent = np.polyfit(lag, ARS, 1)
    hurst = hurst_exponent[0]
    return hurst

ret=[]
price=[]
ret.append(float(0))
price.append(float(0))
for i in range(1,1000):
    walk=Brown_movement(1000)
    ret.append(float(walk[-1]))
    price.append(float(walk[-1])+price[i-1])
print(Hurst(ret))
print(Hurst(price))
plt.plot(ret,'k')
plt.show()
plt.plot(price,'k')
plt.show()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值