
Strategi ini adalah strategi trend gelombang asli LazyBear, dengan penambahan berhenti kedua, harga berhenti berbilang dan penapis EMA jangka masa tinggi. Ia menggunakan indikator trend gelombang untuk menghasilkan isyarat perdagangan, dan kemudian menggabungkan penapis EMA dan pengurusan berhenti berhenti untuk melakukan perdagangan trend automatik.
Penunjuk teras strategi ini adalah penunjuk trend gelombang (WaveTrend), yang terdiri daripada tiga bahagian:
AP: Harga purata = ((Harga tertinggi + harga terendah + harga penutupan) / 3
ESA: EMA edisi n1 AP
CI: ((AP-ESA) / (0.015 × n1 tempoh EMA AP-ESA) pada nilai mutlak n1 tempoh EMA
TCI: EMA fasa n2 CI, iaitu garis trend gelombang 1 ((WT1)
WT2: SMA 4 kitaran WT1
Apabila menembusi WT1 menghasilkan garpu emas WT2, lakukan lebih banyak; apabila menembusi WT1 menghasilkan garpu mati WT2, berpatah kedudukan.
Selain itu, strategi ini juga memperkenalkan EMA jangka masa tinggi sebagai penapis, yang hanya boleh dilakukan apabila harga lebih tinggi daripada EMA, dan kosong apabila harga lebih rendah daripada EMA, untuk menyaring beberapa isyarat palsu.
Strategi ini merangkumi pelbagai dimensi seperti trend tracking, kawalan risiko, dan pengoptimuman keuntungan, menangkap trend secara automatik melalui indikator trend gelombang, bekerjasama dengan penapis EMA untuk meningkatkan kecekapan perdagangan, dan mengawal risiko sambil menangkap trend. Strategi ini adalah strategi trend tracking yang stabil dan efisien.
/*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)