Mehrperioden-Supertrend-Dynamische Pyramiden-Handelsstrategie

ATR ST SL
Erstellungsdatum: 2025-01-06 17:02:35 zuletzt geändert: 2025-01-06 17:02:35
Kopie: 0 Klicks: 460
1
konzentrieren Sie sich auf
1617
Anhänger

Mehrperioden-Supertrend-Dynamische Pyramiden-Handelsstrategie

Überblick

Dies ist eine Pyramidenhandelsstrategie, die auf mehreren Supertrendindikatoren basiert. Es identifiziert Handelsmöglichkeiten mit hoher Wahrscheinlichkeit, indem es den Supertrend-Indikator mit drei verschiedenen Perioden und Multiplikatoren einstellt. Die Strategie verwendet eine dynamische Methode zum Hinzufügen von Pyramidenpositionen, lässt bis zu drei Einstiege zu und kombiniert dynamische Stop-Loss- und flexible Ausstiegsbedingungen, um eine Gewinnmaximierung und Risikokontrolle zu erreichen.

Strategieprinzip

Die Strategie verwendet den Supertrend-Indikator mit drei verschiedenen Parametereinstellungen: schnell, mittel und langsam. Das Einstiegssignal basiert auf der Schnittmenge dieser drei Indikatoren und der Trendrichtung, wobei zur Positionsbildung eine dreischichtige Pyramidenform verwendet wird: Die erste Schicht betritt den Markt, wenn der schnelle Indikator nach unten, der mittlere Indikator nach oben und der langsame Indikator nach oben zeigt. Indikator ist nach unten gerichtet; die zweite Ebene tritt in den Markt ein, wenn der schnelle Indikator nach oben gerichtet ist. Betreten Sie den Markt durch einen Durchbruch, wenn sich der Mittelgeschwindigkeitsindikator und der Mittelgeschwindigkeitsindikator gemeinsam nach unten bewegen; die dritte Ebene tritt in den Markt durch einen Durchbruch ein, wenn der Markt erreicht einen neuen Höchststand. Beim Ausstieg kommen mehrere Mechanismen zum Einsatz, beispielsweise dynamischer Stop-Loss, Stop-Loss für den Durchschnittspreis und allgemeine Trendumkehr.

Strategische Vorteile

  1. Mehrfachbestätigungsmechanismus verbessert die Transaktionsgenauigkeit
  2. Pyramidensysteme können die Gewinne in Trendmärkten deutlich steigern
  3. Der dynamische Stop-Loss-Mechanismus schützt Gewinne und gibt Trends ausreichend Raum zur Entwicklung
  4. Flexibler Ausstiegsmechanismus kann mit unterschiedlichen Marktumgebungen besser umgehen
  5. Passen Sie sich durch die prozentuale Positionskontrolle an unterschiedliche Fondsgrößen an

Strategisches Risiko

  1. In volatilen Märkten können häufig Fehlsignale auftreten
  2. Pyramidenbildung kann zu größeren Verlusten führen, wenn sich der Trend plötzlich umkehrt
  3. Mehrere Anzeigen können zu Signalverzögerungen führen
  4. Bei der Parameteroptimierung besteht die Gefahr einer Überanpassung Zur Kontrolle dieser Risiken wird ein striktes Geldmanagement und Backtesting empfohlen.

Richtung der Strategieoptimierung

  1. Fügen Sie einen Filtermechanismus für das Marktumfeld hinzu, um die Parameter dynamisch an unterschiedliche Volatilitätsumgebungen anzupassen.
  2. Optimieren Sie das Intervall zwischen dem Hinzufügen von Positionen und dem Anteil der Positionszuweisung
  3. Einführung weiterer technischer Indikatoren, um falsche Signale herauszufiltern
  4. Entwickeln Sie adaptive Parametermechanismen zur Anpassung an Marktveränderungen
  5. Verbessern Sie den Ausstiegsmechanismus. Sie können das Hinzufügen von Gewinnzielen und zeitlichen Stop-Loss-Maßnahmen in Betracht ziehen.

Zusammenfassen

Diese Strategie erfasst Trendchancen durch mehrere Supertrendindikatoren und Pyramidenaddiermethoden und kontrolliert Risiken mit dynamischem Stop-Loss und flexiblen Exit-Mechanismen. Obwohl gewisse Einschränkungen bestehen, hat diese Strategie durch kontinuierliche Optimierung und strikte Risikokontrolle einen guten praktischen Anwendungswert.

Strategiequellcode
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy('4Vietnamese 3x Supertrend', overlay=true, max_bars_back=1000, initial_capital = 10000000000, slippage = 2, commission_type = strategy.commission.percent, commission_value = 0.013, default_qty_type=strategy.percent_of_equity, default_qty_value = 33.33, pyramiding = 3, margin_long = 0, margin_short = 0)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inputs

// Supertrend Settings
STATRLENGTH1 = input.int(10, title='Fast Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT1 = input.float(1, title='Fast Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')
STATRLENGTH2 = input.int(11, title='Medium Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT2 = input.float(2, title='Medium Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')
STATRLENGTH3 = input.int(12, title='Slow Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT3 = input.float(3, title='Slow Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')

isUseHighestOf2RedCandleSetup = input.bool(false, group = "Setup Filters")


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculations 
[superTrend1, dir1] = ta.supertrend(STATRMULT1, STATRLENGTH1)
[superTrend2, dir2] = ta.supertrend(STATRMULT2, STATRLENGTH2)
[superTrend3, dir3] = ta.supertrend(STATRMULT3, STATRLENGTH3)

// directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : false
// directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : false
// directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : false


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculate highest from supertrend1 uptrend
var float highestGreen = 0
if dir1 < 0 and highestGreen == 0 and (isUseHighestOf2RedCandleSetup ? close < open : true)
    highestGreen := high
if highestGreen > 0 and (isUseHighestOf2RedCandleSetup ? close < open : true)
    if high > highestGreen
        highestGreen := high
if dir1 >= 0
    highestGreen := 0


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entry SL
var entrySL4Long1 = false
var entrySL4Long2 = false
var entrySL4Long3 = false

isUseEntrySL = input.bool(true, group = "Entry SL Option")
dataToCalculate = input.source(low, group = "Entry SL Option")

if isUseEntrySL and (dir1 > 0 and dir2 < 0 and dir3 < 0)
    if strategy.opentrades >= 1
        if dataToCalculate > strategy.opentrades.entry_price(0)
            entrySL4Long1 := true
        else 
            entrySL4Long1 := false

        if entrySL4Long1 and close > strategy.opentrades.entry_price(0)
            strategy.exit('exit1', from_entry = 'long1', stop = strategy.opentrades.entry_price(0))

    if strategy.opentrades >= 2 
        if dataToCalculate > strategy.opentrades.entry_price(1)
            entrySL4Long2 := true
        else 
            entrySL4Long2 := false
    
        if entrySL4Long2 and close > strategy.opentrades.entry_price(1)
            strategy.exit('exit2', from_entry = 'long2', stop = strategy.opentrades.entry_price(1))   

    if strategy.opentrades >= 3 
        if dataToCalculate > strategy.opentrades.entry_price(2) 
            entrySL4Long3 := true
        else 
            entrySL4Long3 := false
    
        if entrySL4Long3 and close >  strategy.opentrades.entry_price(2)
            strategy.exit('exit3', from_entry = 'long3', stop = strategy.opentrades.entry_price(2))

if strategy.closedtrades > strategy.closedtrades[1]
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit3'
        entrySL4Long3 := false
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit2'
        entrySL4Long2 := false
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit1'
        entrySL4Long1 := false

    
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entry
if dir3 < 0
    if dir2 > 0 and dir1 < 0
        strategy.entry('long1', strategy.long)
    else if dir2 < 0
        strategy.entry('long2', strategy.long, stop=superTrend1)
else
    if dir1 < 0 and highestGreen > 0
        strategy.entry('long3', strategy.long, stop=highestGreen)


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Exit
isUseAllDowntrendExit = input.bool(true, group = "Exit Type")
if isUseAllDowntrendExit and dir3 > 0 and dir2 > 0 and dir1 > 0 and close < open
    strategy.close_all()

isUseAvgPriceInLoss = input.bool(true, group = "Exit Type")
if isUseAvgPriceInLoss and strategy.position_avg_price > close //and strategy.position_avg_price <= close[1]
    //  and (dir1 > 0 or dir2 > 0 or dir3 > 0)
    //  and strategy.opentrades >= 1  
    //  and strategy.opentrades >= 3  
    strategy.close_all()

isUseAllPositionsInLoss = input.bool(false, group = "Exit Type")
if isUseAllPositionsInLoss
      and (
       false
         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close))

         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close)
             and ((not na(strategy.opentrades.entry_price(1))) and strategy.opentrades.entry_price(1) > close))

         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close)
             and ((not na(strategy.opentrades.entry_price(1))) and strategy.opentrades.entry_price(1) > close)
             and ((not na(strategy.opentrades.entry_price(2))) and strategy.opentrades.entry_price(2) > close))
         )
    strategy.close_all()


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Plot
plot(superTrend1, title='Fast Supertrend',      color=dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na)
plot(superTrend2, title='Medium Supertrend',    color=dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na)
plot(superTrend3, title='Slow Supertrend',      color=dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na)