Python mengonversi pengembalian harian ke bulanan

“Bubble market crash”, “Crypto krach”, “Resesi”… Jika Anda seorang investor saham, kemungkinan besar Anda sering memeriksa portofolio Anda minggu-minggu terakhir ini. Pasar saham global turun pada tahun 2022 karena banyak faktor. perang Ukraina, inflasi, kenaikan harga minyak, dan kenaikan suku bunga antara lain

Ini adalah kesempatan sempurna untuk mulai meningkatkan keterampilan kita dengan data stok dengan Python

Penafian. Tujuan posting blog ini hanya untuk menunjukkan cara menghitung pengembalian harian dan volatilitas saham. Tidak ada saran investasi atau promosi untuk saham apa pun

Isi

1. Kasus penggunaan

Pandemi Covid-19 telah memicu perubahan dramatis di dunia. Pasar saham tidak terkecuali untuk itu. Berkat vaksin mRNA, Moderna dan Pfizer telah menjadi nama rumah tangga dan pendapatan mereka meningkat

Berapa pengembalian dan volatilitas harian untuk 2 saham perusahaan ini selama periode itu?

Ini akan memberi kita indikasi tingkat risiko mereka. Semakin tinggi volatilitas, semakin berisiko

2. Pustaka Python yang diperlukan

Pertama, mari impor perpustakaan yang kita butuhkan

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

yfinance adalah pustaka Python sumber terbuka dan gratis yang dibuat oleh Ran Aroussi. Anda dapat menemukan informasi lebih lanjut tentang hal itu di sini. Saya sarankan menggunakannya untuk mulai bermain dengan data stok

3. Ambil data saham dengan yfinance

Sangat mudah

  • Untuk mengambil data stok, saya perlu menggunakan simbol ticker masing-masing untuk Pfizer dan Moderna. PFE, MRNA
  • Kemudian saya menunjukkan periode dengan metode pengunduhan
Example with Pfizer stock
ticker= "pfe"
pfizer = yf.download(ticker, start="2020-01-01", end="2022-06-17")
pfizer.head()
_

Baris pertama data saham Pfizer dengan yfinance

4. Menghitung dan merencanakan pengembalian harian

Pengembalian saham harian menunjukkan keuntungan atau kerugian per hari untuk saham tertentu. Kami mendapatkannya dengan mengurangkan harga pembukaan dari harga penutupan

Mudahnya, Pandas memiliki metode pct_change untuk menghitung persentase perubahan dalam pengembalian harian. Mari kita gunakan dan simpan di kolom baru “daily_returns”

Mari kita mulai dengan Pfizer

pfizer['daily_returns']=(pfizer['Close'].pct_change())*100

Seperti biasa, saya lebih suka memplot hasilnya agar lebih mudah divisualisasikan

pfizer.dropna(inplace=True)fig,ax=plt.subplots(figsize=(12,6))
ax.spines[['top','right','left','bottom']].set_visible(False)
plt.plot(pfizer['daily_returns'], label = 'Daily Returns')
plt.legend(loc='best')
plt.title('Pfizer Stock Daily Returns Over Time')
plt.show()

Karena Covid-19, osilasi saham Pfizer sangat kuat pada tahun 2020 dan menjadi kurang jelas pada tahun 2021 berkat vaksin Covid. Kita bisa melihat pada akhir tahun 2021 pengembalian harian yang positif terkait dengan kemunculan varian Omicron. Plot ini membantu kita memantau besarnya perubahan harian dari waktu ke waktu

Sekarang mari kita lakukan hal yang sama dengan Moderna dan lihat seperti apa plot pengembalian hariannya pada periode yang sama

Osilasi memiliki magnitudo yang lebih tinggi di sisi positif. Dari Januari-22, kami mengamati bahwa pengembalian harian lebih banyak di sisi negatif. Ini sesuai dengan penurunan harga saham

5. Hitung volatilitas saham harian, bulanan, dan tahunan

Volatilitas saham adalah variasi harga selama periode waktu tertentu

Volatilitas harian. untuk mendapatkannya, kami menghitung standar deviasi dari pengembalian harian. Sebagai pengingat, standar deviasi membantu kita melihat seberapa banyak data tersebar di sekitar mean atau rata-rata

Volatilitas bulanan. kami membuat asumsi bahwa ada 21 hari perdagangan dalam sebulan, jadi kami mengalikan volatilitas harian dengan akar kuadrat dari 21

Volatilitas tahunan. kami berasumsi ada 252 hari perdagangan dalam satu tahun kalender dan kami mengalikan volatilitas harian dengan akar kuadrat dari 252

Berikut adalah kode di bawah ini

import math
daily_volatility_pfe = pfizer['daily_returns'].std()
print('Daily volatility:')
print('Pfizer: ', '{:.2f}%'.format(daily_volatility_pfe))
daily_volatility_mrna = moderna['daily_returns'].std()
print('Moderna: ', '{:.2f}% \n'.format(daily_volatility_mrna))
monthly_volatility_pfe = math.sqrt(21) * daily_volatility_pfe
print('Monthly volatility:')
print ('Pfizer: ', '{:.2f}%'.format(monthly_volatility_pfe))
monthly_volatility_mrna = math.sqrt(21) * daily_volatility_mrna
print ('Moderna: ', '{:.2f}%\n '.format(monthly_volatility_mrna))
annual_volatility_pfe = math.sqrt(252) * daily_volatility_pfe
print('Annual volatility:')
print ('Pfizer: ', '{:.2f}%'.format(annual_volatility_pfe ))
annual_volatility_mrna = math.sqrt(252) * daily_volatility_mrna
print ('Moderna: ', '{:.2f}%'.format(annual_volatility_mrna ))
_

Saham Moderna memiliki volatilitas yang sangat tinggi. 90% tahunan dan 26% bulanan. Ini menunjukkan bahwa investor kesulitan mengukur perusahaan karena pendapatannya saat ini didasarkan pada vaksin Covid-19. Mereka menunggu untuk melihat apakah potensinya akan terwujud

Pfizer secara tahunan adalah 31% yang lebih rendah dari Moderna tetapi masih signifikan. Pfizer adalah perusahaan farmasi besar dengan banyak sejarah

6. Kesimpulan

Sangat mudah dan dapat diakses untuk mendapatkan data stok dan melakukan beberapa perhitungan pertama untuk mengevaluasi risikonya. Contoh saham Moderna dan Pfizer menunjukkan betapa kita perlu berhati-hati saat berinvestasi saham. Saya akan memperlakukan metrik lain di posting blog mendatang

Bagaimana Anda mengubah pengembalian harian menjadi pengembalian bulanan dengan Python?

Hal ini dapat dilakukan menggunakan. fill() pada hasil resampling . Perhatikan tanggal entri dan sekarang semuanya adalah tanggal akhir bulan. Nilai tidak berubah, karena sampel ulang hanya memilih tanggal di akhir bulan, atau mengisi dengan nilai sebelum tanggal tersebut jika tidak ada di sumber.

Bagaimana Anda mengonversi laba harian menjadi laba bulanan?

Cukup ganti 365 dengan jumlah periode pengembalian yang sesuai dalam setahun. Jadi, untuk pengembalian mingguan, Anda akan menaikkan bagian pengembalian harian dari persamaan ke pangkat 52. Untuk pengembalian bulanan, Anda akan menggunakan 12 . Dan, untuk pengembalian triwulanan, Anda akan menggunakan kekuatan keempat.

Bagaimana Anda mendapatkan data bulanan dengan Python?

Untuk mendapatkan nomor bulan dari objek datetime dengan Python, yang perlu Anda lakukan hanyalah menggunakan. metode bulan .

Bagaimana cara mengonversi data harian menjadi mingguan dengan Python?

Metode 1. menggunakan for-loop Python . Fungsi new_case_count() mengambil objek DataFrame, mengulanginya dan mengonversi indeks, yang merupakan tanggal dalam format string, ke format Pandas Datetime. Berdasarkan tanggal hari dalam seminggu, jumlah kasus baru setiap minggu dihitung dan disimpan dalam daftar.