
Strategi Peratusan Pergerakan Persaingan Persaingan Persaingan adalah sistem perdagangan komprehensif yang menggabungkan analisis dinamik persaingan, penapisan tingkah laku harga, pengesanan terobosan dan logik stop loss / stop yang dinamik. Inti strategi ini adalah untuk mengenal pasti masa pembesaran atau pengurangan persaingan dengan mengira indikator serupa dengan Williams % R dalam persaingan persaingan (RVPR), yang digabungkan dengan penapis dua garis lurus (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM) (RPM (RPM) (RPM (RPM) (RPM) (RPM (RPM) (RPM))
Prinsip utama strategi ini adalah untuk menukar data jumlah dagangan ke dalam peratusan, menggunakan kaedah pengiraan yang serupa dengan Williams % R untuk menganalisis hubungan jumlah dagangan semasa dengan jangkauan sejarahnya. Strategi ini menggunakan beberapa komponen utama untuk menghasilkan isyarat perdagangan:
Osilator Peratusan Perdagangan Relatif: membandingkan jumlah transaksi semasa dengan tahap tertinggi dan terendah dalam sejarah transaksi, untuk mengira kedudukan relatif. Indikator ini serupa dengan Williams % R dalam bidang harga, tetapi digunakan untuk data jumlah transaksi.
Penapisan purata bergerak ganda: Strategi menggunakan dua purata bergerak jumlah transaksi ((cepat dan perlahan), dan pelbagai algoritma kelancaran boleh dipilih ((SMA, EMA, JMA, T3, Super Smoother, dan lain-lain). Apabila jumlah transaksi lebih besar daripada rata-rata cepat, dan rata-rata cepat lebih besar daripada rata-rata perlahan, menunjukkan trend jumlah transaksi ke atas, mungkin melakukan sinyal ganda; sebaliknya.
Penapis tingkah laku harga: untuk menyaring lebih jauh isyarat dagangan berdasarkan bentuk grafik yang berbeza:
Menembusi penapis: pilih untuk mengecualikan dagangan yang berdekatan dengan ketinggian / ketinggian 5 batang, untuk mengelakkan perdagangan yang tidak sepadan dengan risiko dan pulangan.
Hentikan dan hentikan sistem: mekanisme hentikan / hentikan dinamik berdasarkan ATR (Average True Rate) yang boleh dikonfigurasi secara berganda untuk menyesuaikan jarak hentikan dan hentikan.
Masa untuk keluar: anda boleh memilih untuk keluar dari dagangan selepas jumlah yang ditetapkan.
Keadaan kemasukan bermulut termasuk: jumlah dagangan lebih besar daripada purata bergerak cepat, purata bergerak cepat lebih besar daripada purata bergerak perlahan, jumlah dagangan relatif %R lebih besar daripada nilai had, harga melalui penapis arah bermulut, dan pilihan yang lebih rendah daripada titik tinggi terobosan baru-baru ini. Keadaan kemasukan kosong sebaliknya, dan mencetuskan kedudukan kosong apabila keadaan keluar ditetapkan.
Analisis pelbagai dimensi: Strategi ini menggabungkan jumlah transaksi, tingkah laku harga, dan dinamika stop loss / stop loss untuk menyediakan kerangka analisis pasaran yang komprehensif.
Kustomisasi tinggi: Strategi menyediakan pelbagai parameter yang boleh disesuaikan, termasuk kawalan arah perdagangan, mod penapisan tingkah laku harga yang berbeza, pilihan jenis purata bergerak jumlah transaksi, dan lain-lain, yang membolehkan pedagang menyesuaikan mengikut gaya dan keutamaan pasaran mereka sendiri.
Penapisan masuk pintar: Dengan menggabungkan momentum lalu lintas dan pola tingkah laku harga, strategi dapat mengenal pasti peluang perdagangan dengan kebarangkalian yang lebih tinggi dan mengelakkan isyarat perdagangan berkualiti rendah.
Mekanisme Keluar Fleksibel: Strategi menawarkan pilihan keluar berdasarkan masa dan harga, termasuk keluar bar yang tetap dan stop loss / stop loss dinamik berdasarkan ATR, menjadikan pengurusan risiko lebih fleksibel dan berkesan.
Beradaptasi dengan pelbagai keadaan pasaran: Strategi dapat menyesuaikan diri dengan keadaan pasaran yang berbeza, termasuk tren dan pasaran segmen, melalui pelbagai pola tingkah laku harga (sederhana, penapis, agresif, dalaman).
Integrasi penunjuk teknik tinggi: Strategi menggabungkan pelbagai jenis purata bergerak tinggi seperti JMA, T3 dan Super Smoother, yang berfungsi dengan baik untuk mengurangkan kebisingan dan menangkap trend sebenar.
Risiko pengoptimuman parameter: Oleh kerana strategi mengandungi banyak parameter yang boleh disesuaikan, terdapat risiko pengoptimuman berlebihan, yang boleh menyebabkan prestasi sejarah yang sangat baik tetapi kurang berkesan. Penyelesaian adalah menggunakan ujian ke hadapan dan analisis robust, memastikan parameter dapat kekal stabil dalam keadaan pasaran yang berbeza.
Risiko penembusan palsu: lonjakan jumlah dagangan tidak semestinya selalu disertai dengan pergerakan harga yang mampan, strategi mungkin menghasilkan isyarat yang salah dalam penembusan palsu. Risiko ini dapat dikurangkan dengan menambah petunjuk pengesahan tambahan atau penundaan masuk.
Ketergantungan keadaan pasaran: Strategi mungkin tidak konsisten dalam pelbagai keadaan pasaran (seperti turun naik tinggi vs turun naik rendah). Adalah disyorkan untuk menguji strategi dalam pelbagai keadaan pasaran sebelum dilaksanakan.
Risiko mencetuskan hentian kerugian: Hentian yang menggunakan asas ATR mungkin dicetuskan apabila turun naik tiba-tiba. Pertimbangkan untuk menggunakan kelipatan hentian kerugian yang disesuaikan dengan turun naik atau menetapkan hentian kerugian pada tahap sokongan / rintangan utama mungkin lebih berkesan.
Masa keluar tidak fleksibel: keluar bar nombor tetap mungkin menutup perdagangan yang menguntungkan terlalu awal atau menutup perdagangan yang rugi terlalu lewat. Anda boleh mempertimbangkan untuk menyesuaikan masa keluar secara dinamik dalam kombinasi dengan trend atau indikator momentum.
Kompleksiti pengiraan: Strategi menggunakan pelbagai algoritma dan kombinasi syarat rata-rata bergerak yang rumit, yang boleh meningkatkan beban pengiraan dan menyebabkan kelewatan pelaksanaan. Dalam perdagangan masa nyata, mungkin perlu menyederhanakan beberapa petunjuk yang intensif pengiraan.
Penyesuaian nilai terhad dinamik: Strategi semasa menggunakan terhad R% dari jumlah transaksi relatif yang tetap ((27), penyesuaian automatik terhad penyesuaian automatik berdasarkan turun naik jumlah transaksi terkini boleh dipertimbangkan. Ini akan menjadikan strategi lebih sesuai dengan keadaan pasaran yang berbeza dan perubahan bermusim.
Pengesahan jangka masa berbilang: memperkenalkan isyarat pengesahan jangka masa yang lebih tinggi, berdagang hanya dalam arah trend yang lebih besar, dapat meningkatkan peluang kemenangan strategi dan nisbah pulangan risiko. Sebagai contoh, isyarat berbilang pada garis jam hanya akan dilaksanakan apabila garis hari bergerak ke atas.
Analisis kualiti jumlah transaksi: Selain daripada jumlah transaksi relatif, penunjuk penyebaran jumlah transaksi atau analisis pengedaran jumlah transaksi boleh dimasukkan untuk menilai kualiti transaksi dan bukan hanya kuantiti. Ini dapat membantu membezakan antara trend yang sihat untuk mengkonfirmasi jumlah transaksi dan potensi isyarat kehabisan.
Hentian / penangguhan pintar: Hentian / penangguhan asas ATR semasa dapat ditingkatkan menjadi sistem yang lebih pintar, seperti berhenti berdasarkan kedudukan sokongan / rintangan utama, atau berhenti yang disesuaikan dengan volatiliti, mengetatkan hentian pada masa turun naik rendah dan melepas hentian pada masa turun naik tinggi.
Mengintegrasikan struktur pasaran: Mengintegrasikan analisis struktur harga (seperti sokongan / rintangan, garis trend, saluran harga) ke dalam strategi dapat meningkatkan kualiti titik masuk dan titik keluar.
Pengurusan risiko yang dipertingkatkan: melakukan penyesuaian saiz kedudukan yang dinamik, berdasarkan turun naik pasaran semasa dan prestasi strategi baru-baru ini, meningkatkan kedudukan dalam persekitaran yang tinggi dan mengurangkan kedudukan dalam tempoh yang tidak pasti.
Penggabungan pembelajaran mesin: Menggunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter strategi secara dinamik atau meramalkan penapis tingkah laku harga yang paling berkesan dalam keadaan pasaran semasa, dapat meningkatkan prestasi strategi.
Strategi perdagangan dinamika peratusan perbelanjaan perbandingan adalah sistem perdagangan yang komprehensif dan fleksibel yang menyediakan pedagang dengan alat yang kuat untuk mengenal pasti peluang pasaran yang berpotensi dengan menggabungkan analisis perbelanjaan, pelbagai penapis tingkah laku harga, dan teknologi pengurusan risiko dinamik. Kelebihan utama strategi ini adalah kesesuaian dan penyesuaian, yang membolehkan pedagang menyesuaikan diri dengan keutamaan peribadi dan keadaan pasaran.
Strategi ini sangat sesuai untuk peniaga yang mencari isyarat pembalikan atau lanjutan trend berdasarkan pengesahan jumlah transaksi. Dengan menggunakan penunjuk jumlah transaksi relatif gaya Williams % R, strategi ini dapat mengenal pasti titik lonjakan jumlah transaksi, yang biasanya mewakili perubahan penting dalam sentimen pasaran atau percepatan trend.
Walaupun strategi ini menawarkan banyak kelebihan, peniaga harus berhati-hati dengan potensi risiko overoptimisasi dan ketergantungan keadaan pasaran. Dengan ujian dan penyesuaian berterusan, digabungkan dengan arah pengoptimuman yang disyorkan, peniaga dapat meningkatkan lagi kestabilan strategi ini dan keuntungan jangka panjang. Akhirnya, seperti semua strategi perdagangan, kunci kejayaan terletak pada pemahaman mendalam tentang prinsipnya, pengurusan risiko dengan bijak, dan penilaian berterusan terhadap prestasinya dalam keadaan pasaran yang berbeza.
/*backtest
start: 2024-07-04 00:00:00
end: 2025-07-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © GabrielAmadeusLau
//@version=6
strategy("Relative Volume Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === Input: Trade Direction === //
tradeDirection = input.string("Long Only", title="Trade Direction", options=["Long Only", "Short Only", "Both"], group="Strategy Settings")
dirBarModeL = input.string("Simple", title="Long Directional Bar Mode", options=["Simple", "Filtered", "Aggressive", "Inside", "Filtered & Aggressive", "Filtered & Aggressive & Inside", "Without"], group="Strategy Settings")
dirBarModeS = input.string("Inside", title="Short Directional Bar Mode", options=["Simple", "Filtered", "Aggressive", "Inside", "Filtered & Aggressive", "Filtered & Aggressive & Inside", "Without"], group="Strategy Settings")
useBreakout = input.bool(true, "Use Breakout Filter", group="Strategy Settings")
useSLTP = input.bool(false, "Use Stop Loss & Take Profit", group="Strategy Settings")
atrSLMult = input.float(1, "ATR SL Multiplier", step = 0.05, group="Strategy Settings")
atrTPMult = input.float(1.75, "ATR TP Multiplier", step = 0.05, group="Strategy Settings")
// === Input: MA Function Selector === //
// — T3 Moving Average Function —
// src = input source (e.g. rsi1, close, etc.)
// length = smoothing length (period)
// a = T3 alpha (commonly between 0.7 and 0.9)
t3(src, length, a) =>
e1 = ta.ema(src, length)
e2 = ta.ema(e1, length)
e3 = ta.ema(e2, length)
e4 = ta.ema(e3, length)
e5 = ta.ema(e4, length)
e6 = ta.ema(e5, length)
c1 = -a * a * a
c2 = 3 * a * a + 3 * a * a * a
c3 = -6 * a * a - 3 * a - 3 * a * a * a
c4 = 1 + 3 * a + a * a * a + 3 * a * a
c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
// == Jurik MA == //
jma(float src, int length, float power, float phase) =>
phaseRatio = phase < -100 ? 0.5 : phase > 100 ? 2.5 : phase / 100 + 1.5
beta = 0.45 * (length - 1) / (0.45 * (length - 1) + 2)
alpha = math.pow(beta, power)
JMA = 0.0
e0 = 0.0
e0 := (1 - alpha) * src + alpha * nz(e0[1])
e1 = 0.0
e1 := (src - e0) * (1 - beta) + beta * nz(e1[1])
e2 = 0.0
e2 := (e0 + phaseRatio * e1 - nz(JMA[1])) * math.pow(1 - alpha, 2) + math.pow(alpha, 2) * nz(e2[1])
JMA := e2 + nz(JMA[1])
//===== 2 Pole Super Smoother Filter =====//
superSmoother(float Series, float Period) =>
var float ALPHA = math.pi * math.sqrt(2.0) / Period
var float BETA = math.exp(-ALPHA )
var float COEF2 = -math.pow(BETA, 2)
var float COEF1 = math.cos( ALPHA ) * 2.0 * BETA
var float COEF0 = 1.0 - COEF1 - COEF2
float sma2 = math.avg(Series, nz(Series[1], Series))
float smooth = na, smooth := COEF0 * sma2 +
COEF1 * nz(smooth[1]) +
COEF2 * nz(smooth[2])
// === MA Selector === //
ma(source, length, type) =>
type == "SMA" ? ta.sma(source, length) :
type == "EMA" ? ta.ema(source, length) :
type == "SMMA (RMA)"? ta.rma(source, length) :
type == "WMA" ? ta.wma(source, length) :
type == "VWMA" ? ta.vwma(source, length) :
type == "HMA" ? ta.hma(source, length) :
type == "ALMA" ? ta.alma(source, length, 0.85, 6) :
type == "LSMA" ? ta.linreg(source, length, 0) :
type == "Optimal MA"? math.avg(ta.alma(source, length, 0.85, 6), ta.rma(source, length), ta.sma(source, length)) :
type == "JMA" ? jma(source, length, 2, 50) :
type == "Super Smoother" ? superSmoother(source, length) :
type == "T3" ? t3(source, length, 0.7) :
na
// === Input Parameters === //
rvolRLength = input.int(112, title="Relative Volume %R Length", minval=1, group="Relative Volume", tooltip="%R used for scaling from 0 to 100, I prefer 73 or 112.")
rvolmaTypeInput = input.string("Optimal MA" , "Type", options = ["None", "SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA", "HMA", "ALMA", "LSMA", "Optimal MA", "JMA", "Super Smoother", "T3"], group = "Relative Volume")
rvolFastLength = input.int(7, title="Relative Volume Fast MA", minval=1, group="Relative Volume")
rvolSlowLength = input.int(161, title="Relative Volume Slow MA", minval=1, group="Relative Volume")
exitBars = input.int(18, title="Bars Until Exit", group="Strategy Settings", tooltip="Exit trade after N bars")
rvolThreshold = input.int(27, "Minimum Relative Volume %R Threshold", group="Relative Volume")
// === Williams %R for Volume === //
wpr(src, length) =>
max_ = ta.highest(src, length)
min_ = ta.lowest(src, length)
(100 * (src - max_) / (max_ - min_)) * -1
// === Volume MAs === //
rvol = wpr(volume, rvolRLength)
rvolFast = ma(volume, rvolFastLength, rvolmaTypeInput)
rvolSlow = ma(volume, rvolSlowLength, rvolmaTypeInput)
// === Price Action Filters === //
up = close > open
upRange = low > low[1] and close > high[1]
upRange_Aggr = close > close[1] and close > open[1]
insideDayUp = close < close[1] and close[1] < close[2] and close[2] < close[3] and close[3] < close[4] and close[4] < close[5] //and not (close > close[1])
down = close < open
downRange = high < high[1] and close < low[1]
downRange_Aggr= close < close[1] and close < open[1]
insideDayDown = close > close[1] and close[1] > close[2] and close[2] > close[3] and close[3] > close[4] and close[4] > close[5] //and not (close < close[1])
breakoutHigh = ta.highest(high, 5)
breakoutLow = ta.lowest(low, 5)
// === Mode-Based Filter Logic === //
longBarOK =
dirBarModeL == "Simple" ? up :
dirBarModeL == "Filtered" ? upRange :
dirBarModeL == "Aggressive"? upRange_Aggr :
dirBarModeL == "Inside"? insideDayUp :
dirBarModeL == "Filtered & Aggressive" ? upRange or upRange_Aggr :
dirBarModeL == "Filtered & Aggressive & Inside" ? upRange or upRange_Aggr or insideDayUp :
dirBarModeL == "Without" ? true : false
shortBarOK =
dirBarModeS == "Simple" ? down :
dirBarModeS == "Filtered" ? downRange :
dirBarModeS == "Aggressive"? downRange_Aggr :
dirBarModeS == "Inside"? insideDayDown :
dirBarModeS == "Filtered & Aggressive"? downRange or downRange_Aggr or insideDayDown :
dirBarModeS == "Filtered & Aggressive & Inside"? upRange_Aggr or insideDayDown :
dirBarModeS == "Without" ? true : false
// === Entry & Exit Logic === //
longCondition = volume > rvolFast and rvolFast > rvolSlow and longBarOK and rvol > rvolThreshold and (not useBreakout or close < breakoutHigh)
shortCondition = volume < rvolFast and rvolFast < rvolSlow and shortBarOK and rvol < (100 - rvolThreshold) and (not useBreakout or close > breakoutLow)
exitLongCondition = strategy.opentrades > 0 and strategy.opentrades.entry_bar_index(0) + exitBars <= bar_index and strategy.opentrades.entry_id(0) == "Long"
exitShortCondition = strategy.opentrades > 0 and strategy.opentrades.entry_bar_index(0) + exitBars <= bar_index and strategy.opentrades.entry_id(0) == "Short"
atr = ta.atr(math.round(math.avg(rvolFastLength, rvolSlowLength)))
longSL = useSLTP ? close - atrSLMult * atr : na
longTP = useSLTP ? close + atrTPMult * atr : na
shortSL = useSLTP ? close + atrSLMult * atr : na
shortTP = useSLTP ? close - atrTPMult * atr : na
// === Strategy Execution === //
if (tradeDirection == "Long Only" or tradeDirection == "Both")
if (longCondition)
strategy.entry("Long", strategy.long, stop=longSL, limit=longTP)
if (tradeDirection == "Short Only" or tradeDirection == "Both")
if (shortCondition)
strategy.entry("Short", strategy.short, stop=shortSL, limit=shortTP)
if (exitLongCondition)
strategy.close("Long")
if (exitShortCondition)
strategy.close("Short")
// === Plotting === //
plot(rvol, title="Relative Volume %R", color=color.orange, style = plot.style_columns, format = format.price)
plot(rvolFast, title="Fast Volume MA", color=color.green, format = format.volume)
plot(rvolSlow, title="Slow Volume MA", color=color.red, format = format.volume)