Transformadores de Backtest Squeeze v2.0


Data de criação: 2024-04-28 14:09:26 última modificação: 2024-04-28 14:09:26
cópia: 0 Cliques: 536
1
focar em
1617
Seguidores

Transformadores de Backtest Squeeze v2.0

Visão geral

O Extreme Retracement Metamorphosis King Kong v2.0 é um sistema de negociação quantitativa baseado em estratégias de tipo extremo. Ele retrai estratégias em intervalos de tempo específicos, definindo parâmetros como entrada, perda e paralisação, e tempo máximo de posse. A estratégia suporta negociação multidirecional, permitindo a flexibilidade de definir a direção da negociação para fazer mais ou fazer menos.

Princípio da estratégia

  1. Em primeiro lugar, determine a hora de início e a hora de término da ressonância, de acordo com os parâmetros de período de ressonância definidos pelo usuário.
  2. Durante o período de retrospectiva, se não houver uma posição atual e o preço tocar o preço de entrada (baseado na porcentagem de abertura da posição), abra uma posição e configure o preço de stop loss e stop loss ao mesmo tempo (baseado na porcentagem de stop loss e stop loss).
  3. Caso já tenha uma posição, cancele a ordem de stop loss anterior e reinicie o novo preço de stop loss (calculado de acordo com o preço médio da posição atual).
  4. Se o tempo de detenção máximo for definido, o saldo forçado será eliminado quando o tempo de detenção atingir o valor máximo.
  5. A estratégia permite a negociação em ambos os sentidos, com ou sem ativos.

Vantagens estratégicas

  1. A configuração dos parâmetros é flexível e pode ser ajustada de acordo com diferentes condições de mercado e necessidades de transação.
  2. A plataforma permite transações multidirecionais, que podem ser obtidas em diferentes situações de mercado.
  3. A plataforma oferece uma ampla variedade de opções de configuração de períodos de retrospecção, permitindo a fácil retrospecção e análise de dados históricos.
  4. A configuração de Stop Loss e Stop Stop pode controlar o risco de forma eficaz e melhorar a eficiência do uso de fundos.
  5. A configuração de tempo máximo de posse evita o risco de mercado de uma posse prolongada.

Risco estratégico

  1. A configuração do preço de entrada, do preço de parada e do preço de parada tem um grande impacto sobre o lucro da estratégia, e a configuração inadequada dos parâmetros pode causar perdas.
  2. Em situações de forte volatilidade do mercado, pode ocorrer uma situação em que o stop loss é acionado imediatamente após a abertura da posição, resultando em prejuízos.
  3. Se a posição for acionada durante o período máximo de detenção, pode-se perder oportunidades de lucro subsequentes.
  4. A estratégia pode não funcionar bem em situações especiais (por exemplo, mercados em choque).

Direção de otimização da estratégia

  1. Pode-se considerar a introdução de mais indicadores técnicos ou indicadores de sentimento de mercado para otimizar as condições de entrada, parada e parada, aumentando a estabilidade e a lucratividade da estratégia.
  2. Para a configuração do tempo máximo de posse, pode ser ajustado de acordo com a volatilidade do mercado e a situação de perda e ganho de posições, evitando o custo de oportunidade que a liquidação de tempo fixo pode trazer.
  3. Para as características de um mercado de turbulência, é possível adicionar a lógica de ruptura entre os turbulentos ou a confirmação de uma reversão de tendência, reduzindo os custos associados a transações frequentes.
  4. Considerar a inclusão de estratégias de gestão de posições e de gestão de fundos para controlar o risco de uma única transação e aumentar a eficiência e a estabilidade da utilização de fundos.

Resumir

O Extreme Retracement Metamorphosis Gold v2.0 é um sistema de negociação quantitativa baseado em estratégias de extrema, que pode ser negociado em diferentes ambientes de mercado por meio de configurações de parâmetros flexíveis e suporte de negociação multidirecional. Ao mesmo tempo, as opções de configuração de período de retracção abundantes e as configurações de stop loss podem ajudar os usuários a fazer análise de dados históricos e controle de risco.

Código-fonte da estratégia
/*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)