Doppel-Nutzen-Durchschnitts-Quantitative Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-14 16:04:33
Tags:

img

Übersicht

Diese Strategie nutzt einfache gleitende Durchschnitts-Crossover- und Dual-Take-Profit-Techniken, um das Risiko zu kontrollieren und die Rentabilität zu erhöhen.

Strategie Logik

Die Strategie basiert auf der Überschneidung von EMA und WMA, um Markttrends zu bestimmen.

Bei Eintritt werden zwei Take-Profit-Levels festgelegt. Der erste Take-Profit wird zum Eintrittspreis + 20 Pips und der zweite Take-Profit zum Eintrittspreis + 40 Pips festgelegt. Inzwischen wird ein Stop-Loss zum Eintrittspreis - 20 Pips platziert.

Wenn der Preis den ersten Gewinn erreicht, wird er die Hälfte der Position schließen.

Für jeden Handel gibt es drei mögliche Ergebnisse:

  1. Der Preis erreicht einen Stop-Loss, nimmt direkt 2% Verlust.

  2. Der Kurs schlägt zuerst, erhält zuerst Gewinn, schließt die Hälfte der Position und erzielt 1% Gewinn, dann läuft er weiter, bis er ausfällt und mit Break Even endet.

  3. Nachdem der Preis den ersten Take Profit erreicht hat, fährt er weiter und erreicht den zweiten Take Profit und endet mit 1% + 2% = 3% Gesamtgewinn.

Analyse der Vorteile

Der größte Vorteil dieser doppelten Take-Profit-Strategie ist, dass sie das Risiko kontrolliert und riesige einzelne Verluste vermeidet.

Im Vergleich zu Single Take Profit/Stop Loss hat diese Strategie drei Ergebnisse - Verlust, Gewinn oder Break Even, wodurch die Wahrscheinlichkeit eines Stop Loss reduziert wird.

Ein weiterer Vorteil ist seine Einfachheit. EMA und WMA sind bekannte Indikatoren, die leicht zu verstehen sind. Die Take Profit/Stop Loss-Logik ist einfach zu überwachen. Diese machen die Strategie für Anfänger einfach zu übernehmen.

Risikoanalyse

Trotz der Vorteile dieser Strategie sind auch Risiken zu beachten.

Zunächst haben die EMA und die WMA als gleitende Durchschnittsindikatoren relativ schwache Fähigkeiten zur Identifizierung von Marktbereichen.

Zweitens können sich die festen Take-Profit-/Stop-Loss-Level möglicherweise nicht an die Volatilität des Marktes anpassen.

Schließlich kann die Strategie nicht auf unerwartete Ereignisse reagieren, da die Gefahr besteht, eingeschlossen zu werden.

Optimierungsrichtlinien

Es gibt mehrere Aspekte, um die Strategie weiter zu optimieren:

  1. Verbessern Sie die Einstiegssignale. Testen Sie bessere gleitende Durchschnitte oder Trendindikatoren als EMA und WMA, um qualitativ hochwertigere Signale zu generieren.

  2. Dynamische Anpassung von Take Profit/Stop Loss. Verwenden Sie Methoden wie ATR, Trailing Stop Loss usw., um die Gewinn-/Verlustniveaus an die Märkte anzupassen.

  3. Fügen Sie Filter hinzu. Verlangen Sie vor dem Crossover eine Bestätigung des Volumens oder des sekundären Indikators, um Fallen zu vermeiden. Überlegen Sie auch, ob Sie um wichtige Ereignisse herum handeln.

  4. Optimieren Sie die Positionsgröße und optimieren Sie die Positionsgröße entsprechend den Kapitalmanagementregeln.

Schlussfolgerung

Zusammenfassend ist dies eine einfache und praktische Trendfolgestrategie. Es verwendet EMA und WMA-Crossover für Einträge und doppelten Gewinn, um Risiken zu kontrollieren. Im Vergleich zu traditionellen Strategien hat es eine höhere Gewinnrate und ein geringeres Risiko. Natürlich sollten Einschränkungen der Indikatoren und Gewinn/Verlust-Einstellungen beachtet werden. Weitere Optimierungen können die Strategie robuster machen.


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

//@version=4
strategy("FS ATR & PS (MA)", overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Time Period
start_year   = input(title='Start year'   ,defval=2019)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_hour   = input(title='Start hour '  ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time     = input(title='set end time?',defval=false)
end_year     = input(title='end year'     ,defval=2019)
end_month    = input(title='end month'    ,defval=12)
end_day      = input(title='end day'      ,defval=31)
end_hour     = input(title='end hour'     ,defval=23)
end_minute   = input(title='end minute'   ,defval=59)

// MA
ema_period   = input(title='EMA period',defval=10)
wma_period   = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)

// Entry Condition
longCondition  = 
 crossover(ema,wma) and Buy and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
shortCondition = 
 crossunder(ema,wma) and Sell and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick

long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + c : long_profit_level1  [1]
long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 

// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size  = 1

// Strategy
if longCondition
    strategy.entry("Buy"  , strategy.long, qty=size)
    strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
    strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
    
if shortCondition
    strategy.entry("Sell" , strategy.short, qty=size)
    strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
    strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
    
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level    , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level    , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level   , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level   , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)






Mehr