Squeeze-Backtest-Transformatoren v2.0


Erstellungsdatum: 2024-04-28 14:09:26 zuletzt geändert: 2024-04-28 14:09:26
Kopie: 0 Klicks: 536
1
konzentrieren Sie sich auf
1617
Anhänger

Squeeze-Backtest-Transformatoren v2.0

Überblick

Die Strategie unterstützt mehrere Richtungen des Handels und kann flexibel die Richtung des Handels für Plus oder Minus eingestellt werden. Die Strategie bietet außerdem eine große Auswahl an Einstellungen für die Rücklaufphase, sodass Sie bequem eine feste Zeit oder eine maximale Rücklaufphase wählen können.

Strategieprinzip

  1. Zuerst wird der Anfangs- und der Endzeit der Rückmessung anhand der vom Benutzer eingestellten Parameter für die Rückmesszeit festgelegt.
  2. In der Rückmeldungsperiode, wenn keine Position gehalten wird und der Preis den Einstiegspreis berührt, wird eine Position eröffnet und gleichzeitig ein Stop-Loss- und ein Stop-Stop-Preis festgelegt.
  3. Wenn die Position bereits gehalten wurde, wird der vorherige Stop-Loss-Buch abgebrochen und ein neuer Stop-Loss-Preis neu festgelegt (berechnet nach dem aktuellen Durchschnittspreis der Position).
  4. Wenn die maximale Haltedauer festgelegt ist, wird die Platzierung erzwungen, wenn die Haltedauer den Maximalwert erreicht.
  5. Die Strategie unterstützt den Handel in beide Richtungen, sowohl in der Über- als auch in der Unterbrechung.

Strategische Vorteile

  1. Die Parameter sind flexibel eingestellt und können an unterschiedliche Marktbedingungen und Handelsbedürfnisse angepasst werden.
  2. Es wird eine Vielzahl von Handelstransaktionen unterstützt, die unter unterschiedlichen Marktbedingungen profitieren können.
  3. Es bietet eine Vielzahl von Optionen für die Einstellung der Rückverfolgungszeit, um die Rückverfolgung und Analyse der historischen Daten zu erleichtern.
  4. Die Stop-Loss- und Stop-Stop-Einstellungen ermöglichen eine effektive Risikokontrolle und verbessern die Effizienz der Kapitalnutzung.
  5. Die maximale Haltedauer-Einstellung verhindert, dass eine zu lange Haltedauer zu einem Marktrisiko führt.

Strategisches Risiko

  1. Die Einstellungen für den Einstiegspreis, den Stop-Loss-Preis und den Stop-Out-Preis haben einen großen Einfluss auf die strategischen Gewinne, und eine falsche Einstellung der Parameter kann zu Verlusten führen.
  2. Bei starken Marktschwankungen kann es zu Stop-Loss-Szenarien kommen, die unmittelbar nach der Positionseröffnung ausgelöst werden und zu Verlusten führen.
  3. Wenn die maximale Haltedauer bei der Haltedauer ausgelöst wird, besteht die Gefahr, dass eine weitere Gewinnmöglichkeit verpasst wird.
  4. Die Strategie kann unter bestimmten Umständen (z.B. in einer schwankenden Börse) schlechte Ergebnisse erzielen.

Richtung der Strategieoptimierung

  1. Es kann in Erwägung gezogen werden, mehr technische Indikatoren oder Marktstimmungskennzahlen einzuführen, um die Einstiegs-, Stop-Loss- und Stop-Off-Bedingungen zu optimieren und die Stabilität und Profitabilität der Strategie zu verbessern.
  2. Die Einstellung der maximalen Haltedauer kann dynamisch an die Volatilität des Marktes und die Verlust- und Verlustlage der Position angepasst werden, um die möglichen Opportunitätskosten zu vermeiden.
  3. Für die Merkmale von Marktschocks können Logiken wie ein Durchbruch zwischen den Schockbereichen oder eine Trendwende-Bestätigung hinzugefügt werden, um die Kosten für häufige Transaktionen zu senken.
  4. Berücksichtigen Sie die Einbeziehung von Positionsmanagement- und Vermögensverwaltungsstrategien, um die Risikolockage für einzelne Geschäfte zu kontrollieren und die Effizienz und Stabilität der Vermögensnutzung zu verbessern.

Zusammenfassen

Die Extreme-Return-Strategie ist ein auf Extreme-Strategie basierendes quantitatives Handelssystem, das durch flexible Parameter-Einstellungen und mehrseitige Handelsunterstützung in verschiedenen Marktumgebungen gehandelt werden kann. Die umfangreichen Optionen für die Einstellung von Returnieren und die Stop-Loss-Einstellungen helfen dem Benutzer bei der Analyse historischer Daten und der Risikokontrolle. Die Strategie wird jedoch stark von der Parameter-Einstellung beeinflusst. Die Strategie muss entsprechend der Markteigenschaften und des Handelsbedarfs optimiert und verbessert werden, um die Stabilität und Profitabilität der Strategie zu verbessern.

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

//@version=5

strategy(title="Squeeze Backtest by Shaqi v2.0", overlay=true, pyramiding=0, currency="USD", process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, backtest_fill_limits_assumption=0)
R0 = "6 Hours"
R1 = "12 Hours"
R2 = "24 Hours"
R3 = "48 Hours"
R4 = "1 Week"
R5 = "2 Weeks"
R6 = "1 Month"
R7 = "Maximum"

BL = "low"
BH = "high"
BO = "open"
BC = "close"
BHL= "mid (hl)"
BOC = "mid (oc)"

LONG = "LONG"
SHORT = "SHORT"

direction = input.string(title="Direction", defval=LONG, options=[LONG, SHORT], group="Squeeze Settings")
strategy.risk.allow_entry_in(direction == LONG ? strategy.direction.long : strategy.direction.short)
openPercent = input.float(1.4, "Open, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
closePercent = input.float(0.6, "Close, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
stopPercent = input.float(0.8, "Stop Loss, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
isMaxBars = input.bool(true, "Max Bars To Sell", inline="MaxBars", group="Squeeze Settings")
maxBars = input.int(10, title="", minval=0, maxval=1000, step=1, inline="MaxBars", group="Squeeze Settings")
bind = input.string(BC, "Bind", options=[BL, BH, BO, BC, BHL, BOC], group="Squeeze Settings")
isRange = input.bool(true, "Fixed Range", inline="Range", group="Backtesting Period")
rangeStart = input.string(R2, "", options=[R0, R1, R2, R3, R4, R5, R6, R7], inline="Range", group="Backtesting Period")
periodStart = input(timestamp("12 Apr 2024 00:00 +0000"), "Backtesting Start", group="Backtesting Period")
periodEnd = input(timestamp("20 Apr 2024 00:00 +0000"), "Backtesting End", group="Backtesting Period")

int startDate = na
int endDate = na
if isRange
    if rangeStart == R0
        startDate := timenow - 21600000
        endDate := timenow
    else if rangeStart == R1
        startDate := timenow - 43200000
        endDate := timenow
    else if rangeStart == R2
        startDate := timenow - 86400000
        endDate := timenow
    else if rangeStart == R3
        startDate := timenow - 172800000
        endDate := timenow
    else if rangeStart == R4
        startDate := timenow - 604800000
        endDate := timenow
    else if rangeStart == R5
        startDate := timenow - 1209600000
        endDate := timenow
    else if rangeStart == R6
        startDate := timenow - 2592000000
        endDate := timenow
    else if rangeStart == R7
        startDate := time
        endDate := timenow
else 
    startDate := periodStart
    endDate := periodEnd
    
float bindOption = na
if bind == BL
    bindOption := low
else if bind == BH
    bindOption := high
else if bind == BO
    bindOption := open
else if bind == BC
    bindOption := close
else if bind == BHL
    bindOption := hl2
else
    bindOption := ohlc4

afterStartDate = (time >= startDate)
beforeEndDate = (time <= endDate)
periodCondition = true
notInTrade = strategy.position_size == 0
inTrade = strategy.position_size != 0

barsFromEntry = ta.barssince(strategy.position_size[0] > strategy.position_size[1])
entry = strategy.position_size[0] > strategy.position_size[1]
entryBar = barsFromEntry == 0
notEntryBar = barsFromEntry != 0
openLimitPrice = direction == LONG ? (bindOption - bindOption * openPercent) : (bindOption + bindOption * openPercent)

closeLimitPriceEntry = openLimitPrice * (direction == LONG ? 1 + closePercent : 1 - closePercent)
closeLimitPrice = strategy.position_avg_price * (direction == LONG ? 1 + closePercent : 1 - closePercent)

stopLimitPriceEntry = direction == LONG ? openLimitPrice - openLimitPrice * stopPercent : openLimitPrice + openLimitPrice * stopPercent
stopLimitPrice = direction == LONG ? strategy.position_avg_price - strategy.position_avg_price * stopPercent : strategy.position_avg_price + strategy.position_avg_price * stopPercent

if periodCondition and notInTrade
    strategy.entry(direction == LONG ? "BUY" : "SELL", direction == LONG ? strategy.long : strategy.short, limit = openLimitPrice, stop = stopLimitPriceEntry)
    strategy.exit("INSTANT", limit = closeLimitPriceEntry, stop = stopLimitPriceEntry, comment_profit = direction == LONG ? 'INSTANT SELL' : 'INSTANT BUY', comment_loss = 'INSTANT STOP')
if inTrade 
    strategy.cancel("INSTANT")
    strategy.exit(direction == LONG ? "SELL" : "BUY", limit = closeLimitPrice, stop = stopLimitPrice, comment_profit = direction == LONG ? "SELL" : "BUY", comment_loss = "STOP")
if isMaxBars and barsFromEntry == maxBars
    strategy.close_all(comment = "TIMEOUT STOP", immediately = true)



showStop = stopPercent <= 0.20

// plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=1)
// plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=1)
// plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=1)
plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=0)
plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=0)
plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=0)

plot(openLimitPrice, title="Trailing Open Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.blue : color.red, 30), offset=1)
plot(closeLimitPriceEntry, title="Trailing Close Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.red : color.blue, 80), offset=1)
plot(stopLimitPriceEntry, title="Trailing Stop Position Limit Order", style=plot.style_stepline, color=color.new(#c50202, 80), offset=1)