Ringkasan: Ini adalah strategi mengikuti tren yang menggunakan osilator Trend Wave untuk mengidentifikasi tren. Ini menghitung rata-rata bergerak eksponensial dari harga rata-rata dan perbedaan harga absolut untuk memetakan garis Trend Wave. Sinyal perdagangan dihasilkan ketika garis Trend Wave melintasi zona overbought / oversold. Filter tambahan pada moving average dan volume menghindari sinyal palsu.
Logika Strategi:
Hitung harga rata-rata ap = (tinggi + rendah + dekat) / 3
Menghitung EMA periode n1 dari ap untuk mendapatkan esa
Menghitung EMA periode n dari perbedaan absolut antara ap dan esa untuk mendapatkan d
Hitung garis tren gelombang: ci = (ap - esa) / ((0.015*d)
Hitung EMA periode n2 dari ci untuk mendapatkan garis tren gelombang akhir tci, yaitu wt1
Menghitung SMA 4 periode dari wt1 untuk mendapatkan wt2
Plot overbought/oversold garis level obLevel1/2 dan osLevel1/2
Menghasilkan sinyal beli ketika wt1 melintasi obLevel2; Menghasilkan sinyal jual ketika wt1 melintasi di bawah osLevel2
Tambahkan rata-rata bergerak emaFilter dan volume filter volumeFilter sebagai filter untuk menghindari sinyal palsu
Set mengambil keuntungan/stop loss setelah masuk ke posisi keluar
Keuntungan:
Garis tren gelombang menangani tren/transisi kontra-tren dengan baik
Keandalan ditingkatkan melalui filter ganda dari rata-rata bergerak dan volume
Beberapa parameter menghindari keterbatasan satu indikator
Mengambil keuntungan / menghentikan kerugian kunci dalam keuntungan dan mengontrol risiko
Risiko dan Batasan:
Pilihan parameter dapat menyebabkan kinerja yang buruk atau overfit
Tidak ada panduan definitif tentang parameter optimal
Mengingkari kondisi pasar yang lebih luas
Risiko whip-saws di pasar yang terikat rentang/terputus
Kurangnya aturan keluar selain mengambil keuntungan/stop loss
Peluang peningkatan:
Parameter pengujian di seluruh kerangka waktu/aset untuk menemukan nilai optimal
Menggabungkan metrik volatilitas untuk menghindari rezim volatilitas rendah
Tambahkan indikator seperti RSI untuk meningkatkan akurasi sinyal
Membangun model pembelajaran mesin untuk menemukan parameter yang disesuaikan yang optimal
Memperkuat exit dengan trailing stops atau volatility event based exit
Kesimpulan:
Ini adalah strategi mengikuti tren yang menggabungkan indikator Trend Wave dengan filter tambahan. Ini memanfaatkan kemampuan garis Trend Wave untuk mengidentifikasi transisi tren, menggunakan filter rata-rata bergerak dan volume untuk menghindari sinyal palsu, dan bertujuan untuk menangkap sebagian besar tren jangka menengah / panjang. Mengambil keuntungan / menghentikan kerugian digunakan untuk mengendalikan risiko. Peluang yang signifikan ada untuk meningkatkan kinerja di lebih banyak instrumen dan kerangka waktu dengan mengoptimalkan parameter, menambahkan lebih banyak indikator, dan teknik seperti pembelajaran mesin.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false) // Paramètres n1 = input(10, title="Channel Length") n2 = input(21, title="Average Length") obLevel1 = input(60, title="Over Bought Level 1") obLevel2 = input(53, title="Over Bought Level 2") osLevel1 = input(-65, title="Over Sold Level 1") osLevel2 = input(-60, title="Over Sold Level 2") takeProfitPercentage = input(1, title="Take Profit (%)") stopLossPercentage = input(0.50, title="Stop Loss (%)") // Calculs ap = hlc3 esa = ta.ema(ap, n1) d = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ta.ema(ci, n2) wt1 = tci wt2 = ta.sma(wt1, 4) // Tracé des lignes plot(0, color=color.gray) plot(obLevel1, color=color.red) plot(osLevel1, color=color.green) plot(obLevel2, color=color.red, style=plot.style_line) plot(osLevel2, color=color.green, style=plot.style_line) plot(wt1, color=color.green) plot(wt2, color=color.red, style=plot.style_line) // Tracé de la différence entre wt1 et wt2 en bleu hline(0, "Zero Line", color=color.gray) // Conditions d'entrée long et court longCondition = ta.crossover(wt1, obLevel2) shortCondition = ta.crossunder(wt1, osLevel2) // Tracé des signaux d'achat et de vente plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal") plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal") // Conditions d'entrée et de sortie strategy.entry("Long", strategy.long, when=longCondition) strategy.entry("Short", strategy.short, when=shortCondition) // Niveaux de prise de profit pour les positions longues et courtes longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100) shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100) // Vérification si les niveaux de prise de profit sont atteints longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel // Tracé des formes de prise de profit plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long") plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short") // Niveaux de stop loss pour les positions longues et courtes longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100) shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100) // Vérification si les niveaux de stop loss sont atteints longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel // Tracé des formes de stop loss plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long") plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short") // Fermeture des positions en cas de prise de profit ou de stop loss strategy.close("Long", when=longTakeProfitReached or longStopLossReached) strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)