Memperbaiki Strategi Mengikuti Gelombang


Tarikh penciptaan: 2024-01-31 15:35:41 Akhirnya diubah suai: 2024-01-31 15:35:41
Salin: 0 Bilangan klik: 669
1
fokus pada
1617
Pengikut

Memperbaiki Strategi Mengikuti Gelombang

Ringkasan: Ini adalah strategi pengesanan trend yang menggunakan indikator gelombang. Ia mendapat garis gelombang dengan mengira purata bergerak indeks harga purata dan purata bergerak perbezaan harga mutlak. Strategi ini menghasilkan isyarat perdagangan dengan memantau persilangan garis gelombang dengan kawasan overbought dan oversold.

Prinsip-prinsip strategi:

  1. Hitung harga purata ap = ((harga tertinggi + harga terendah + harga penutupan) / 3

  2. Hitung EMA ap untuk n1 kitaran, dan dapatkan esa

  3. Hitung EMA tempoh n1 untuk perbezaan mutlak antara ap dan esa, dan d

  4. Hitung garis gelombang: ci = ((ap-esa) / ((0.015*d)

  5. Hitung EMA untuk kitaran n2 ci, dan dapatkan garis gelombang akhir tci, iaitu wt1

  6. Hitung SMA 4 kitaran wt1 dan dapatkan wt2

  7. Garis mendatar untuk kawasan overbuy dan oversell obLevel 12 dan osLevel 12

  8. WT1 menghasilkan isyarat beli apabila melalui obLevel2 line; WT1 menghasilkan isyarat jual apabila melalui osLevel2 line

  9. Tambahkan rata-rata emaFilter dan volumeFilter sebagai syarat penapisan untuk mengelakkan isyarat salah

  10. Tetapkan Stop Loss Rasio Selepas Masuk, Keluar Dari Kedudukan

Analisis kelebihan:

  1. Garis gelombang menangani penukaran plurality dengan baik, dan dapat menangkap trend dengan berkesan

  2. Gabungan garisan rata dan penapisan dua kali jumlah transaksi, kebolehpercayaan yang lebih tinggi

  3. Menggunakan pelbagai set parameter untuk mengelakkan keterbatasan satu indikator

  4. Tetapkan stop loss untuk mengunci sebahagian keuntungan dan mengawal risiko dengan berkesan

Risiko dan kekurangan:

  1. Pilihan parameter boleh menyebabkan prestasi yang buruk atau overfitting dalam keadaan tertentu

  2. Tidak ada panduan yang jelas mengenai pilihan parameter yang optimum, memerlukan percubaan dan kesilapan

  3. Tidak memasukkan keadaan pasaran yang lebih luas ke dalam isyarat

  4. Terdapat risiko kesan tembakan api jika digunakan dalam pasaran yang terhad atau turun naik

  5. Kurangnya peraturan keluar selain daripada keuntungan/kerugian

Arah untuk dioptimumkan:

  1. Set parameter ujian pada pelbagai jangka masa dan aset untuk mencari nilai optimum

  2. Gabungan penunjuk turun naik untuk mengelakkan isyarat pada masa turun naik rendah

  3. Menambah petunjuk tambahan seperti RSI untuk meningkatkan ketepatan isyarat

  4. Membina model pembelajaran mesin untuk mencari parameter optimum untuk aset tertentu

  5. Peningkatan penarikan diri dengan penambahan tracking stop loss atau penarikan diri berdasarkan peristiwa lonjakan turun naik yang mendadak

Kesimpulannya:

Ini adalah strategi yang menggabungkan garis gelombang dan reka bentuk penunjuk tambahan. Ia menggunakan garis gelombang untuk mengenal pasti penukaran trend yang berkesan, ditambah dengan penapisan garis rata dan jumlah perdagangan untuk mengelakkan isyarat yang salah, dan dapat mengambil sebahagian besar trend garis panjang tengah.

Kod sumber strategi
/*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)