Die Ressourcen sind geladen. Beförderung...

Der Wert des Wertpapiers wird auf der Basis der in Artikel 4 Absatz 1 Buchstabe b genannten Methode berechnet.

Schriftsteller:ChaoZhang, Datum: 2025-01-06
Tags:ATRSTSL

img

Übersicht

Dies ist eine Pyramidenhandelsstrategie, die auf mehreren Supertrend-Indikatoren basiert. Sie identifiziert hochwahrscheinliche Handelsmöglichkeiten mit drei Supertrend-Indikatoren mit verschiedenen Perioden und Multiplikatoren. Die Strategie verwendet dynamische Pyramiden-Einträge, die bis zu drei Positionen ermöglichen, kombiniert mit dynamischen Stop-Loss- und flexiblen Ausstiegsbedingungen, um Gewinne zu maximieren und Risiken zu kontrollieren.

Strategieprinzipien

Die Strategie verwendet drei Supertrend-Indikatoren mit unterschiedlichen Parameter-Einstellungen: schnell, mittel und langsam. Die Eintrittssignale basieren auf den Crossovers und Trendrichtungen dieser Indikatoren und implementieren einen dreischichtigen Pyramidenansatz: Erster Eintritt, wenn der schnelle Indikator nach unten zeigt, während der mittlere nach oben zeigt und der langsame nach unten zeigt; Zweiter Eintritt durch Ausbruch, wenn sowohl die schnellen als auch die mittleren Indikatoren nach unten zeigen; Dritter Eintritt durch Ausbruch, wenn der Preis neue Höchststände erreicht. Die Ausgänge werden durch mehrere Mechanismen verwaltet, darunter dynamische Stop-Loss, Durchschnittspreis-Stop und allgemeine Trendumkehr.

Strategische Vorteile

  1. Mehrfachbestätigungsmechanismus verbessert die Genauigkeit des Handels
  2. Pyramidenansatz verstärkt die Gewinne in Trendmärkten erheblich
  3. Dynamischer Stop-Loss-Mechanismus schützt die Gewinne und ermöglicht gleichzeitig die Entwicklung von Trends
  4. Flexible Ausstiegsmechanismen passen sich den unterschiedlichen Marktbedingungen gut an
  5. Die prozentuale Positionsgröße passt sich den unterschiedlichen Kapitalgrößen an

Strategische Risiken

  1. Kann häufige falsche Signale in verschiedenen Märkten erzeugen
  2. Bei plötzlichen Trendumkehrungen kann das Pyramidenspiel zu größeren Abzügen führen
  3. Mehrere Indikatoren können zu verzögerten Signalen führen
  4. Die Parameteroptimierung birgt Risiken einer Überanpassung Um diese Risiken zu kontrollieren, wird empfohlen, ein strenges Geldmanagement und ein Backtesting durchzuführen.

Optimierungsrichtlinien

  1. Hinzufügen von Filtern für die Marktumgebung zur dynamischen Anpassung von Parametern auf der Grundlage der Volatilität
  2. Optimieren Sie den Abstand zwischen den Eingaben und die Zuweisung der Positionsgröße
  3. Einführung zusätzlicher technischer Indikatoren zur Filterung falscher Signale
  4. Entwicklung anpassungsfähiger Parametermechanismen zur Anpassung an Marktveränderungen
  5. Verbesserung der Ausstiegsmechanismen durch Hinzufügen von Gewinnzielen und zeitbasierten Stopps

Zusammenfassung

Die Strategie erfasst Trendchancen durch mehrere Supertrend-Indikatoren und Pyramideneinträge und kontrolliert Risiken mit dynamischen Stop-Loss- und flexiblen Exit-Mechanismen.


/*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)


Verwandt

Mehr