Dynamische Prozentbox-Tracking-Strategie


Erstellungsdatum: 2023-11-23 10:32:39 zuletzt geändert: 2023-11-23 10:32:39
Kopie: 1 Klicks: 605
1
konzentrieren Sie sich auf
1617
Anhänger

Dynamische Prozentbox-Tracking-Strategie

Überblick

Diese Strategie nutzt die prozentuale Veränderung des Preises, um eine Kauf- und eine Stop-Line festzulegen, um eine Position zu erstellen, die auf dem Preis basiert, der die Kauflinie durchbricht, und unter der Stop-Line zu stoppen. Ihre Hauptcharakteristik ist, dass sie nur eine Einheit des Risikos trägt, d. h. dass sie nur dann eine Position erhöht, wenn die vorherige Position das vorgegebene Gewinnziel erreicht.

Strategieprinzip

Die Strategie setzt zuerst einen Basispreis, mit 10% dieses Preises als eine Preisspanne, die obere Grenze als Kauflinie und die untere Grenze als Stop-Loss-Linie. Wenn der Preis die Kauflinie überschreitet, in festen Mengen zu kaufen.

Ein weiterer Schlüsselpunkt dieser Strategie ist, dass nur eine Einheit des Risikos übernommen wird. Das heißt, neue Positionen werden nur dann aufgenommen, wenn die aktuelle Position das Gewinnziel erreicht hat. Die neuen Positionen werden auch nach neuen Kauf- und Stop-Loss-Linien eingestellt.

Analyse der Stärken

Diese Strategie kombiniert die Vorteile von Stop-Loss-Tracking und Lagerhaltung und ermöglicht eine effektive Risikokontrolle und gleichzeitige Ertragsgewinnung.

  1. Die Ein- und Stopp-Linien können automatisch mit einem Prozentsatz-Bereich verfolgt werden.
  2. Risikomanagement in den Einzelziffern, Verlustbegrenzung
  3. Nur nach Gewinn zu investieren, um Verluste zu vermeiden
  4. Nach dem Gewinn wird die Stop-Loss-Linie verschoben und die Gewinne gesperrt.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Der Prozentsatz ist zu groß, die Kauflinie und die Stop-Loss-Linie sind zu weit voneinander entfernt, das Risiko wird erhöht
  2. Der Prozentsatz ist zu klein, die Kauf- und die Stop-Loss-Linien sind zu nahe beieinander, und der Gewinnraum ist begrenzt.
  3. Die Einstellung des Stopp-Nutzens ist falsch eingestellt und kann zu einem vorzeitigen Verlust führen.
  4. Das ist ein sehr dramatischer Kursanstieg, der die Verluste noch weiter erhöhen könnte.

Diese Risiken können durch Parameteranpassungen vermieden werden, z. B. durch Anpassung der Größe der Prozentsatzspanne, der Anpassung der Aufschlagbedingungen usw.

Optimierungsrichtung

Die Strategie kann noch weiter optimiert werden:

  1. Der Trendindikator kann die Richtung des Trends bestimmen und dann die Position aufbauen.
  2. Es ist möglich, ein maschinelles Lernmodell hinzuzufügen, um die Kauf- und Stop-Loss-Linien intelligenter zu machen.
  3. Es können verschiedene Aufschlagbedingungen eingestellt werden, um das Risiko weiter zu senken
  4. Verschiedene Haltezeiten können getestet werden, um die optimale Haltezeit zu finden

Zusammenfassen

Es handelt sich um eine Strategie, bei der der Prozentsatzbereich genutzt wird. Sie ist einfach und praktisch, und die Risiken werden effektiv kontrolliert. Durch die Anpassung der Parameter und die Optimierung der Modelle kann die Strategie zu einem zuverlässigen Trend-Tracking-System werden, das einen stabilen Mehrwert für die Anleger erzeugt.

Strategiequellcode
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HermanBrummer 4 April 2021

strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true)

///     Designed for LONG only on Daily, 2D or 3D Charts
///     Uses fixed investment risk amount, meaning you're willing to lose that amount per trade
///     Limit buy to not overpay

RiskPerTrade            = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price")
TradeAboveMAFilterPer   = input(50, "The System won't trade if price is below this MA")

UpBoxSize               = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up
DnBoxSize               = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn


var FirstBar            = close > 0 ? close : na
var FirstTop            = FirstBar * UpBoxSize
var FirstBot            = FirstBar * DnBoxSize


var top                 = sma(FirstTop, 1)
var bot                 = sma(FirstBot, 1)

///     The Box Calcs
if  high[2] > top
    top                 := top * UpBoxSize
    bot                 := bot * UpBoxSize
if  low[1]  < bot
    top                 := top * DnBoxSize
    bot                 := bot * DnBoxSize

 
plot(bot,   "Bot",      #ff0000) // Green
plot(top,   "Top",      #00ff00) // Red

mid                     = ((top-bot)/2)+bot 
plot(mid,   "Mid", color.gray)

TradeAboveMAFilter      = sma(close, TradeAboveMAFilterPer)
plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles)

// col = high[1] < top and high >= top ? color.white : na
// bgcolor(col)


///     Shares
RiskRange                   = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB
Shares                      = RiskPerTrade / RiskRange 
//plot(close-RiskRange, "RiskRange", color.fuchsia)

Enter   =   high >= top
             and close[1] > TradeAboveMAFilter
             and strategy.opentrades[0] == strategy.opentrades[1]
             and strategy.opentrades[1] == strategy.opentrades[2] 
             and strategy.opentrades[2] == strategy.opentrades[3]
             and strategy.opentrades[3] == strategy.opentrades[4] 
             and strategy.opentrades[4] == strategy.opentrades[5]
             and strategy.opentrades[5] == strategy.opentrades[6]
             // won't enter if new positon was taken in the last 6 bars
             // need better code for this.

///     Buy & Sell
//  (new highs)    and  (Close above moving average filter) and (No new trades were taken receently)
if  Enter //(high >= top)  and  (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1] 
    strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top)
    
//barcolor(strategy.position_size != 0 ? #00ff00 : color.gray)


// ///     If ONE Position THEN this Stop Because: 
// if  strategy.position_size == 1
//     strategy.exit("Ex", "En", stop=bot)
///     If it has more than one trad OPEN
if  strategy.position_size > 0
    strategy.exit("Ex", "En", stop=bot[2] )   // puts stop on old bot

//plot(strategy.position_avg_price, "Avg Price", color.yellow)