Sumber daya yang dimuat... Pemuatan...

Rasio Sharpe untuk Pengukuran Kinerja Perdagangan Algoritmik

Penulis:Kebaikan, Dibuat: 2019-03-18 13:24:11, Diperbarui:

Ketika melakukan strategi perdagangan algoritmik, tergoda untuk menganggap pengembalian tahunan sebagai metrik kinerja yang paling berguna. Namun, ada banyak kekurangan dengan menggunakan ukuran ini secara terpisah. Perhitungan pengembalian untuk strategi tertentu tidak sepenuhnya mudah. Ini terutama berlaku untuk strategi yang tidak berarah seperti varian netral pasar atau strategi yang menggunakan leverage. Faktor-faktor ini membuat sulit untuk membandingkan dua strategi yang hanya didasarkan pada pengembaliannya.

Selain itu, jika kita disajikan dengan dua strategi yang memiliki pengembalian yang sama bagaimana kita tahu mana yang mengandung lebih banyak risiko? Selanjutnya, apa yang kita maksudkan dengan lebih banyak risiko? Dalam keuangan, kita sering khawatir dengan volatilitas pengembalian dan periode penarikan. Jadi jika salah satu strategi ini memiliki volatilitas pengembalian yang jauh lebih tinggi kita mungkin akan merasa kurang menarik, meskipun fakta bahwa pengembalian historisnya mungkin mirip jika tidak sama.

Masalah perbandingan strategi dan penilaian risiko ini memotivasi penggunaan rasio Sharpe.

Definisi Rasio Sharpe

William Forsyth Sharpe adalah ekonom pemenang Hadiah Nobel, yang membantu menciptakan Model Harga Aset Modal (CAPM) dan mengembangkan Rasio Sharpe pada tahun 1966 (kemudian diperbarui pada tahun 1994).

Rasio Sharpe S didefinisikan oleh hubungan berikut:imgDi mana Ra adalah period return dari aset atau strategi dan Rb adalah period return dari benchmark yang sesuai.

Rasio ini membandingkan rata-rata rata-rata kelebihan laba atas aset atau strategi dengan standar deviasi laba tersebut. Dengan demikian, volatilitas laba yang lebih rendah akan menyebabkan rasio Sharpe yang lebih besar, dengan asumsi laba yang sama.

Rasio Sharpe yang sering dikutip oleh mereka yang melakukan strategi perdagangan adalah Sharpe tahunan, perhitungannya tergantung pada periode perdagangan yang pengembaliannya diukur.imgPerhatikan bahwa rasio Sharpe itu sendiri HARUS dihitung berdasarkan Sharpe dari jenis periode waktu tertentu. Untuk strategi yang didasarkan pada periode perdagangan hari, N = 252 (karena ada 252 hari perdagangan dalam setahun, bukan 365), dan Ra, Rb harus menjadi pengembalian harian. Demikian pula untuk jam N = 252 × 6.5 = 1638, bukan N = 252 × 24 = 6048, karena hanya ada 6,5 jam dalam hari perdagangan.

Penggabungan Benchmark

Rumus untuk rasio Sharpe di atas mengacu pada penggunaan patokan. Patokan digunakan sebagai yardstick atau hindaran yang harus diatasi oleh strategi tertentu agar layak dipertimbangkan. Misalnya, strategi panjang sederhana yang menggunakan ekuitas besar AS harus berharap untuk mengalahkan indeks S&P500 rata-rata, atau menyamai untuk lebih sedikit volatilitas.

Pilihan patokan kadang-kadang bisa tidak jelas. Misalnya, apakah sektor Exchange Traded Fund (ETF) harus digunakan sebagai patokan kinerja untuk ekuitas individu, atau S&P500 itu sendiri? Mengapa tidak Russell 3000? Sama halnya strategi hedge fund harus membandingkan dirinya terhadap indeks pasar atau indeks hedge fund lainnya? Ada juga komplikasi tingkat bebas risiko. Apakah obligasi pemerintah domestik harus digunakan? Keranjang obligasi internasional? Tagihan jangka pendek atau jangka panjang? Campuran? Jelas ada banyak cara untuk memilih patokan!

Dalam satu contoh khusus, untuk strategi netral pasar, ada komplikasi khusus mengenai apakah menggunakan tingkat bebas risiko atau nol sebagai patokan. Indeks pasar itu sendiri tidak boleh digunakan karena strategi tersebut, secara desain, netral pasar. Pilihan yang benar untuk portofolio netral pasar bukanlah mengurangi tingkat bebas risiko karena itu adalah pembiayaan sendiri. Karena Anda mendapatkan bunga kredit, Rf, dari memegang margin, perhitungan sebenarnya untuk pengembalian adalah: (Ra + Rf) − Rf = Ra. Oleh karena itu tidak ada pengurangan aktual dari tingkat dolar bebas risiko untuk strategi netral.

Pembatasan

Meskipun prevalensi rasio Sharpe dalam keuangan kuantitatif, ia memang menderita beberapa keterbatasan.

Pertama, rasio Sharpe adalah yang melihat ke belakang. Hal ini hanya memperhitungkan distribusi pengembalian historis dan volatilitas, bukan yang terjadi di masa depan. Ketika membuat penilaian berdasarkan rasio Sharpe ada asumsi implisit bahwa masa lalu akan mirip dengan masa depan. Hal ini jelas tidak selalu terjadi, terutama di bawah perubahan rezim pasar.

Perhitungan rasio Sharpe mengasumsikan bahwa pengembalian yang digunakan secara normal didistribusikan (yaitu Gaussian). Sayangnya, pasar sering menderita kurtosis di atas distribusi normal. Pada dasarnya distribusi pengembalian memiliki ekor yang lebih besar dan dengan demikian peristiwa ekstrem lebih mungkin terjadi daripada distribusi Gaussian yang akan membuat kita percaya. Oleh karena itu, rasio Sharpe buruk dalam menggambarkan risiko ekor.

Ini dapat dilihat dengan jelas dalam strategi yang sangat rentan terhadap risiko tersebut. Misalnya, penjualan opsi panggilan (alias pennies under a steam roller). Aliran premium opsi yang stabil dihasilkan oleh penjualan opsi panggilan dari waktu ke waktu, yang mengarah ke volatilitas pengembalian yang rendah, dengan kelebihan yang kuat di atas tolok ukur. Dalam hal ini strategi akan memiliki rasio Sharpe yang tinggi (berdasarkan data historis). Namun, tidak memperhitungkan bahwa opsi tersebut dapat dipanggil, yang mengarah ke penarikan yang signifikan dan tiba-tiba (atau bahkan menghapus) dalam kurva ekuitas. Oleh karena itu, seperti ukuran kinerja strategi perdagangan algoritmik lainnya, rasio Sharpe tidak dapat digunakan secara terpisah.

Meskipun titik ini mungkin tampak jelas bagi sebagian orang, biaya transaksi harus dimasukkan dalam perhitungan rasio Sharpe agar dapat realistis. Ada banyak contoh strategi perdagangan yang memiliki Sharpe tinggi (dan dengan demikian kemungkinan profitabilitas yang besar) hanya untuk dikurangi menjadi rendah Sharpe, strategi profitabilitas rendah setelah biaya realistis telah diperhitungkan. Ini berarti menggunakan laba bersih ketika menghitung melebihi patokan. Oleh karena itu, biaya transaksi harus diperhitungkan di atas perhitungan rasio Sharpe.

Penggunaan Praktis dan Contoh

Salah satu pertanyaan yang jelas yang belum terjawab sejauh ini dalam artikel ini adalah Apa rasio Sharpe yang baik untuk strategi?. Secara pragmatis, Anda harus mengabaikan strategi yang memiliki rasio Sharpe tahunan S<1 setelah biaya transaksi. Dana lindung nilai kuantitatif cenderung mengabaikan strategi yang memiliki rasio Sharpe S<2. Satu dana lindung nilai kuantitatif terkemuka yang saya kenal bahkan tidak akan mempertimbangkan strategi yang memiliki rasio Sharpe S<3 saat dalam penelitian. Sebagai pedagang algoritmik ritel, jika Anda dapat mencapai rasio Sharpe S>2 maka Anda melakukannya dengan sangat baik.

Rasio Sharpe akan sering meningkat dengan frekuensi perdagangan. Beberapa strategi frekuensi tinggi akan memiliki rasio Sharpe satu digit tinggi (dan kadang-kadang rendah dua digit), karena mereka dapat menguntungkan hampir setiap hari dan tentu saja setiap bulan. Strategi ini jarang menderita risiko bencana dan dengan demikian meminimalkan volatilitas pengembalian mereka, yang mengarah pada rasio Sharpe yang tinggi.

Contoh Rasio Sharpe

Ini adalah artikel yang cukup teoritis sampai saat ini. Sekarang kita akan mengalihkan perhatian kita ke beberapa contoh yang sebenarnya. Kita akan mulai sederhana, dengan mempertimbangkan buy-and-hold jangka panjang dari ekuitas individu kemudian mempertimbangkan strategi netral pasar. Kedua contoh ini telah dilakukan di perpustakaan analisis data Python pandas.

Tugas pertama adalah untuk benar-benar mendapatkan data dan meletakkannya ke dalam objek panda DataFrame. Dalam artikel tentang implementasi master sekuritas di Python dan MySQL saya membuat sistem untuk mencapai ini. Sebagai alternatif, kita dapat menggunakan kode yang lebih sederhana ini untuk mengambil data Yahoo Finance secara langsung dan meletakkannya langsung ke dalam panda DataFrame. Di bagian bawah skrip ini saya telah membuat fungsi untuk menghitung rasio Sharpe tahunan berdasarkan aliran pengembalian periode waktu:

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()

Sekarang kita memiliki kemampuan untuk mendapatkan data dari Yahoo Finance dan langsung menghitung rasio Sharpe tahunan, kita dapat menguji strategi beli dan tahan untuk dua ekuitas.

Kita bisa membuat fungsi tambahan yang memungkinkan kita untuk melihat cepat buy-and-hold Sharpe di beberapa ekuitas untuk periode yang sama (hardcoded):

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

Untuk Google, rasio Sharpe untuk membeli dan memegang adalah 0,7501. untuk Goldman Sachs adalah 0,2178:

  • ekuitas_sharpe ((GOOG) 0.75013831274645904

  • ekuitas_sharpe ((GS) 0.21777027767830823

Sekarang kita dapat mencoba perhitungan yang sama untuk strategi netral pasar. Tujuan dari strategi ini adalah untuk sepenuhnya mengisolasi kinerja ekuitas tertentu dari pasar secara umum. Cara termudah untuk mencapai ini adalah dengan pergi pendek jumlah yang sama (dalam dolar) dari Exchange Traded Fund (ETF) yang dirancang untuk melacak pasar tersebut.

Untuk menghitung rasio Sharpe tahunan dari strategi seperti itu kita akan mendapatkan harga historis untuk SPY dan menghitung persentase pengembalian dengan cara yang sama dengan saham sebelumnya, dengan pengecualian bahwa kita tidak akan menggunakan patokan bebas risiko. Kita akan menghitung laba bersih harian yang membutuhkan pengurangan perbedaan antara laba panjang dan pendek dan kemudian dibagi dengan 2, karena kita sekarang memiliki dua kali lebih banyak modal perdagangan. Berikut adalah kode Python / panda untuk melakukan ini:

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

Untuk Google, rasio Sharpe untuk strategi netral pasar panjang/pendek adalah 0,7597.

  • market_neutral_sharpe ((GOOG, SPY) 0.75966612163452329

  • market_neutral_sharpe ((GS, SPY) 0.29991401047248328 Meskipun rasio Sharpe digunakan hampir di mana-mana dalam perdagangan algoritmik, kita perlu mempertimbangkan metrik kinerja dan risiko lainnya.


Lebih banyak