
Sistem perdagangan reversal tren kekuatan harga internal adalah strategi perdagangan tingkat garis harian yang didasarkan pada indikator kekuatan harga internal (IBS). Inti dari strategi ini adalah untuk mengidentifikasi titik balik pasar yang potensial dan menilai status overbought dan oversold pasar dengan memantau posisi relatif harga penutupan garis sebelumnya dalam kisaran tinggi dan rendahnya. Strategi ini sangat cocok untuk perdagangan saham dan indeks AS, dengan parameter default yang dioptimalkan untuk indeks utama seperti SPY / SPX dan NDQ / QQQ. Dengan menggabungkan indeks moving average (EMA) sebagai filter tren, strategi ini dapat mengikuti tren jangka panjang sambil menangkap peluang perdagangan yang dibawa oleh pergerakan harga jangka pendek.
Inti dari strategi ini adalah perhitungan dan penerapan indikator kekuatan harga internal (IBS). Indeks IBS dihitung dengan rumus berikut:
IBS = (前一日收盘价 - 前一日最低价) / (前一日最高价 - 前一日最低价)
Nilai IBS selalu berkisar antara 0 dan 1:
Aturan trading untuk strategi ini adalah sebagai berikut:
Ada beberapa syarat untuk masuk:
Kondisi untuk bermain lebih banyak:
Selain itu, strategi ini juga memperkenalkan parameter “persensi jarak minimum untuk masuk baru” untuk memastikan bahwa posisi baru dibuka hanya jika ada cukup penarikan harga, yang secara efektif mengurangi risiko penarikan dan mengoptimalkan manajemen dana.
Pengendalian waktu pasar yang akurat: Indikator IBS dapat secara akurat menangkap keadaan pasar yang terlalu banyak dibeli dan dijual, memberikan dasar matematika yang objektif untuk masuk dan keluar, mengurangi bias yang disebabkan oleh penilaian subjektif.
Mekanisme penyaringan tren: Melalui EMA sebagai filter tren, memastikan arah perdagangan konsisten dengan tren utama, secara efektif menghindari risiko perdagangan berlawanan. Strategi dapat menyesuaikan siklus EMA sesuai dengan karakteristik pasar yang berbeda, atau sepenuhnya menonaktifkan kondisi ini.
Manajemen posisi yang fleksibel: Strategi mendukung penambahan posisi piramida (maksimal 2 kali) dan memperkenalkan parameter “persentabilitas jarak masuk baru minimum”, yang memungkinkan mekanisme penambangan batch yang lebih cerdas untuk secara efektif mengurangi biaya rata-rata memegang posisi saat harga mundur.
Kontrol risiko otomatis: Strategi menetapkan batas waktu maksimum untuk memegang posisi, bahkan jika pasar tidak memicu sinyal keluar reguler, posisi akan dihapus secara otomatis setelah periode perdagangan maksimum yang telah ditentukan, yang secara efektif mengontrol waktu eksposur risiko untuk setiap perdagangan.
Optimasi parameter: Parameter default telah dioptimalkan untuk indeks pasar utama seperti SPY dan QQQ / NDQ, pengguna dapat langsung menerapkan pengaturan yang direkomendasikan:
Modus perdagangan yang komprehensif: Mendukung mode perdagangan hanya melakukan lebih, hanya melakukan lebih atau dua arah, sesuai dengan lingkungan pasar dan gaya perdagangan yang berbeda.
Sensitivitas parameter: IBS entry dan exit threshold memiliki dampak besar pada kinerja strategi, pengaturan parameter yang tidak tepat dapat menyebabkan overtrading atau kehilangan peluang perdagangan penting. Disarankan untuk melakukan pengembalian data sejarah yang memadai dan pengoptimalan parameter untuk varietas perdagangan tertentu sebelum diterapkan di pasar.
Risiko pasar bergoyang: Di pasar bergoyang tanpa tren yang jelas, sinyal IBS dapat sering muncul, menyebabkan overtrading dan peningkatan biaya transaksi yang tidak perlu. Solusinya adalah menambahkan kondisi penyaringan, seperti meminta konfirmasi dari beberapa sinyal IBS berturut-turut atau menggabungkannya dengan indikator lain (seperti ATR) untuk menilai volatilitas pasar.
Lagging dari perubahan tren mendadak: Indikator IBS yang didasarkan pada data sehari sebelumnya dapat bereaksi lambat ketika pasar mengalami pergeseran tren yang cepat, sehingga waktu masuk atau keluar tidak ideal. Disarankan untuk menyesuaikan nilai threshold IBS atau mempersingkat waktu maksimum posisi yang sesuai selama periode fluktuasi tinggi.
Pengelolaan risiko dana: secara default menggunakan dana 50% dari akun untuk berdagang, yang dapat menyebabkan risiko terekspos terlalu besar dalam kasus penambahan posisi berulang. Disarankan agar pengguna menyesuaikan ukuran posisi dan parameter penambahan posisi sesuai dengan kemampuan menanggung risikonya sendiri.
Batas implementasi teknis: Strategi ini didasarkan pada transaksi eksekusi harga penutupan yang mungkin mengalami slippage dan perbedaan harga dalam operasi nyata. Untuk mengurangi risiko tersebut, pertimbangan dapat diberikan untuk memesan pada waktu tertentu sebelum penutupan atau menggunakan daftar harga terbatas alih-alih daftar harga pasar.
Pengaturan ambang batas dinamis: Strategi saat ini menggunakan ambang batas masuk dan keluar IBS yang tetap, dan Anda dapat mempertimbangkan untuk menyesuaikan ambang batas ini berdasarkan dinamika volatilitas pasar. Misalnya, naikkan ambang batas masuk dan turunkan ambang batas keluar secara tepat untuk mengurangi sinyal palsu pada periode fluktuasi tinggi; pengaturan yang lebih radikal dapat digunakan pada periode fluktuasi rendah.
Konfirmasi multi-siklus waktu: memperkenalkan kerangka analisis multi-siklus waktu, yang mengharuskan sinyal IBS jangka pendek dan menengah untuk dikonfirmasi secara bersamaan sebelum melakukan transaksi. Misalnya, selain sinyal IBS garis harian, nilai IBS pada garis waktu atau 4 jam dapat dihitung, dan hanya dimasukan ketika beberapa periode waktu menunjukkan status overbought atau oversold, yang dapat meningkatkan kualitas sinyal secara signifikan.
Smart Stop: Strategi saat ini hanya bergantung pada sinyal keluar IBS dan risiko pengendalian waktu memegang posisi maksimum, dan mekanisme stop yang lebih cerdas dapat diperkenalkan. Misalnya, stop dinamis berbasis ATR, stop tracking, atau stop strategi berbasis support / resistance, untuk lebih melindungi keuntungan dan mengontrol risiko perdagangan tunggal.
Keadaan pasar beradaptasi: Memperkenalkan mekanisme identifikasi kondisi pasar, menggunakan parameter yang berbeda dalam berbagai kondisi pasar (trending market, oscillating market). Keadaan pasar dapat diidentifikasi melalui ADX (indicator arah rata-rata) atau indikator kekuatan tren lainnya, melonggarkan kondisi IBS dalam situasi tren yang kuat, menggunakan ambang IBS yang lebih ketat dalam pasar yang bergolak.
Optimasi Pembelajaran Mesin: Menggunakan teknologi pembelajaran mesin untuk mengoptimalkan dan memfilter sinyal IBS. Dengan model pelatihan, identifikasi sinyal IBS mana yang lebih mungkin menghasilkan perdagangan yang menguntungkan, dan menyesuaikan parameter secara otomatis sesuai dengan karakteristik pasar, untuk mencapai kinerja adaptasi strategi.
Internal price strength trend reversal trading system adalah strategi trading di tingkat garis harian yang menggabungkan internal price strengths (IBS) indicator dan index moving average (EMA). Strategi ini sangat cocok untuk perdagangan saham dan indeks AS. Strategi ini mengoptimalkan keputusan perdagangan dengan mengidentifikasi potensi titik balik pasar dan mengikuti tren jangka panjang.
Strategi telah melakukan optimasi parameter untuk indeks pasar utama seperti SPY/SPX dan NDQ/QQQ, dan pengguna dapat langsung menerapkan pengaturan yang direkomendasikan untuk berdagang. Namun, strategi perdagangan apa pun memiliki risiko, termasuk sensitivitas parameter, risiko pasar yang bergoyang, dan keterlambatan perubahan tren yang drastis.
Optimalisasi di masa depan meliputi penyesuaian nilai ambang dinamis, konfirmasi siklus waktu ganda, mekanisme stop loss cerdas, adaptasi keadaan pasar dan optimasi pembelajaran mesin. Perbaikan ini dapat meningkatkan kemampuan adaptasi dan ketahanan strategi, sehingga dapat mempertahankan kinerja yang baik di berbagai lingkungan pasar.
Sebagai strategi perdagangan kuantitatif, internal harga intensitas trend reversal trading system menyediakan pedagang dengan aturan berbasis, metode perdagangan obyektif, mengurangi pengaruh faktor emosional pada keputusan perdagangan, membantu mencapai hasil perdagangan yang lebih konsisten dan dapat diprediksi.
/*backtest
start: 2024-03-05 00:00:00
end: 2025-03-03 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//Implementation by AlgoTradeKit
//v.0.5
//The IBS Trading Strategy is a daily bars long-only trading system, based on the concept of Internal Bar Strength (IBS).
//The strategy aims to identify potential reversals by monitoring how the previous bar’s close positions itself within its high-low range.
//It is suitable for stock and US indices. The default parameters are optimized for SPY/SPX and NDQ/QQQ
//Setting for QQQ: 0.09, 0.985, 220, 0, 14
//Setting for SPY: 0.11, 0.995, 200, 0, 12
//@version=6
strategy("IBS (Internal Bar Strength) Trading Strategy for SPY and NDQ", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, pyramiding = 2, currency = currency.USD, process_orders_on_close=false)
// ***** INPUTS *****
// IBS thresholds
ibsEntryThreshold = input.float(0.09, title="IBS Entry Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
ibsExitThreshold = input.float(0.985, title="IBS Exit Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
// EMA period (set to 0 to disable the EMA condition)
emaPeriod = input.int(220, title="EMA Period (0 to disable)", minval=0, maxval=5000, step=1, tooltip="Exponential Moving Average Filter Period (0 to disable)")
// Minimum percentage drop required for a new entry (for dollar-cost averaging)
minEntryPct = input.float(0, title="Minimum Distance for New Entry (%)", step=0.05, minval=0.0, maxval=100, tooltip = "Distance in Price from Last Opened Position, in Percentage Terms (%)")
maxTradeDuration = input.int(title="Maximum Trade Duration (days)", defval=14, minval=1, step=1, maxval=1000, tooltip = "Exit at close if maximum trade duration is reached.")
// Persistent variable to record the bar index when the trade is entered.
var int entryBarIndex = na
// ***** EMA CALCULATION *****
// Calculate the EMA globally if the period is greater than 0, otherwise leave as na.
emaValue = emaPeriod > 0 ? ta.ema(close, emaPeriod) : na
// ***** IBS CALCULATION *****
// Calculate IBS using the previous bar’s values.
// Guard against division by zero: if previous high equals previous low, default IBS to 0.5.
prevHigh = high[1]
prevLow = low[1]
prevClose = close[1]
ibs = (prevHigh != prevLow) ? (prevClose - prevLow) / (prevHigh - prevLow) : 0.5
// ***** ENTRY AND EXIT CONDITIONS *****
// Define the EMA condition: if emaPeriod is 0, bypass the EMA check.
emaConditionLong = emaPeriod == 0 or (close > emaValue)
emaConditionShort = emaPeriod == 0 or (close < emaValue)
// Entry: IBS is below the entry threshold and the EMA condition holds.
enterLong = (ibs < ibsEntryThreshold) and emaConditionLong
enterShort = (ibs > ibsExitThreshold) and emaConditionShort
// Exit: IBS is above the exit threshold.
exitLong = ibs > ibsExitThreshold
exitShort = ibs < ibsEntryThreshold
// ***** DOLLAR-COST AVERAGING CONDITION IN PERCENTAGE *****
// Track the last entry price. Reset when there is no open position.
var float lastEntryPrice = na
if strategy.position_size == 0
lastEntryPrice := na
// If there is no previous entry, the condition is met.
// Otherwise, allow a new entry only if the current price is lower than the last entry price
// by at least the predefined percentage (converted to a fraction).
dcaCondition = na(lastEntryPrice) or ((close < lastEntryPrice) and (((lastEntryPrice - close) / lastEntryPrice) >= (minEntryPct / 100)))
dcaConditionShort = na(lastEntryPrice) or ((close > lastEntryPrice) and (((close - lastEntryPrice) / lastEntryPrice) >= (minEntryPct / 100)))
// ***** STRATEGY ORDERS *****
// Enter a long position only if both the entry condition and the DCA condition are met.
if enterLong and dcaCondition
strategy.entry("Long", strategy.long)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
if enterShort and dcaConditionShort
strategy.entry("Short", strategy.short)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
// Compute trade duration in days using the absolute difference
tradeDuration = not na(entryBarIndex) ? math.abs(bar_index - entryBarIndex) : 0
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitLong or (tradeDuration >= maxTradeDuration)
strategy.close("Long")
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitShort or (tradeDuration >= maxTradeDuration)
strategy.close("Short")
// ***** PLOTTING *****
// Plot IBS for reference, along with horizontal lines for the entry and exit thresholds.
//plot(ibs, title="IBS", color=color.blue, linewidth=2)
//hline(ibsEntryThreshold, title="IBS Entry Threshold", color=color.green)
//hline(ibsExitThreshold, title="IBS Exit Threshold", color=color.red)