
Chiến lược này là chiến lược xu hướng sóng nguyên thủy của LazyBear, bổ sung một lệnh dừng thứ hai, nhiều giá dừng và bộ lọc EMA khung thời gian cao. Nó sử dụng các chỉ số xu hướng sóng để tạo tín hiệu giao dịch, sau đó kết hợp với bộ lọc EMA và quản lý dừng lỗ để thực hiện giao dịch theo dõi xu hướng tự động.
Chỉ số trung tâm của chiến lược là chỉ số xu hướng sóng (WaveTrend), bao gồm ba phần:
AP: Giá trung bình = ((giá cao + giá thấp + giá đóng cửa) / 3
ESA: AP n1 EMA
CI: ((AP-ESA) / (EMA n1 của 0.015 x AP-ESA)
TCI: EMA n2 của CI, tức là đường xu hướng sóng 1 ((WT1))
WT2: SMA 4 chu kỳ của WT1
Khi WT1 đâm vào WT2 tạo ra nếp nhăn vàng, làm nhiều hơn; khi WT1 đâm vào WT2 tạo ra nếp nhăn chết, bằng phẳng.
Ngoài ra, chiến lược cũng giới thiệu khung thời gian cao EMA làm bộ lọc, chỉ làm nhiều khi giá cao hơn EMA và trống khi giá thấp hơn EMA, để lọc ra một số tín hiệu giả.
Chiến lược tổng hợp xem xét nhiều chiều như theo dõi xu hướng, kiểm soát rủi ro, tối đa hóa lợi nhuận, tự động nắm bắt xu hướng thông qua chỉ số xu hướng sóng, kết hợp với bộ lọc EMA để tăng hiệu quả giao dịch, kiểm soát rủi ro trong khi nắm bắt xu hướng, là một chiến lược theo dõi xu hướng hiệu quả và ổn định. Bằng cách tối ưu hóa tham số hơn nữa và tăng phán đoán đảo ngược, có thể mở rộng hơn nữa tính phù hợp của chiến lược.
/*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)