Multi Take Profit und Stop Loss WelleTrend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-01 18:09:12
Tags:

img

Übersicht

Diese Strategie basiert auf der ursprünglichen WaveTrend-Strategie von LazyBear, mit zusätzlichen Funktionen wie sekundärem Stop-Loss, mehreren Take-Profit-Levels und einem hohen Zeitrahmen-EMA-Filter.

Strategie Logik

Der Kernindikator dieser Strategie ist der WaveTrend, der aus drei Komponenten besteht:

  1. AP: Durchschnittspreis = (Höchster + Tiefster + Schließen) / 3

  2. ESVG: EMA der AP für n-Perioden

  3. CI: (AP - ESVK) / (0,015 * N1-Perioden EMA des absoluten Wertes von (AP - ESVK))

  4. TCI: N2-Perioden-EMA von CI, auch als WaveTrend Line 1 (WT1) bezeichnet

  5. WT2: 4-Perioden-SMA von WT1

Eine Longposition wird eröffnet, wenn WT1 über WT2 (goldenes Kreuz) überschreitet, und geschlossen, wenn WT1 unter WT2 (Todeskreuz) überschreitet.

Darüber hinaus wird ein EMA-Filter mit hohem Zeitrahmen implementiert, um falsche Signale zu vermeiden, so dass nur lange Trades getätigt werden, wenn der Preis über der EMA liegt und kurze Trades unterhalb der EMA.

Vorteile

  1. Automatisch Trends mit WaveTrend ohne manuelles Urteilen verfolgen

  2. Sekundärer Stop-Loss begrenzt den Einzelhandelsverlust

  3. Mehrfache Gewinnspielräume maximieren die Gewinngewinnung

  4. Der EMA-Filter verbessert die Gewinnrate, indem er falsche Signale vermeidet

Risiken und Verbesserungen

  1. Wenn keine Trendumkehr erkannt wird, kann dies zu Verlusten führen.

  2. Eine schlechte Einstellung der Parameter führt zu einem Überhandel

  3. Verschiedene Parametermengen können für die Optimierung getestet werden

  4. Überlegen Sie zusätzliche Indikatoren für die Umkehrerkennung

Schlussfolgerung

Diese Strategie beinhaltet umfassend Trendverfolgung, Risikokontrolle und Gewinnmaximierung durch die automatische Trenderkennung von WaveTrend, EMA-Filter zur Verbesserung der Effizienz und Stop-Loss/Take-Profit-Management, um den Trendhandel und die Risikokontrolle auszugleichen.


/*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)



Mehr