पिछले सप्ताह, जब परिचयस्थिति जोखिम को कैसे मापें - VaR पद्धति का परिचय, यह उल्लेख किया गया था कि एक पोर्टफोलियो का जोखिम व्यक्तिगत परिसंपत्तियों के जोखिमों के बराबर नहीं है और उनके मूल्य सहसंबंध से संबंधित है। दो परिसंपत्तियों को उदाहरण के रूप में लेते हुए, यदि उनका सकारात्मक सहसंबंध बहुत मजबूत है, जिसका अर्थ है कि वे एक साथ बढ़ते हैं और गिरते हैं, तो विविधतापूर्ण निवेश जोखिम को कम नहीं करेंगे। यदि एक मजबूत नकारात्मक सहसंबंध है, तो विविध निवेश जोखिम को काफी कम कर सकते हैं। तब स्वाभाविक सवाल उठता हैः हम एक पोर्टफोलियो में निवेश करते समय जोखिम के एक निश्चित स्तर पर रिटर्न को कैसे अधिकतम करते हैं? यह हमें मार्कोविट्ज़ सिद्धांत की ओर ले जाता है, जिसे हम आज पेश करने जा रहे हैं।
आधुनिक पोर्टफोलियो सिद्धांत (एमपीटी), 1952 में हैरी मार्कोविट्ज़ द्वारा प्रस्तावित, पोर्टफोलियो चयन के लिए एक गणितीय ढांचा है। इसका उद्देश्य जोखिम को नियंत्रित करते हुए जोखिम परिसंपत्तियों के विभिन्न संयोजनों का चयन करके अपेक्षित रिटर्न को अधिकतम करना है। मूल विचार यह है कि परिसंपत्तियों की कीमतें एक दूसरे के साथ पूरी तरह से सिंक्रनाइज़ नहीं होती हैं (यानी, परिसंपत्तियों के बीच अपूर्ण सहसंबंध है), और विविध परिसंपत्ति आवंटन के माध्यम से समग्र निवेश जोखिम को कम किया जा सकता है।
कहाँ,पोर्टफोलियो की अपेक्षित प्रतिफल है,पोर्टफोलियो में i-th परिसंपत्ति का भार है,i-th परिसंपत्ति का अपेक्षित प्रतिफल है।
कहाँ,पोर्टफोलियो के कुल जोखिम का प्रतिनिधित्व करता है,संपत्ति i और संपत्ति j का सह-विभेदक है, जो इन दो संपत्ति के बीच मूल्य परिवर्तन संबंध को मापता है।
कहाँ,परिसंपत्ति i और परिसंपत्ति j का सहसंबंध गुणांक है,औरक्रमशः संपत्ति i और संपत्ति j के मानक विचलन हैं।
उपरोक्त आरेख एक कुशल सीमा का एक चित्रण है, जहां प्रत्येक बिंदु एक अलग भारित निवेश पोर्टफोलियो का प्रतिनिधित्व करता है। एक्स-अक्ष अस्थिरता को दर्शाता है, जो जोखिम के स्तर के बराबर है, जबकि वाई-अक्ष रिटर्न दर को दर्शाता है। स्पष्ट रूप से, हमारा ध्यान ग्राफ के ऊपरी किनारे पर है क्योंकि यह जोखिम के समान स्तर पर उच्चतम रिटर्न प्राप्त करता है।
मात्रात्मक ट्रेडिंग और पोर्टफोलियो प्रबंधन में, इन सिद्धांतों को लागू करने के लिए ऐतिहासिक डेटा के सांख्यिकीय विश्लेषण और विभिन्न परिसंपत्तियों के लिए अपेक्षित रिटर्न, मानक विचलन और सहसंबंधों का अनुमान लगाने के लिए गणितीय मॉडल का उपयोग करने की आवश्यकता होती है। फिर सर्वोत्तम परिसंपत्ति भार आवंटन खोजने के लिए अनुकूलन तकनीकों का उपयोग किया जाता है। इस प्रक्रिया में अक्सर जटिल गणितीय संचालन और व्यापक कंप्यूटर प्रसंस्करण शामिल होते हैं - यही कारण है कि आधुनिक वित्त में मात्रात्मक विश्लेषण इतना महत्वपूर्ण हो गया है। आगे, हम विशिष्ट पायथन उदाहरणों के साथ अनुकूलन कैसे करते हैं।
मार्कोविट्ज़ के इष्टतम पोर्टफोलियो की गणना एक बहु-चरण प्रक्रिया है, जिसमें कई प्रमुख चरण शामिल हैं, जैसे डेटा की तैयारी, पोर्टफोलियो सिमुलेशन और संकेतक गणना। कृपया देखेंःhttps://plotly.com/python/v3/ipython-notebooks/markowitz-portfolio-optimization/
के माध्यम सेget_data
यह रिटर्न और जोखिमों की गणना के लिए आवश्यक डेटा है, जिसका उपयोग निवेश पोर्टफोलियो बनाने और शार्प अनुपात की गणना करने के लिए किया जाता है।
..calculate_returns_risk
प्रत्येक डिजिटल मुद्रा के लिए वार्षिक रिटर्न और वार्षिक जोखिम (मानक विचलन) की गणना करने के लिए इस फ़ंक्शन का उपयोग किया गया था। यह एक इष्टतम पोर्टफोलियो में उपयोग के लिए प्रत्येक परिसंपत्ति के ऐतिहासिक प्रदर्शन को मात्रात्मक रूप से मापने के लिए किया जाता है।
..calculate_optimal_portfolio
प्रत्येक सिमुलेशन में, परिसंपत्ति भारों को यादृच्छिक रूप से उत्पन्न किया गया और फिर इन भारों के आधार पर पोर्टफोलियो के अपेक्षित रिटर्न और जोखिम की गणना की गई।
विभिन्न भारों के साथ यादृच्छिक रूप से संयोजन उत्पन्न करके, इष्टतम खोजने के लिए कई संभावित निवेश पोर्टफोलियो का पता लगाना संभव है। यह मार्कोविट्ज़ के पोर्टफोलियो सिद्धांत के मुख्य विचारों में से एक है।
पूरी प्रक्रिया का उद्देश्य निवेश पोर्टफोलियो को खोजना है जो जोखिम के एक दिए गए स्तर पर सर्वोत्तम अपेक्षित रिटर्न देता है। कई संभावित संयोजनों का अनुकरण करके, निवेशक विभिन्न विन्यासों के प्रदर्शन को बेहतर ढंग से समझ सकते हैं और उस संयोजन का चयन कर सकते हैं जो उनके निवेश लक्ष्यों और जोखिम सहिष्णुता के लिए सबसे उपयुक्त है। यह विधि निवेश निर्णयों को अनुकूलित करने में मदद करती है, जिससे निवेश अधिक प्रभावी हो जाते हैं।
import numpy as np
import pandas as pd
import requests
import matplotlib.pyplot as plt
# Obtain market data
def get_data(symbols):
data = []
for symbol in symbols:
url = 'https://api.binance.com/api/v3/klines?symbol=%s&interval=%s&limit=1000'%(symbol,'1d')
res = requests.get(url)
data.append([float(line[4]) for line in res.json()])
return data
def calculate_returns_risk(data):
returns = []
risks = []
for d in data:
daily_returns = np.diff(d) / d[:-1]
annualized_return = np.mean(daily_returns) * 365
annualized_volatility = np.std(daily_returns) * np.sqrt(365)
returns.append(annualized_return)
risks.append(annualized_volatility)
return np.array(returns), np.array(risks)
# Calculate Markowitz Optimal Portfolio
def calculate_optimal_portfolio(returns, risks):
n_assets = len(returns)
num_portfolios = 3000
results = np.zeros((4, num_portfolios), dtype=object)
for i in range(num_portfolios):
weights = np.random.random(n_assets)
weights /= np.sum(weights)
portfolio_return = np.sum(returns * weights)
portfolio_risk = np.sqrt(np.dot(weights.T, np.dot(np.cov(returns, rowvar=False), weights)))
results[0, i] = portfolio_return
results[1, i] = portfolio_risk
results[2, i] = portfolio_return / portfolio_risk
results[3, i] = list(weights) # Convert weights to a list
return results
symbols = ['BTCUSDT','ETHUSDT', 'BNBUSDT','LINKUSDT','BCHUSDT','LTCUSDT']
data = get_data(symbols)
returns, risks = calculate_returns_risk(data)
optimal_portfolios = calculate_optimal_portfolio(returns, risks)
max_sharpe_idx = np.argmax(optimal_portfolios[2])
optimal_return = optimal_portfolios[0, max_sharpe_idx]
optimal_risk = optimal_portfolios[1, max_sharpe_idx]
optimal_weights = optimal_portfolios[3, max_sharpe_idx]
# Output results
print("Optimal combination:")
for i in range(len(symbols)):
print(f"{symbols[i]} Weight: {optimal_weights[i]:.4f}")
print(f"Expected return rate: {optimal_return:.4f}")
print(f"Expected risk (standard deviation): {optimal_risk:.4f}")
print(f"Sharpe ratio: {optimal_return / optimal_risk:.4f}")
# Visualized investment portfolio
plt.figure(figsize=(10, 5))
plt.scatter(optimal_portfolios[1], optimal_portfolios[0], c=optimal_portfolios[2], marker='o', s=3)
plt.title('portfolio')
plt.xlabel('std')
plt.ylabel('return')
plt.colorbar(label='sharp')
plt.show()
अंतिम आउटपुट परिणामः इष्टतम संयोजन: BTCUSDT का भारः 0.0721 ETHUSDT का भारः 0.2704 BNBUSDT का भारः 0.3646 LINKUSDT का भारः 0.1892 BCHUSDT का भारः 0.0829 LTCUSDT का भारः 0.0209 अपेक्षित प्रतिफल दर: 0.4195 अपेक्षित जोखिम (मानक विचलन): 0.1219 शार्प अनुपातः 3.4403