让我们分析外部人和领导者的股票动态
最近,我读到一篇文章,认为Mosbirzhi指数的外部股票(那些每月价格下跌尽可能多的股票)的增长前景要比平均指数大。在这项研究中,我将考虑
- 外来者和成长型领导者的库存动态(30天为期)
- 买入缩水并在显着增长后走低是否有意义
重要!我绝对会考虑所有股票的每一天,因此,许多亏损将是股息缺口(其想法是考虑所有偏差)。我将考虑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)
- 显示股票名称
- 我们从文件中读取
- 按日期排序
- 添加一列每日库存增长30%的列。
- 在接下来的30天内添加一个百分比变化列。
- 添加带有票证的列。这将使您可以将列数据报与日期结合起来。
查看个别股票的统计数据
现在让我们看一下单个股票。分别查看股票很重要,因为在不同情况下波动率可能表现不同(例如,迅速赎回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)引入新的分工政策,那么就不值得等待不久的将来。