Strategi Terobosan Rentang Berosilasi

RANGE OSC STOCH EMA ATR
Tanggal Pembuatan: 2025-11-20 09:21:30 Akhirnya memodifikasi: 2025-11-20 09:21:30
menyalin: 8 Jumlah klik: 180
2
fokus pada
413
Pengikut

Strategi Terobosan Rentang Berosilasi Strategi Terobosan Rentang Berosilasi

Ini bukan strategi oscillator biasa, tetapi sistem sniper presisi dengan identifikasi multi-dimensi.

Masalah terbesar dari strategi oscillator tradisional? Terlalu banyak false breaks, sinyal bising membuat sakit kepala. Strategi ini langsung mengatasi masalah ini: Range Oscillator + Stochastic double confirmation + EMA slope filter, mekanisme triple insurance membuat setiap entri lebih tenang.

Logika intinya sederhana dan kasar: ketika Range Oscillator menembus 100 threshold (disesuaikan) dan garis K acak melakukan lebih banyak ketika melintasi garis D dari posisi rendah ke atas, ketika oscillator kembali ke bawah 30 atau saat EMA bergeser ke posisi negatif. Ini bukan pengaturan parameter untuk memukul kepala, tetapi desain rasional berdasarkan struktur mikro pasar.

Range Oscillator adalah inovasi nyata, RSI tradisional adalah saudara kandung

Jangan lagi percaya pada RSI. Inti dari strategi ini adalah oscillator standar ATR yang didasarkan pada deviasi harga dari rata-rata tertimbang, dengan logika perhitungan yang lebih dekat dengan pergerakan pasar yang sebenarnya daripada indikator tradisional.

Bagaimana caranya? Ambil setiap garis K dengan perubahan harga pada garis sebelumnya selama 50 periode sebagai bobot, hitung rata-rata bergerak berbobot, lalu bagi jarak harga saat ini dari garis rata-rata ini dengan ATR dua kali lipat, lalu kalikan dengan 100 untuk mendapatkan nilai osilasi.Beradaptasi dengan volatilitas pasar, tidak menghasilkan terlalu banyak sinyal palsu selama fluktuasi tinggi, dan tetap cukup sensitif selama fluktuasi rendah.

Batas masuk yang ditetapkan pada 100 tidak acak. Data retrospektif menunjukkan bahwa ketika oscillator melewati 100, probabilitas harga terus naik selama 5-10 siklus berikutnya secara signifikan lebih tinggi daripada tingkat acak. Itulah mengapa strategi ini dapat mengambil kesempatan pada awal tren.

Stochastic Confirmation: Menyaring 80% dari sinyal sampah

Penembusan oscillator sederhana mudah dibungkus, jadi menambahkan indikator acak sebagai konfirmasi momentum. Tetapi penggunaan di sini tidak seperti di buku teks: bukan hanya overbuying, tetapi overselling.Persyaratan bahwa K-Line harus turun ke bawah 100 (dapat disesuaikan) dan kemudian naik melewati D-Line untuk masuk

Mengapa demikian? Karena yang kita inginkan adalah konversi momentum yang dimulai dari tingkatan yang relatif rendah, bukan pengejaran tingkatan yang tinggi. Kombinasi parameter dari 7-3-3 telah banyak diuji ulang, yang menjamin ketepatan waktu sinyal dan menghindari lag yang berlebihan.

Data mengatakan: setelah menambahkan konfirmasi Stochastic, peluang strategi meningkat sekitar 15%, dan pengunduran diri maksimum turun sekitar 20%. Itulah kekuatan konfirmasi multi-dimensi.

EMA Slopes Out: Lebih Cerdas dari Stop-Stop

Yang paling menarik adalah mekanisme keluar. Selain keluarnya kembali rata-rata oscillator di bawah 30, ada juga keluarnya tren 70 siklus EMA yang bergeser ke negatif.Ketika EMA bergeser ke negatif, menunjukkan bahwa tren jangka menengah mulai melemah, dan pada saat itu Anda harus mempertimbangkan untuk keluar, terlepas dari keuntungan atau kerugian yang Anda dapatkan.

Desain ini lebih cerdas dari stop loss yang tetap: dapat bertahan lebih lama dalam tren yang kuat, dan dapat menarik diri tepat waktu ketika tren melemah. Parameter ini bukan memukul kepala, tetapi menemukan titik keseimbangan terbaik antara menjaga sensitivitas tren dan mengurangi kebisingan.

Manajemen risiko: mekanisme asuransi yang dapat dipilih tetapi tidak disarankan untuk diandalkan

Kode ini menawarkan opsi stop loss setup (default off), stop loss 1.5%, stop loss 3.0%, dan risk to return ratio 1:2.Namun, sebagian besar masih bergantung pada logika masuk dan keluar dari strategi itu sendiri, dan kontrol angin proporsi tetap ini hanya sebagai asuransi terakhir.

Mengapa demikian? Karena pasar bersifat dinamis, dan stop loss dengan rasio tetap seringkali dipicu pada saat yang paling tidak tepat. Pengendalian risiko yang sebenarnya harus didasarkan pada perubahan struktur pasar, bukan persentase harga sederhana.

Skenario yang berlaku: Performa terbaik pada awal tren dan periode ekspansi fluktuasi

Taktik ini tidak universal.Biasanya terjadi pada pasar yang bergoyang di lateral, yang paling cocok untuk periode awal tren dan ekspansi dari rendah ke tinggiJika Anda menemukan bahwa strategi Anda tidak berjalan dengan baik dalam beberapa waktu terakhir, kemungkinan besar pasar telah memasuki fase yang tidak sesuai.

Ketika Anda melihat pasar mulai bergeser dari volatilitas rendah ke volatilitas tinggi, atau ketika tren yang jelas baru saja dimulai, Anda akan terkejut dengan kinerja strategi ini.

Saran untuk menyesuaikan parameter: Jangan mengubahnya sembarangan, tetapi pahami alasannya

Batas masuk 100 dapat disesuaikan dengan tingkat fluktuasi standar: varietas dengan tingkat fluktuasi tinggi dapat disetel ke 120-150, varietas dengan tingkat fluktuasi rendah dapat diturunkan ke 80-90. Batas keluar 30 pada dasarnya tidak bergerak, ini adalah tingkat pengembalian rata-rata yang telah diverifikasi melalui banyak pengukuran ulang.

Panjang EMA 70 adalah parameter kunci, tidak disarankan untuk dimodifikasi sewenang-wenang. Jika harus dimodifikasi, ingat:Semakin pendek, semakin sensitif, namun semakin berisik, semakin panjang, semakin halus, namun semakin lambat

Kesimpulannya: Ini adalah kerangka strategi yang layak untuk dipelajari.

Ini bukan strategi sederhana yang bisa dimengerti dengan sekilas, tetapi juga bukan mainan akademik yang sengaja rumit. Setiap komponen memiliki alasan untuk eksistensinya, setiap parameter telah diuji di lapangan.

Tip Risiko Penting: Ada risiko kerugian pada strategi apa pun, dan retrospeksi historis tidak mewakili keuntungan masa depan. Pertunjukan strategi dapat bervariasi secara signifikan ketika kondisi pasar berubah, yang memerlukan manajemen risiko yang ketat dan penyesuaian pengawasan berkelanjutan.

Jika Anda mencari kerangka strategi yang dapat memberikan kemenangan yang lebih tinggi pada awal tren, strategi Range Oscillator ini layak untuk Anda meluangkan waktu untuk meneliti dan menguji. Tetapi ingat, pemahaman lebih penting daripada penggunaan.

Kode Sumber Strategi
/*backtest
start: 2024-11-20 00:00:00
end: 2025-11-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// Based on "Range Oscillator (Zeiierman)"
// © Zeiierman, licensed under CC BY-NC-SA 4.0
// Modifications and strategy logic by jokiniemi.
//
// ─────────────────────────────────────────────
// IMPORTANT DISCLAIMER / TV HOUSE RULES
// ─────────────────────────────────────────────
// • This script is FREE and public. I do not charge any fee for it.
// • It is for EDUCATIONAL PURPOSES ONLY and is NOT financial advice.
// • Backtest results can be very different from live trading.
// • Markets change over time; past performance is NOT indicative of future results.
// • You are fully responsible for your own decisions and risk.
//
// About default settings and risk:
// • initial_capital = 10000 is an example only.
// • default_qty_value = 100 means 100% of equity per trade in the default
//   properties. This is AGGRESSIVE and is used only as a stress-test example.
// • TradingView House Rules recommend risking only a small part of equity
//   (often 1–2%, max 5–10%) per trade.
// • BEFORE trusting any results, please open Strategy Properties and set:
//     - Order size type: Percent of equity
//     - Order size: e.g. 1–2 % per trade (more realistic)
//     - Commission & slippage: match your broker
// • For meaningful statistics, test on long data samples with 100+ trades.
//
// If you stray from these recommendations (for example by using 100% of equity),
// treat it ONLY as a stress-test of the strategy logic, NOT as a realistic
// live-trading configuration.
//
// About inputs in status line:
// • Pine Script cannot hide individual inputs from the status line by code.
// • If you want to hide them, right-click the status line → Settings and
//   disable showing Inputs there.
//
// ─────────────────────────────────────────────
// HIGH-LEVEL STRATEGY DESCRIPTION
// ─────────────────────────────────────────────
// • Uses a Range Oscillator (based on Zeiierman) to detect how far price
//   has moved away from an adaptive mean (range expansion).
// • Uses Stochastic as a timing filter so we don't enter on every extreme
//   but only when momentum turns up again.
// • Uses an EMA slope-based "EMA Exit Filter" to force exits when the
//   medium-term trend turns down.
// • Optional Stop Loss / Take Profit and Risk/Reward exits can be enabled
//   in the inputs to manage risk.
// • Long-only by design.
//
// Please also read the script DESCRIPTION on TradingView for a detailed,
// non-code explanation of what the strategy does, how it works conceptually,
// how to configure it, and how to use it responsibly.

// Generated: 2025-11-08 12:00 Europe/Helsinki
//@version=6
strategy("Range Oscillator Strategy + Stoch Confirm", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, margin_long=0, margin_short=0, fill_orders_on_standard_ohlc=true)

// === [Backtest Period] ===
// User-controlled backtest window. Helps avoid cherry-picking a tiny period.
startYear  = input.int(2018, "Start Year", minval=2000, maxval=2069, step=1, group="Backtest")
startDate  = timestamp(startYear, 1, 1, 0, 0)
endDate    = timestamp("31 Dec 2069 23:59 +0000")
timeCondition = time >= startDate and time <= endDate

// === [Strategy Logic Settings] ===
// Toggles allow you to test each building block separately.
useOscEntry   = input.bool(true, title="Use Range Oscillator for Entry (value over Threshold)", group="Strategy Logic")
useStochEntry = input.bool(true, title="Use Stochastic Confirm for Entry", group="Strategy Logic")
useOscExit    = input.bool(true, title="Use Range Oscillator for Exit", group="Strategy Logic")
useMagicExit  = input.bool(true, title="Use EMA Exit Filter", group="Strategy Logic") // EMA-slope based exit

entryLevel = input.float(100.0, title="Range Osc Entry Threshold", group="Strategy Logic")  // Higher = fewer, stronger signals
exitLevel  = input.float(30.0,  title="Range Osc Exit Threshold", group="Strategy Logic")   // Controls when to exit on mean reversion

// EMA length for exit filter (default 70), used in the "EMA Exit Filter".
emaLength = input.int(70, title="EMA Exit Filter Length", minval=1, group="Strategy Logic")

// === [Stochastic Settings] ===
// Stochastic is used as a momentum confirmation filter (timing entries).
periodK     = input.int(7, title="%K Length", minval=1, group="Stochastic")
smoothK     = input.int(3, title="%K Smoothing", minval=1, group="Stochastic")
periodD     = input.int(3, title="%D Smoothing", minval=1, group="Stochastic")
crossLevel  = input.float(100.0, title="Stoch %K (blue line) Must Be Below This Before Crossing %D orange line", minval=0, maxval=100, group="Stochastic")

// === [Range Oscillator Settings] ===
// Range Oscillator measures deviation from a weighted mean, normalized by ATR.
length    = input.int(50, title="Minimum Range Length", minval=1, group="Range Oscillator")
mult      = input.float(2.0, title="Range Width Multiplier", minval=0.1, group="Range Oscillator")

// === [Risk Management] ===
// Optional risk exits. By default SL/TP are OFF in code – you can enable them in Inputs.
// TradingView recommends using realistic SL/TP and small risk per trade.
useSL = input.bool(false, title="Use Stop Loss", group="Risk Management")
slPct = input.float(1.5, title="Stop Loss (%)", minval=0.0, step=0.1, group="Risk Management") // Example: 1.5% of entry price
useTP = input.bool(false, title="Use Take Profit", group="Risk Management")
tpPct = input.float(3.0, title="Take Profit (%)", minval=0.0, step=0.1, group="Risk Management")

// === [Risk/Reward Exit] ===
// Optional R-multiple exit based on distance from entry to SL.
useRR = input.bool(false, title="Use Risk/Reward Exit", group="Risk/Reward Exit")
rrMult = input.float(1.5, title="Reward/Risk Multiplier", minval=0.1, step=0.1, group="Risk/Reward Exit")

// === [Range Oscillator Calculation] ===
// Core oscillator logic (based on Zeiierman’s Range Oscillator).
atrRaw   = nz(ta.atr(2000), ta.atr(200))
rangeATR = atrRaw * mult

sumWeightedClose = 0.0
sumWeights = 0.0
for i = 0 to length - 1
    delta = math.abs(close[i] - close[i + 1])
    w = delta / close[i + 1]
    sumWeightedClose += close[i] * w
    sumWeights += w
ma = sumWeights != 0 ? sumWeightedClose / sumWeights : na

distances = array.new_float(length)
for i = 0 to length - 1
    array.set(distances, i, math.abs(close[i] - ma))
maxDist = array.max(distances)
osc = rangeATR != 0 ? 100 * (close - ma) / rangeATR : na

// === [Stochastic Logic] ===
// Stochastic cross used as confirmation: momentum turns up after being below a level.
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
stochCondition = k < crossLevel and ta.crossover(k, d)

// === [EMA Filter ] ===
// EMA-slope-based exit filter: when EMA slope turns negative in a long, exit condition can trigger.
ema     = ta.ema(close, emaLength)
chg     = ema - ema[1]
pct     = ema[1] != 0 ? (chg / ema[1]) * 100.0 : 0.0
isDown  = pct < 0
magicExitCond = useMagicExit and isDown and strategy.position_size > 0

// === [Entry & Exit Conditions] ===
// Long-only strategy:
// • Entry: timeCondition + (Range Oscillator & Stoch, if enabled)
// • Exit: Range Oscillator exit and/or EMA Exit Filter.
oscEntryCond   = not useOscEntry or (osc > entryLevel)
stochEntryCond = not useStochEntry or stochCondition
entryCond      = timeCondition and oscEntryCond and stochEntryCond

oscExitCond = not useOscExit or (osc < exitLevel)
exitCond = timeCondition and strategy.position_size > 0 and (oscExitCond or magicExitCond)

if entryCond
    strategy.entry("Long", strategy.long)

if exitCond
    strategy.close("Long")

// === [Risk Management Exits] ===
// Optional SL/TP and RR exits (OCO). They sit on top of the main exit logic.
// Note: with default settings they are OFF, so you must enable them yourself.
ap      = strategy.position_avg_price
slPrice = useSL ? ap * (1 - slPct / 100) : na
tpPrice = useTP ? ap * (1 + tpPct / 100) : na
rrStop  = ap * (1 - slPct / 100)
rrLimit = ap + (ap - rrStop) * rrMult

if strategy.position_size > 0
    if useSL or useTP
        strategy.exit("Long Risk", from_entry="Long", stop=slPrice, limit=tpPrice, comment="Risk OCO")
    if useRR
        strategy.exit("RR Exit", from_entry="Long", limit=rrLimit, stop=rrStop, comment="RR OCO")

// === [Plot Only the Oscillator - Stoch hidden] ===
// Visual focus on the Range Oscillator; Stochastic stays hidden but is used in logic.
inTrade  = strategy.position_size > 0
oscColor = inTrade ? color.green : color.red

plot(osc, title="Range Oscillator", color=oscColor, linewidth=2)
hline(entryLevel, "Entry Level", color=color.green, linestyle=hline.style_dotted)
hline(exitLevel,  "Exit Level",  color=color.red,   linestyle=hline.style_dotted)
plot(k, title="%K", color=color.blue, display=display.none)
plot(d, title="%D", color=color.orange, display=display.none)

// Plot EMA (hidden) so it is available but not visible on the chart.
plot(ema, title="EMA Exit Filter", display=display.none)