الگورتھمک تجارتی حکمت عملی کو انجام دیتے وقت سالانہ واپسی کو کارکردگی کی سب سے مفید پیمائش کے طور پر سمجھنے کا لالچ آتا ہے۔ تاہم ، اس اقدام کو الگ تھلگ طور پر استعمال کرنے میں بہت سی خامیاں ہیں۔ کچھ حکمت عملیوں کے لئے واپسی کا حساب کتاب مکمل طور پر سیدھا نہیں ہے۔ یہ خاص طور پر ان حکمت عملیوں کے لئے سچ ہے جو سمت نہیں ہیں جیسے مارکیٹ غیر جانبدار متغیرات یا حکمت عملی جو فائدہ اٹھاتے ہیں۔ یہ عوامل صرف ان کی واپسی پر مبنی دو حکمت عملیوں کا موازنہ کرنا مشکل بناتے ہیں۔
مزید برآں ، اگر ہمیں دو حکمت عملیوں کے ساتھ پیش کیا جاتا ہے جن میں ایک جیسی واپسی ہوتی ہے تو ہمیں کیسے پتہ چلتا ہے کہ کس میں زیادہ خطرہ ہوتا ہے؟ مزید برآں ، "زیادہ خطرہ" کا کیا مطلب ہے؟ فنانس میں ، ہم اکثر واپسی کی اتار چڑھاؤ اور ڈراؤنڈ کے ادوار سے متعلق ہوتے ہیں۔ لہذا اگر ان میں سے کسی ایک حکمت عملی میں واپسی کی نمایاں طور پر زیادہ اتار چڑھاؤ ہوتی ہے تو ہمیں اس کی کم کشش معلوم ہوگی ، اس حقیقت کے باوجود کہ اس کی تاریخی واپسی اسی طرح کی ہوسکتی ہے اگر ایک جیسی نہیں ہے۔
حکمت عملی کے موازنہ اور خطرے کی تشخیص کے یہ مسائل شارپ تناسب کے استعمال کی حوصلہ افزائی کرتے ہیں۔
ولیم فورسیتھ شارپ ایک نوبل انعام یافتہ ماہر معاشیات ہیں ، جنہوں نے کیپٹل اثاثہ جات کی قیمتوں کا تعین کرنے کا ماڈل (سی اے پی ایم) بنانے میں مدد کی اور 1966 میں شارپ تناسب تیار کیا (بعد میں 1994 میں اپ ڈیٹ کیا گیا) ۔
شارپ تناسب S مندرجہ ذیل تعلق کی طرف سے مقرر کیا جاتا ہے:جہاں Ra اثاثہ یا حکمت عملی کی مدت کی واپسی ہے اور Rb مناسب بینچ مارک کی مدت کی واپسی ہے۔
تناسب اثاثہ یا حکمت عملی کی زیادہ منافع کی اوسط اوسط کا موازنہ ان منافع کے معیاری انحراف کے ساتھ کرتا ہے۔ اس طرح منافع کی کم اتار چڑھاؤ سے ایک زیادہ شارپ تناسب پیدا ہوگا ، جس میں ایک جیسی منافع کی پیش گوئی کی جائے گی۔
شارپ تناسب کے لئے مندرجہ بالا فارمولہ ایک بینچ مارک کے استعمال کا اشارہ کرتا ہے۔ ایک بینچ مارک ایک
بینچ مارک کا انتخاب کبھی کبھی غیر واضح ہوسکتا ہے۔ مثال کے طور پر ، کیا کسی سیکٹر ایکسچینج ٹریڈڈ فنڈ (ای ٹی ایف) کو انفرادی حصص کے لئے کارکردگی کے معیار کے طور پر استعمال کیا جانا چاہئے ، یا ایس اینڈ پی 500 خود؟ کیوں نہیں رسل 3000؟ اسی طرح ہیج فنڈ کی حکمت عملی کو مارکیٹ انڈیکس یا دوسرے ہیج فنڈز کے انڈیکس کے مقابلے میں خود کو بینچ مارک کرنا چاہئے؟
ایک خاص مثال میں ، مارکیٹ میں غیر جانبدار حکمت عملیوں کے لئے ، بینچ مارک کے طور پر خطرہ سے پاک شرح یا صفر کا استعمال کرنے کے بارے میں ایک خاص پیچیدگی ہے۔ مارکیٹ انڈیکس خود کو استعمال نہیں کیا جانا چاہئے کیونکہ حکمت عملی ، ڈیزائن کے لحاظ سے ، مارکیٹ میں غیر جانبدار ہے۔ مارکیٹ میں غیر جانبدار پورٹ فولیو کے لئے صحیح انتخاب خطرہ سے پاک شرح کو کم نہیں کرنا ہے کیونکہ یہ خود مالی اعانت ہے۔ چونکہ آپ مارجن رکھنے سے کریڈٹ سود ، آر ایف حاصل کرتے ہیں ، لہذا منافع کا اصل حساب کتاب یہ ہے: (را + آر ایف) - آر ایف = را۔ لہذا غیر جانبدار حکمت عملیوں کے لئے خطرہ سے پاک ڈالر کی شرح کو اصل میں کم نہیں کیا جاتا ہے۔
مقداری فنانس کے اندر شارپ تناسب کے پھیلاؤ کے باوجود ، اسے کچھ حدود کا سامنا ہے۔
سب سے پہلے ، شارپ تناسب پیچھے کی طرف دیکھ رہا ہے۔ یہ صرف تاریخی منافع کی تقسیم اور اتار چڑھاؤ کا حساب کتاب کرتا ہے ، نہ کہ مستقبل میں ہونے والے۔ شارپ تناسب پر مبنی فیصلے کرتے وقت ایک ضمنی مفروضہ ہوتا ہے کہ ماضی مستقبل کی طرح ہوگا۔ ظاہر ہے ، خاص طور پر مارکیٹ کے نظام کی تبدیلیوں کے تحت ہمیشہ ایسا نہیں ہوتا ہے۔
شارپ تناسب کے حساب سے یہ فرض کیا جاتا ہے کہ استعمال ہونے والی واپسی عام طور پر تقسیم ہوتی ہے (یعنی گوسین) ۔ بدقسمتی سے ، مارکیٹیں اکثر عام تقسیم سے زیادہ کورٹوسس کا شکار ہوتی ہیں۔ بنیادی طور پر واپسی کی تقسیم میں
یہ ان حکمت عملیوں میں واضح طور پر دیکھا جاسکتا ہے جو اس طرح کے خطرات کا شکار ہیں۔ مثال کے طور پر ، کال آپشنز کی فروخت۔ کال آپشنز کی فروخت سے وقت کے ساتھ ساتھ آپشن پریمیم کا ایک مستقل سلسلہ پیدا ہوتا ہے ، جس کی وجہ سے واپسی کی کم اتار چڑھاؤ ہوتی ہے ، جس میں ایک بینچ مارک سے زیادہ حد تک زیادہ ہوتا ہے۔ اس معاملے میں حکمت عملی میں شارپ کا ایک اعلی تناسب (تاریخی اعداد و شمار کی بنیاد پر) ہوگا۔ تاہم ، اس بات کو مدنظر نہیں رکھا جاتا ہے کہ ایسے اختیارات کو کہا جاسکتا ہے ، جس سے ایکویٹی منحنی خطوط میں نمایاں اور اچانک کمی (یا یہاں تک کہ مٹانے) کا باعث بنتا ہے۔ لہذا ، جیسے الگورتھمک تجارتی حکمت عملی کی کارکردگی کی کسی بھی پیمائش کے ساتھ ، شارپ تناسب کو الگ تھلگ طور پر استعمال نہیں کیا جاسکتا ہے۔
اگرچہ یہ نکتہ کچھ لوگوں کے لئے واضح معلوم ہوسکتا ہے ، لیکن اس کے حقیقت پسندانہ ہونے کے ل transaction ، ٹرانزیکشن لاگت کو شارپ تناسب کے حساب میں شامل کیا جانا چاہئے۔ تجارتی حکمت عملیوں کی بے شمار مثالیں ہیں جن میں اعلی شارپ (اور اس طرح بڑی منافع بخش ہونے کا امکان ہے) صرف کم شارپ ، کم منافع بخش حکمت عملیوں میں کم ہوجاتا ہے جب حقیقت پسندانہ اخراجات کو مدنظر رکھا جاتا ہے۔ اس کا مطلب یہ ہے کہ ریفرنڈم سے زیادہ حساب کتاب کرتے وقت خالص منافع کا استعمال کرنا۔ لہذا ، ٹرانزیکشن لاگت کو شارپ تناسب کے حساب سے پہلے میں مدنظر رکھنا چاہئے۔
ایک واضح سوال جو اس مضمون میں اب تک بے جواب رہا ہے وہ یہ ہے کہ
شارپ تناسب اکثر تجارتی تعدد کے ساتھ بڑھتا ہے۔ کچھ اعلی تعدد کی حکمت عملیوں میں اعلی سنگل (اور بعض اوقات کم ڈبل) ہندسوں کے شارپ تناسب ہوں گے ، کیونکہ وہ تقریبا almost ہر دن اور یقینی طور پر ہر ماہ منافع بخش ہوسکتے ہیں۔ یہ حکمت عملییں شاذ و نادر ہی تباہ کن خطرے سے دوچار ہوتی ہیں اور اس طرح ان کی واپسی کی اتار چڑھاؤ کو کم سے کم کرتی ہیں ، جس کی وجہ سے شارپ تناسب اتنا زیادہ ہوتا ہے۔
یہ اس وقت تک کافی نظریاتی مضمون رہا ہے۔ اب ہم اپنی توجہ کچھ حقیقی مثالوں کی طرف موڑیں گے۔ ہم صرف ایک طویل عرصے تک انفرادی ایکویٹی کی خرید و فروخت پر غور کرکے شروع کریں گے پھر مارکیٹ غیر جانبدار حکمت عملی پر غور کریں گے۔ یہ دونوں مثالیں پائیتھون پانڈا ڈیٹا تجزیہ لائبریری میں کی گئی ہیں۔
پہلا کام اصل میں ڈیٹا حاصل کرنا ہے اور اسے پانڈا ڈیٹا فریم آبجیکٹ میں ڈالنا ہے۔ پیتھون اور ایس کیو ایل میں سیکیورٹیز ماسٹر کے نفاذ سے متعلق مضمون میں میں نے اس کے حصول کے لئے ایک نظام تیار کیا ہے۔ متبادل طور پر ، ہم اس آسان کوڈ کا استعمال براہ راست یاہو فنانس ڈیٹا کو پکڑنے اور اسے براہ راست پانڈا ڈیٹا فریم میں ڈالنے کے لئے کرسکتے ہیں۔ اس اسکرپٹ کے نیچے میں نے ایک سالانہ شارپ تناسب کا حساب لگانے کے لئے ایک فنکشن بنایا ہے جس کی بنیاد پر وقت کی مدت کی واپسی کا سلسلہ:
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'])
گوگل کے لئے، خریدنے اور رکھنے کے لئے شارپ تناسب 0.7501 ہے۔ گولڈمین سیکس کے لئے یہ 0.2178 ہے:
equity_sharpe ((
equity_sharpe ((
اب ہم ایک مارکیٹ غیر جانبدار حکمت عملی کے لئے ایک ہی حساب کتاب کرنے کی کوشش کر سکتے ہیں۔ اس حکمت عملی کا مقصد عام طور پر مارکیٹ سے کسی خاص ایکویٹی کی کارکردگی کو مکمل طور پر الگ تھلگ کرنا ہے۔ اس کو حاصل کرنے کا آسان ترین طریقہ ایکسچینج ٹریڈڈ فنڈ (ای ٹی ایف) کی ایک مساوی رقم (ڈالر میں) مختصر کرنا ہے جو اس طرح کی مارکیٹ کو ٹریک کرنے کے لئے ڈیزائن کیا گیا ہے۔ امریکی بڑے کیپ ایکویٹی مارکیٹ کے لئے سب سے زیادہ واضح انتخاب ایس اینڈ پی 500 انڈیکس ہے ، جسے ایس پی ڈی آر ای ٹی ایف کے ذریعہ ٹریک کیا جاتا ہے ، جس میں ایس پی وائی کی ٹکر ہے۔
اس طرح کی حکمت عملی کے سالانہ شارپ تناسب کا حساب لگانے کے ل we ہم ایس پی وائی کے لئے تاریخی قیمتیں حاصل کریں گے اور پچھلے اسٹاک کی طرح ہی فیصد منافع کا حساب لگائیں گے ، اس استثناء کے ساتھ کہ ہم خطرہ سے پاک بینچ مارک کا استعمال نہیں کریں گے۔ ہم روزانہ خالص منافع کا حساب لگائیں گے جس میں طویل اور مختصر منافع کے مابین فرق کو گھٹانا اور پھر 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 ہے:
مارکیٹ_نیٹرل_شیرپ ((
مارکیٹ_نیٹرل_شیرپ ((