Ketika saya menulis artikel tentang backtesting yang lalu, saya sama sekali tidak bermaksud membuat lanjutan dari tulisan tersebut karena memang tujuan awalnya hanya ingin mengenalkan konsep dan cara backtesting yang sederhana untuk menguji strategi trading.
Namun, rasa skeptis saya tercolek ketika melihat sebuah unggahan di X/Twitter tentang sebuah strategi trading yang diambil dari sebuah buku. Seperti ini bunyinya:
Jadi kira-kira arti strateginya seperti ini: jika harga sebuah saham di atas rata-rata harga 200 harinya, maka belilah saham tersebut ketika sedang dalam titik terendah di 7 hari terakhirnya. Sebaliknya, jika sudah punya sahamnya, maka juallah saham tersebut ketika sedang dalam titik tertinggi di 7 hari terakhirnya.
Lalu saya coba backtest strategi tersebut untuk saham-saham yang ada di IHSG. Biar adil, saya ambil dua contoh di masing-masing level: bluechip, second liner, & third liner. Dengan asumsi modal awal Rp100 juta dan rentang waktu trading 1 tahun dan biaya transaksi 0.2%, maka inilah hasilnya. Anda bisa lihat code yang saya tulis dalam Python untuk strategi di atas di akhir tulisan ini.
Saham bluechip: BBCA & BBRI.
Hasil backtesting BBCA:
Start 2023-11-01 00:00...
End 2024-10-30 00:00...
Duration 364 days 00:00:00
Exposure Time [%] 14.705882
Equity Final [$] 101856692.9
Equity Peak [$] 101856692.9
Return [%] 1.856693
Buy & Hold Return [%] 20.348837
Return (Ann.) [%] 1.966977
Volatility (Ann.) [%] 8.716595
Sharpe Ratio 0.225659
Sortino Ratio 0.346744
Calmar Ratio 0.374936
Max. Drawdown [%] -5.246164
Avg. Drawdown [%] -3.854218
Max. Drawdown Duration 23 days 00:00:00
Avg. Drawdown Duration 17 days 00:00:00
# Trades 5
Win Rate [%] 80.0
Best Trade [%] 2.642164
Worst Trade [%] -0.680978
Avg. Trade [%] 1.275087
Max. Trade Duration 49 days 00:00:00
Avg. Trade Duration 33 days 00:00:00
Profit Factor 10.407123
Expectancy [%] 1.281209
SQN 1.131724
Hasil backtesting BBRI:
Start 2023-11-01 00:00...
End 2024-10-30 00:00...
Duration 364 days 00:00:00
Exposure Time [%] 15.546218
Equity Final [$] 113256554.03
Equity Peak [$] 113256554.03
Return [%] 13.256554
Buy & Hold Return [%] -2.484472
Return (Ann.) [%] 14.088939
Volatility (Ann.) [%] 12.691553
Sharpe Ratio 1.110104
Sortino Ratio 2.322562
Calmar Ratio 2.084209
Max. Drawdown [%] -6.75985
Avg. Drawdown [%] -2.934143
Max. Drawdown Duration 17 days 00:00:00
Avg. Drawdown Duration 8 days 00:00:00
# Trades 4
Win Rate [%] 100.0
Best Trade [%] 12.051591
Worst Trade [%] 6.466158
Avg. Trade [%] 9.325915
Max. Trade Duration 51 days 00:00:00
Avg. Trade Duration 30 days 00:00:00
Profit Factor NaN
Expectancy [%] 9.350944
SQN 1.137439
Saham second-liner: SIDO & LSIP
Hasil backtesting SIDO:
Start 2023-11-01 00:00...
End 2024-10-30 00:00...
Duration 364 days 00:00:00
Exposure Time [%] 14.705882
Equity Final [$] 92239800.16
Equity Peak [$] 103580700.16
Return [%] -7.7602
Buy & Hold Return [%] 24.485597
Return (Ann.) [%] -8.197454
Volatility (Ann.) [%] 10.213831
Sharpe Ratio 0.0
Sortino Ratio 0.0
Calmar Ratio 0.0
Max. Drawdown [%] -11.678778
Avg. Drawdown [%] -4.628217
Max. Drawdown Duration 40 days 00:00:00
Avg. Drawdown Duration 17 days 00:00:00
# Trades 1
Win Rate [%] 0.0
Best Trade [%] -7.760237
Worst Trade [%] -7.760237
Avg. Trade [%] -7.760237
Max. Trade Duration 49 days 00:00:00
Avg. Trade Duration 49 days 00:00:00
Profit Factor 0.0
Expectancy [%] -7.760237
SQN NaN
Hasil backtesting LSIP:
Start 2023-11-01 00:00...
End 2024-10-30 00:00...
Duration 364 days 00:00:00
Exposure Time [%] 15.546218
Equity Final [$] 78957226.49
Equity Peak [$] 104220089.84
Return [%] -21.042774
Buy & Hold Return [%] 33.333333
Return (Ann.) [%] -22.132521
Volatility (Ann.) [%] 14.91507
Sharpe Ratio 0.0
Sortino Ratio 0.0
Calmar Ratio 0.0
Max. Drawdown [%] -29.032707
Avg. Drawdown [%] -10.958523
Max. Drawdown Duration 42 days 00:00:00
Avg. Drawdown Duration 17 days 00:00:00
# Trades 5
Win Rate [%] 40.0
Best Trade [%] 3.767932
Worst Trade [%] -22.026231
Avg. Trade [%] -11.957257
Max. Trade Duration 51 days 00:00:00
Avg. Trade Duration 27 days 00:00:00
Profit Factor 0.104688
Expectancy [%] -11.192682
SQN -1.289667
Saham third-liner: FIRE & KJEN
Hasil backtesting FIRE:
Start 2023-11-01 00:00...
End 2024-10-30 00:00...
Duration 364 days 00:00:00
Exposure Time [%] 15.546218
Equity Final [$] 78957226.49
Equity Peak [$] 104220089.84
Return [%] -21.042774
Buy & Hold Return [%] 33.333333
Return (Ann.) [%] -22.132521
Volatility (Ann.) [%] 14.91507
Sharpe Ratio 0.0
Sortino Ratio 0.0
Calmar Ratio 0.0
Max. Drawdown [%] -29.032707
Avg. Drawdown [%] -10.958523
Max. Drawdown Duration 42 days 00:00:00
Avg. Drawdown Duration 17 days 00:00:00
# Trades 5
Win Rate [%] 40.0
Best Trade [%] 3.767932
Worst Trade [%] -22.026231
Avg. Trade [%] -11.957257
Max. Trade Duration 51 days 00:00:00
Avg. Trade Duration 27 days 00:00:00
Profit Factor 0.104688
Expectancy [%] -11.192682
SQN -1.289667
Hasil backtesting KJEN:
Start 2023-11-01 00:00...
End 2024-10-30 00:00...
Duration 364 days 00:00:00
Exposure Time [%] 10.504202
Equity Final [$] 80850959.232
Equity Peak [$] 103590287.232
Return [%] -19.149041
Buy & Hold Return [%] -30.769231
Return (Ann.) [%] -20.153682
Volatility (Ann.) [%] 11.365482
Sharpe Ratio 0.0
Sortino Ratio 0.0
Calmar Ratio 0.0
Max. Drawdown [%] -21.951216
Avg. Drawdown [%] -6.787704
Max. Drawdown Duration 22 days 00:00:00
Avg. Drawdown Duration 9 days 00:00:00
# Trades 1
Win Rate [%] 0.0
Best Trade [%] -19.149044
Worst Trade [%] -19.149044
Avg. Trade [%] -19.149044
Max. Trade Duration 34 days 00:00:00
Avg. Trade Duration 34 days 00:00:00
Profit Factor 0.0
Expectancy [%] -19.149044
SQN NaN
Seperti yang bisa dilihat dari hasil-hasil backtesting di atas, strategi ini sepertinya tidak bagus-bagus amat, malah cenderung merugikan jika Anda pakai strategi ini di saham-saham second liner & third liner. Dari contoh-contoh di atas, hasil yang paling bagus diperoleh pada saham BBRI, itupun dengan return yang hanya 13%. Sebuah angka yang bagi saya kurang nendang. 😆
Di samping itu, jika Anda perhatikan jumlah trade yang diperlukan ketika implementasi strategi ini, maka Anda akan lihat jumlah yang sangat sedikit. Ada yang 5x, bahkan ada yang hanya 1x trade saja dalam rentang waktu 1 tahun yang menjadi periode backtesting di atas. Jadi strategi ini sepertinya kurang cocok untuk Anda yang tangannya gatal untuk klik tombol Buy & Sell setiap hari.
After all, seperti yang saya tulis di artikel sebelumnya,
Semua indikator, baik yang teknikal maupun yang fundamental ada plus dan minusnya. Indikator yang tepat, dengan parameter yang tepat, diimplementasikan dengan strategi yang tepat, dan pada saham yang tepat, jelas dapat memberikan keuntungan yang maksimal.
Jadi, 6 sampel di atas jelas tidak bisa mewakili kesimpulan untuk keseluruhan saham yang ada di IHSG, apalagi saham-saham luar negeri. Jadi siapa tahu Anda bisa menemukan saham yang cocok yang bisa diimplementasikan dengan strategi ini.
Anyway, code Python yang saya tulis untuk strategi ini bisa dilihat di bawah:
from backtesting import Backtest, Strategy
import pandas as pd
class SevenDayHighLowStrategy(Strategy):
def init(self):
# Hitung rata-rata harga saham di 200 hari terakhir
self.ma200 = self.I(lambda x: pd.Series(x).rolling(window=200).mean(), self.data.Close)
# Hitung harga tertinggi dan terendah di 7 hari terakhir
self.high7 = self.I(lambda x: pd.Series(x).rolling(window=7).max(), self.data.Close)
self.low7 = self.I(lambda x: pd.Series(x).rolling(window=7).min(), self.data.Close)
def next(self):
# Beli jika harga di atas rata-rata harga 200 hari dan terendah dalam 7 hari terakhir
if self.data.Close[-1] > self.ma200[-1] and self.data.Close[-1] == self.low7[-1]:
self.buy()
# Jual jika harganya mencapai titik tertinggi di 7 hari terakhir
elif self.data.Close[-1] == self.high7[-1]:
self.sell()
# Jalankan backtesting
bt = Backtest(data, SevenDayHighLowStrategy, cash=100_000_000, commission=.002)
stats = bt.run()
print(stats)
bt.plot()
Leave a Reply