مقارنة ديناميكيات أسعار سهمين في بيثون باستخدام مثال الأسهم المفضلة والعادية في سبيربنك

مرحبًا ، أود اليوم أن أتحدث عن تجربتي في تحليل أسهم Sberbank. في بعض الأحيان تظهر ديناميكيات مختلفة قليلاً - أصبح من المثير للاهتمام بالنسبة لي تحليل حركة اقتباساتهم.

في هذا المثال ، سنقوم بتنزيل الاقتباسات من موقع Finam. رابط لتنزيل Sberbank العادي .

لعمليات العمود سوف أستخدم الباندا ، لتصور matplotlib.

نستورد:

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()

يجب أن نوضح أننا بحاجة إلى إضافة شفافية (alpha = 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