Dynamisches Trendverfolgungssystem zur Positionsanpassung


Erstellungsdatum: 2024-01-26 14:41:08 zuletzt geändert: 2024-01-26 14:41:08
Kopie: 0 Klicks: 616
1
konzentrieren Sie sich auf
1617
Anhänger

Dynamisches Trendverfolgungssystem zur Positionsanpassung

Überblick

Die Strategie nutzt zwei beliebte System-Trading-Strategien: Index Moving Average Crossover System und Seagull Trading System. Das System ist speziell für die Sonnenlinie-Zeit-Framework, durch die dynamische Anpassung der Positionen, die Markttrends in Echtzeit zu verfolgen, mit einer starken Tracking-Fähigkeit.

Strategieprinzip

Die Strategie umfasst zwei Seeds: die Trend-Strategie und die Breakthrough-Strategie.

Die Trendstrategie verwendet die Kreuzung von schnellen EMA und langsamen EMA als Handelssignal. Die Länge der schnellen EMA-Zyklen wird vom Benutzer festgelegt, die Länge der langsamen EMA-Zyklen ist 5 mal so lang wie die des schnellen EMA. Das Signal wird durch den Unterschied der schnellen EMA durch den Standardunterschied der 252-Zyklen-Rendite ermittelt, um nach der Anpassung der Volatilität ein zuverlässigeres Handelssignal zu erzeugen.

Breakout-Strategien verwenden den Mittelwert der höchsten und niedrigsten Preise einer bestimmten Periode als Benchmark. Sie erzeugen ein Über- oder Unterkurssignal, wenn der Preis über eine bestimmte Bandbreite steigt oder fällt.

Positionsanpassung basierend auf der jüngsten Preisschwankung und den jährlichen Risikogebieten, die vom Benutzer festgelegt wurden. Bei geringer Volatilität sind die Positionen größer, bei höherer Volatilität sind die Positionen kleiner und ermöglichen eine dynamische Positionsverwaltung nach Risikovariante.

Die Stop-Loss-Multiplizierung basiert auf der realen Breite der Wellen. Die Stop-Loss-Verfolgung basiert auf der mobilen Rücknahme von Höchst- und Tiefstpreisen.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Kombination von Trend-Tracking und Break-Two-Strategie ermöglicht eine adaptive Umschaltung in unterschiedlichen Marktumgebungen mit starker Robustheit.

  2. Die Anwendung von Advanced Position Management und Risikokontrolle Technologien kann die Position dynamisch anpassen, um das Risiko effektiv zu kontrollieren.

  3. Positionsanpassungen, die die tatsächliche Volatilität und die jährlichen Risikobestimmungen nutzen, ermöglichen einen relativ stabilen Portfolio-Risiko in hoch- und niedrigvolatilen Märkten.

  4. Die Einstellung eines Stop-Loss-Positions basierend auf den tatsächlichen Preisflüchtigen verhindert unnötige kleine Verluste aus dem Stop-Loss-Bereich.

  5. Real-time Anpassung der Verlust-Position, so dass Sie den Trend flexibel verfolgen können, um Gewinne zu erzielen und Verluste rechtzeitig zu stoppen.

Risikoanalyse

Die Hauptrisiken dieser Strategie sind:

  1. Abhängig von der Optimierung der Parameter beeinflussen die verschiedenen Parameter die Strategie-Performance erheblich und müssen umfassend getestet werden, um die besten Parameter zu erhalten.

  2. Stopp-Tracking Stopps können in Schwingungstrends zu häufig abgebrochen werden. Die Stop-Loss-Werte können entsprechend gelockert und die Stop-Loss-Mechanismen optimiert werden.

  3. Positionsmanagement und Risikokontrolltechniken sind empfindlicher gegenüber Anfangskapital und Transaktionskosten. Zu geringe Anfangskapital und zu hohe Transaktionskosten beeinträchtigen die Ertragsfähigkeit der Strategie.

  4. Die Strategie zur Festlegung der jährlichen Risikoziele und des maximalen Leverages hängt von der korrekten Bewertung der Volatilität der Kennziffern ab. Eine ungenaue Bewertung der Volatilität kann zu einer zu großen oder zu kleinen Position führen.

Optimierungsrichtung

Die wichtigsten Optimierungsbereiche der Strategie sind:

  1. Suche nach optimalen Parameterkombinationen. Die optimale Parameterstellung kann durch Rückverfolgung von mehr historischen Daten gefunden werden.

  2. Verbesserte Stop-Mechanismen. Sie können Stop-Formen wie Bewegungsstop, Zeitstop, Schokstop testen und Stop-Strategien optimieren.

  3. Optimierung der Positionen und Risikomanagement. Verschiedene Risikoziele können getestet werden, um die optimale Risikogewinn-Palette zu finden. Die Auswirkungen verschiedener Leverage-Ebenen können getestet werden.

  4. Versuchen Sie andere Hilfsindikatoren. Es können weitere technische Indikatoren hinzugefügt werden, um die Genauigkeit der Signale und die Stabilität der Strategie zu verbessern.

  5. Versuchen Sie, eine höhere Periode zu nutzen, um die Genauigkeit der Positionskonfiguration zu verbessern.

Zusammenfassen

Die Strategie integriert Trend-Tracking und Trend-Break-Trading-Strategien in zwei Kategorien. Die Anwendung von Advanced Dynamic Position Management-Technologie ermöglicht eine risikobereite Positionskonfiguration, die die Risiken effektiv kontrolliert und gleichzeitig die Marktentwicklung verfolgt.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// © Crunchster1

//@version=5
strategy(title="Crunchster's Turtle and Trend System", shorttitle="Turtle Trend", overlay=true, slippage=10, pyramiding=1, precision = 4, calc_on_order_fills = false, calc_on_every_tick = false, default_qty_value = 0.1, initial_capital = 1000, commission_value = 0.06, process_orders_on_close = true)

// Inputs and Parameters
src = input(close, 'Source', group='Strategy Settings')
length = input.int(title="Lookback period for fast EMA", defval=10, minval=2, group='Strategy Settings', tooltip='This sets the lookback period for the fast exponential moving average. The slow EMA is 5x the fast EMA length')
blength = input.int(title="Lookback period for Breakout", defval=20, minval=5, step=5, group='Strategy Settings')

long = input(true, 'Long', inline='08', group='Strategy toggle')
short = input(true, 'Short', inline='08', group='Strategy toggle', tooltip='Toggle long/short strategy on/off')

EMAwt = input(false, 'Trend', inline='01', group='Strategy toggle')
breakwt = input(true, 'Breakout', inline='01', group='Strategy toggle', tooltip='Toggle trend/breakout strategy on/off')

stopMultiple = input.float(2, 'Stop multiple', step=0.5, group='Risk Management Settings', tooltip='Multiple for ATR, setting hard stop loss from entry price')
trail = input.int(10, 'Trail lookback', step=5, group='Risk Management Settings', tooltip='Lookback period for the trailing stop')
lev = input.float(1, 'Max Leverage', step=0.5, group='Risk Management Settings', tooltip='Max leverage sets maximum allowable leverage of total capital (initial capital + any net profit), capping maximum volatility adjusted position size')
riskT = input.float(15, maxval=75, title='Annualised Volatility Target %', group='Risk Management Settings', tooltip='Specify annual risk target, used to determine volatility adjusted position size. Annualised daily volatility is referenced to this value and position size adjusted accordingly')
comp = input(true, 'Compounding', inline='09', group='Risk Management Settings')
Comppct = input.float(50, '%', step=5, inline='09', group='Risk Management Settings', tooltip='Toggle compounding of profit, and set % of profit to compound')

// Backtesting period
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31, inline='04', group='Backtest range')
FromMonth = input.int(defval=1, title='From Mon', minval=1, maxval=12, inline='04', group='Backtest range')
FromYear = input.int(defval=2018, title='From Yr', minval=1900, inline='04', group='Backtest range', tooltip='Set start of backtesting period')
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31, inline='05', group='Backtest range')
ToMonth = input.int(defval=1, title='To Mon', minval=1, maxval=12, inline='05', group='Backtest range')
ToYear = input.int(defval=9999, title='To Yr', minval=1900, inline='05', group='Backtest range', tooltip='Set end of backtesting period')

start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window = time >= start and time <= finish

// Breakout strategy
lower = ta.lowest(low[1], blength)
upper = ta.highest(high[1], blength)
basis = math.avg(upper, lower)
signal = 20*(close - basis) / (upper - lower)

// Trend strategy
fEMA = ta.ema(close[1], length)
sEMA = ta.ema(close[1], length*5)
emadiff = fEMA - sEMA
nemadiff = 5*emadiff/(ta.stdev(close - close[1], 252))

//Risk Management formulae
strategy.initial_capital = 50000
tr = math.max(high - low, math.abs(high - close), math.abs(low - close)) //True range
stopL = ta.sma(tr, 14) //Average true range
stdev = ta.stdev(close-close[1], 14) //volatility of recent returns
maxcapital = strategy.initial_capital+strategy.netprofit //Maximum capital available to invest - initial capital net of profit
annvol = 100*math.sqrt(365)*stdev/close //converts recent volatility of returns into annualised volatility of returns - assumes daily timeframe

risk = 1.1
if comp
    risk := (strategy.initial_capital+(Comppct*strategy.netprofit/100))//adjust investment capital to include compounding
else
    risk := strategy.initial_capital

shares = (risk * (riskT/annvol)) / close //calculates volatility adjusted position size, dependent on user specified annualised risk target
if ((shares*close) > lev*maxcapital) //ensures position size does not exceed available capital multiplied by user specified maximum leverage
    shares := lev*maxcapital/close

//To set the price at the entry point of trade
Posopen() =>
    math.abs(strategy.position_size[1]) <= 0 and math.abs(strategy.position_size) > 0

var float openN = na
if Posopen()
    openN := stopL

// Trailing stop
tlower = ta.lowest(low[1], trail)
tupper = ta.highest(high[1], trail)
tbasis = math.avg(tupper, tlower)
tsignal = 20*(close - tbasis) / (tupper - tlower)

// Strategy Rules
if EMAwt
    if long
        longCondition2 = (nemadiff >2 and nemadiff[1] <2) and window
        exitlong = tsignal <= -10
        if (longCondition2)
            strategy.entry('Trend Long!', strategy.long, qty=shares)
        if strategy.position_size > 0    
            strategy.exit('Stop Long', from_entry = 'Trend Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
        if (exitlong)
            strategy.close('Trend Long!', immediately = true)

    if short
        shortCondition2 = (nemadiff <-1 and nemadiff[1] >-1) and window
        exitshort = tsignal >= 10
        if (shortCondition2)
            strategy.entry('Trend Short!', strategy.short, qty=shares)
        if strategy.position_size < 0   
            strategy.exit('Stop Short', from_entry = 'Trend Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
        if (exitshort)
            strategy.close('Trend Short!', immediately = true)

if breakwt
    if long
        longCondition1 = (signal >= 10) and window
        exitlong = tsignal <= -10
        if (longCondition1)
            strategy.entry('Break Long!', strategy.long, qty=shares)
        if strategy.position_size > 0    
            strategy.exit('Stop Long', from_entry = 'Break Long!', stop=(strategy.opentrades.entry_price(0) - (openN * stopMultiple)))
        if (exitlong)
            strategy.close('Break Long!', immediately = true)

    if short
        shortCondition1 = (signal <= -10) and window
        exitshort = tsignal >= 10
        if (shortCondition1)
            strategy.entry('Break Short!', strategy.short, qty=shares)
        if strategy.position_size < 0   
            strategy.exit('Stop Short', from_entry = 'Break Short!', stop=(strategy.opentrades.entry_price(0) + (openN * stopMultiple)))
        if (exitshort)
            strategy.close('Break Short!', immediately = true)

// Visuals of trend and direction
plot(nemadiff, title='EMA Forecast', color=color.black, display=display.none)
plot(ta.sma(ta.median(math.sqrt(math.pow(nemadiff,2)), 700), 350), 'Forecast mean', color=color.rgb(245, 0, 0), display=display.none)

MAColor = fEMA > sEMA ? #00ff00 : #ff0000
MA1 = plot(fEMA, title='Fast EMA', color=MAColor)
MA2 = plot(sEMA, title='Slow EMA', color=MAColor)
fill(MA1, MA2, title='Band Filler', color=MAColor)