均值回归

均值回归是及其简单的,简单到让人惊讶。均值回归也是及其根本的,根本到整个统计方法的大厦都离不开这个简单到最基础的先验原理。

本函数,主要用于经济行为的分析,对经济行为的周期性,具有较好的描述,可以为趋势的预判提供方向性的权重拓展空间

import random
import numpy as np
import matplotlib.pyplot as plt
import datetime
from os import getcwd
from class_filetools_module import mkdir, NowTime

dirpath = getcwd() + '/plot_file/mean_reversion/'

mkdir(dirpath).__repr__()


case = [random.randint(1, 50) for i in range(100)]
P_src = np.array([i % 7 == 0 and np.nan or case[i] for i in range(len(case))])  # 价格列表 -Y轴


def get_nday_list(n):
    '''
    日
    期列表创建函数
    :param n:
    :return:
    '''
    before_n_days = []
    for i in range(1, n + 1)[::-1]:
        before_n_days.append(str(datetime.date.today() - datetime.timedelta(days=i)))
    return before_n_days


DATE = get_nday_list(len(P_src) + 1)[:-1]  # 日期列表


# :TODO 这是一个均值回归的函数
def mean_reversion(Date, Psrc):
    P_index = np.isnan(Psrc)
    P = np.array([Psrc[i] if P_index[i] != True else 0 for i in range(len(P_index))])
    MA = np.mean(P)  # y轴截距 -> 周期均价
    A = (MA - P) / MA  # 当前价格预期斜率 ,+代表涨,负代表跌

    print('A', A[-1])
    P_now = P[-1]  # 当前价格
    grad = np.gradient(P)

    plt.scatter(Date, Psrc, color='b')  # 价格点
    meanline_Y = [MA for i in range(len(P))]  # 均值位置
    plt.plot(list(range(len(Date))), meanline_Y, color='r')  # 均值回归线
    plt.scatter(len(Date), P_now, color='purple')  # 当前价格点
    plt.plot(list(range(len(A))), A + meanline_Y, color='g')  # 均值斜率线
    plt.plot(list(range(len(P))), grad + meanline_Y, color='y')  # 价格的梯度
    plt.savefig(dirpath + 'mean_reversion' + NowTime() + '.png')
    plt.show()

    print('周期均价:', MA)
    print('共交易次数:', len(P))  # x
    print('当前价格为:', P_now)  # y
    print('当前价格预期增长斜率:', A[-1])  # k
    print('斜率变化向量:\n', A)
    print('价格向量:\n', P)
    print('价格梯度:\n', grad)

    A[A == 1] = np.nan
    return A[-1]


'''
根据直线公式 y = ax+b
Y是直线的纵坐标,A斜率,X是X轴的坐标,B是截距
假设日期是连续的:预期价格 
已知一点(x0,y0),斜率为k,
则方程可以设为:y-y0=k(x-x0)
这种方程也称为点斜式方程。
'''

if __name__ == '__main__':
    print(mean_reversion(DATE, P_src))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值