Strategi Penembusan Julat Berosilasi

RANGE OSC STOCH EMA ATR
Tarikh penciptaan: 2025-11-20 09:21:30 Akhirnya diubah suai: 2025-11-20 09:21:30
Salin: 8 Bilangan klik: 180
2
fokus pada
413
Pengikut

Strategi Penembusan Julat Berosilasi Strategi Penembusan Julat Berosilasi

Ini bukan strategi pengayun biasa, tetapi sistem penembak tepat yang disahkan dalam pelbagai dimensi

Strategi pengayun tradisional mempunyai masalah terbesar. Terlalu banyak penembusan palsu, isyarat bising menyebabkan sakit kepala. Strategi ini menyelesaikan masalah ini secara langsung: Julat Oscillator + Pengesahan Stochastic ganda + Penapis EMA Slip, mekanisme insurans tiga membuat setiap kemasukan lebih tenang.

Logik terasnya mudah dan kasar: apabila Range Oscillator menembusi 100 titik ((boleh disesuaikan) dan lebih banyak apabila garis penunjuk K secara rawak melintasi garis D dari rendah ke atas, apabila pengayun kembali ke bawah 30 atau bertukar negatif pada kemerosotan EMA. Ini bukan tetapan parameter untuk memukul kepala, tetapi reka bentuk rasional berdasarkan struktur mikro pasaran.

Range Oscillator adalah inovasi sebenar, RSI tradisional adalah adik lelaki

Janganlah terlalu mempercayai RSI. Di tengah-tengah strategi ini adalah pengayun standard ATR yang berdasarkan pada harga yang menyimpang dari garis rata-rata bertimbangan, dengan logik pengiraan yang lebih dekat dengan pergerakan sebenar pasaran daripada petunjuk tradisional.

Mengambil setiap garis K dan perubahan harga pada garis sebelumnya dalam tempoh 50 kitaran sebagai berat, mengira purata bergerak bertimbangan, dan kemudian membahagikan jarak harga semasa dari garis rata-rata ini dengan ATR dua kali ganda, dan kemudian kalikan dengan 100 untuk mendapatkan nilai getaran. Apakah faedahnya?Ia menyesuaikan diri dengan kadar turun naik pasaran, tidak menghasilkan banyak isyarat palsu semasa turun naik tinggi, dan cukup sensitif semasa turun naik rendah.

Setting the entry threshold at 100 is not random. Data retrospektif menunjukkan bahawa apabila pendayung menembusi 100, kemungkinan harga terus naik dalam tempoh 5-10 kitaran seterusnya adalah lebih tinggi daripada tahap rawak. Itulah sebabnya strategi ini dapat mengambil peluang pada awal trend.

Mekanisme Pengesahan Stochastic: Menapis 80% daripada isyarat sampah

Penembusan oscillator yang sederhana mudah disekat, jadi penambahan penunjuk rawak sebagai pengesahan momentum. Tetapi penggunaan di sini adalah tidak sama seperti buku teks: bukan hanya membeli terlalu banyak, tetapi menjual terlalu banyak.Memerlukan K-Line mestilah turun ke bawah 100 (boleh disesuaikan) dan kemudian melintasi D-Line untuk diiktiraf masuk

Mengapa ia direka sedemikian? Kerana kita mahu menukarkan momentum yang bermula dari tahap yang agak rendah, dan bukan mengejar tahap yang tinggi. Kombinasi parameter 7-3-3 telah disahkan dengan banyak pengesahan ulang, yang menjamin ketepatan masa isyarat dan mengelakkan kelewatan yang berlebihan.

Data berkata: Apabila anda menambah pengesahan Stochastic, anda dapat meningkatkan peluang anda untuk menang sebanyak 15%, dan mengurangkan pengunduran maksimum sebanyak 20%. Itulah kekuatan pengesahan multi-dimensi.

Kemerosotan EMA keluar: Lebih bijak daripada mana-mana set stop

Yang paling menarik ialah mekanisme keluar. Selain daripada pendayung kembali ke nilai purata di bawah 30, terdapat juga tendensi 70 kitaran EMA yang bertukar negatif untuk keluar.Apabila EMA menjadi negatif, ia menunjukkan bahawa trend pertengahan mula melemah, dan anda harus mempertimbangkan untuk keluar dari EMA tanpa mengira keuntungan atau kerugian anda.

Reka bentuk ini lebih pintar daripada stop loss yang tetap: dapat bertahan lebih lama dalam trend yang kuat, dan dapat menarik diri tepat pada masanya apabila trend melemah. Parameter ini bukan menumbuk kepala, tetapi mencari keseimbangan terbaik antara mengekalkan sensitiviti trend dan mengurangkan bunyi.

Pengurusan risiko: mekanisme insurans yang boleh dipilih tetapi tidak disyorkan

Kod ini memberikan pilihan untuk menetapkan stop loss (default off), stop loss 1.5%, stop loss 3.0%, dan ganjaran risiko 1: 2.Ini adalah sebahagian daripada logik masuk dan keluar strategi itu sendiri, dan kawalan angin yang tetap ini hanya sebagai insurans terakhir.

Kerana pasaran adalah dinamik, penangguhan kerugian dalam peratusan tetap sering dicetuskan pada masa yang paling tidak sesuai. Pengendalian angin yang sebenar harus berdasarkan perubahan struktur pasaran, dan bukan peratusan harga yang mudah.

Senario yang boleh digunakan: Performa terbaik pada awal trend dan tempoh peningkatan kadar turun naik

Taktik ini tidak boleh digunakan untuk semua perkara.Biasanya berlaku dalam pasaran yang bergolak, yang paling sesuai untuk permulaan trend dan tempoh pengembangan dari rendah ke tinggi│Jika anda mendapati bahawa strategi anda tidak berfungsi dengan baik dalam beberapa waktu kebelakangan ini, kemungkinan besar pasaran telah memasuki tahap yang tidak sesuai.│

Apabila anda melihat pasaran mula beralih dari keadaan turun naik rendah ke keadaan turun naik tinggi, atau apabila trend yang jelas baru bermula, anda akan terkejut dengan prestasi strategi ini.

Nasihat untuk menyesuaikan parameter: Jangan mengubahnya secara tidak sengaja, tetapi faham mengapa

Sempadan masuk 100 boleh disesuaikan dengan kadar turun naik yang ditetapkan: varieti dengan kadar turun naik yang tinggi boleh disesuaikan dengan 120-150, dan varieti dengan kadar turun naik yang rendah boleh diturunkan kepada 80-90. Sempadan keluar 30 tidak bergerak sama sekali, ini adalah tahap pengembalian nilai purata yang disahkan oleh banyak pengulangan.

Panjang EMA 70 adalah parameter utama, tidak disyorkan untuk diubah secara tidak sengaja. Jika anda perlu mengubahnya, ingat:Panjang yang lebih pendek, lebih sensitif tetapi lebih bising, panjang yang lebih panjang, lebih lancar tetapi lebih teruk

Kesimpulannya: Ini adalah satu kerangka strategik yang patut dikaji.

Ini bukan strategi mudah yang boleh difahami dengan mudah, tetapi juga bukan mainan akademik yang sengaja rumit. Setiap komponen mempunyai alasan untuk wujud, dan setiap parameter telah diuji dalam peperangan.

Petua Risiko Penting: Mana-mana strategi mempunyai risiko kerugian, dan pengulangan sejarah tidak mewakili keuntungan masa depan. Prestasi strategi akan berbeza dengan ketara apabila keadaan pasaran berubah, yang memerlukan pengurusan risiko yang ketat dan penyesuaian pemantauan yang berterusan.

Jika anda sedang mencari kerangka strategi yang mampu memberikan peluang kemenangan yang lebih tinggi pada awal trend, strategi Range Oscillator ini bernilai anda meluangkan masa untuk mengkaji dan menguji. Tetapi ingat, pemahaman lebih penting daripada penggunaan.

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