Multi mengambil keuntungan dan hentikan kerugian Gelombang Trend Mengikuti strategi

Penulis:ChaoZhang, Tarikh: 2023-12-01 18:09:12
Tag:

img

Ringkasan

Strategi ini berdasarkan strategi WaveTrend asal dari LazyBear, dengan ciri tambahan seperti stop loss sekunder, pelbagai tahap mengambil keuntungan dan penapis EMA jangka masa tinggi.

Logika Strategi

Penunjuk teras strategi ini adalah WaveTrend, yang terdiri daripada tiga komponen:

  1. AP: Harga purata = (Paling Tinggi + Terendah + Tutup) / 3

  2. ESA: EMA tempoh n1 AP

  3. CI: (AP - ESA) / (0.015 * N1-period EMA nilai mutlak (AP - ESA))

  4. TCI: EMA n2-periode CI, juga dipanggil WaveTrend Line 1 (WT1)

  5. WT2: SMA 4 tempoh WT1

Posisi panjang dibuka apabila WT1 melintasi di atas WT2 (salib emas), dan ditutup apabila WT1 melintasi di bawah WT2 (salib kematian).

Di samping itu, penapis EMA jangka masa tinggi dilaksanakan untuk mengelakkan isyarat palsu, supaya perdagangan panjang hanya diambil apabila harga di atas EMA dan perdagangan pendek di bawah EMA.

Kelebihan

  1. Mengikuti trend secara automatik menggunakan WaveTrend tanpa pertimbangan manual

  2. Stop loss sekunder berkesan mengehadkan kerugian perdagangan tunggal

  3. Pelbagai tahap mengambil keuntungan memaksimumkan penahanan keuntungan

  4. Penapis EMA meningkatkan kadar kemenangan dengan mengelakkan isyarat palsu

Risiko dan Penambahbaikan

  1. Kegagalan untuk mengesan pembalikan trend, boleh menyebabkan kerugian

  2. Penyesuaian parameter yang buruk membawa kepada perdagangan berlebihan

  3. Set parameter yang berbeza boleh diuji untuk pengoptimuman

  4. Pertimbangkan penunjuk tambahan untuk pengesanan pembalikan

Kesimpulan

Strategi ini merangkumi trend berikut, kawalan risiko dan pemaksiman keuntungan melalui pengesanan trend automatik WaveTrend, penapis EMA untuk meningkatkan kecekapan dan pengurusan stop loss / mengambil keuntungan untuk mengimbangi perdagangan trend dan kawalan risiko.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © undacovacobra

//@version=4
strategy("WaveTrend Strategy [LazyBear] with Secondary Stop Loss", overlay=true)

// Input parameters
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
useEmaFilter = input(false, "Use EMA Filter")
emaLength = input(50, "EMA Length")
emaTimeFrame = input("60", "EMA Time Frame")
tradeMode = input("Both", "Trade Mode", options=["Long Only", "Short Only", "Both"])
useSecondarySL = input(false, "Use Secondary Stop Loss")
slPercentage = input(5.0, "Stop Loss Percentage (%)")

// WaveTrend Indicator Calculations
ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
wt1 = tci
wt2 = sma(wt1, 4)

// EMA Calculation with Selected Time Frame
getEma(timeFrame) =>
    security(syminfo.tickerid, timeFrame, ema(close, emaLength))

emaFilter = getEma(emaTimeFrame)

// Secondary Stop Loss Calculation
longStopPrice = strategy.position_avg_price * (1 - slPercentage / 100)
shortStopPrice = strategy.position_avg_price * (1 + slPercentage / 100)

// Long Entry and Exit Conditions with EMA Filter and Trade Mode
longEntry = crossover(wt1, wt2) and wt2 < osLevel1 and (not useEmaFilter or close > emaFilter) and (tradeMode == "Long Only" or tradeMode == "Both")
if (longEntry)
    strategy.entry("Long", strategy.long)
longExit = crossunder(wt1, wt2) and wt2 > obLevel1
if (longExit)
    strategy.close("Long")
if (useSecondarySL and strategy.position_size > 0 and low < longStopPrice)
    strategy.close("Long", comment="SL Hit")

// Short Entry and Exit Conditions with EMA Filter and Trade Mode
shortEntry = crossunder(wt1, wt2) and wt2 > obLevel1 and (not useEmaFilter or close < emaFilter) and (tradeMode == "Short Only" or tradeMode == "Both")
if (shortEntry)
    strategy.entry("Short", strategy.short)
shortExit = crossover(wt1, wt2) and wt2 < osLevel1
if (shortExit)
    strategy.close("Short")
if (useSecondarySL and strategy.position_size < 0 and high > shortStopPrice)
    strategy.close("Short", comment="SL Hit")

// Plotting
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_cross)
plot(osLevel2, color=color.green, style=plot.style_cross)
plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_cross)
plot(wt1-wt2, color=color.blue, style=plot.style_area, transp=80)
plot(emaFilter, color=color.blue)



Lebih lanjut