অ্যালগরিদমিক ট্রেডিং পারফরম্যান্স পরিমাপের জন্য শার্প অনুপাত

লেখক:ভাল, তৈরিঃ 2019-03-18 13:24:11, আপডেটঃ

একটি অ্যালগরিদমিক ট্রেডিং কৌশল সম্পাদন করার সময়, বার্ষিক রিটার্নকে সবচেয়ে দরকারী পারফরম্যান্স মেট্রিক হিসাবে বিবেচনা করা প্রলুব্ধকর। তবে, এই পরিমাপটি বিচ্ছিন্নভাবে ব্যবহারের সাথে অনেকগুলি ত্রুটি রয়েছে। নির্দিষ্ট কৌশলগুলির জন্য রিটার্ন গণনা সম্পূর্ণরূপে সহজ নয়। এটি বিশেষত এমন কৌশলগুলির জন্য সত্য যা নির্দেশমূলক নয় যেমন বাজার-নিরপেক্ষ রূপগুলি বা কৌশলগুলি যা লিভারেজ ব্যবহার করে। এই কারণগুলি কেবলমাত্র তাদের রিটার্নের ভিত্তিতে দুটি কৌশল তুলনা করা কঠিন করে তোলে।

উপরন্তু, যদি আমাদের কাছে একই রকম রিটার্নের দুটি কৌশল উপস্থাপন করা হয় তবে আমরা কীভাবে জানব যে কোনটিতে বেশি ঝুঁকি রয়েছে? তদতিরিক্ত, "আরও ঝুঁকি" বলতে আমরা কী বোঝাতে চাই? অর্থায়নে, আমরা প্রায়শই রিটার্নের অস্থিরতা এবং ড্রাউনডাউন সময়কাল নিয়ে উদ্বিগ্ন। সুতরাং যদি এই কৌশলগুলির মধ্যে একটির রিটার্নের উল্লেখযোগ্যভাবে উচ্চতর অস্থিরতা থাকে তবে আমরা সম্ভবত এটিকে কম আকর্ষণীয় মনে করব, যদিও এর historicalতিহাসিক রিটার্নগুলি একই রকম হতে পারে যদি না একই রকম হয়।

কৌশল তুলনা এবং ঝুঁকি মূল্যায়নের এই সমস্যাগুলি শার্প অনুপাতের ব্যবহারকে অনুপ্রাণিত করে।

শার্প অনুপাতের সংজ্ঞা

উইলিয়াম ফোর্সিথ শার্প একজন নোবেল বিজয়ী অর্থনীতিবিদ, যিনি মূলধন সম্পদ মূল্য নির্ধারণ মডেল (সিএপিএম) তৈরিতে সহায়তা করেছিলেন এবং 1966 সালে শার্প অনুপাতটি বিকাশ করেছিলেন (পরে 1994 সালে আপডেট করা হয়েছিল) ।

শার্প অনুপাত S নিম্নলিখিত সম্পর্ক দ্বারা সংজ্ঞায়িত করা হয়ঃimgযেখানে Ra হল সম্পদ বা কৌশলটির সময়কালের রিটার্ন এবং Rb হল উপযুক্ত রেফারেন্স ইন্ডেক্সের সময়কালের রিটার্ন।

অনুপাতটি সম্পদ বা কৌশলটির অতিরিক্ত রিটার্নের গড় গড়ের সাথে সেই রিটার্নগুলির স্ট্যান্ডার্ড বিচ্যুতির সাথে তুলনা করে। সুতরাং, রিটার্নের কম অস্থিরতা একই রিটার্ন অনুমান করে বৃহত্তর শার্প অনুপাতের দিকে পরিচালিত করবে।

শার্প রেসিও যা ট্রেডিং কৌশলগুলি সম্পাদনকারীদের দ্বারা প্রায়শই উদ্ধৃত করা হয় তা হল বার্ষিক শার্প, যার গণনা ট্রেডিং সময়ের উপর নির্ভর করে যার রিটার্নগুলি পরিমাপ করা হয়। অনুমান করা হয় যে এক বছরে N টি ট্রেডিং সময়কাল রয়েছে, বার্ষিক শার্প নিম্নরূপ গণনা করা হয়ঃimgনোট করুন যে শার্প অনুপাতটি নিজেই সেই নির্দিষ্ট সময়কালের টাইপের শার্পের ভিত্তিতে গণনা করা উচিত। দিনের ব্যবসায়ের ভিত্তিতে কৌশলটির জন্য, এন = 252 (যেহেতু বছরে 252 টি ব্যবসায়িক দিন রয়েছে, 365 নয়) এবং রা, আরবি অবশ্যই দৈনিক রিটার্ন হতে হবে। একইভাবে ঘন্টাগুলির জন্য এন = 252 × 6.5 = 1638, এন = 252 × 24 = 6048 নয়, কারণ একটি ব্যবসায়িক দিনে কেবল 6.5 ঘন্টা রয়েছে।

বেঞ্চমার্ক অন্তর্ভুক্ত

শার্প অনুপাতের জন্য উপরের সূত্রটি একটি বেঞ্চমার্ক ব্যবহারের কথা উল্লেখ করে। একটি বেঞ্চমার্ক একটি yardstick বা একটি obstacle হিসাবে ব্যবহৃত হয় যা একটি নির্দিষ্ট কৌশলকে বিবেচনা করার জন্য অতিক্রম করতে হবে। উদাহরণস্বরূপ, মার্কিন যুক্তরাষ্ট্রের বড় মূলধন শেয়ার ব্যবহার করে একটি সহজ দীর্ঘ-কেবল কৌশলটি গড় হিসাবে এসএন্ডপি 500 সূচককে পরাজিত করার আশা করা উচিত, বা কম অস্থিরতার জন্য এটির সাথে মিলিত হওয়া উচিত।

বেঞ্চমার্ক নির্বাচন কখনও কখনও অস্পষ্ট হতে পারে। উদাহরণস্বরূপ, একটি সেক্টর এক্সচেঞ্জ ট্রেডেড ফান্ড (ইটিএফ) কে পৃথক শেয়ারের জন্য পারফরম্যান্স বেঞ্চমার্ক হিসাবে ব্যবহার করা উচিত, বা এসএন্ডপি 500 নিজেই? কেন রাসেল 3000 নয়? সমানভাবে একটি হেজ ফান্ড কৌশলকে বাজারের সূচক বা অন্যান্য হেজ ফান্ডের সূচকের সাথে নিজেকে বেঞ্চমার্ক করা উচিত? এছাড়াও ঝুঁকিমুক্ত হার এর জটিলতা রয়েছে। দেশীয় সরকারী বন্ডগুলি ব্যবহার করা উচিত? আন্তর্জাতিক বন্ডের একটি ঝুড়ি? স্বল্পমেয়াদী বা দীর্ঘমেয়াদী বিল? একটি মিশ্রণ? স্পষ্টতই একটি বেঞ্চমার্ক চয়ন করার প্রচুর উপায় রয়েছে! শার্প অনুপাত সাধারণত ঝুঁকিমুক্ত হার ব্যবহার করে এবং প্রায়শই, শেয়ার কৌশলগুলির জন্য, এটি 10 বছরের সরকারী ট্রেজারি বিলের উপর ভিত্তি করে।

একটি নির্দিষ্ট ক্ষেত্রে, বাজার-নিরপেক্ষ কৌশলগুলির জন্য, রেফারেন্স হিসাবে ঝুঁকি-মুক্ত হার বা শূন্য ব্যবহার করা উচিত কিনা তা নিয়ে একটি বিশেষ জটিলতা রয়েছে। বাজার সূচকটি নিজেই ব্যবহার করা উচিত নয় কারণ কৌশলটি, নকশা অনুসারে, বাজার-নিরপেক্ষ। একটি বাজার-নিরপেক্ষ পোর্টফোলিওর জন্য সঠিক পছন্দ হ'ল ঝুঁকি-মুক্ত হারটি বিয়োগ করা নয় কারণ এটি স্ব-অর্থায়ন। যেহেতু আপনি মার্জিন ধরে রাখার থেকে একটি creditণ আগ্রহ, আরএফ অর্জন করেন, রিটার্নের আসল গণনাটি হ'লঃ (রা + আরএফ) -আরএফ = রা। সুতরাং নিরপেক্ষ কৌশলগুলির জন্য ঝুঁকি-মুক্ত ডলারের হার থেকে প্রকৃত বিয়োগ নেই।

সীমাবদ্ধতা

পরিমাণগত অর্থায়নে শার্প অনুপাতের প্রচলন সত্ত্বেও, এটি কিছু সীমাবদ্ধতা ভোগ করে।

প্রথমত, শার্প অনুপাতটি পিছনে তাকিয়ে রয়েছে। এটি কেবলমাত্র historicalতিহাসিক রিটার্ন বিতরণ এবং অস্থিরতার জন্য অ্যাকাউন্ট করে, ভবিষ্যতে ঘটে যাওয়া নয়। শার্প অনুপাতের উপর ভিত্তি করে বিচার করার সময় একটি অব্যক্ত অনুমান রয়েছে যে অতীত ভবিষ্যতের সাথে অনুরূপ হবে। এটি স্পষ্টতই সর্বদা ক্ষেত্রে নয়, বিশেষত বাজারের ব্যবস্থার পরিবর্তনের অধীনে।

শার্প অনুপাত গণনা অনুমান করে যে ব্যবহৃত রিটার্নগুলি স্বাভাবিকভাবে বিতরণ করা হয় (অর্থাৎ গাউসিয়ান) । দুর্ভাগ্যক্রমে, বাজারগুলি প্রায়শই স্বাভাবিক বিতরণের তুলনায় বেশি কুরটোসিস থেকে ভুগতে থাকে। মূলত রিটার্নের বিতরণে ফেটার লেজ রয়েছে এবং সুতরাং একটি গাউসিয়ান বিতরণ আমাদের বিশ্বাস করার চেয়ে চরম ঘটনা ঘটার সম্ভাবনা বেশি। অতএব, শার্প অনুপাতটি লেজের ঝুঁকি চিহ্নিত করতে দুর্বল।

এটি এমন কৌশলগুলিতে স্পষ্টভাবে দেখা যায় যা এই জাতীয় ঝুঁকিগুলির জন্য অত্যন্ত ঝুঁকিপূর্ণ। উদাহরণস্বরূপ, কল অপশন বিক্রয় (ওরফে স্টিম রোলারের অধীনে পেনি ) । সময়মতো কল অপশন বিক্রির মাধ্যমে বিকল্প প্রিমিয়ামগুলির একটি ধ্রুবক প্রবাহ উত্পন্ন হয়, যার ফলে রিটার্নের কম অস্থিরতা হয়, একটি বেঞ্চমার্কের উপরে একটি শক্তিশালী অতিরিক্ত থাকে। এই ক্ষেত্রে কৌশলটির একটি উচ্চ শার্প অনুপাত থাকবে (ঐতিহাসিক তথ্যের উপর ভিত্তি করে) । তবে, এটি বিবেচনা করে না যে এই জাতীয় বিকল্পগুলি কল করা যেতে পারে, যার ফলে ইক্যুইটি বক্ররে উল্লেখযোগ্য এবং হঠাৎ ড্রডাউন (বা এমনকি মুছে ফেলা) হতে পারে। অতএব, অ্যালগরিদমিক ট্রেডিং কৌশল কর্মক্ষমতার যে কোনও পরিমাপের মতো, শার্প অনুপাতটি বিচ্ছিন্নভাবে ব্যবহার করা যায় না।

যদিও এই পয়েন্টটি কারও কারও কাছে সুস্পষ্ট মনে হতে পারে, তবে শার্প অনুপাতের হিসাবের মধ্যে লেনদেনের ব্যয় অন্তর্ভুক্ত করা আবশ্যক যাতে এটি বাস্তবসম্মত হয়। এমন অসংখ্য উদাহরণ রয়েছে যার ট্রেডিং কৌশলগুলির উচ্চ শার্প রয়েছে (এবং তাই উচ্চ মুনাফার সম্ভাবনা) কেবলমাত্র বাস্তবসম্মত ব্যয়গুলি বিবেচনা করার পরে কম শার্পে, নিম্ন মুনাফার কৌশলগুলিতে হ্রাস করা হয়। এর অর্থ হ'ল রেফারেন্স মার্ক ছাড়িয়ে হিসাব করার সময় নেট রিটার্ন ব্যবহার করা। অতএব, শার্প অনুপাতের হিসাবের আপস্ট্রিমে লেনদেনের ব্যয়গুলি বিবেচনা করা উচিত।

ব্যবহারিক ব্যবহার এবং উদাহরণ

একটি সুস্পষ্ট প্রশ্ন যা এই নিবন্ধে এখনও অবধি উত্তরহীন রয়ে গেছে তা হ'ল একটি কৌশল জন্য একটি ভাল শার্প অনুপাত কি?। ব্যবহারিকভাবে, আপনার এমন কোনও কৌশল উপেক্ষা করা উচিত যা লেনদেনের ব্যয় পরে বার্ষিক শার্প অনুপাত S<1 রয়েছে। পরিমাণগত হেজ ফান্ডগুলি শার্প অনুপাত S<2 রয়েছে এমন কোনও কৌশল উপেক্ষা করে। আমি পরিচিত একটি বিশিষ্ট পরিমাণগত হেজ ফান্ড এমনকি গবেষণা করার সময় শার্প অনুপাত S<3 ছিল এমন কৌশলগুলি বিবেচনা করবে না। খুচরা অ্যালগরিদমিক ব্যবসায়ী হিসাবে, আপনি যদি একটি শার্প অনুপাত S>2 অর্জন করতে পারেন তবে আপনি খুব ভাল করছেন।

শার্প অনুপাত প্রায়শই ট্রেডিং ফ্রিকোয়েন্সির সাথে বৃদ্ধি পায়। কিছু উচ্চ ফ্রিকোয়েন্সি কৌশলগুলির উচ্চ একক (এবং কখনও কখনও কম ডাবল) ডিজিট শার্প অনুপাত থাকবে, কারণ তারা প্রায় প্রতিদিন এবং অবশ্যই প্রতি মাসে লাভজনক হতে পারে। এই কৌশলগুলি খুব কমই বিপর্যয়কর ঝুঁকিতে ভোগ করে এবং এইভাবে তাদের রিটার্নের অস্থিরতা হ্রাস করে, যা এই জাতীয় উচ্চ শার্প অনুপাতের দিকে পরিচালিত করে।

শার্প অনুপাতের উদাহরণ

এটি এখন পর্যন্ত একটি তত্ত্বগত নিবন্ধ ছিল। এখন আমরা কিছু বাস্তব উদাহরণে আমাদের মনোযোগ ঘুরিয়ে দেব। আমরা কেবলমাত্র একটি পৃথক ইক্যুইটির দীর্ঘ-কেবল ক্রয় এবং হোল্ড বিবেচনা করে শুরু করব এবং তারপরে একটি বাজার-নিরপেক্ষ কৌশল বিবেচনা করব। এই উভয় উদাহরণ পাইথন পান্ডা ডেটা বিশ্লেষণ লাইব্রেরিতে পরিচালিত হয়েছে।

প্রথম কাজটি আসলে ডেটা সংগ্রহ করা এবং এটিকে একটি পান্ডা ডেটাফ্রেম অবজেক্টে রাখা। পাইথন এবং মাইএসকিউএল-এ সিকিউরিটিজ মাস্টার বাস্তবায়নের নিবন্ধে আমি এটি অর্জনের জন্য একটি সিস্টেম তৈরি করেছি। বিকল্পভাবে, আমরা এই সহজ কোডটি ব্যবহার করতে পারি যাহু ফিনান্স ডেটা সরাসরি দখল করতে এবং এটি সরাসরি পান্ডা ডেটাফ্রেমে রাখতে। এই স্ক্রিপ্টের নীচে আমি একটি সময়কাল রিটার্ন স্ট্রিমের উপর ভিত্তি করে বার্ষিক শার্প অনুপাত গণনা করার জন্য একটি ফাংশন তৈরি করেছিঃ

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'])

গুগলের জন্য, শার্পের ক্রয় ও হোল্ডিং অনুপাত ০.৭৫০১। গোল্ডম্যান স্যাক্সের জন্য ০.২১৭৮:

  • ইক্যুইটি_শার্পে ((GOOG) 0.75013831274645904

  • equity_sharpe ((GS) 0.21777027767830823

এখন আমরা একটি বাজার-নিরপেক্ষ কৌশল জন্য একই হিসাব চেষ্টা করতে পারেন। এই কৌশল লক্ষ্য সম্পূর্ণরূপে সাধারণ বাজার থেকে একটি নির্দিষ্ট ইক্যুইটি এর কর্মক্ষমতা বিচ্ছিন্ন করা হয়। এটি অর্জন করার সবচেয়ে সহজ উপায় একটি এক্সচেঞ্জ ট্রেডেড ফান্ড (ইটিএফ) এর সমান পরিমাণে (ডলার) শর্ট যেতে হয় যা এই ধরনের বাজার ট্র্যাক করার জন্য ডিজাইন করা হয়েছে। মার্কিন বড় ক্যাপ ইক্যুইটি বাজারের জন্য সবচেয়ে সুস্পষ্ট পছন্দ হল এসএন্ডপি 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) ০.৭৫৯৬৬৬৬১২১৬৩৪৫২৩২৯

  • মার্কেট_নিউট্রাল_শার্পে ((GS, SPY) 0.29991401047248328 যদিও শার্প অনুপাতটি অ্যালগরিদমিক ট্রেডিংয়ে প্রায় সর্বত্রই ব্যবহৃত হয়, তবুও আমাদের পারফরম্যান্স এবং ঝুঁকির অন্যান্য পরিমাপগুলি বিবেচনা করতে হবে। পরবর্তী নিবন্ধগুলিতে আমরা ড্রডাউনগুলি নিয়ে আলোচনা করব এবং তারা কৌশল চালানোর সিদ্ধান্তকে কীভাবে প্রভাবিত করে বা না করে।


আরো