গত সপ্তাহে, যখনকিভাবে পজিশন রিস্ক পরিমাপ করা যায় - VaR পদ্ধতির একটি ভূমিকা, এটি উল্লেখ করা হয়েছিল যে একটি পোর্টফোলিওর ঝুঁকি পৃথক সম্পদের ঝুঁকির সমান নয় এবং তাদের মূল্যের সম্পর্কের সাথে সম্পর্কিত। উদাহরণস্বরূপ দুটি সম্পদ গ্রহণ করা, যদি তাদের ইতিবাচক সম্পর্ক খুব শক্তিশালী হয়, যার অর্থ তারা একসাথে উঠে যায় এবং পড়ে যায়, তবে বৈচিত্র্যময় বিনিয়োগগুলি ঝুঁকি হ্রাস করবে না। যদি একটি শক্তিশালী নেতিবাচক সম্পর্ক থাকে তবে বৈচিত্র্যময় বিনিয়োগগুলি উল্লেখযোগ্যভাবে ঝুঁকি হ্রাস করতে পারে। তারপরে প্রাকৃতিক প্রশ্ন উত্থাপিত হয়ঃ আমরা কীভাবে একটি পোর্টফোলিওতে বিনিয়োগের সময় একটি নির্দিষ্ট স্তরের ঝুঁকিতে রিটার্নকে সর্বাধিক করতে পারি? এটি আমাদেরকে মার্কোভিটস তত্ত্বের দিকে নিয়ে যায়, যা আমরা আজ পরিচয় করিয়ে দিতে যাচ্ছি।
আধুনিক পোর্টফোলিও তত্ত্ব (এমপিটি), ১৯৫২ সালে হ্যারি মার্কোভিটস দ্বারা প্রস্তাবিত, পোর্টফোলিও নির্বাচনের জন্য একটি গাণিতিক কাঠামো। এটি ঝুঁকি নিয়ন্ত্রণের সময় ঝুঁকিপূর্ণ সম্পদের বিভিন্ন সংমিশ্রণ বেছে নিয়ে প্রত্যাশিত রিটার্ন সর্বাধিক করার লক্ষ্য রাখে। মূল ধারণাটি হ'ল সম্পদের দাম একে অপরের সাথে সম্পূর্ণরূপে সিঙ্ক্রোনাইজ হয় না (যেমন, সম্পদের মধ্যে অসম্পূর্ণ সম্পর্ক রয়েছে), এবং বৈচিত্র্যময় সম্পদ বরাদ্দের মাধ্যমে সামগ্রিক বিনিয়োগ ঝুঁকি হ্রাস করা যেতে পারে।
কোথায়,হ'ল পোর্টফোলিওর প্রত্যাশিত রিটার্ন,হ'ল পোর্টফোলিওর i-ম সম্পদটির ওজন,i-তম সম্পদের প্রত্যাশিত আয়।
কোথায়,পোর্টফোলিওর মোট ঝুঁকিকে প্রতিনিধিত্ব করে,হ'ল সম্পদ 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()
চূড়ান্ত আউটপুট ফলাফলঃ সর্বোত্তম সংমিশ্রণঃ বিটিসি ইউএসডিটি এর ওজনঃ ০.০৭২১ ETHUSDT এর ওজনঃ 0.2704 বিএনবি ইউএসডিটি এর ওজনঃ ০.৩৬৪৬ LINKUSDT এর ওজনঃ 0.1892 BCHUSDT এর ওজনঃ 0.0829 LTCUSDT এর ওজনঃ 0.0209 প্রত্যাশিত রিটার্ন রেটঃ 0.4195 প্রত্যাশিত ঝুঁকি (স্ট্যান্ডার্ড ডিভিয়েশন): 0.1219 শার্প অনুপাতঃ ৩.৪৪০৩