Posição dinâmica SPARK e estratégia de negociação de indicador duplo

supertrend RSI ATR
Data de criação: 2024-04-12 17:22:47 última modificação: 2024-04-12 17:22:47
cópia: 0 Cliques: 778
1
focar em
1617
Seguidores

Posição dinâmica SPARK e estratégia de negociação de indicador duplo

Visão geral

A estratégia SPARK é uma estratégia de negociação quantitativa que combina correção de posição dinâmica e confirmação de dois indicadores. A estratégia usa o indicador SuperTrend e o índice de força relativa (RSI) para identificar pontos de entrada e saída potenciais, enquanto usa o mecanismo de correção de posição dinâmica para otimizar a distribuição de fundos. A estratégia também oferece configurações flexíveis de stop-loss e parâmetros personalizados, como controle de frequência mínima de negociação e seleção de preferências direcionais.

Princípio da estratégia

O núcleo da estratégia SPARK é a aplicação combinada do indicador SuperTrend e do indicador RSI. O indicador SuperTrend é usado para determinar a direção da tendência, comparando o preço de fechamento com a relação entre a resistência e a posição de suporte dinâmico, enquanto o indicador RSI é usado para identificar o estado de superabando e superabando do mercado.

A estratégia usa um mecanismo de ajuste de posição dinâmico para otimizar a distribuição de fundos em cada transação. Ao definir a porcentagem de portfólio e a taxa de alavancagem, a estratégia pode calcular automaticamente o tamanho da posição ideal com base na situação atual do mercado e no saldo da conta. Além disso, a estratégia oferece uma configuração de stop loss flexível, com uma opção de porcentagem fixa ou de cálculo dinâmico.

Vantagens estratégicas

  1. Confirmação de dois indicadores: Combinando os dois indicadores SuperTrend e RSI, a estratégia SPARK pode identificar com mais precisão os pontos de entrada e saída potenciais, reduzindo a possibilidade de erro de julgamento.
  2. Ajuste de posição dinâmico: a estratégia utiliza um mecanismo de ajuste de posição dinâmico, que pode otimizar automaticamente a distribuição de fundos para cada transação com base na porcentagem de carteira e na taxa de alavancagem, aumentando a eficiência do uso de fundos.
  3. Gerenciamento de risco flexível: A estratégia oferece configurações de stop loss flexíveis, que podem ser calculadas de forma fixa ou dinâmica, de acordo com as preferências de risco individuais, para um controle de risco preciso.
  4. Parâmetros personalizados: A estratégia permite que o usuário ajuste vários parâmetros de entrada, como o comprimento do ATR, a multiplicação, o limiar do RSI, etc., para adaptar-se a diferentes condições de mercado e preferências de negociação.

Risco estratégico

  1. Risco de mercado: Apesar de a estratégia SPARK usar um mecanismo de confirmação de duplo indicador e de ajuste de posição dinâmico, é possível enfrentar o risco de perda em condições de mercado extremas.
  2. Risco de otimização de parâmetros: o desempenho da estratégia depende muito da escolha dos parâmetros de entrada. A configuração inadequada dos parâmetros pode levar ao fraco desempenho da estratégia.
  3. Risco de sobreajuste: se os parâmetros da estratégia forem otimizados em excesso, isso pode levar a uma estratégia que não funcionará bem em condições de mercado futuras.

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

  1. Introdução de mais indicadores: Considere a introdução de outros indicadores técnicos, como MACD, Brinks, etc., para melhorar ainda mais a precisão da identificação do sinal.
  2. Otimização do mecanismo de stop loss: explorar estratégias de stop loss mais avançadas, como stop loss móvel, stop loss dinâmico, etc., para proteger melhor os lucros e limitar as perdas.
  3. Ajuste de parâmetros de adaptação: Desenvolver mecanismos de adaptação para ajustar os parâmetros da estratégia de acordo com a dinâmica da situação do mercado para se adaptar a um ambiente de mercado em constante mudança.

Resumir

A estratégia SPARK oferece aos comerciantes uma solução de negociação quantitativa completa, combinando os indicadores SuperTrend e RSI, e usando mecanismos dinâmicos de ajuste de posição e ferramentas flexíveis de gerenciamento de risco. Embora a estratégia possa ter alguns riscos, a estratégia SPARK espera ter um desempenho estável em várias condições de mercado, através de otimização e melhoria contínuas.

Código-fonte da estratégia
/*backtest
start: 2024-03-12 00:00:00
end: 2024-04-11 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SPARK", shorttitle="SPARK", overlay=true)

// Choose whether to activate the minimal bars in trade feature
minBarsEnabled = input(true, title="Activate Minimal Bars in Trade")
portfolioPercentage = input(10, title="Portfolio Percentage", minval=1, maxval=100)
// Leverage Input
leverage = input(1, title="Leverage", minval=1)

// Calculate position size according to portfolio percentage and leverage
positionSizePercent = portfolioPercentage / 100 * leverage
positionSize = (strategy.initial_capital / close) * positionSizePercent

// Take Profit and Stop Loss settings
useFixedTPSL = input(1, title="Use Fixed TP/SL", options=[1, 0])
tp_sl_step = 0.1
fixedTP = input(2.0, title="Fixed Take Profit (%)", step=tp_sl_step)
fixedSL = input(1.0, title="Fixed Stop Loss (%)", step=tp_sl_step)

// Calculate Take Profit and Stop Loss Levels
takeProfitLong = close * (1 + fixedTP / 100)
takeProfitShort = close * (1 - fixedTP / 100)
stopLossLong = close * (1 - fixedSL / 100)
stopLossShort = close * (1 + fixedSL / 100)

// Plot TP and SL levels on the chart
plotshape(series=takeProfitLong, title="Take Profit Long", color=color.green, style=shape.triangleup, location=location.abovebar)
plotshape(series=takeProfitShort, title="Take Profit Short", color=color.red, style=shape.triangledown, location=location.belowbar)
plotshape(series=stopLossLong, title="Stop Loss Long", color=color.red, style=shape.triangleup, location=location.abovebar)
plotshape(series=stopLossShort, title="Stop Loss Short", color=color.green, style=shape.triangledown, location=location.belowbar)

// Minimum Bars Between Trades Input
minBarsBetweenTrades = input(5, title="Minimum Bars Between Trades")

// Inputs for selecting trading direction
tradingDirection = input("Both", "Choose Trading Direction", options=["Long", "Short", "Both"])

// SuperTrend Function
trendFlow(src, atrLength, multiplier) =>
    atr = atr(atrLength)
    up = hl2 - (multiplier * atr)
    dn = hl2 + (multiplier * atr)
    trend = 1
    trend := nz(trend[1], 1)
    up := src > nz(up[1], 0) and src[1] > nz(up[1], 0) ? max(up, nz(up[1], 0)) : up
    dn := src < nz(dn[1], 0) and src[1] < nz(dn[1], 0) ? min(dn, nz(dn[1], 0)) : dn
    trend := src > nz(dn[1], 0) ? 1 : src < nz(up[1], 0)? -1 : nz(trend[1], 1)
    [up, dn, trend]

// Inputs for SuperTrend settings
atrLength1 = input(7, title="ATR Length for Trend 1")
multiplier1 = input(4.0, title="Multiplier for Trend 1")
atrLength2 = input(14, title="ATR Length for Trend 2")
multiplier2 = input(3.618, title="Multiplier for Trend 2")
atrLength3 = input(21, title="ATR Length for Trend 3")
multiplier3 = input(3.5, title="Multiplier for Trend 3")
atrLength4 = input(28, title="ATR Length for Trend 4")
multiplier4 = input(3.382, title="Multiplier for Trend 4")

// Calculate SuperTrend
[up1, dn1, trend1] = trendFlow(close, atrLength1, multiplier1)
[up2, dn2, trend2] = trendFlow(close, atrLength2, multiplier2)
[up3, dn3, trend3] = trendFlow(close, atrLength3, multiplier3)
[up4, dn4, trend4] = trendFlow(close, atrLength4, multiplier4)

// Entry Conditions based on SuperTrend and Elliott Wave-like patterns
longCondition = trend1 == 1 and trend2 == 1 and trend3 == 1 and trend4 == 1
shortCondition = trend1 == -1 and trend2 == -1 and trend3 == -1 and trend4 == -1

// Calculate bars since last trade
barsSinceLastTrade = barssince(tradingDirection == "Long" ? longCondition : shortCondition)

// Strategy Entry logic based on selected trading direction and minimum bars between trades
if tradingDirection == "Long" or tradingDirection == "Both"
    if longCondition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Long", strategy.long, qty=positionSize)
        strategy.exit("TP/SL Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)

if tradingDirection == "Short" or tradingDirection == "Both"
    if shortCondition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Short", strategy.short, qty=positionSize)
        strategy.exit("TP/SL Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Color bars based on position
var color barColor = na
barColor := strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : na

// Plot colored bars
plotcandle(open, high, low, close, color=barColor)

// Plot moving averages
plot(sma(close, 50), color=color.blue)
plot(sma(close, 200), color=color.orange)

// More customizable trading bot - adding a new indicator
// This indicator is the RSI (Relative Strength Index)

// RSI Inputs
rsi_length = input(14, title="RSI Length")
rsi_oversold = input(30, title="RSI Oversold")
rsi_overbought = input(70, title="RSI Overbought")

// Calculate RSI
rsi = rsi(close, rsi_length)

// Plot RSI
plot(rsi, color=color.purple, title="RSI")

// Entry Conditions based on RSI
rsi_long_condition = rsi < rsi_oversold
rsi_short_condition = rsi > rsi_overbought

// Strategy Entry logic based on RSI
if tradingDirection == "Long" or tradingDirection == "Both"
    if rsi_long_condition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Long_RSI", strategy.long, qty=positionSize)
        strategy.exit("TP/SL Long_RSI", from_entry="Long_RSI", stop=stopLossLong, limit=takeProfitLong)

if tradingDirection == "Short" or tradingDirection == "Both"
    if rsi_short_condition and (not minBarsEnabled or barsSinceLastTrade >= minBarsBetweenTrades)
        strategy.entry("Short_RSI", strategy.short, qty=positionSize)
        strategy.exit("TP/SL Short_RSI", from_entry="Short_RSI", stop=stopLossShort, limit=takeProfitShort)