上一篇文章探讨了如何获取有关金融工具的信息。接下来,将发表几篇文章,内容涉及如何初步利用所获得的数据,如何分析和制定策略。资料基于国外来源的出版物和在线平台之一上的课程。本文将讨论如何计算获利能力,波动率并建立主要指标之一。import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt
sber = yf.download('SBER.ME','2016-01-01')
盈利能力
此值表示一个交易日内股票价值的百分比变化。它不考虑股息和佣金。使用Pandas软件包中的pct_change()函数很容易计算。通常,他们使用获利能力日志,因为它使您可以更好地了解和调查随时间的变化。
daily_close = sber[['Adj Close']]
daily_pct_change = daily_close.pct_change()
daily_pct_change.fillna(0, inplace=True)
print(daily_pct_change.head())
daily_log_returns = np.log(daily_close.pct_change()+1)
print(daily_log_returns.head())
为了从获得的数据中找出每周和/或每月的获利能力,请使用resample()函数。
monthly = sber.resample('BM').apply(lambda x: x[-1])
print(monthly.pct_change().tail())
quarter = sber.resample("4M").mean()
print(quarter.pct_change().tail())
pct_change()函数使用方便,但是反过来隐藏了如何获取值。可以使用Pandas软件包中的shift()来完成有助于理解该机制的类似计算。每日收盘价除以过去的价格(移位一个),然后从接收的值中减去一个单位。但是有一个小负号-结果的第一个值是NA。获利能力的计算基于以下公式:
其中,p是价格,t是时刻,r是获利能力。接下来,构建获利能力分布图并计算主要统计数据:
daily_pct_change = daily_close / daily_close.shift(1) - 1
print(daily_pct_change.head())

daily_pct_change.hist(bins=50)
plt.show()
print(daily_pct_change.describe())
该分布看起来非常对称,并且正态分布在0.00左右。对于其他统计值,使用description()函数。结果,可见平均值略大于零,并且标准偏差几乎为0.02。累积收益
累计每日收益可用于确定指定时间段内的投资价值。可以按以下代码所示进行计算。
cum_daily_return = (1 + daily_pct_change).cumprod()
print(cum_daily_return.tail())

cum_daily_return.plot(figsize=(12,8))
plt.show()
您可以重新计算每月的收益:
cum_monthly_return = cum_daily_return.resample("M").mean()
print(cum_monthly_return.tail())
在分析股票时,了解如何计算收益非常有价值。但是,与其他股票相比,它甚至更有价值。拿一些股票(他们的选择完全是随机的)并建立他们的图表。ticker = ['AFLT.ME','DSKY.ME','IRAO.ME','PIKK.ME', 'PLZL.ME','SBER.ME','ENRU.ME']
stock = yf.download(ticker,'2018-01-01')
daily_pct_change = stock['Adj Close'].pct_change()
daily_pct_change.hist(bins=50, sharex=True, figsize=(20,8))
plt.show()
另一个有用的图形是散布矩阵。可以使用scatter_matrix()函数轻松构建它,该函数是pandas库的一部分。Daily_pct_change用作参数,并且设置了“内核密度估计”参数。此外,您可以使用alpha参数设置透明度,并使用figsize参数设置图形的大小。from pandas.plotting import scatter_matrix
scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(20,20))
plt.show()
目前为止就这样了。下一篇文章将介绍计算波动率,平均值以及使用最小二乘法的方法。