股市下跌是否有希望?让我们用python分析

让我们分析外部人和领导者的股票动态


最近,我读到一篇文章,认为Mosbirzhi指数的外部股票(那些每月价格下跌尽可能多的股票)的增长前景要比平均指数大。

在这项研究中,我将考虑


  1. 外来者和成长型领导者的库存动态(30天为期)
  2. 买入缩水并在显着增长后走低是否有意义

重要!我绝对会考虑所有股票的每一天,因此,许多亏损将是股息缺口(其想法是考虑所有偏差)。

我将考虑Mosbirzha指数的份额(仅占该指数份额> 0.5%的份额),即:

  • 俄罗斯天然气工业股份公司
  • 卢克
  • 储蓄银行
  • MMC诺里尔斯克镍
  • 新星
  • 磁铁
  • 俄罗斯石油公司
  • 塔特尼夫特
  • MTS
  • VTB
  • Surgutneftegas
  • 阿尔罗萨
  • 猪gu
  • 莫斯科交易所
  • NLMK
  • 谢韦尔斯塔尔
  • Yandex
  • 多金属国际
  • 俄罗斯联邦储蓄银行
  • INTER RAO
  • 俄罗斯
  • Transneft p
  • 罗斯·海德罗
  • PhosAgro
  • MMK
  • 俄罗斯航空公司
  • 扩音器
  • 塔特尼夫特
  • 俄罗斯电信

期间为2018-2019。

获取股票报价


首先,您需要获取最近两年的股票报价。我从Finam网站下载了它们,然后直接导入了csv。

让我们开始在文件中收集报价


进口熊猫:

import pandas as pd

让我们删除窗口显示的限制(我需要在PyCharm中执行此操作):


pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('max_colwidth', 80)
pd.set_option('max_rows', 60000)

您需要以类似的方式导入每个库存:


print('GAZP')
GAZP = pd.read_csv("GAZP_180101_191231.csv",sep=';', header=0, index_col='<DATE>', parse_dates=True)
GAZP = GAZP.sort_values(by='<DATE>')
#      
GAZP['30_days_growth']=((GAZP['<CLOSE>']/GAZP['<CLOSE>'].shift(30))-1)*100
GAZP['after_30_days_growth']=((GAZP['<CLOSE>'].shift(-30)/GAZP['<CLOSE>'])-1)*100
GAZP['ticket']='GAZP'
print(GAZP)

  1. 显示股票名称
  2. 我们从文件中读取
  3. 按日期排序
  4. 添加一列每日库存增长30%的列。
  5. 在接下来的30天内添加一个百分比变化列。
  6. 添加带有票证的列。这将使您可以将列数据报与日期结合起来。

查看个别股票的统计数据


现在让我们看一下单个股票。分别查看股票很重要,因为在不同情况下波动率可能表现不同(例如,迅速赎回Detsky Mir和Norilsk Nickel的亏损,并且可以完全忽略石油行业在困难时期的情况)。

在截图的30_days_growth列中查看屏幕快照(过去百分比变化) 30天)和after_30_days_growth(30天后股票的价格)

以俄罗斯天然气工业股份公司为例,让我们看看在30天的跌幅超过10%之后股票发生了什么变化。

按30天更改获取俄罗斯天然气工业股份公司


print(GAZP.sort_values(by='30_days_growth'))



在这种情况下,我们看到库存将在一个月内增长(在具有30天增长的列中,大多数为正值)。

但是从另一端看,一切都不是那么明显,因为新的股利政策已经“破坏”了一切。



我们将回到2019年得出结论。为此,我将仅输出前255行:


print(GAZP[:254].sort_values(by='30_days_growth'))



事实证明,如果增幅超过10%,就可以出售了,

让我们看一下卢克石油公司(Lukoil),

这里的一切并不是那么明显:我们将





研究

Sberbank 的金融部门,

通常可以赎回大量亏损。但是,这里最大的波动





是,看看诺里尔斯克镍矿是如何购买缩水



的,过去两年中几乎所有诺里尔斯克镍的缩水都是一笔不错的投资:)

计算30天的平均回报


让我们看看如果我们输入低于-5%的亏损,我们每月可获得的平均收益。

用以下行创建一个变量:


GMKN5 = GMKN[GMKN['30_days_growth']<-5]
print(GMKN5)



我们得出平均值:


print( GMKN5['after_30_days_growth'].mean())

我们将获得30天的退货6.935553432942371%

我们还将了解14天后成本如何增加


添加一列:


GMKN['after_14_days_growth']=((GMKN['<CLOSE>'].shift(-14)/GMKN['<CLOSE>'])-1)*100

让我们看看14天的平均收益:


print(GMKN5['after_14_days_growth'].mean())

这是4.125%

计算跌幅超过15%的所有股票的收益


现在,我们计算跌幅超过15%的所有股票的30天平均收益率,

我们需要将所有数据组合到一个数据框中。

为此,请创建一个包含所有份额的工作表:


all_tickets = [GAZP,LKOH,SBER,SBERP,NVTK,MOEX,MGNT,MFON,MTSS,MAGN,GMKN,AFLT,POLY,ROSN,HYDR,RTKM,RUAL,YNDX,ALRS,VTBR,TATN,TATNP,SNGS,SNGSP,PLZL,NLMK,CHMF,IRAO,TRNFP,PHOR]

结合:


all_stocks = pd.concat(all_tickets)

创建一个数据框,其中只有缩图大于15%的行:


tickets15 = all_stocks[all_stocks['30_days_growth']<-15]
print(tickets15)

计算平均产量:


print(tickets15['after_30_days_growth'].mean())



考虑到这种多元化水平, 我们得到了7.78570670526497%的回报

同样,计算10%跌幅的收益率



tickets10 = all_stocks[all_stocks['30_days_growth']<-10]
print(tickets10)
print(tickets10['after_30_days_growth'].mean())

我们得到3.1%

降低30天内增长15%以上的股票值得吗?



tickets15plus = all_stocks[all_stocks['30_days_growth']>15]
print(tickets15plus)
print(tickets15plus['after_30_days_growth'].mean())

我们增长了2%。事实证明,这种方式我们将无法获利,但是很明显,这种情况下的潜力较小。但这并不奇怪。

这些数字固然有趣,但是值得一提的是,这是一个基准,因为如果每天购买所有提款,且价格在要求的范围内,我们将获得这种盈利能力。

需要删除具有截止日期的行,以便不会重复进行相同的提取,但这是另一回事了。

还应考虑所有偏差的原因。显然,如果俄罗斯天然气工业股份公司(Gazprom)引入新的分工政策,那么就不值得等待不久的将来。

All Articles