рдирдорд╕реНрдХрд╛рд░, рдЖрдЬ рдореИрдВ 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 рдХреЗ рдХреИрдкрд┐рдЯрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдбреНрд░реЙрдк рд╣реЛрдиреЗ рдкрд░ рдФрд╕рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреЙрдХ рдЪреБрдирдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред