Sberbank рдХреЗ рдкрд╕рдВрджреАрджрд╛ рдФрд░ рд╕рд╛рдзрд╛рд░рдг рд╢реЗрдпрд░реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдЬрдЧрд░ рдореЗрдВ рджреЛ рд╢реЗрдпрд░реЛрдВ рдХреЗ рдЙрджреНрдзрд░рдг рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ

рдирдорд╕реНрдХрд╛рд░, рдЖрдЬ рдореИрдВ Sberbank рд╢реЗрдпрд░реЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдХрднреА-рдХрднреА рд╡реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдЧрддрд┐рд╢реАрд▓рддрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ - рдореЗрд░реЗ рд▓рд┐рдП рдЙрдирдХреЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдлрд┐рдирдо рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдЙрджреНрдзрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВрдЧреЗред рдирд┐рдпрдорд┐рдд Sberbank рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ ред

рд╕реНрддрдВрдн рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдореИрдВ рдкрдЯрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдореИрдЯрд▓рдкреЛрдЯрд▓рд┐рдм рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдПред

рд╣рдо рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:

import pandas as pd
import matplotlib.pyplot as plt

рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рд┐рдХреБрдбрд╝рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛:

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', 6000)

рд╕реНрдЯреЙрдХ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ


df = pd.read_csv("SBER_190101_200105.csv",sep=';', header=0, index_col='<DATE>', parse_dates=True)

(рд╡рд┐рднрд╛рдЬрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рдХреЙрд▓рдо рдирд╛рдо рд╕реНрдерд┐рдд рд╣реИрдВ, рдХреМрди рд╕рд╛ рдХреЙрд▓рдо рдЗрдВрдбреЗрдХреНрд╕ рд╣реЛрдЧрд╛, рдбреЗрдЯ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ)ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реЙрд░реНрдЯ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ:

df = df.sort_values(by='<DATE>')

рд╣рдо рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

print(df)



рдореВрд▓реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрд▓рдо рдЬреЛрдбрд╝реЗрдВ

df['returns']=(df['<CLOSE>']/df['<CLOSE>'].shift(1))-1

рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐рд╢рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ:

df['returns_pers']=((df['<CLOSE>']/df['<CLOSE>'].shift(1))-1)*100



рдПрдХ рджреВрд╕рд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛрдбрд╝реЗрдВ


рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд░реЛред

df2 = pd.read_csv("SBERP_190101_200105.csv",sep=';', header=0, index_col='<DATE>', parse_dates=True)

df = df.sort_values(by='<DATE>')

df2['returns_pers']=((df2['<CLOSE>']/df2['<CLOSE>'].shift(1))-1)*100
df2['returns']=(df2['<CLOSE>']/df2['<CLOSE>'].shift(1))-1
print(df2)


рд╣рдо рдЕрдкрдиреЗ рд╕реНрдЯреЙрдХ рдХреЛрдЯреНрд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ


df['<CLOSE>'].plot(label='sber')
df2['<CLOSE>'].plot(label='sberp')
plt.legend()
plt.show()



рдЕрдм рдЙрдирдХреЗ рдФрд╕рдд (MA 50) рд╡рд╛рд▓реЗ рдЙрджреНрдзрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:

df['<CLOSE>'].plot(label='sber')
df2['<CLOSE>'].plot(label='sberp')
df['ma50'] = df['<OPEN>'].rolling(50).mean().plot(label='ma50')
df2['ma50'] = df2['<OPEN>'].rolling(50).mean().plot(label='ma50')
plt.legend()
plt.show()



рдЕрдиреНрдп рдФрд╕рдд рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

df['<CLOSE>'].plot(label='sber')
df2['<CLOSE>'].plot(label='sberp')
df['ma100'] = df['<OPEN>'].rolling(100).mean().plot(label='ma100')
df2['ma100'] = df2['<OPEN>'].rolling(100).mean().plot(label='ma100')
plt.legend()
plt.show()



рдЕрдм рд╣рдо рд╢реЗрдпрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдирдУрд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ:
рд╡рд╛рдИ рдЕрдХреНрд╖ рдХрд╛ рдирд╛рдо
рдФрд░ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЖрдХрд╛рд░ рднреА рдЬреЛрдбрд╝реЗрдВ

df['total_trade'] = df['<OPEN>']*df['<VOL>']
df2['total_trade'] = df2['<OPEN>']*df2['<VOL>']
df['total_trade'].plot(label='sber',figsize=(16,8))
df2['total_trade'].plot(label='sberp',figsize=(16,8))
plt.legend()
plt.ylabel('Total Traded')
plt.show()



рд╕рд╣рд╕рдВрдмрдВрдз рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рдЕрдм рдЪрд▓реЛ рд╕рд╣рд╕рдВрдмрдВрдз рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЪрд╛рд░реНрдЯ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж

рдХрд░реЗрдЧрд╛ ред рджреЛрдиреЛрдВ рд╕реНрдЯреЙрдХ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд╛рдо рджреЗрдВред

all_sber = pd.concat([df['<OPEN>'],df2['<OPEN>']],axis=1)
all_sber.columns = ['sber_open','sberp_open']
print(all_sber)



рдЕрдм рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрд╕реВрдЪреА рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ

from pandas.plotting import scatter_matrix

рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВ:

scatter_matrix(all_sber,figsize=(8,8),alpha=0.2,hist_kwds={'bins':100});
plt.show()

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЕрдВрдХреЛрдВ рдХреЗ рдУрд╡рд░рд▓реИрдк рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ (рдЕрд▓реНрдлрд╛ = 0.2) рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдпрджрд┐ рд╡рд┐рдХрд░реНрдг рдХреЗ рд╕рд╛рде рдЕрдВрдХ "рдЪрд▓рддреЗ" рд╣реИрдВ, рддреЛ рдПрдХ рд╕рд╣рд╕рдВрдмрдВрдз рдордирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рддрд┐рднреВрддрд┐ рдЕрд╕реНрдерд┐рд░рддрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди


df['returns_pers'].plot(label='sber')
df2['returns_pers'].plot(label='sberp')
plt.legend()
plt.show()



рдПрдХ рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдиреНрдп рдЪрд╛рд░реНрдЯ рдкрд░ рдЕрд╕реНрдерд┐рд░рддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ - рдПрдХ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо

df['returns_pers'].hist(bins=100,label='sber',alpha=0.5)
df2['returns_pers'].hist(bins=100,label='sberp',alpha=0.5)
plt.legend()
plt.show()



рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рддреЗрдЬрд╝реА рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╢реЗрдбреНрдпреВрд▓ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдо рдЪрд╛рд░реНрдЯ рдХреЛ рдХрдо рд╡рд┐рд╕реНрддреГрдд рдФрд░ рдХрдо рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛рдПрдВрдЧреЗ):

df['returns_pers'].hist(bins=10,label='sber',alpha=0.9)
df2['returns_pers'].hist(bins=10,label='sberp',alpha=0.9)
plt.legend()
plt.show()



рд╕рдВрдЪрд┐рдд рд░рд╛рдЬрд╕реНрд╡ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рдЕрдм рд╣рдо рд╢реЗрдпрд░реЛрдВ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдкреНрд░рддрд┐рд╢рдд рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЪрд┐рдд рдЖрдп рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рджрд░реНрдЬ рдХрд░реЗрдВред

df['Cumulative Return'] = (1+ df['returns']).cumprod()
df2['Cumulative Return'] = (1+ df2['returns']).cumprod()
print(df)
print(df2)

df['Cumulative Return'].plot(label='sber')
df2['Cumulative Return'].plot(label='sberp')
plt.legend()
plt.show()




рдЪрд╛рд░реНрдЯ рдкрд░, рд╣рдо рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдПрдХ рд╕реНрдЯреЙрдХ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдХрдо рдпрд╛ рдЙрд▓рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ (ceteris paribus, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ) рдпрд╣ Sberbank рдХреЗ рдХреИрдкрд┐рдЯрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдбреНрд░реЙрдк рд╣реЛрдиреЗ рдкрд░ рдФрд╕рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреЙрдХ рдЪреБрдирдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред

All Articles