
Ini adalah strategi pelacakan tren yang menggunakan indikator gelombang untuk mengidentifikasi. Ini menghasilkan garis gelombang dengan menghitung rata-rata pergerakan indeks harga rata-rata dan rata-rata pergerakan selisih harga mutlak. Strategi ini menghasilkan sinyal perdagangan dengan memantau persilangan garis gelombang dengan area overbought dan oversold.
Prinsip-prinsip Strategi:
Perhitungan harga rata-rata ap = ((harga tertinggi + harga terendah + harga penutupan) / 3
Hitung EMA dari ap untuk periode n1 dan dapatkan esa
Hitung n1 periode EMA dari perbedaan mutlak ap dan esa, dan dapatkan d
Perhitungan garis gelombang: ci = ((ap-esa) / ((0.015*d)
Hitung EMA untuk periode n2 ci, dan mendapatkan garis gelombang akhir tci, yaitu wt1
Hitung 4 siklus SMA wt1 dan dapatkan wt2
Garis horizontal obLevel1/2 dan osLevel1/2 untuk zona overbuying dan zona overselling
WT1 menghasilkan sinyal beli saat melewati obLevel 2 line; WT1 menghasilkan sinyal jual saat melewati osLevel 2 line
Tambahkan rata-rata emaFilter dan volumeFilter sebagai kondisi penyaringan untuk menghindari sinyal yang salah
Set Stop Loss Rasio Setelah Masuk, Keluar dari Posisi
Analisis Keunggulan:
Garis gelombang menangani konversi multispace dengan lebih baik, sehingga dapat menangkap tren secara efektif
Kombinasi rata-rata dan volume ganda penyaringan, reliabilitas yang lebih tinggi
Perhitungan menggunakan beberapa set parameter untuk menghindari keterbatasan dari satu indikator
Setting Stop Loss, dapat mengunci sebagian keuntungan, dan mengontrol risiko secara efektif
Risiko dan kekurangan:
Pilihan parameter dalam beberapa kasus dapat menyebabkan kinerja yang buruk atau over-fit
Tidak ada panduan yang jelas tentang pilihan parameter optimal, perlu trial and error
Tidak memasukkan kondisi pasar yang lebih luas ke dalam sinyal
Ada risiko efek kembang api jika digunakan dalam pasar yang terbatas atau berfluktuasi
Kurangnya aturan keluar selain keuntungan/kehilangan
Cara Mengoptimalkan:
Set parameter pengujian pada berbagai kerangka waktu dan aset untuk menemukan nilai optimal
Kombinasi dengan indikator volatilitas untuk menghindari sinyal pada periode volatilitas rendah
Menambahkan indikator tambahan seperti RSI untuk meningkatkan akurasi sinyal
Membangun model pembelajaran mesin untuk mencari parameter optimal untuk aset tertentu
Penarikan yang diperkuat dengan menambahkan tracking stop loss atau penarikan yang didasarkan pada peristiwa ekspansi volatilitas mendadak
Kesimpulannya:
Ini adalah strategi yang menggabungkan garis gelombang dan desain indikator tambahan. Ini menggunakan garis gelombang untuk mengidentifikasi konversi tren yang efektif, ditambah dengan filter garis rata-rata dan volume perdagangan untuk menghindari sinyal yang salah, dan dapat mengambil sebagian besar tren garis panjang tengah.
/*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)