วันอาทิตย์ที่ 9 ธันวาคม พ.ศ. 2561

วิเคราะห์ผลตอบแทนและความเสี่ยงและสัดส่วนหุ้นที่เหมาะสมของพอร์ทด้วย pyhton

อย่าใส่ไขหลายใบไว้ในตระกล้าใบเดียว เป็นคำกล่าวที่ยังสามารถใช้ได้ดีในยุคปัจจุบัน ถ้าเราถือหุ้นตัวเดียวเวลาเละก็ล่มจมไปหมด แต่พอเริ่มใส่หุ้นเข้ามาหลายๆตัว หุ้นหลากตัวมีการเคลื่อนไหวสวนทางกันทำให้พอร์ทเรานิ่งขึ้น และนอกจากนั้น การขยับสัดส่วนของหุ้นในพอร์ทยังทำให้ผลตอบแทนและความเสี่ยงเปลี่ยนไปอีกด้วย


ในการคำนวณถ้ามีหุ้นไม่กี่ตัวยงพอทนใช้เครื่องคิดเลขคำนวณได้ แต่ถ้าหุ้นเป็น 10 ต้องให้คอมช่วย

ขอบคุณที่มาของ code จากบล็อกของ Bernard Brenyah , Markowitz’s Efficient Frontier in Python
https://medium.com/python-data/effient-frontier-in-python-34b0c3043314
https://medium.com/python-data/efficient-frontier-portfolio-optimization-with-python-part-2-2-2fe23413ad94

เรื่องผลตอบแทนและความเสี่ยงของพอร์ท เริ่มต้นแนวคิดการคำนวณมาจาก อ. Markowitz  ได้นำเสนอทฤษฎี modern portfolio theory ในปี 1950 ไอเดียคือนำเสนอแนวคิดการวัดความเสี่ยงด้วยค่าความแปรปรวน วิธีง่ายๆแต่นึกกันไม่ถึง

ทีนี้ก็จับหุ้นหลายๆตัวมาใส่พอร์ท สิ่งที่เกิดขึ้นแล้วพลิกโลกการลงทุนคือ หุ้นหลายตัวมีความสัมพันธ์ทิศทางตรงข้ามกัน พอจับมารวมกันแล้วความเสี่ยงของพอร์ทลดลงได้ โดยที่สินทรัพย์ก็ขึ้นๆลงๆตามธรรมชาติของมันเหมือนเดิม

ทีนี้พอลองปรับสัดส่วนของหุ้นแต่ละตัวในพอร์ทดู ก็พบกว่าผลตอบแทน และความเสี่ยงของพอร์ทก็เปลี่ยนไปเรื่อยๆ ทำให้เราสามารถสร้างพอร์ทที่ผลตอบแทนสูงสุดโดยความเสี่ยงน้อยที่สุดได้

แนวคิดตรงนี้ได้ต่อยอดไปเป็นเรื่อง CAPM จน อ. ได้รางวัลโนเบลไปเลย

ผลตอบแทนและความเสี่ยงของพอร์ท ที่ระดับสัดส่วนของหุ้นต่างๆกัน




เริ่มต้นกำหนดหุ้นที่จะดึง แล้วเลือกจุดเริ่มต้นกับสิ้นสุด คนที่โหลด code ไปใช้เปลี่ยนแค่ชื่อหุ้นตรงนี้พอ และอย่าลืมใส่ .bk ข้างหลังหุ้นด้วยถ้าจะโหลดหุ้นไทย

stockselected = ['chg.bk','ever.bk','bwg.bk','ekh.bk','rph.bk']
start="2018-06-01"
end="2018-11-30"

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
import fix_yahoo_finance as yf

yf.pdr_override() # ตัวแก้pandas_datareader ให้โหลดจาก yahoo finance ได้

# download dataframe

data = pdr.get_data_yahoo(stockselected,start,end )
data = data['Adj Close']
data.head()

# คำนวณผลตอบแทนรายวันและรายปี

returns_daily = data.pct_change().dropna()
returns_annual = returns_daily.mean() * 250
returns_annual*100

# คำนวณ covariance ของผลตอบแทนหุ้น

cov_daily = returns_daily.cov()
cov_annual = cov_daily * 250
cov_annual*100

# empty lists to store returns, volatility and weights of imiginary portfolios

port_returns = []
port_volatility = []
stock_weights = []

# set the number of combinations for imaginary portfolios

num_assets = len(stockselected)
num_portfolios = 50000

# populate the empty lists with each portfolios returns,risk and weights
for single_portfolio in range(num_portfolios):
    weights = np.random.random(num_assets)
    weights /= np.sum(weights)
    returns = np.dot(weights, returns_annual)
    volatility = np.sqrt(np.dot(weights.T, np.dot(cov_annual, weights)))
    port_returns.append(returns)
    port_volatility.append(volatility)
    stock_weights.append(weights)

# a dictionary for Returns and Risk values of each portfolio
portfolio = {'Returns': port_returns,
             'Volatility': port_volatility}

# extend original dictionary to accomodate each ticker and weight in the portfolio
for counter,symbol in enumerate(stockselected):
    portfolio[symbol+' Weight'] = [Weight[counter] for Weight in stock_weights]

# make a nice dataframe of the extended dictionary
df = pd.DataFrame(portfolio)

# get better labels for desired arrangement of columns
column_order = ['Returns', 'Volatility'] + [stock+' Weight' for stock in stockselected]

# reorder dataframe columns
df = df[column_order]

# plot the efficient frontier with a scatter plot
plt.style.use('seaborn')
df.plot.scatter(x='Volatility', y='Returns', figsize=(10, 8), grid=True)
plt.xlabel('Volatility (Std. Deviation)')
plt.ylabel('Expected Returns')
plt.title('Efficient Frontier')
plt.show()








นอกจากนั้นสามารถประยุกต์ได้อีก จากภาพเป็นการไล่สีตาม sharp ratio  และการหาน้ำหนักของพอร์ทที่ทำให้ได้รับ ผลตอบแทนของพอร์ทสูงสุด และ ความผันผวนของพอร์ทต่ำสุด




การหาพอร์ทเหมาะสมที่มี ผลตอบแทนสูงสุด และค่าความเสี่ยงต่ำสุด

code ใน google colab ไปเล่นกันได้คร้าบ
https://colab.research.google.com/drive/1zVjgdYC_oqbg4I8Zt6twis_Ggr3Wn9vL

น่าอ่านเพิ่มเติม
https://blog.quantopian.com/markowitz-portfolio-optimization-2/
https://towardsdatascience.com/efficient-frontier-portfolio-optimisation-in-python-e7844051e7f
http://ahmedas91.github.io/blog/2016/03/01/efficient-frontier-with-python/


☀หลักสูตรวิเคราะห์หุ้นด้วยปัจจัยพื้นฐาน☀


✅เจาะลึกหุ้นอย่างเซียน เห็นผลจริง100% สไตร์ อ.ภัทร
✅Workshop !! ทำจริง เห็นผลจริง พิสูจน์ได้
✅เรียนคลาสเล็ก ถามได้ทุกคำถามคาใจ

☀เรียนแล้วได้อะไร☀


✅10 จุุดสำคัญอ่านงบการเงิน วิเคราะห์ธุรกิจไม่เสียเวลา
✅ปัจจัยเร่ง ให้หุ้นวิ่ง และสัญญาณยืนยันในงบการเงิน
✅ประมาณราคาเหมาะสม เห็นเป้าราคาหุ้นตั้งแต่วันที่ซื้อ
✅เคล็ดลับสแกนหุ้น ถูก ดี กำไรโต

🔈สอนโดย อ ภัทรธร ช่อวิชิต
นักลงทุนอิสระ เจ้าของผลงานหนังสือ คุ้ยแคะแกะหุ้นเด้ง และเจาะหุ้นร้อนสแกนหุ้นเด้ง

=======================================

🔈รายละเอียดหลักสูตร วันเวลา

investidea.in.th/p/value-investor

=======================================

☎ติดต่อสอบถามและลงทะเบียน (รับจำนวนจำกัด)

มือถือ: 0865035023

ข้อความ; www.facebook.com/messages/investidea.in.th/

line id; pat4310

เพิ่มเพื่อน
=======================================

☀เนื้อหาหลักสูตร☀


✅แหล่งข้อมูลการวิเคราะห์ปัจจัยพื้นฐาน งบการเงิน คำอธิบายงบ ตัวเลขเศรษฐกิจ
✅วิเคราะห์ ปัจจัยเชิงคุณภาพ ผลกระทบต่องบการเงิน และแนวโน้มราคา
✅โครงสร้างงบดุล และลักษณะธุรกิจ จุดสำคัญที่ต้องดูในงบการเงิน
✅งบกำไรขาดทุน ลักษณะงบการเงินที่ดี
✅งบกระแสเงินสด และความสัมพันธ์กับวงจรธุรกิจ
✅การค้นปัญหาธุรกิจใน 1 นาที ด้วยอัตราส่วนทางการเงิน
✅ปัจจัยทางการเงินที่มีผลต่อทิศทางราคาหุ้น
✅การประเมินมูลค่าหุ้นด้วย PE ratio เทคนิคการใช้งานกับแต่ละอุตสาหกรรม
✅ดูความเห็นของนักลงทุนส่วนใหญ่ผ่านการเคลื่อนไหวของราคา

=======================================

☎ติดต่อสอบถามและลงทะเบียน (รับจำนวนจำกัด)

มือถือ: 0865035023

ข้อความ; www.facebook.com/messages/investidea.in.th/

line id; pat4310

เพิ่มเพื่อน

ไม่มีความคิดเห็น :

แสดงความคิดเห็น

สงสัยอะไรถามได้ครับผม