惯性效应与反转效应——tushare实验

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tushare as ts
import statsmodels.api as sm

pro = ts.pro_api('')
s = {}
stock_name = ['600521.SH', '600522.SH','600523.SH','000001.SZ',\
              '600525.SH', '600526.SH', '600527.SH', '600528.SH']

#导入数据
for i in range(8):
    s[i] = pro.daily(ts_code = stock_name[i], start_date = '20000101', end_date = '20190101')
bm = pro.index_daily(ts_code='399300.SZ', start_date='20000101', end_date='20190101')


#处理日期格式
for i in range(8):
    s[i]['trade_date'] = pd.to_datetime(s[i]['trade_date'], format='%Y%m%d')
bm['trade_date'] = pd.to_datetime(bm['trade_date'])

#时间对齐
us = {}
for i in range(8):
    us[i] = pd.merge(s[i]['close'], bm['close'], how='inner', left_on=s[i]['trade_date'], right_on=bm['trade_date'])

#计算收益率
r = {}
bm = {}
for i in range(8):
    r[i] = np.log(us[i]['close_x'].shift(1)) - np.log(us[i]['close_x'])
    bm[i] = np.log(us[i]['close_y'].shift(1)) - np.log(us[i]['close_y'])

#画图
for i in range(8):
    plt.figure(i)
    plt.scatter(r[i],bm[i])

#单资产时间序列检验
beta = []
p = []

for i in range(8):
    model = sm.OLS(bm[i][1:],r[i][1:]).fit()
    beta.append(model.params.values) #params是series格式
    p.append(model.pvalues.values)


#惯性效应,翻转效应--------------------------------------------------

df = pd.merge(s[0][['trade_date', 'close']], s[1][['trade_date', 'close']], left_on=s[0]['trade_date'], right_on=s[1]['trade_date'])
del df['trade_date_x']
del df['trade_date_y']
df = df.rename(columns = {'key_0':'trade_date', 'close_x': 'close'+ str(1), 'close_y': 'close'+str(2)})##列名重新命名

for i in np.arange(3,8):
    df = pd.merge(df, s[i][['trade_date', 'close']], left_on=df['trade_date'], right_on=s[i]['trade_date'])
    del df['trade_date_x']
    del df['trade_date_y']
    df = df.rename(columns={'key_0': 'trade_date', 'close': 'close' + str(i)})  ##列名重新命名


df['year'] = df['trade_date'].apply(lambda x: x.year)
df['month'] = df['trade_date'].apply(lambda x: x.month)

#由每日数据计算月度收益

ind = 0
stock_ret = []
stock_name= ['close' + str(i) for i in range(1,8)]

for i in stock_name:
    df[i] = df[i].apply(lambda x: np.log(x))

close = np.array(df.iloc[:,1:8])
time = df['month']

while ind < int(len(time) - 1):
    initial = close[-1]
    if time[ind+1] == time[ind]:
        ind = ind+1
    else:
        last = close[ind]
        stock_ret.append( last - initial)
        initial = close[ind+1]
        ind += 1

stock_ret = pd.DataFrame(stock_ret)
column_name = ['ret'+str(i) for i in range(1,8)]
stock_ret.columns = column_name


#计算前1,2,3,6,12月的赢家组合
win_time = [1, 2, 3, 6, 12]
after_time = [1, 3, 6, 12]

ret_hist= np.array(stock_ret)

win_ret = []
lose_ret = []
name = []

for i in win_time:
    for j in after_time:

        win_index = []
        lose_index = []

        temp_max = []
        temp_min = []

        name.append(str(i)+'_'+str(j))

        temp = list((1+ret_hist[:i,:]).prod(axis = 0)-1)
        temp_max = list(np.sort(temp)[-1::-1][:3])
        temp_min = list(np.sort(temp)[-1::-1][3:])
        for k in temp_max:
            win_index.append(temp.index(k))#只有list才有index, index一次只能加入一个数字。// 只有np.array()才能一次引用很多
        for k in temp_min:
            lose_index.append(temp.index(k))

        temp = np.array(((1 + ret_hist[i:i+j, :]).prod(axis=0) - 1)) ##list引用不能用[],只能是一个,但是np.array()引用可以用[]
        win_ret.append(np.sum(1/3 * np.ones(3) * temp[win_index]))
        lose_ret.append(np.sum(1/4 * np.ones(4) * temp[lose_index]))

result = np.vstack([name, win_ret, lose_ret]).T
table = pd.DataFrame(result, columns = ['date', 'win_ret', 'lose_ret'])

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
惯性导航系统常常使用卡尔曼滤波算法来提高导航精度。惯性导航系统主要依赖于惯性传感器来测量加速度和角速度,但这些传感器可能会受到噪声和漂移等因素的影响,导致导航误差。为了解决这个问题,常常会使用其他导航设备(如GPS)来提供更准确的位置信息,然后利用卡尔曼滤波算法将惯性导航系统的数据与其他导航设备的数据进行混合处理,估计和校正未知的惯性导航系统误差,从而提高导航精度。 卡尔曼滤波算法是一种递归的、最优的、线性的滤波算法。它广泛应用于各种领域,包括机器人导航、控制、传感器数据融合以及军事方面的雷达系统和导弹追踪等。该算法可以根据系统模型和观测数据的误差特性,通过迭代更新预测值和测量值的权重,从而实现对系统状态的估计和滤波。 另外,还有一种捷联式惯性导航系统,它将惯性测量元件(如陀螺仪和加速度计)直接安装在需要姿态、速度、航向等导航信息的主体上,并通过计算机对测量信号进行变换,从而获得导航参数。这种系统可以利用卡尔曼滤波算法对惯性测量元件的输出进行滤波和校正,提高导航精度。 综上所述,卡尔曼滤波算法在惯性导航系统中的应用可以有效地提高导航精度,通过将惯性导航系统的数据与其他导航设备的数据进行混合处理,估计和校正系统误差,从而更准确地确定位置和姿态信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [无人机飞控三大算法:捷联式惯性导航系统、卡尔曼滤波算法、飞行控制PID算法](https://blog.csdn.net/weixin_43575752/article/details/108899889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值