একটি অ্যালগরিদমিক ট্রেডিং কৌশল সম্পাদন করার সময়, বার্ষিক রিটার্নকে সবচেয়ে দরকারী পারফরম্যান্স মেট্রিক হিসাবে বিবেচনা করা প্রলুব্ধকর। তবে, এই পরিমাপটি বিচ্ছিন্নভাবে ব্যবহারের সাথে অনেকগুলি ত্রুটি রয়েছে। নির্দিষ্ট কৌশলগুলির জন্য রিটার্ন গণনা সম্পূর্ণরূপে সহজ নয়। এটি বিশেষত এমন কৌশলগুলির জন্য সত্য যা নির্দেশমূলক নয় যেমন বাজার-নিরপেক্ষ রূপগুলি বা কৌশলগুলি যা লিভারেজ ব্যবহার করে। এই কারণগুলি কেবলমাত্র তাদের রিটার্নের ভিত্তিতে দুটি কৌশল তুলনা করা কঠিন করে তোলে।
উপরন্তু, যদি আমাদের কাছে একই রকম রিটার্নের দুটি কৌশল উপস্থাপন করা হয় তবে আমরা কীভাবে জানব যে কোনটিতে বেশি ঝুঁকি রয়েছে? তদতিরিক্ত, "আরও ঝুঁকি" বলতে আমরা কী বোঝাতে চাই? অর্থায়নে, আমরা প্রায়শই রিটার্নের অস্থিরতা এবং ড্রাউনডাউন সময়কাল নিয়ে উদ্বিগ্ন। সুতরাং যদি এই কৌশলগুলির মধ্যে একটির রিটার্নের উল্লেখযোগ্যভাবে উচ্চতর অস্থিরতা থাকে তবে আমরা সম্ভবত এটিকে কম আকর্ষণীয় মনে করব, যদিও এর historicalতিহাসিক রিটার্নগুলি একই রকম হতে পারে যদি না একই রকম হয়।
কৌশল তুলনা এবং ঝুঁকি মূল্যায়নের এই সমস্যাগুলি শার্প অনুপাতের ব্যবহারকে অনুপ্রাণিত করে।
উইলিয়াম ফোর্সিথ শার্প একজন নোবেল বিজয়ী অর্থনীতিবিদ, যিনি মূলধন সম্পদ মূল্য নির্ধারণ মডেল (সিএপিএম) তৈরিতে সহায়তা করেছিলেন এবং 1966 সালে শার্প অনুপাতটি বিকাশ করেছিলেন (পরে 1994 সালে আপডেট করা হয়েছিল) ।
শার্প অনুপাত S নিম্নলিখিত সম্পর্ক দ্বারা সংজ্ঞায়িত করা হয়ঃযেখানে Ra হল সম্পদ বা কৌশলটির সময়কালের রিটার্ন এবং Rb হল উপযুক্ত রেফারেন্স ইন্ডেক্সের সময়কালের রিটার্ন।
অনুপাতটি সম্পদ বা কৌশলটির অতিরিক্ত রিটার্নের গড় গড়ের সাথে সেই রিটার্নগুলির স্ট্যান্ডার্ড বিচ্যুতির সাথে তুলনা করে। সুতরাং, রিটার্নের কম অস্থিরতা একই রিটার্ন অনুমান করে বৃহত্তর শার্প অনুপাতের দিকে পরিচালিত করবে।
শার্প অনুপাতের জন্য উপরের সূত্রটি একটি বেঞ্চমার্ক ব্যবহারের কথা উল্লেখ করে। একটি বেঞ্চমার্ক একটি
বেঞ্চমার্ক নির্বাচন কখনও কখনও অস্পষ্ট হতে পারে। উদাহরণস্বরূপ, একটি সেক্টর এক্সচেঞ্জ ট্রেডেড ফান্ড (ইটিএফ) কে পৃথক শেয়ারের জন্য পারফরম্যান্স বেঞ্চমার্ক হিসাবে ব্যবহার করা উচিত, বা এসএন্ডপি 500 নিজেই? কেন রাসেল 3000 নয়? সমানভাবে একটি হেজ ফান্ড কৌশলকে বাজারের সূচক বা অন্যান্য হেজ ফান্ডের সূচকের সাথে নিজেকে বেঞ্চমার্ক করা উচিত? এছাড়াও
একটি নির্দিষ্ট ক্ষেত্রে, বাজার-নিরপেক্ষ কৌশলগুলির জন্য, রেফারেন্স হিসাবে ঝুঁকি-মুক্ত হার বা শূন্য ব্যবহার করা উচিত কিনা তা নিয়ে একটি বিশেষ জটিলতা রয়েছে। বাজার সূচকটি নিজেই ব্যবহার করা উচিত নয় কারণ কৌশলটি, নকশা অনুসারে, বাজার-নিরপেক্ষ। একটি বাজার-নিরপেক্ষ পোর্টফোলিওর জন্য সঠিক পছন্দ হ'ল ঝুঁকি-মুক্ত হারটি বিয়োগ করা নয় কারণ এটি স্ব-অর্থায়ন। যেহেতু আপনি মার্জিন ধরে রাখার থেকে একটি creditণ আগ্রহ, আরএফ অর্জন করেন, রিটার্নের আসল গণনাটি হ'লঃ (রা + আরএফ) -আরএফ = রা। সুতরাং নিরপেক্ষ কৌশলগুলির জন্য ঝুঁকি-মুক্ত ডলারের হার থেকে প্রকৃত বিয়োগ নেই।
পরিমাণগত অর্থায়নে শার্প অনুপাতের প্রচলন সত্ত্বেও, এটি কিছু সীমাবদ্ধতা ভোগ করে।
প্রথমত, শার্প অনুপাতটি পিছনে তাকিয়ে রয়েছে। এটি কেবলমাত্র historicalতিহাসিক রিটার্ন বিতরণ এবং অস্থিরতার জন্য অ্যাকাউন্ট করে, ভবিষ্যতে ঘটে যাওয়া নয়। শার্প অনুপাতের উপর ভিত্তি করে বিচার করার সময় একটি অব্যক্ত অনুমান রয়েছে যে অতীত ভবিষ্যতের সাথে অনুরূপ হবে। এটি স্পষ্টতই সর্বদা ক্ষেত্রে নয়, বিশেষত বাজারের ব্যবস্থার পরিবর্তনের অধীনে।
শার্প অনুপাত গণনা অনুমান করে যে ব্যবহৃত রিটার্নগুলি স্বাভাবিকভাবে বিতরণ করা হয় (অর্থাৎ গাউসিয়ান) । দুর্ভাগ্যক্রমে, বাজারগুলি প্রায়শই স্বাভাবিক বিতরণের তুলনায় বেশি কুরটোসিস থেকে ভুগতে থাকে। মূলত রিটার্নের বিতরণে
এটি এমন কৌশলগুলিতে স্পষ্টভাবে দেখা যায় যা এই জাতীয় ঝুঁকিগুলির জন্য অত্যন্ত ঝুঁকিপূর্ণ। উদাহরণস্বরূপ, কল অপশন বিক্রয় (ওরফে স্টিম রোলারের অধীনে
যদিও এই পয়েন্টটি কারও কারও কাছে সুস্পষ্ট মনে হতে পারে, তবে শার্প অনুপাতের হিসাবের মধ্যে লেনদেনের ব্যয় অন্তর্ভুক্ত করা আবশ্যক যাতে এটি বাস্তবসম্মত হয়। এমন অসংখ্য উদাহরণ রয়েছে যার ট্রেডিং কৌশলগুলির উচ্চ শার্প রয়েছে (এবং তাই উচ্চ মুনাফার সম্ভাবনা) কেবলমাত্র বাস্তবসম্মত ব্যয়গুলি বিবেচনা করার পরে কম শার্পে, নিম্ন মুনাফার কৌশলগুলিতে হ্রাস করা হয়। এর অর্থ হ'ল রেফারেন্স মার্ক ছাড়িয়ে হিসাব করার সময় নেট রিটার্ন ব্যবহার করা। অতএব, শার্প অনুপাতের হিসাবের আপস্ট্রিমে লেনদেনের ব্যয়গুলি বিবেচনা করা উচিত।
একটি সুস্পষ্ট প্রশ্ন যা এই নিবন্ধে এখনও অবধি উত্তরহীন রয়ে গেছে তা হ'ল
শার্প অনুপাত প্রায়শই ট্রেডিং ফ্রিকোয়েন্সির সাথে বৃদ্ধি পায়। কিছু উচ্চ ফ্রিকোয়েন্সি কৌশলগুলির উচ্চ একক (এবং কখনও কখনও কম ডাবল) ডিজিট শার্প অনুপাত থাকবে, কারণ তারা প্রায় প্রতিদিন এবং অবশ্যই প্রতি মাসে লাভজনক হতে পারে। এই কৌশলগুলি খুব কমই বিপর্যয়কর ঝুঁকিতে ভোগ করে এবং এইভাবে তাদের রিটার্নের অস্থিরতা হ্রাস করে, যা এই জাতীয় উচ্চ শার্প অনুপাতের দিকে পরিচালিত করে।
এটি এখন পর্যন্ত একটি তত্ত্বগত নিবন্ধ ছিল। এখন আমরা কিছু বাস্তব উদাহরণে আমাদের মনোযোগ ঘুরিয়ে দেব। আমরা কেবলমাত্র একটি পৃথক ইক্যুইটির দীর্ঘ-কেবল ক্রয় এবং হোল্ড বিবেচনা করে শুরু করব এবং তারপরে একটি বাজার-নিরপেক্ষ কৌশল বিবেচনা করব। এই উভয় উদাহরণ পাইথন পান্ডা ডেটা বিশ্লেষণ লাইব্রেরিতে পরিচালিত হয়েছে।
প্রথম কাজটি আসলে ডেটা সংগ্রহ করা এবং এটিকে একটি পান্ডা ডেটাফ্রেম অবজেক্টে রাখা। পাইথন এবং মাইএসকিউএল-এ সিকিউরিটিজ মাস্টার বাস্তবায়নের নিবন্ধে আমি এটি অর্জনের জন্য একটি সিস্টেম তৈরি করেছি। বিকল্পভাবে, আমরা এই সহজ কোডটি ব্যবহার করতে পারি যাহু ফিনান্স ডেটা সরাসরি দখল করতে এবং এটি সরাসরি পান্ডা ডেটাফ্রেমে রাখতে। এই স্ক্রিপ্টের নীচে আমি একটি সময়কাল রিটার্ন স্ট্রিমের উপর ভিত্তি করে বার্ষিক শার্প অনুপাত গণনা করার জন্য একটি ফাংশন তৈরি করেছিঃ
import datetime
import numpy as np
import pandas as pd
import urllib2
def get_historic_data(ticker,
start_date=(2000,1,1),
end_date=datetime.date.today().timetuple()[0:3]):
"""
Obtains data from Yahoo Finance and adds it to a pandas DataFrame object.
ticker: Yahoo Finance ticker symbol, e.g. "GOOG" for Google, Inc.
start_date: Start date in (YYYY, M, D) format
end_date: End date in (YYYY, M, D) format
"""
# Construct the Yahoo URL with the correct integer query parameters
# for start and end dates. Note that some parameters are zero-based!
yahoo_url = "http://ichart.finance.yahoo.com/table.csv?s=%s&a=%s&b=%s&c=%s&d=%s&e=%s&f=%s" % \
(ticker, start_date[1] - 1, start_date[2], start_date[0], end_date[1] - 1, end_date[2], end_date[0])
# Try connecting to Yahoo Finance and obtaining the data
# On failure, print an error message
try:
yf_data = urllib2.urlopen(yahoo_url).readlines()
except Exception, e:
print "Could not download Yahoo data: %s" % e
# Create the (temporary) Python data structures to store
# the historical data
date_list = []
hist_data = [[] for i in range(6)]
# Format and copy the raw text data into datetime objects
# and floating point values (still in native Python lists)
for day in yf_data[1:]: # Avoid the header line in the CSV
headers = day.rstrip().split(',')
date_list.append(datetime.datetime.strptime(headers[0],'%Y-%m-%d'))
for i, header in enumerate(headers[1:]):
hist_data[i].append(float(header))
# Create a Python dictionary of the lists and then use that to
# form a sorted Pandas DataFrame of the historical data
hist_data = dict(zip(['open', 'high', 'low', 'close', 'volume', 'adj_close'], hist_data))
pdf = pd.DataFrame(hist_data, index=pd.Index(date_list)).sort()
return pdf
def annualised_sharpe(returns, N=252):
"""
Calculate the annualised Sharpe ratio of a returns stream
based on a number of trading periods, N. N defaults to 252,
which then assumes a stream of daily returns.
The function assumes that the returns are the excess of
those compared to a benchmark.
"""
return np.sqrt(N) * returns.mean() / returns.std()
এখন যেহেতু আমরা ইয়াহু ফিনান্স থেকে তথ্য সংগ্রহ করতে এবং বার্ষিক শার্প অনুপাত গণনা করতে সক্ষম হয়েছি, আমরা দুটি শেয়ারের জন্য একটি কিনুন এবং ধরে রাখার কৌশল পরীক্ষা করতে পারি। আমরা গুগল (GOOG) এবং গোল্ডম্যান স্যাক্স (GS) ব্যবহার করব 1 জানুয়ারী 2000 থেকে 29 মে 2013 পর্যন্ত (যখন আমি এই নিবন্ধটি লিখেছিলাম!
আমরা একটি অতিরিক্ত সহায়ক ফাংশন তৈরি করতে পারি যা আমাদের দ্রুত একই (হার্ডকোড) সময়ের জন্য একাধিক ইক্যুইটি জুড়ে কিনতে এবং হোল্ড শার্প দেখতে দেয়ঃ
def equity_sharpe(ticker):
"""
Calculates the annualised Sharpe ratio based on the daily
returns of an equity ticker symbol listed in Yahoo Finance.
The dates have been hardcoded here for the QuantStart article
on Sharpe ratios.
"""
# Obtain the equities daily historic data for the desired time period
# and add to a pandas DataFrame
pdf = get_historic_data(ticker, start_date=(2000,1,1), end_date=(2013,5,29))
# Use the percentage change method to easily calculate daily returns
pdf['daily_ret'] = pdf['adj_close'].pct_change()
# Assume an average annual risk-free rate over the period of 5%
pdf['excess_daily_ret'] = pdf['daily_ret'] - 0.05/252
# Return the annualised Sharpe ratio based on the excess daily returns
return annualised_sharpe(pdf['excess_daily_ret'])
গুগলের জন্য, শার্পের ক্রয় ও হোল্ডিং অনুপাত ০.৭৫০১। গোল্ডম্যান স্যাক্সের জন্য ০.২১৭৮:
ইক্যুইটি_শার্পে ((
equity_sharpe ((
এখন আমরা একটি বাজার-নিরপেক্ষ কৌশল জন্য একই হিসাব চেষ্টা করতে পারেন। এই কৌশল লক্ষ্য সম্পূর্ণরূপে সাধারণ বাজার থেকে একটি নির্দিষ্ট ইক্যুইটি এর কর্মক্ষমতা বিচ্ছিন্ন করা হয়। এটি অর্জন করার সবচেয়ে সহজ উপায় একটি এক্সচেঞ্জ ট্রেডেড ফান্ড (ইটিএফ) এর সমান পরিমাণে (ডলার) শর্ট যেতে হয় যা এই ধরনের বাজার ট্র্যাক করার জন্য ডিজাইন করা হয়েছে। মার্কিন বড় ক্যাপ ইক্যুইটি বাজারের জন্য সবচেয়ে সুস্পষ্ট পছন্দ হল এসএন্ডপি 500 সূচক, যা এসপিডিআর ইটিএফ দ্বারা ট্র্যাক করা হয়, এসপিওয়াই এর টিকার সহ।
যেমন একটি কৌশল বার্ষিক শার্প অনুপাত গণনা করার জন্য আমরা SPY জন্য ঐতিহাসিক মূল্য পেতে এবং পূর্ববর্তী স্টক অনুরূপ পদ্ধতিতে শতাংশ রিটার্ন গণনা করবে, ব্যতিক্রম যে আমরা ঝুঁকি মুক্ত বেঞ্চমার্ক ব্যবহার করা হবে না। আমরা নেট দৈনিক রিটার্ন গণনা করবে যা দীর্ঘ এবং সংক্ষিপ্ত রিটার্ন মধ্যে পার্থক্য বিয়োগ এবং তারপর 2 দ্বারা বিভক্ত প্রয়োজন, আমরা এখন দ্বিগুণ ট্রেডিং মূলধন আছে। এখানে এটি সঞ্চালন করার জন্য পাইথন / পান্ডা কোডঃ
def market_neutral_sharpe(ticker, benchmark):
"""
Calculates the annualised Sharpe ratio of a market
neutral long/short strategy inolving the long of 'ticker'
with a corresponding short of the 'benchmark'.
"""
# Get historic data for both a symbol/ticker and a benchmark ticker
# The dates have been hardcoded, but you can modify them as you see fit!
tick = get_historic_data(ticker, start_date=(2000,1,1), end_date=(2013,5,29))
bench = get_historic_data(benchmark, start_date=(2000,1,1), end_date=(2013,5,29))
# Calculate the percentage returns on each of the time series
tick['daily_ret'] = tick['adj_close'].pct_change()
bench['daily_ret'] = bench['adj_close'].pct_change()
# Create a new DataFrame to store the strategy information
# The net returns are (long - short)/2, since there is twice
# trading capital for this strategy
strat = pd.DataFrame(index=tick.index)
strat['net_ret'] = (tick['daily_ret'] - bench['daily_ret'])/2.0
# Return the annualised Sharpe ratio for this strategy
return annualised_sharpe(strat['net_ret'])
গুগলের জন্য লং/শর্ট মার্কেট-নিরপেক্ষ কৌশলটির জন্য শার্প অনুপাত 0.7597। গোল্ডম্যান স্যাক্সের জন্য এটি 0.2999:
মার্কেট_নিউট্রাল_শার্প (GOOG, SPY) ০.৭৫৯৬৬৬৬১২১৬৩৪৫২৩২৯
মার্কেট_নিউট্রাল_শার্পে ((