Prueba retrospectiva de Squeeze Transformers v2.0


Fecha de creación: 2024-04-28 14:09:26 Última modificación: 2024-04-28 14:09:26
Copiar: 0 Número de Visitas: 536
1
Seguir
1617
Seguidores

Prueba retrospectiva de Squeeze Transformers v2.0

Descripción general

Extreme Retracement Transform Gold v2.0 es un sistema de trading cuantitativo basado en estrategias de tipo extremo. Se realiza una retroalimentación de la estrategia en un período de tiempo específico mediante la configuración de parámetros como porcentajes de entrada, pérdidas y paradas, y tiempo máximo de mantenimiento de la posición. La estrategia es compatible con el comercio multidireccional y puede establecer la dirección de negociación de forma flexible para hacer más o menos.

Principio de estrategia

  1. En primer lugar, se determina la hora de inicio y la hora de finalización de la respuesta en función de los parámetros de período de respuesta establecidos por el usuario.
  2. Durante el período de retracción, si no se tiene una posición en ese momento y el precio toca el precio de entrada (según el porcentaje de apertura de la posición), se abre una posición y se establece un precio de stop loss y de stop loss al mismo tiempo (según el porcentaje de stop loss y stop stop).
  3. Si ya tiene una posición, cancele la orden de parada y pérdida anterior y vuelva a establecer el nuevo precio de parada y pérdida (calculado según el precio promedio de la posición actual).
  4. Si se establece un tiempo máximo de mantenimiento de la posición, se forzará la liquidación de la posición cuando el tiempo de mantenimiento alcance el valor máximo.
  5. La estrategia apoya el comercio en ambos sentidos: a la baja y a la baja.

Ventajas estratégicas

  1. La configuración de los parámetros es flexible y se puede ajustar según las diferentes condiciones del mercado y las necesidades de las transacciones.
  2. Apoya el comercio multidireccional y puede obtener beneficios en diferentes situaciones de mercado.
  3. Ofrece una gran variedad de opciones de configuración de período de retroalimentación, lo que facilita la recuperación y el análisis de datos históricos.
  4. La configuración de stop loss y stop stop puede controlar el riesgo de manera efectiva y mejorar la eficiencia de la utilización de los fondos.
  5. La configuración de tiempo máximo de mantenimiento evita el riesgo de mercado de mantener una posición por mucho tiempo.

Riesgo estratégico

  1. La configuración de los precios de entrada, los precios de parada y los precios de parada tiene un gran impacto en los beneficios de la estrategia, y la configuración incorrecta de los parámetros puede causar pérdidas.
  2. En el caso de una fuerte volatilidad en el mercado, puede haber situaciones en las que se puede activar un stop loss inmediatamente después de abrir una posición, lo que puede provocar pérdidas.
  3. Si se activa la posición en el tiempo máximo de mantenimiento de la posición, es posible que se pierda la oportunidad de obtener ganancias posteriores.
  4. La estrategia puede no funcionar bien en ciertas situaciones especiales (por ejemplo, mercados en crisis).

Dirección de optimización de la estrategia

  1. Se puede considerar la introducción de más indicadores técnicos o indicadores de sentimiento del mercado para optimizar las condiciones de entrada, parada y pérdida, y mejorar la estabilidad y rentabilidad de la estrategia.
  2. Para la configuración de la máxima duración de la posición, se puede ajustar dinámicamente en función de la volatilidad del mercado y la situación de pérdidas y ganancias de la posición, para evitar el costo de oportunidad que puede generar la posición de liquidación de tiempo fijo.
  3. Para las características de los mercados convulsivos, se pueden agregar lógicas como la ruptura de la zona de convulsión o la confirmación de la reversión de la tendencia, lo que reduce el costo de las operaciones frecuentes.
  4. Considere la inclusión de estrategias de gestión de posiciones y de gestión de fondos, control de la brecha de riesgo de una sola transacción y mejora de la eficiencia y la estabilidad de la utilización de fondos.

Resumir

Extreme Retracement Metamorphosis Gold v2.0 es un sistema de comercio cuantitativo basado en estrategias de tipo extremo, que puede operar en diferentes entornos de mercado a través de configuraciones de parámetros flexibles y soporte de operaciones multidireccionales. Al mismo tiempo, las opciones de configuración de períodos de retracción abundantes y la configuración de stop loss pueden ayudar a los usuarios a analizar datos históricos y controlar el riesgo. Sin embargo, el rendimiento de la estrategia se ve afectado por la configuración de parámetros.

Código Fuente de la Estrategia
/*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)