
Strategi perdagangan kuantitatif yang berpusat pada penembusan rantaian harga rantaian rantaian rantaian harga yang menggabungkan purata pergerakan rantaian rantaian rantaian yang tinggi (WMA) dan peratusan rantaian untuk membina kawasan perdagangan. Strategi ini menghasilkan isyarat masuk dengan mengenal pasti keadaan harga yang meletup ke atas atau ke bawah, dan menggunakan seting keuntungan dan hentian kerugian untuk menguruskan risiko.
Prinsip asas strategi ini adalah menggunakan purata bergerak bertimbangan pada bingkai masa yang tinggi untuk membina kawasan aktiviti harga. Langkah-langkah untuk melaksanakan adalah seperti berikut:
Strategi ini menggunakan elemen visual seperti perubahan warna latar belakang, grafik tersuai dan penanda masuk / keluar, yang membolehkan peniaga mengenali secara intuitif jarak dagangan dan keadaan pasaran semasa. Selain itu, strategi ini juga menunjukkan perubahan peratusan dalam kedudukan semasa dan menggunakan faktor kelipatan ((default 20) untuk menonjolkan perubahan harga).
Dalam analisis yang mendalam mengenai kod strategi ini, kami mendapati kelebihan yang ketara:
Penapis kerangka waktu tinggiDengan menggunakan purata bergerak bertimbangan pada jangka masa yang lebih tinggi, strategi ini dapat menghapuskan bunyi pasaran jangka pendek, menangkap pergerakan harga yang lebih bermakna, dan mengurangkan isyarat palsu.
Kawasan dagangan dinamikStrategi: Membina kawasan dagangan secara dinamik berdasarkan titik tengah harga dan peratusan, dapat menyesuaikan diri dengan keadaan dan turun naik pasaran yang berbeza, mengelakkan batasan tahap sokongan / rintangan tetap.
Peraturan masuk dan keluar yang jelasStrategi: menyediakan isyarat masuk yang jelas (break up/break down) dan peraturan keluar (stop and stop loss), menghilangkan subjektiviti dalam keputusan perdagangan.
Pengurusan risiko bersepaduSistem perdagangan yang lengkap: Pengecutan terbina dalam dan sekatan batch membantu melindungi modal dan mengunci keuntungan.
Maklum balas visualStrategi menyediakan elemen visual yang kaya, termasuk warna latar belakang dalam tempoh dagangan, label perubahan peratusan dan penanda masuk / keluar, untuk membantu peniaga menilai keadaan pasaran dengan cepat.
Tetapan parameter yang fleksibel: Pengguna boleh menyesuaikan pelbagai parameter mengikut keutamaan peribadi dan keadaan pasaran yang berbeza, termasuk jangka masa, kitaran purata bergerak, peratusan nisbah, tahap stop / loss dan elemen visual.
Penyelarasan kerangka masa berbilangStrategi ini menggabungkan kualiti isyarat dalam bingkai masa yang tinggi dengan ketepatan pelaksanaan dalam bingkai masa semasa untuk mencapai koordinasi dalam pelbagai bingkai masa.
Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko yang berpotensi:
Penembusan isyarat palsuUntuk mengurangkan risiko ini, anda boleh mempertimbangkan untuk menambah mekanisme pengesahan, seperti meminta harga untuk bertahan untuk beberapa waktu selepas penembusan, atau untuk pengesahan dalam kombinasi dengan petunjuk lain.
Tidak sesuai untuk pasaran yang tidak menentuDalam pasaran yang bergolak, harga mungkin sering melanggar sempadan julat, menyebabkan terlalu banyak transaksi dan potensi kerugian. Dalam kes ini, kadar julat boleh ditingkatkan atau beralih ke bingkai masa yang lebih tinggi.
Peratusan Stop Loss / Stop Stop tidak cukup fleksibel: Ketidakstabilan pasaran berubah dari masa ke masa, peratusan berhenti / berhenti tetap mungkin tidak selalu optimum. Anda boleh mempertimbangkan untuk menyesuaikan tahap berhenti / berhenti secara dinamik berdasarkan indikator turun naik (seperti ATR).
Kepekaan ParameterPrestasi strategi mungkin sangat sensitif kepada tetapan parameter seperti kitaran WMA, nisbah selang dan peratusan hentian / hentian. Pemantauan sejarah yang mencukupi dan pengoptimuman parameter diperlukan.
Risiko yang terlalu optimumTerlalu banyak data sejarah tertentu boleh menyebabkan prestasi masa depan yang buruk. Adalah disyorkan untuk melakukan retesting di beberapa pasaran dan tempoh masa, dan mengekalkan parameter yang agak stabil.
Kebolehan beradaptasi dengan perubahan trend pasaranStrategi ini tidak akan menyesuaikan barangannya mengikut trend pasaran baru selepas penembusan barangan, yang boleh menyebabkan isyarat yang salah dalam pasaran yang sedang trend kuat. Anda boleh mempertimbangkan untuk menambah penapis trend atau barangan penyesuaian dinamik.
Berdasarkan analisis mendalam kod, strategi ini boleh dioptimumkan dalam beberapa arah:
Menambah mekanisme pengesahan penembusanUntuk mengurangkan penembusan palsu, anda boleh menambah syarat pengesahan tambahan, seperti meminta harga penutupan selepas penembusan, pengesahan jumlah pesanan atau pengesahan silang menggunakan petunjuk teknikal lain (seperti RSI, MACD).
Tetapan Hentikan Kerosakan Dinamik: menggantikan peratusan stop loss tetap dengan stop loss dinamik berdasarkan turun naik pasaran, seperti menggunakan ATR (rangkaian sebenar rata-rata) untuk menetapkan tahap stop loss, menjadikan strategi lebih sesuai dengan keadaan pasaran yang berbeza.
Tambah penapis trendTambahan komponen pengiktirafan trend, seperti purata bergerak jangka panjang atau ADX, untuk menyesuaikan tingkah laku perdagangan dalam pasaran yang kuat, seperti hanya melakukan lebih banyak semasa tren naik dan hanya melakukan kosong semasa tren turun.
Optimumkan masa kemasukanStrategi semasa adalah untuk memasuki pasaran dengan segera apabila harga baru sahaja melangkaui sempadan rantau, dan anda boleh mempertimbangkan untuk menunggu panggilan balik atau pengesahan bentuk tertentu untuk meningkatkan kualiti masa masuk.
Tambah modul pengurusan wangUntuk mencapai saiz kedudukan yang lebih kompleks, saiz kedudukan disesuaikan secara dinamik berdasarkan saiz akaun, turun naik pasaran dan risiko perdagangan semasa, dan bukannya menggunakan kedudukan tetap.
Tambah penapis status pasaranMengenali keadaan pasaran (seperti trend, rangsangan, atau turun naik), dan menyesuaikan parameter strategi atau menghentikan perdagangan mengikut keadaan pasaran yang berbeza.
Melaksanakan parameter penyesuaian: membolehkan parameter utama seperti nisbah selang, kitaran WMA dan lain-lain menyesuaikan secara automatik berdasarkan turun naik sejarah atau ciri-ciri pasaran lain, meningkatkan kebolehpasaran strategi.
Integrasi isyarat timeframe berbilangTidak hanya menggunakan WMA dalam jangka masa yang tinggi untuk membina selang, tetapi juga boleh menganalisis tingkah laku harga dan petunjuk dalam pelbagai jangka masa, untuk analisis pasaran yang lebih menyeluruh dan keputusan perdagangan.
Strategi penembusan kuantitatif dalam tempoh purata bergerak bertimbangan tinggi adalah sistem perdagangan yang tersusun dengan baik yang dibina untuk menangkap peluang penembusan harga dengan menggabungkan purata bergerak bertimbangan tinggi dan tempoh dinamik dalam tempoh masa yang tinggi. Kelebihan strategi ini terletak pada kemampuan penapisan jangka masa yang tinggi, peraturan perdagangan yang jelas, mekanisme pengurusan risiko yang terbina dalam dan maklum balas visual yang banyak. Walau bagaimanapun, ia juga menghadapi cabaran seperti penembusan isyarat palsu, sensitiviti parameter dan kesesuaian pasaran.
Dengan melaksanakan arah pengoptimuman yang disyorkan, seperti menambah mekanisme pengesahan terobosan, tetapan berhenti rugi dinamik, penapisan trend dan parameter penyesuaian diri, anda dapat meningkatkan lagi kestabilan dan keuntungan strategi. Yang paling penting, pedagang harus memahami sepenuhnya prinsip strategi, dan melakukan pengesanan sejarah yang mencukupi, menyesuaikan parameter mengikut pasaran tertentu dan pilihan risiko peribadi, untuk memanfaatkan potensi strategi.
Strategi berasaskan terobosan ini sesuai untuk pedagang jangka menengah dan panjang, terutamanya mereka yang mencari untuk menangkap terobosan harga penting sambil mengekalkan kawalan risiko. Dengan pengoptimuman dan penyesuaian berterusan, strategi ini boleh menjadi senjata yang kuat dalam kotak alat pedagang.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy('ZONE FLOW', overlay=true)
// Input parameters
src = close
src1 = open
src2 = low
src3 = high
Min = input(60, title='Minimum Period')
len = timeframe.isintraday and timeframe.multiplier >= 1 ? Min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7
c1 = ta.wma(src, len)
o1 = ta.wma(src1, len)
l1 = ta.wma(src2, len)
h1 = ta.wma(src3, len)
HTF = input.timeframe('M', title='Higher Time Frame')
ti = ta.change(time(HTF)) != 0
c = fixnan(ti ? c1 : na)
o = fixnan(ti ? o1 : na)
h = fixnan(ti ? h1 : na)
l = fixnan(ti ? l1 : na)
// Calculating mid-point
m = (h + l) / 2
// Calculating ratio lines
ratio = input.float(0.1, title='% ratio', minval=0.001, maxval=10)
r1 = m * ratio
u = m + r1
d = m - r1
// Take profit settings
takeProfitPercentage1 = input.float(10.0, title='Take Profit 1 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity1 = input.float(50.0, title='Take Profit 1 Quantity (%)', minval=0.1, maxval=100.0) / 100
takeProfitPercentage2 = input.float(20.0, title='Take Profit 2 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity2 = input.float(50.0, title='Take Profit 2 Quantity (%)', minval=0.1, maxval=100.0) / 100
// Stop loss settings
stopLossPercentage = input.float(5.0, title='Stop Loss (%)', minval=0.1, maxval=100.0) / 100
// Number of bars to extend lines
extensionBars = input.int(5, title='Number of Bars to Extend Lines', minval=1)
// Number of bars to offset the percentage label
percentOffsetBars = input.int(25, title='Number of Bars to Offset Percentage Label', minval=1)
// Input for multiplying the percentage change
multiplierFactor = input.int(20, title='Multiplier for Percentage Change', minval=1)
// Input for background colors
bgColor1 = input(color.new(color.blue, 90), title='Background Color 1')
bgColor2 = input(color.new(color.orange, 90), title='Background Color 2')
// Plot high, low, and ratio lines
ppo = plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_stepline)
ppc = plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_stepline)
plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_circles, linewidth=2)
plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_circles, linewidth=2)
// Fill the background between ratio lines with two different colors
fill(ppo, ppc, color=bgColor1)
// Calculate mid-point for background color switching
midPoint = (u + d) / 2
bgColorSwitch = close >= midPoint ? bgColor1 : bgColor2
fill(ppo, ppc, color=bgColorSwitch, transp=90)
// Initialize variables for lines and labels
var line tp1Line = na
var line tp2Line = na
var line stopLossLine = na
var line entryLine = na
var label tp1Label = na
var label tp2Label = na
var label stopLossLabel = na
var label entryLabel = na
var label percentLabel = na
// Variable to store the entry bar index
var int entryBarIndexLong = na
var int entryBarIndexShort = na
// Function to delete old labels and lines
deleteOldLinesAndLabels() =>
if not na(tp1Line)
line.delete(tp1Line)
if not na(tp2Line)
line.delete(tp2Line)
if not na(stopLossLine)
line.delete(stopLossLine)
if not na(entryLine)
line.delete(entryLine)
if not na(tp1Label)
label.delete(tp1Label)
if not na(tp2Label)
label.delete(tp2Label)
if not na(stopLossLabel)
label.delete(stopLossLabel)
if not na(entryLabel)
label.delete(entryLabel)
if not na(percentLabel)
label.delete(percentLabel)
// Strategy logic
longCondition = ta.crossover(close, u)
shortCondition = ta.crossunder(close, d)
if longCondition
strategy.entry('Long', strategy.long)
entryBarIndexLong := bar_index
entryBarIndexLong
if shortCondition
strategy.entry('Short', strategy.short)
entryBarIndexShort := bar_index
entryBarIndexShort
// Calculate take profit and stop loss levels for long positions
if strategy.position_size > 0 // Check if there's an open long position
takeProfitLevelLong1 = strategy.position_avg_price * (1 + takeProfitPercentage1)
takeProfitLevelLong2 = strategy.position_avg_price * (1 + takeProfitPercentage2)
stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Long', limit=takeProfitLevelLong1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Long', limit=takeProfitLevelLong2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Long', stop=stopLossLevelLong)
// Display percentage change from entry price
percentChange = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
if strategy.position_size < 0 // Check if there's an open short position
takeProfitLevelShort1 = strategy.position_avg_price * (1 - takeProfitPercentage1)
takeProfitLevelShort2 = strategy.position_avg_price * (1 - takeProfitPercentage2)
stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Short', limit=takeProfitLevelShort1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Short', limit=takeProfitLevelShort2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Short', stop=stopLossLevelShort)
// Display percentage change from entry price
percentChange = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
// Add buy and sell signals with shapes
plotshape(series=longCondition, title='Buy Signal', location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text='.')
plotshape(series=shortCondition, title='Sell Signal', location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text='.')
// Remove old labels when they go out of scope
if bar_index % 50 == 0
deleteOldLinesAndLabels()
// Define colors for candles based on background color
candleColorBull = bgColorSwitch // Use background color for bullish candles
candleColorBear = bgColorSwitch // Use background color for bearish candles
borderColorBull = color.black // Border color for bullish candles
borderColorBear = color.black // Border color for bearish candles
// Plot candles with custom colors
plotcandle(open, high, low, close, color=close >= open ? candleColorBull : candleColorBear, bordercolor=close >= open ? borderColorBull : borderColorBear, wickcolor=color.gray)