
Strategi Quantify Similar Rectangular Height Patterns adalah sistem perdagangan yang didasarkan pada karakteristik fluktuasi harga, yang menangkap peluang perdagangan potensial dengan mengidentifikasi rectangular formasi dengan ketinggian yang sama di pasar. Inti dari strategi ini adalah mencari pola yang mirip dengan amplitudo fluktuasi harga, dan menggabungkan indikator RSI, konfirmasi volume transaksi, dan stop loss yang disesuaikan secara dinamis untuk mengelola risiko dan mengoptimalkan hasil perdagangan.
Prinsip-prinsip inti dari strategi ini didasarkan pada analisis karakteristik geometris dari bentuk harga, terutama di sekitar beberapa titik kunci berikut:
Identifikasi pola ketinggianStrategi ini berfokus pada dua jenis model tinggi - tinggi utama (persenta harga yang disesuaikan oleh pengguna) dan tinggi mundur (persenta harga yang lebih kecil yang juga ditentukan oleh pengguna). Sistem akan secara dinamis menghitung nilai tinggi ini untuk menyesuaikan dengan kondisi pasar yang berbeda.
Deteksi multi-modus:
Optimasi parameter:
Filter indikator teknis:
Strategi masuk dan keluar:
Strategi ini menunjukkan keuntungan yang signifikan dengan analisis mendalam dari implementasi kode:
Mekanisme penciptaan sinyal obyektifBerbasis pada perhitungan matematis dan hubungan geometris yang jelas, mengurangi pengaruh penilaian subjektif, membuat keputusan perdagangan lebih sistematis dan konsisten.
Adaptasi terhadap kondisi pasarDengan menggunakan parameter tinggi sebagai persentase dari harga rata-rata, strategi dapat secara otomatis beradaptasi dengan berbagai rentang harga dan kondisi pasar yang berfluktuasi.
Mekanisme Konfirmasi MultidimensiKombinasi dengan pengenalan pola, indikator RSI, dan analisis volume transaksi, memberikan konfirmasi sinyal bertingkat yang membantu memfilter sinyal perdagangan berkualitas rendah.
Kerangka Manajemen Risiko yang Jelas: Setiap perdagangan memiliki posisi stop loss dan stop loss yang didefinisikan sebelumnya, membantu pedagang mengendalikan risiko dan menjaga rasio risiko-pengembalian yang konsisten.
Bantuan visual: Dengan menggambar persegi panjang dan label pada grafik, secara visual menampilkan pola perdagangan yang diidentifikasi, memudahkan pedagang untuk memahami dan memverifikasi sinyal.
Desain ParameterStrategi ini menyediakan beberapa parameter yang dapat disesuaikan, yang memungkinkan trader untuk mengoptimalkannya sesuai dengan kondisi pasar tertentu dan preferensi risiko pribadi.
Identifikasi berbagai polaTidak hanya dapat mengidentifikasi tren utama yang sedang terbentuk, tetapi juga dapat menangkap peluang untuk membalikkan tren, memberikan lebih banyak titik masuk perdagangan.
Meskipun ada banyak keuntungan dari strategi ini, ada risiko potensial:
Parameter SensitivitasKinerja strategi sangat bergantung pada pengaturan parameter, parameter yang tidak tepat dapat menyebabkan overtrading atau kehilangan sinyal penting. Solusinya adalah mencari kombinasi parameter yang optimal melalui retrospeksi sejarah, dan secara berkala mengevaluasi kembali efektivitas parameter.
Risiko Penembusan Palsu: Pasar dapat membentuk bentuk yang mirip dengan pola yang diharapkan tetapi kemudian berbalik, menyebabkan sinyal yang salah. Disarankan untuk menambahkan mekanisme konfirmasi, seperti menunggu konfirmasi harga close out atau melakukan verifikasi silang dengan indikator lain.
Batas persentase tetap: Menggunakan perhitungan ketinggian persentase tetap mungkin tidak cocok untuk pasar dengan volatilitas yang berubah-ubah. Metode perhitungan ketinggian dinamis yang didasarkan pada ATR atau volatilitas historis dapat dipertimbangkan.
Proses intensif komputasiStrategi ini melibatkan banyak loop dan penilaian kondisional yang dapat menyebabkan masalah kinerja ketika menangani sejumlah besar data. Mengoptimalkan struktur kode atau menyederhanakan beberapa langkah perhitungan dapat meningkatkan efisiensi eksekusi.
Pengadilan Trending SederhanakanPerbandingan sederhana dari rata-rata bergerak mungkin tidak dapat secara akurat menangkap struktur pasar yang kompleks. Pertimbangkan untuk mengintegrasikan algoritma identifikasi tren yang lebih kompleks untuk meningkatkan akurasi.
Pengaturan statis stop loss: Fixed menggunakan tinggi regresi dan tinggi utama sebagai stop loss dan stop mungkin tidak cukup fleksibel. Bisa diperkenalkan mekanisme stop loss yang dinamis berdasarkan volatilitas pasar atau mendukung resistance point.
Berdasarkan analisis kode, berikut ini adalah arah optimasi yang mungkin dilakukan untuk strategi ini:
Pengaturan parameter dinamis: Memperkenalkan mekanisme parameter adaptif, yang secara otomatis menyesuaikan parameter persentase tinggi dan lebar model sesuai dengan volatilitas pasar dan siklus perdagangan. Dengan demikian, dapat lebih beradaptasi dengan karakteristik fase pasar yang berbeda.
Konfirmasi peningkatan trenMengintegrasikan metode identifikasi tren yang lebih kompleks, seperti analisis tren multi-siklus, perubahan bandwidth Brin atau indeks pergerakan arah (DMI), untuk meningkatkan akurasi penilaian tren.
Optimalkan filter sinyalIntroduksi kondisi penyaringan tambahan, seperti hubungan posisi harga dengan rata-rata bergerak, analisis konsistensi RSI multi-siklus, atau karakteristik distribusi volume transaksi, mengurangi sinyal palsu.
Peningkatan evaluasi feedbackMenambahkan indikator penilaian strategi yang lebih komprehensif, seperti penarikan maksimum, rasio Sharpe, dan faktor kerugian, untuk menilai kinerja strategi secara komprehensif dan membimbing pengoptimalan parameter.
Adaptasi mekanisme penghentian kerugianAdaptasi tingkat stop loss berdasarkan ATR atau dinamika volatilitas terkini, bukan hanya menggunakan tinggi setoran tetap, meningkatkan efektivitas manajemen risiko.
Integrasi analisis lingkungan pasar: Menambahkan fungsi klasifikasi lingkungan pasar, menggunakan pengaturan parameter atau logika perdagangan yang berbeda dalam kondisi pasar yang berbeda (seperti volatilitas tinggi, volatilitas rendah, tren kuat, atau gempa berjangka).
Mengoptimalkan efisiensi pelaksanaanRefactoring algoritma pengenalan pola, mengurangi looping dan penghitungan ulang, dan meningkatkan kecepatan pelaksanaan strategi dalam lingkungan real-time.
Tambahkan waktu penyaringanTambahkan kondisi penyaringan berdasarkan waktu, menghindari saat-saat yang bergejolak seperti saat pasar terbuka, ditutup, atau siaran pers penting, dan meningkatkan kualitas sinyal.
Strategi kuantitatif dengan pola tinggi persegi panjang adalah metode analisis teknis yang unik untuk menangkap peluang perdagangan dengan mendefinisikan dan mengidentifikasi karakteristik geometris dari fluktuasi harga. Inovasi utamanya adalah mengubah pola grafik abstrak menjadi hubungan matematika yang dapat diukur dan digabungkan dengan indikator teknis untuk melakukan multiple verifikasi. Strategi ini memberikan kerangka kerja perdagangan yang lengkap, termasuk sinyal masuk, pembuatan manajemen risiko, dan tampilan grafis, yang cocok untuk pedagang yang mengejar metode perdagangan sistematis.
Meskipun strategi ini menawarkan perspektif baru untuk menganalisis pasar, kesempurnaan strategi ini sangat bergantung pada pengoptimalan parameter dan adaptasi pasar. Strategi ini memiliki potensi untuk menjadi alat yang efektif dalam toolkit pedagang dengan terus meningkatkan mekanisme penyaringan sinyal, meningkatkan akurasi penilaian tren, dan mengoptimalkan metode manajemen 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)