Meeresschildkrötensystem von Connecticut


Erstellungsdatum: 2023-11-06 10:23:12 zuletzt geändert: 2023-11-06 10:23:12
Kopie: 1 Klicks: 663
1
konzentrieren Sie sich auf
1617
Anhänger

Meeresschildkrötensystem von Connecticut

Überblick

Die Strategie basiert auf dem berühmten Turtle Trading System und folgt so weit wie möglich den ursprünglichen Regeln. Es ist ein System, das Trends verfolgt und Ein- und Ausstiegssignale durch eine doppelte Gleichlinie bildet.

Strategieprinzip

  • Gebraucht wird die Höchstpreisberechnung N1 und N2 (Default 20 und 55 Tage) um eine Doppel-Even-Linie zu erstellen.
  • Mit dem Mindestpreis berechnet man die N3- und N4-Taglinien (default 10 und 20 Tage) und baut eine doppelte Mittellinie auf.
  • Wenn der Schlusskurs über der N2-Tageslinie liegt, macht man einen Plus; wenn der Schlusskurs unter der N4-Tageslinie liegt, macht man einen Nullpunkt.
  • Nach der Überschreitung erhöht sich der Betrag um ein N-faches ATR (default 1x), eine Aufstockung und maximal fünf Aufstockungen.
  • Setzen Sie einen festen Stop-Loss, der die N-fache ATR unter dem Einstiegspreis hat (die 2-fache ist die Standard-ATR).
  • Der Eintritt in eine neue Position ist nur erlaubt, wenn der vorherige Handel als Gewinn gilt.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  • Es folgt dem Prinzip des Trendhandels und kann die mittleren und langen Trends erfassen.
  • Die Doppel-Einheitlichkeit bildet die Filterbedingungen, um häufige Transaktionen während der Erschütterung zu vermeiden.
  • Verfolgen Sie die Stop-Loss-Einstellungen vernünftigerweise und vermeiden Sie, dass die Stop-Loss-Einstellungen zu locker oder zu eng sind.
  • Die Einstellung der Parameter ermöglicht die Anpassung der Risiko-Gewinn-Eigenschaften des Systems.
  • Es ist nicht möglich, den Trend zu verändern, wenn man sich nicht auf den Trend konzentriert.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  • Wenn der Trend sich umkehrt und die Verluste nicht rechtzeitig eingestellt werden können, kann dies zu größeren Verlusten führen.
  • Das Risiko einer Überhändlung kann durch eine zu hohe Anzahl von Einlagen verursacht werden.
  • Fehlgeleitete Parameter können dazu führen, dass das System zu radikal oder zu konservativ wird.
  • Es besteht die Gefahr, dass die Rückmeldung nicht so effektiv ist wie die Rückmeldung.

Das Risiko kann durch folgende Maßnahmen verringert werden:

  • Umkehrsignale, wie z. B. MACD-Abweichung, zu ermitteln und Rückstandsverluste zu reduzieren.
  • Optimierung der Parameter, um die Parameter des Systems zu stabilisieren.
  • Position Sizing-Methode hinzugefügt.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  • Die Erhöhung der Logik des ungeschädigten Handels ermöglicht es der Strategie, auch bei einem rückläufigen Kurs zu profitieren.
  • Hinzugefügt wurde ein Modul zur Optimierung der Stop-Line, um die Stop-Line auf Preisschwankungen anzupassen.
  • Die Erweiterung des Positionsmanagement-Moduls optimiert die Größe der Positionen bei jeder Auflage.
  • Der Trend-Index ADX beurteilt Trends als stark oder schwach und verhindert Fehltrades.
  • Optimierung der Parameter für eine gleichmäßige Gewinnkurve.
  • Es ist wichtig, die Kosten der Transaktionen, wie z. B. die Slippoints, die Gebühren usw., zu berücksichtigen.

Zusammenfassen

Die Strategie profitiert vom Trend-Tracking und bietet eine gewisse Rückmessung. Die Wirksamkeit der Strategie muss jedoch noch getestet werden. Die Parameterstabilität muss weiter optimiert und die Stop-Loss- und Positionsmanagement-Module verbessert werden, um die Strategie besser für den Handel auf dem Markt geeignet zu machen.

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

//@version=4
strategy(title="Turtle", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.1, pyramiding=5)

stopInput = input(2.0, "Stop N", step=.5)
pyramidInput = input(1, "Pyramid N", step=.5)
l1LongInput = input(20, "L1 Long", minval=5)
l2LongInput = input(55, "L2 Long", minval=5)
l1LongExitInput = input (10, "L1 Long Exit", minval=5)
l2LongExitInput = input (20, "L2 Long Exit", minval=5)

FromYear = input(2000, "From Year", minval=1900),   FromMonth = input(1, "From Month", minval=1, maxval=12),    FromDay = input(1, "From Day", minval=1, maxval=31)
ToYear = input(9999, "To Year", minval=1900),       ToMonth = input(1, "To Month", minval=1, maxval=12),        ToDay = input(1, "To Day", minval=1, maxval=31)
FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00),     ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59)
TradeDateIsAllowed() => time >= FromDate and time <= ToDate
l1Long = highest(l1LongInput)
l1LongExit = lowest(l1LongExitInput)
l2Long = highest(l2LongInput)
l2LongExit = lowest(l2LongExitInput)

// 
// ADX, +-DI
// https://www.tradingview.com/script/rlMJ05yl-ADX-and-DI-pine-script-3-0/
//
len = 14
th = 20
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

// Back to Turtle

filter = true // not (DIPlus < ADX and DIMinus < ADX) and DIPlus > DIMinus
var win = false
var totalPrice = 0.0
var buyPrice = 0.0
var avgPrice = 0.0
var nextBuyPrice = 0.0
var stopPrice = 0.0
var totalBuys = 0

var bool inBuy = false
var float l1LongPlot = highest(l1LongInput)
var float l2LongPlot = highest(l2LongInput)

n = atr(14)

var mode = 'L1'
string longLevel = na

if not inBuy 
    l1LongPlot := highest(l1LongInput)[1]
    l2LongPlot := highest(l2LongInput)[1]
    
    if (close > l2Long[1] and filter)
        mode := 'L2'
        if TradeDateIsAllowed() 
            strategy.close_all()
            strategy.entry("long", strategy.long, comment="L2")
            longLevel := 'L2'

        win := false
        buyPrice := close
        totalBuys := 1
        totalPrice := buyPrice
        avgPrice := buyPrice
        stopPrice := close-(stopInput*n)
        nextBuyPrice := high+(pyramidInput*n)
        inBuy := true
    else 
        if (close > l1Long[1] and filter)
            mode := 'L1'
            if not win
                if TradeDateIsAllowed()
                    strategy.close_all()
                    strategy.entry("long", strategy.long, comment="L1")
                    longLevel := 'L1'
            win := false
            buyPrice := close
            totalBuys := 1
            totalPrice := buyPrice
            avgPrice := buyPrice
            stopPrice := close-(stopInput*n)
            nextBuyPrice := high+(pyramidInput*n)
            inBuy := true
        else 
            inBuy := false

else
    l1LongPlot := l1LongPlot[1]
    l2LongPlot := l2LongPlot[1]
    
    if close > nextBuyPrice and TradeDateIsAllowed() and totalBuys < 6
        strategy.entry("long", strategy.long, comment="LP")
        longLevel := 'P'
        stopPrice := close-(stopInput*n)
        nextBuyPrice := high+(pyramidInput*n)
        totalBuys := totalBuys + 1
        totalPrice := totalPrice + buyPrice
        avgPrice := totalPrice / totalBuys

    if (close < stopPrice) 
        inBuy := false
        if TradeDateIsAllowed()
            if (close >= avgPrice)
                longLevel := 'SG'
            else 
                longLevel := 'SR'
            strategy.close("long", strategy.long)
        win := false
        buyPrice := 0
        avgPrice := 0
    else
        if (mode == 'L1' and close > l2Long[1] and filter)
            if win
                inBuy := true
                win := false
                mode := 'L2'
                if TradeDateIsAllowed()
                    strategy.close_all()
                    longLevel := 'L2'
                    strategy.entry("long", strategy.long, comment="L2")
                buyPrice := close
                totalBuys := 1
                totalPrice := buyPrice
                avgPrice := buyPrice
                stopPrice := close-(stopInput*n)
                nextBuyPrice := close+(pyramidInput*n)
        else
            if (close < l1LongExit[1] or close < l2LongExit[1])
                inBuy := false
                if TradeDateIsAllowed()
                    strategy.close("long", strategy.long)
                if close < avgPrice
                    longLevel := 'SR'
                    win := false
                else
                    longLevel := 'SG'
                    win := true
                buyPrice := 0

plot(l1LongPlot, title="l1 long", linewidth=3, style=plot.style_stepline, color=color.green)
plot(l1LongExit[1], title="l1 exit", linewidth=3, style=plot.style_stepline, color=color.red)

plot(l2LongPlot, title="l2 long", linewidth=2, style=plot.style_stepline, color=color.green)
plot(l2LongExit[1], title="l2 exit", linewidth=2, style=plot.style_stepline, color=color.red)

plot(stopPrice, title="stop", linewidth=2, style=plot.style_stepline, color=color.purple)

plotarrow(longLevel == 'L1' ? 1 : 0, colordown=color.black, colorup=color.green, transp=40)
plotarrow(longLevel == 'L2' ? 1 : 0, colordown=color.black, colorup=color.purple, transp=40)
plotarrow(longLevel == 'SR' ? -1 : 0, colordown=color.red, colorup=color.purple, transp=40)
plotarrow(longLevel == 'SG' ? -1 : 0, colordown=color.green, colorup=color.purple, transp=40)