
Strategi kuantiti corak ketinggian segi empat yang serupa adalah sistem perdagangan berdasarkan ciri-ciri pergerakan harga yang menangkap peluang perdagangan yang berpotensi dengan mengenal pasti corak segi empat yang mempunyai ketinggian yang serupa di pasaran. Strategi ini berpusat pada mencari corak yang serupa dengan ketinggian pergerakan harga, dan menggabungkan RSI, pengesahan jumlah transaksi, dan stop loss yang disesuaikan secara dinamik untuk menguruskan risiko dan mengoptimumkan hasil perdagangan.
Prinsip utama strategi ini adalah analisis ciri-ciri geometri bentuk harga berdasarkan beberapa titik utama:
Pengiktirafan corak ketinggianStrategi ini memberi tumpuan kepada dua jenis model ketinggian - ketinggian utama (peratusan harga yang ditentukan oleh pengguna) dan ketinggian regresi (peratusan yang lebih kecil yang juga ditentukan oleh pengguna). Sistem secara dinamik mengira nilai ketinggian ini untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Pengesanan pelbagai mod:
Optimumkan parameter:
Penapis penunjuk teknikal:
Strategi masuk dan keluar:
Strategi ini menunjukkan kelebihan yang ketara dengan analisis mendalam mengenai pelaksanaan kod:
Mekanisme penjanaan isyarat objektifBerasaskan pada pengiraan matematik dan hubungan geometri yang jelas, mengurangkan pengaruh penilaian subjektif, menjadikan keputusan perdagangan lebih sistematik dan konsisten.
Sesuaikan diri dengan keadaan pasaranDengan menggunakan parameter ketinggian yang dikira sebagai peratusan harga purata, strategi ini dapat menyesuaikan diri secara automatik dengan pelbagai julat harga dan keadaan pasaran yang bergelombang.
Mekanisme pengesahan pelbagai dimensiGabungan pengenalan bentuk, indikator RSI dan analisis kuantiti transaksi, menyediakan pengesahan isyarat bertingkat yang membantu menapis isyarat perdagangan berkualiti rendah.
Kerangka pengurusan risiko yang jelas: Setiap dagangan mempunyai kedudukan berhenti dan hentian yang telah ditentukan, membantu peniaga mengawal risiko dan mengekalkan nisbah risiko dan pulangan yang konsisten.
Pembantu visual: Dengan menggambar segi empat dan label pada carta, menunjukkan secara visual corak perdagangan yang dikenali, memudahkan pedagang memahami dan mengesahkan isyarat.
Reka bentuk parametrikStrategi menawarkan pelbagai parameter yang boleh disesuaikan, yang membolehkan peniaga mengoptimumkan mengikut keadaan pasaran tertentu dan keutamaan risiko peribadi.
Pengiktirafan pelbagai corakIa juga dapat menangkap peluang untuk membalikkan trend dan menyediakan lebih banyak titik masuk perdagangan.
Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko yang berpotensi:
Kepekaan ParameterPrestasi strategi sangat bergantung pada parameter yang ditetapkan, parameter yang tidak betul boleh menyebabkan overtrading atau kehilangan isyarat penting. Penyelesaian adalah mencari kombinasi parameter yang optimum melalui pengesanan semula sejarah, dan menilai semula keberkesanan parameter secara berkala.
Risiko penembusan palsu: Pasaran mungkin membentuk bentuk yang serupa dengan pola yang dijangkakan tetapi kemudiannya berbalik, menyebabkan isyarat yang salah. Disarankan untuk menambah mekanisme pengesahan, seperti menunggu pengesahan harga penutupan atau melakukan pemeriksaan silang dengan penunjuk lain.
Batasan peratusan tetapMenggunakan peratusan tinggi yang tetap mungkin tidak sesuai untuk pasaran yang berubah-ubah secara mendadak. Anda boleh mempertimbangkan untuk memperkenalkan perhitungan tinggi dinamik berdasarkan ATR atau kadar turun naik sejarah.
Pemprosesan intensif komputerStrategi melibatkan banyak putaran dan penilaian syarat, yang boleh menyebabkan masalah prestasi apabila menangani banyak data. Mengoptimumkan struktur kod atau mempermudahkan langkah pengiraan tertentu dapat meningkatkan kecekapan pelaksanaan.
Pemahaman yang lebih mudahPengiktirafan trend semasa hanya berdasarkan perbandingan mudah dengan purata bergerak, mungkin tidak dapat menangkap struktur pasaran yang kompleks dengan tepat. Pertimbangkan untuk mengintegrasikan algoritma pengenalan trend yang lebih kompleks untuk meningkatkan ketepatan.
Tetapan statik penghentian: Penetapan menggunakan ketinggian pengembalian dan ketinggian utama sebagai penghentian dan penangguhan mungkin tidak cukup fleksibel. mekanisme penangguhan dan penangguhan yang dinamik boleh diperkenalkan berdasarkan turun naik pasaran atau sokongan rintangan.
Berdasarkan analisis kod, berikut adalah arah optimasi yang mungkin dibuat untuk strategi ini:
Pengaturan parameter dinamik: Memperkenalkan mekanisme parameter penyesuaian diri, menyesuaikan parameter peratusan tinggi dan lebar model secara automatik mengikut turun naik pasaran dan kitaran dagangan. Oleh itu, ia dapat menyesuaikan diri dengan lebih baik dengan ciri-ciri peringkat pasaran yang berbeza.
Pengesahan trend peningkatanMengintegrasikan kaedah pengenalan trend yang lebih kompleks, seperti analisis trend pelbagai kitaran, perubahan lebar jalur Brin atau indeks pergerakan arah (DMI), untuk meningkatkan ketepatan penilaian trend.
Penapisan isyarat optimumMemperkenalkan syarat penapis tambahan, seperti hubungan kedudukan harga dengan purata bergerak, analisis kesesuaian RSI berkala atau ciri-ciri pengedaran kuantiti, untuk mengurangkan isyarat palsu.
Peningkatan penilaian semula: Menambah penunjuk penilaian strategi yang lebih menyeluruh, seperti penarikan balik maksimum, nisbah Sharpe, faktor kerugian, dan sebagainya, untuk menilai prestasi strategi secara menyeluruh dan membimbing pengoptimuman parameter.
Mekanisme penangguhan kerugianMengubah tahap stop loss berdasarkan ATR atau pergerakan turun naik terkini, dan bukannya hanya menggunakan tahap pemulihan tetap, untuk meningkatkan keberkesanan pengurusan risiko.
Analisis persekitaran pasaran yang bersepaduTambah fungsi pengelompokan persekitaran pasaran, menggunakan tetapan parameter atau logik perdagangan yang berbeza di bawah keadaan pasaran yang berbeza (seperti turun naik tinggi, turun naik rendah, trend kuat atau pergerakan dalam jangka masa).
Mengoptimumkan kecekapan pelaksanaan: Mengubah semula algoritma pengenalan corak, mengurangkan kitaran bersepadu dan pengiraan berulang, meningkatkan kelajuan pelaksanaan strategi dalam persekitaran masa nyata.
Tambah waktu penapisanMenambah syarat penapisan berdasarkan masa, mengelakkan pergerakan yang kuat seperti pembukaan dan penutupan pasaran atau siaran berita penting, dan meningkatkan kualiti isyarat.
Strategi pengukuhan model ketinggian segi empat yang serupa adalah kaedah analisis teknikal yang unik untuk menangkap peluang perdagangan dengan menentukan dengan tepat dan mengenal pasti ciri-ciri geometri pergerakan harga. Inovasi utamanya adalah mengubah corak grafik abstrak menjadi hubungan matematik yang boleh diukur dan digabungkan dengan pengesahan pelbagai indikator teknikal.
Walaupun strategi ini memberikan perspektif baru untuk menganalisis pasaran, kesannya bergantung kepada pengoptimuman parameter dan kesesuaian pasaran. Strategi ini berpotensi menjadi alat yang berkesan dalam toolkit peniaga dengan terus meningkatkan mekanisme penapisan isyarat, meningkatkan ketepatan penilaian trend dan mengoptimumkan kaedah pengurusan risiko.
/*backtest
start: 2024-03-26 00:00:00
end: 2025-03-25 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Similar Rectangle Heights - Strategy", overlay=true)
// Strategy parameters
lookbackPeriod = input.int(45, "Analysis period", minval=10)
primaryHeightPercent = input.float(5.0, "Primary height (% of price)", minval=0.5, maxval=20.0, step=0.5)
correctionHeightPercent = input.float(2.2, "Correction height (% of price)", minval=0.5, maxval=10.0, step=0.5)
minPatternBars = input.int(5, "Minimum pattern width (candles)", minval=3)
maxPatternBars = input.int(14, "Maximum pattern width (candles)", minval=5)
useVolume = input.bool(false, "Include volume")
useRSI = input.bool(true, "Include RSI")
rsiPeriod = input.int(23, "RSI period", minval=5)
rsiOverbought = input.int(55, "RSI overbought level", minval=50, maxval=90)
rsiOversold = input.int(50, "RSI oversold level", minval=10, maxval=50)
// Calculate primary height and correction height in price points
avgPrice = ta.sma(close, lookbackPeriod)
primaryHeight = avgPrice * primaryHeightPercent / 100
correctionHeight = avgPrice * correctionHeightPercent / 100
// Calculate RSI
rsi = ta.rsi(close, rsiPeriod)
// Function to detect a bullish pattern
bullishPattern(idx) =>
// Check if there is a low followed by a rise of a specified height
lowestLow = ta.lowest(low, minPatternBars)[idx]
highAfterLow = ta.highest(high, minPatternBars)[idx]
patternHeight = highAfterLow - lowestLow
// Check if pattern height matches the primary height
heightMatch = math.abs(patternHeight - primaryHeight) <= primaryHeight * 0.2
// Check if pattern width is within range
patternWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and low[idx + i] == lowestLow
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and high[idx + j] == highAfterLow
patternWidth := j - i + 1
break
break
widthMatch = patternWidth >= minPatternBars and patternWidth <= maxPatternBars
// Check volume and RSI conditions
volumeCondition = not useVolume or volume > ta.sma(volume, lookbackPeriod)
rsiCondition = not useRSI or rsi[idx] < rsiOversold
// Return true if all conditions are met
heightMatch and widthMatch and volumeCondition and rsiCondition
// Function to detect a bearish pattern
bearishPattern(idx) =>
// Check if there is a high followed by a drop of a specified height
highestHigh = ta.highest(high, minPatternBars)[idx]
lowAfterHigh = ta.lowest(low, minPatternBars)[idx]
patternHeight = highestHigh - lowAfterHigh
// Check if pattern height matches the primary height
heightMatch = math.abs(patternHeight - primaryHeight) <= primaryHeight * 0.2
// Check if pattern width is within range
patternWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and high[idx + i] == highestHigh
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and low[idx + j] == lowAfterHigh
patternWidth := j - i + 1
break
break
widthMatch = patternWidth >= minPatternBars and patternWidth <= maxPatternBars
// Check volume and RSI conditions
volumeCondition = not useVolume or volume > ta.sma(volume, lookbackPeriod)
rsiCondition = not useRSI or rsi[idx] > rsiOverbought
// Return true if all conditions are met
heightMatch and widthMatch and volumeCondition and rsiCondition
// Function to detect a bullish correction in an uptrend
bullishCorrection(idx) =>
// Check if there is a pullback of correction height after a rise
highBeforeCorrection = ta.highest(high, minPatternBars)[idx]
lowDuringCorrection = ta.lowest(low, minPatternBars)[idx]
correctionSize = highBeforeCorrection - lowDuringCorrection
// Check if correction height matches expected height
heightMatch = math.abs(correctionSize - correctionHeight) <= correctionHeight * 0.2
// Check if correction width is within range
correctionWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and high[idx + i] == highBeforeCorrection
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and low[idx + j] == lowDuringCorrection
correctionWidth := j - i + 1
break
break
widthMatch = correctionWidth >= minPatternBars / 2 and correctionWidth <= maxPatternBars / 2
// Check if we are in an uptrend
uptrend = ta.sma(close, lookbackPeriod)[idx] > ta.sma(close, lookbackPeriod)[idx + minPatternBars]
// Return true if all conditions are met
heightMatch and widthMatch and uptrend
// Function to detect a bearish correction in a downtrend
bearishCorrection(idx) =>
// Check if there is a pullback of correction height after a drop
lowBeforeCorrection = ta.lowest(low, minPatternBars)[idx]
highDuringCorrection = ta.highest(high, minPatternBars)[idx]
correctionSize = highDuringCorrection - lowBeforeCorrection
// Check if correction height matches expected height
heightMatch = math.abs(correctionSize - correctionHeight) <= correctionHeight * 0.2
// Check if correction width is within range
correctionWidth = 0
for i = 0 to maxPatternBars - 1
if idx + i < lookbackPeriod and low[idx + i] == lowBeforeCorrection
for j = i to maxPatternBars - 1
if idx + j < lookbackPeriod and high[idx + j] == highDuringCorrection
correctionWidth := j - i + 1
break
break
widthMatch = correctionWidth >= minPatternBars / 2 and correctionWidth <= maxPatternBars / 2
// Check if we are in a downtrend
downtrend = ta.sma(close, lookbackPeriod)[idx] < ta.sma(close, lookbackPeriod)[idx + minPatternBars]
// Return true if all conditions are met
heightMatch and widthMatch and downtrend
// Detecting signals
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
// Buy signal
buySignal = false
for i = 0 to 3
if bullishPattern(i) or (i > 0 and bullishCorrection(i))
buySignal := true
break
// Sell signal
sellSignal = false
for i = 0 to 3
if bearishPattern(i) or (i > 0 and bearishCorrection(i))
sellSignal := true
break
// Execute strategy
if buySignal
entryPrice := close
stopLoss := close - correctionHeight
takeProfit := close + primaryHeight
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", stop=stopLoss, limit=takeProfit)
if sellSignal
entryPrice := close
stopLoss := close + correctionHeight
takeProfit := close - primaryHeight
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", stop=stopLoss, limit=takeProfit)