التحليل المالي العام في بيثون (الجزء 1)

درس المقال الأخير كيف يمكنك الحصول على معلومات حول الأدوات المالية. بعد ذلك ، سيتم نشر العديد من المقالات حول ما يمكن فعله في البداية بالبيانات التي تم الحصول عليها ، وكيفية تحليل ووضع استراتيجية. تعتمد المواد على منشورات في مصادر ودورات أجنبية على إحدى المنصات على الإنترنت.

ستناقش هذه المقالة كيفية حساب الربحية والتقلبات وبناء أحد المؤشرات الرئيسية.

import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt

sber = yf.download('SBER.ME','2016-01-01')

الربحية


تمثل هذه القيمة النسبة المئوية للتغير في قيمة السهم ليوم تداول واحد. لا تأخذ في الاعتبار الأرباح والعمولات. من السهل الحساب باستخدام الدالة pct_change () من حزمة Pandas.

كقاعدة ، يتم استخدام ربحية السجل ، لأنه يسمح لك بفهم التغييرات والتحقيق فيها بمرور الوقت بشكل أفضل.

#   `
daily_close = sber[['Adj Close']]

#  
daily_pct_change = daily_close.pct_change()

#  NA   0
daily_pct_change.fillna(0, inplace=True)

print(daily_pct_change.head())

#   
daily_log_returns = np.log(daily_close.pct_change()+1)

print(daily_log_returns.head())

صورة

لمعرفة الربحية الأسبوعية و / أو الشهرية من البيانات التي تم الحصول عليها ، استخدم الدالة resample ().

#   `sber`      
monthly = sber.resample('BM').apply(lambda x: x[-1])

#  
print(monthly.pct_change().tail())

#  `sber`        
quarter = sber.resample("4M").mean()

#  
print(quarter.pct_change().tail())

صورة

تعتبر دالة pct_change () ملائمة للاستخدام ، ولكنها تخفي بدورها كيفية الحصول على القيمة. يمكن إجراء عملية حسابية مماثلة ، والتي ستساعد على فهم الآلية ، باستخدام shift () من الحزمة من حزمة Pandas. سعر الإغلاق اليومي مقسومًا على سعر الماضي (مع إزاحة واحدة) ويتم خصم الوحدة من القيمة المستلمة. ولكن هناك ناقص ثانوي واحد - القيمة الأولى نتيجة لذلك هي NA.

يعتمد حساب الربحية على الصيغة:

صورة

حيث ، p هو السعر ، و t هو الوقت الفوري و r هي الربحية.

بعد ذلك ، يتم إنشاء مخطط توزيع الربحية ويتم حساب الإحصائيات الرئيسية:

#  
daily_pct_change = daily_close / daily_close.shift(1) - 1

print(daily_pct_change.head())

صورة

#  `daily_pct_c`
daily_pct_change.hist(bins=50)

plt.show()

#  
print(daily_pct_change.describe())

صورة

يبدو التوزيع متناظرًا جدًا ويتم توزيعه عادةً حول قيمة 0.00. للحصول على قيم إحصائية أخرى ، يتم استخدام وظيفة الوصف (). ونتيجة لذلك ، يُلاحظ أن متوسط ​​القيمة أكبر قليلاً من الصفر ، والانحراف المعياري هو تقريبًا 0.02.

العائد التراكمي


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

#   
cum_daily_return = (1 + daily_pct_change).cumprod()

print(cum_daily_return.tail())

صورة

#    
cum_daily_return.plot(figsize=(12,8))

plt.show()

صورة

يمكنك إعادة حساب العائد في الفترة الشهرية:

#   
cum_monthly_return = cum_daily_return.resample("M").mean()

print(cum_monthly_return.tail())

صورة

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

خذ بعض الأسهم (اختيارهم عشوائي تمامًا) وقم ببناء مخططهم.

ticker = ['AFLT.ME','DSKY.ME','IRAO.ME','PIKK.ME', 'PLZL.ME','SBER.ME','ENRU.ME']

stock = yf.download(ticker,'2018-01-01')

#    `daily_close_px`
daily_pct_change = stock['Adj Close'].pct_change()

# 
daily_pct_change.hist(bins=50, sharex=True, figsize=(20,8))

plt.show()

صورة

رسم بياني مفيد آخر هو مصفوفة مبعثر. يمكن بناؤه بسهولة باستخدام دالة scatter_matrix () ، التي تعد جزءًا من مكتبة الباندا. يتم استخدام Daily_pct_change كوسيطات ويتم تعيين معلمة تقدير كثافة Kernel. بالإضافة إلى ذلك ، يمكنك ضبط الشفافية باستخدام معلمة alpha وحجم الرسم البياني باستخدام معلمة figsize.

from pandas.plotting import scatter_matrix

#   `daily_pct_change`  
scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(20,20))

plt.show()

صورة

هذا كل شئ حتى الان. تتناول المقالة التالية حساب التقلبات ، المتوسط ​​واستخدام طريقة المربعات الصغرى.

All Articles