Doppelter gleitender Durchschnitt - Bollinger-Bänder - Trendfolgestrategie


Erstellungsdatum: 2023-11-01 14:15:11 zuletzt geändert: 2023-11-01 14:15:11
Kopie: 0 Klicks: 614
1
konzentrieren Sie sich auf
1617
Anhänger

Doppelter gleitender Durchschnitt - Bollinger-Bänder - Trendfolgestrategie

Überblick

Diese Strategie basiert auf der Brin-Band-Doppel-Gleichgewicht-Linie für Trend-Following-Handelsentscheidungen. Sie nutzt die Brin-Band-Abschluss- und Spread-Veränderungen, um die Trendänderungen zu beurteilen, in der Nähe der Brin-Band-Abschlussbahn zu kaufen, in der Nähe der Oberbahn zu verkaufen, zu kaufen und zu verkaufen und zu profitieren.

Strategieprinzip

Die Strategie beinhaltet die gleichzeitige Anwendung von einfachen und erweiterten Brin-Versionen.

Ein einfacher Brin-Band-Mittelstrahl für die SMA-Berechnung mit dem Schlusskurs, ein verstärkter Brin-Band-Mittelstrahl für die EMA-Berechnung mit dem Schlusskurs.

Die Standarddifferenz wird durch die mittlere Bahn±N-fach berechnet.

Die Strategie beurteilt den Trend anhand des Abstands zwischen dem Brin-Band und dem Down-Track. Wenn der Spread kleiner als die eingestellte Schwelle ist, bedeutet dies, dass er in den Trendbereich eintritt und ein Trend-Follow-Handel durchgeführt werden kann.

Insbesondere, wenn der Preis in der Nähe der Unterbahn zu kaufen und zu verkaufen, wenn der Preis in der Nähe der Oberbahn zu verkaufen. Die Stop-Loss-Methode ist eine feste Stop-Loss-Prozentsatz, während die Option, Tracking-Stops zu aktivieren.

Zielgewinn hängt davon ab, ob man sich für eine Platzierung in der Mitte oder in der Nähe der Oberbahn entscheidet.

Die Strategie bietet auch die Möglichkeit, nur zu verkaufen, wenn ein Gewinn gesichert ist, um Verluste zu vermeiden.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Doppel-Bügel-Kombination für eine effizientere Entscheidung

Die Anwendung von einfachen und erweiterten Brin-Bändern ermöglicht es, die Wirkung der beiden Brin-Bänder zu vergleichen, eine bessere Version zu wählen und die Entscheidungswirksamkeit zu verbessern.

  1. Trends anhand der Breite des Brin-Band-Kanals

Wenn der Brin-Band-Kanal schmaler ist, bedeutet dies, dass der Trend eingeschaltet ist, und die Gewinnrate für den Trend ist höher.

  1. Flexible Stop-Loss-Methoden

Ein Fix-Prozent-Stop-Loss wird verwendet, um einzelne Verluste zu kontrollieren. Es gibt auch die Möglichkeit, in der Mitte oder in der Nähe der Bahn zu stoppen, und die Tracking-Stop-Option wird aktiviert, um mehr Gewinne zu erzielen.

  1. Schutzmechanismen zur Verhinderung von Verlusten

Verkäufe, bei denen nur Gewinn gesichert ist, verhindern eine Ausweitung der Verluste.

Risikoanalyse

Die Strategie birgt auch folgende Risiken:

  1. Rückzug Risiken

Der Trendhandel selbst birgt ein gewisses Rücknahme-Risiko und erfordert den psychologischen Druck, einen anhaltenden Verlust zu ertragen.

  1. Die Gefahr von Erschütterungen

Wenn der Brin-Band-Kanal breiter ist, bedeutet dies, dass die Marktsituation in einen Schock geraten kann. Die Strategie funktioniert nicht gut und es ist notwendig, den Handel auszusetzen, bis sich der Trend wieder gebildet hat.

  1. Das Risiko, dass der Stop-Loss ausgelöst wird

Ein fester Prozentsatz-Stopp kann zu radikal sein und muss in mildere Stopps wie ATR-Stopps umgewandelt werden.

Optimierungsrichtung

Diese Strategie kann optimiert werden durch:

  1. Optimierung der Brin-Band-Parameter

Verschiedene Mittelwertparameter, Standarddifferenz-Meples können getestet werden, um eine Kombination von Brin-Band-Parametern zu finden, die besser für verschiedene Märkte geeignet ist.

  1. Filter in Kombination mit anderen Indikatoren

Auf der Basis von Brin-Band-Signalen können Indikatoren wie MACD, KD und Filter hinzugefügt werden, um den Handel in den Schaukelmärkten zu reduzieren.

  1. Optimierung der Stop-Loss-Strategie

Verschiedene Bewegungsstop-Methoden können getestet werden, oder Optimierungsstop-Punkte können basierend auf Messgrößen wie Amplitude, ATR, etc. verwendet werden.

  1. Optimierung der Kapitalverwaltung

Optimierung der Positionsverwaltung für jeden Handel und Test verschiedener Ausgleichsstrategien.

Zusammenfassen

Diese Strategie integriert die Vorteile der doppelten Brin-Band-Indikatoren, die den Trend anhand der Breite der Brin-Band-Kanäle beurteilen und während des Trends niedrig-hohe Abwärtstransaktionen durchführen. Die Strategie bietet eine wissenschaftliche Stop-Loss-Mechanismus zur Risikokontrolle. Die Strategie kann durch Parameteroptimierung und in Kombination mit anderen Indikatoren Filterung zur weiteren Steigerung der Stabilität.

Strategiequellcode
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 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/
// © JCGMarkets 

//@version=4
strategy("B.Bands | Augmented | Intra-range | Long-Only", shorttitle = "BB|A|IR|L", initial_capital=5000, commission_value=0.075, slippage = 1, overlay = true)

//Technical Indicators Data
show_simp   = input(false, title="Trade on Simple Bollinger Bands ", type= input.bool, group="Select Strategy System")
show_augm   = input(true, title="Trade on Augmented Bollinger Bands", type= input.bool, group="Select Strategy System") 
periods     = input(20, title="Periods for Moving Average", type =input.integer, minval = 2, step = 1, group="Technical Inputs")
std         = input(2, title="Std", type = input.float, minval=0.1 , step = 0.1, group="Technical Inputs")

// Strategy data
max_spread_bb   = input(20000.0, title="Max Spread Tolerance Beetween Bands", type=input.float, step=0.1, group="Strategy Inputs")
entry_source    = input(close, title="Entry data source", type=input.source, group="Strategy Inputs")
exit_source     = input(high, title="Exit data source", type=input.source, group="Strategy Inputs")
take_profit     = input("middle", title = "Profit to band:", options = ["middle", "opposite"], group="Strategy Inputs")
stop_loss       = input(3.00, title="Stop Loss %", type=input.float, step=0.05, group="Strategy Inputs")
trailing        = input(false, title="Activate trailing stop?", type = input.bool, group="Strategy Inputs")
stop_perc       = input(6.00, title="Trailing %", type=input.float, step=0.125, group="Strategy Inputs") * 0.01
sell_profit     = input(false, title="Only sell in profit (Stop Loss still active) ", type= input.bool, group="Strategy Inputs")


var SL = 0.0
var SLT= 0.0


//Simple BB Calculation -> adapt if needed with different std for upper-lower, sma-ema, etc 
middle_sim = sma(close, periods)

//Augmented BB Calculation -> adapt if needed with different std for upper lower, etc
middle_augm  = ema(close, periods)
middle_upp = ema(high, periods)
middle_low = ema(low, periods)

//Multiplier
dev      = stdev(close, periods) * std

//Upper & Lower Bands
upper = (middle_sim + dev)
lower = (middle_sim - dev)

//Augmented Bands
upper_augm = (middle_upp + dev)
lower_augm = (middle_low - dev)

//Bands Spread
spread   = upper - lower
spread_augm   = upper_augm - lower_augm

//From date
filter_from    =   input(  true,    title="===> From", group="Date Control")
from_y         =   input(  2010,    title = "from year", group="Date Control")
from_m         =   input(     1,    title = "from month", minval =1, maxval=12, group="Date Control")
from_d         =   input(     1,    title = "from day",  minval=1, maxval=31, group="Date Control")

//To date
filter_to   =    input( true,   title="===> To", group="Date Control")
to_y        =    input( 2030,   title = "To year", group="Date Control")
to_m        =    input(    1,   title = "To month", minval =1, maxval=12, group="Date Control")
to_d        =    input(    1,  title = "To day",  minval=1, maxval=31, group="Date Control")

// Date Condition
In_date() =>  true

in_position = strategy.position_size > 0 

// Trailing stop 
SLT := if in_position and In_date()
    stop_inicial = entry_source * (1 - stop_perc)
    max(stop_inicial, SLT[1])
else
    0

slts = (low <= SLT) and (trailing == true)


//Essential Trade logics
entry_long = (entry_source <= lower) and (spread < max_spread_bb)
entry_long_augm = (entry_source <= lower_augm) and (spread_augm < max_spread_bb)

// Simple Bollinger Conditions

if (not in_position and show_simp and In_date())
    if entry_long
        // Trigger buy order
        position_size = round( strategy.equity / close ) // All available equity for this strategy example
        strategy.entry("Entry", strategy.long, qty = position_size )
        SL := close * (1 - (stop_loss / 100)) // You could determine wether or not implement stop loss with bool input and if condition here.


if in_position and show_simp and not sell_profit and In_date()
    //Exits if not sell in profit
    if take_profit == "middle" 
        strategy.exit("Target", "Entry", limit = middle_sim, stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry", limit = upper, stop = SL, comment="Exit")    

if in_position and show_simp and sell_profit and In_date()
    //Exits if sell in profit
    if take_profit == "middle" 
        strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? middle_sim: na), stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry", limit = (strategy.openprofit > 0 ? upper: na), stop = SL, comment="Exit")    



if in_position and show_simp and slts and In_date()
    //Trailing activation
    strategy.close("Entry", comment="SLT")

if not In_date()
    //Exit due out of date range
    strategy.close("Entry", comment="Out of date range")



// Augmented Bollinger Conditions

if (not in_position and show_augm and In_date()) 
    if entry_long_augm
        // Trigger buy order
        position_size = round( strategy.equity / close )
        strategy.entry("Entry_A", strategy.long, qty = position_size )
        SL := close * (1 - (stop_loss / 100) )

if in_position and show_augm and not sell_profit and In_date()
    //Exits and not sell in profit
    if take_profit == "middle"
        strategy.exit("Target", "Entry_A", limit = middle_augm, stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry_A", limit = upper_augm, stop = SL, comment="Exit")            
        

if in_position and show_augm and sell_profit and In_date() 
    //Exit only in profit
    if take_profit == "middle"
        strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? middle_augm:na), stop = SL, comment="Exit")
    if take_profit == "opposite"
        strategy.exit("Target", "Entry_A", limit = (strategy.openprofit > 0 ? upper_augm: na) , stop = SL, comment="Exit") 


if in_position  and show_augm and slts and In_date()
    //Trigger trailing
    strategy.close("Entry_A", comment="SLT")
    
if not In_date()
    //Out of date trigger
    strategy.close("Entry_A", comment= "Out of date range")




// Plotting

plot(in_position ? SL > 0 ? SL : na : na , style = plot.style_circles, color = color.red, title = "Stop Loss")
plot(in_position ? trailing ? SLT > 0 ? SLT : na : na : na , style = plot.style_circles, color = color.blue, title = "Trailing Stop" )

s = plot(show_simp ? upper : na , color = color.aqua)
plot(show_simp ? middle_sim : na , color=color.red)
i = plot(show_simp ? lower : na , color = color.aqua)
fill(s,i, color=color.new(color.aqua,90))


plot(show_augm ? middle_augm : na , color=color.blue)
s_a = plot( show_augm ? upper_augm : na, color=color.orange)
i_a = plot( show_augm ? lower_augm : na, color= color.orange)
fill(s_a,i_a, color=color.new(color.orange, 90))