Strategie zur Ausbreitung der gleitenden Durchschnittsbandbreite

Schriftsteller:ChaoZhang, Datum: 2023-09-17 18:33:57
Tags:

Übersicht

Diese Strategie verwendet gleitende Durchschnitte, um einen Preiskanal zu bilden und Signale zu erzeugen, wenn der Preis aus den Kanalbändern bricht.

Strategie Logik

  1. Berechnen Sie gleitende Durchschnitte mit Optionen wie SMA/EMA/WMA/RMA.

  2. Der obere Band ist ein bestimmter prozentualer Anstieg des gleitenden Durchschnitts. Der untere Band ist ein bestimmter prozentualer Rückgang.

  3. Optionen für den Handel nur lang, nur kurz oder in zwei Richtungen.

  4. Setzen Sie Stop-Loss- und Take-Profit-Punkte. Take-Profit-Punkt ist ein bestimmter prozentualer Anstieg des Einstiegspreises. Stop-Loss-Punkt ist ein bestimmter prozentualer Rückgang des Einstiegspreises.

Analyse der Vorteile

  1. Einfach zu implementieren Trendbestimmung mit gleitenden Durchschnitten.

  2. Anpassungsfähige Parameter berücksichtigen unterschiedliche Haltezeiten und Risikopräferenzen.

  3. Optionale Long/Short-Richtungen passen sich verschiedenen Marktbedingungen an.

  4. Ein festes Stop-Loss- und Take-Profit-Prozentsatz ermöglicht eine Steuerbarkeit.

Risikoanalyse

  1. Sie sind anfällig dafür, in die Falle zu geraten, wenn sich der Trend abrupt ändert.

  2. Eine unsachgemäße Einstellung der Parameter birgt das Risiko, dass der Handel überschritten oder zurückbleibt.

  3. Festes Stop-Loss/Gewinn-Prozentsatz fehlt an Flexibilität.

  4. Erhöhte Handelsfrequenz und Provisionskosten bei Doppelrichtungshandel.

Optimierungsrichtlinien

  1. Optimieren Sie die gleitenden Durchschnittsparameter, um Verzögerungen und Lärm auszugleichen.

  2. Optimierung der Kanalbandbreite, um die Marktvolatilitätsfrequenz zu erreichen.

  3. Testen Sie verschiedene Stop-Loss- und Gewinnkonfigurationen.

  4. Hinzufügen von Trend- und Schwankungsindikatoren zur Beurteilung der allgemeinen Marktbedingungen.

  5. Implementieren Sie Zeitfilter, um signifikante Ereigniswirkungen zu vermeiden.

Zusammenfassung

Die Strategie erreicht einfache Trendverfolgung durch gleitende Durchschnittskanäle, benötigt jedoch eine stärkere Parameteroptimierung und Risikokontrolle.


/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 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/
// © TaylorTneh
//@version=4

// strategy("Moving Average Band Taylor V1",shorttitle="MA Band+",overlay=true,default_qty_type=strategy.cash,default_qty_value=1000,initial_capital=1000,currency=currency.USD,commission_value=.1)

price = input(close, title="Source")
mabtype = input(title="Moving Average Type", defval="RMA", options=["SMA", "EMA", "RMA", "WMA"])
malen = input(10, "MA Period : 10")
magap = input(0.6, "Band Gap : 0.6", minval = -10, maxval = 10, step = 0.1)
mabup = if mabtype == "SMA"
    sma(high, malen)
else
    if mabtype == "EMA"
        ema(high, malen)
    else
        if mabtype == "WMA"
            wma(high, malen)
        else
            if mabtype == "RMA"
                rma(high, malen)
                    
mabdn = if mabtype == "SMA"
    sma(low, malen)
else
    if mabtype == "EMA"
        ema(low, malen)
    else
        if mabtype == "WMA"
            wma(low, malen)
        else
            if mabtype == "RMA"
                rma(low, malen)
                    
upex = mabup * (1 + magap/100)
dnex = mabdn * (1 - magap/100)
plot(upex, "Upper MA Band", color.orange)
plot(dnex, "Lower MA Band", color.orange)


//-------------------------------------------- (Strategy)
strategy.entry("Long", strategy.long, stop = upex)
strategy.entry("Short", strategy.short, stop = dnex)
//Long Only//strategy.entry("Long", strategy.long, stop = upex)
//Long Only//strategy.exit("Short", stop = dnex)
//Short Only//strategy.entry("Short", strategy.short, stop = dnex)
//Short Only//strategy.exit("Long", stop = upex)


//-------------------------------------------- (Take Profit & Stop Lose)
stopPer = input(500.0, title='# Stop Loss %', type=input.float) / 100
takePer = input(500.0, title='# Take Profit %', type=input.float) / 100
//Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0 
    strategy.exit(id="L-TP/SL", stop=longStop, limit=longTake)
if strategy.position_size < 0 
    strategy.exit(id="S-TP/SL", stop=shortStop, limit=shortTake)


//-------------------------------------------- (Sample Time Filter Strategy)
//fromyear = input(2018, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
//toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
//frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
//tomonth = input(10, defval = 10, minval = 01, maxval = 12, title = "To Month")
//fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
//today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//strategy.entry("Long", strategy.long, stop = upex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//strategy.entry("Short", strategy.short, stop = dnex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//--------------------------------------------


Mehr