O recurso está a ser carregado... Carregamento...

Estratégia de negociação de quantidade de ações combinando média móvel exponencial com stop loss e stop loss percentual

Autora:ChaoZhang, Data: 2024-01-03 16:25:54
Tags:

img

Resumo

O núcleo desta estratégia é o uso de crossovers de médias móveis exponenciais como sinais de negociação, combinados com stop loss e stop loss percentual para bloquear lucros e controlar riscos.

Estratégia lógica

  1. Calcule a EMA rápida e a EMA lenta, com o período de EMA rápida sendo de 20 dias e o período de EMA lenta sendo de 50 dias.

  2. Após a entrada, configure o stop loss de trailing com base na direção de retenção, por exemplo, 7% para posição longa e 7% para posição curta.

  3. Ao mesmo tempo, fixar o preço de stop loss com base no preço de entrada e na direção da detenção, por exemplo, 2% abaixo do preço de entrada para a negociação longa e 2% acima do preço de entrada para a negociação curta.

  4. Comparar o preço de parada e o preço de stop loss, usar o mais próximo do preço de mercado como o stop loss final para esta negociação, enviar a ordem de stop loss.

Vantagens

  1. Simples e fáceis de implementar sinais de negociação de média móvel.

  2. O trailing stop loss bloqueia os lucros na maior medida possível, evitando perdas desnecessárias de falsos sinais.

  3. A percentagem de stop loss é intuitiva e fácil de ajustar para controlar a perda máxima por transação.

  4. A combinação de trailing stops e fixed stops bloqueia os lucros e controla os riscos.

Riscos e contramedidas

  1. As médias móveis podem gerar sinais falsos facilmente, adicionar filtros adicionais como volume.

  2. As paradas de atraso, às vezes, são desencadeadas muito cedo, relaxem um pouco a percentagem de atraso.

  3. A configuração incorreta de stop loss fixo pode ser muito agressiva ou conservadora, é necessário testar e ajustar o parâmetro percentual.

  4. As saídas de stop loss mecânicas podem perder oportunidades de reversão do mercado, incorporar indicadores técnicos para julgar o gatilho de stop.

Orientações de otimização

  1. Tente diferentes combinações de EMA para encontrar o equilíbrio ideal.

  2. Adicionar indicadores como volume para filtrar sinais falsos.

  3. Teste mais ações para encontrar percentagens de stop loss adequadas.

  4. Tente paradas adaptativas que se ajustem às condições do mercado.

  5. Incorporar indicadores como RSI para determinar o tempo de stop loss.

Resumo

Esta estratégia integra sinais de negociação de média móvel, trailing stops e stops percentuais. Através da otimização de parâmetros, pode alcançar lucros estáveis com controle de risco rigoroso em várias ações e commodities, vale a pena pesquisar e melhorar continuamente para os comerciantes quant.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wouterpruym1828

//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
     overlay=true, pyramiding=1, shorttitle="TSL&SL%")

//INDICATOR SECTION

// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
     
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)

// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)




//STRATEGY SECTION  

// Calculate trading conditions
buy  = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)

// STEP 1:
// Configure trail stop loss level with input options (optional)

longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

//Configure stop loss level with input options (optional)

longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01

shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01


// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0

longTrailPrice := if (strategy.position_size > 0)
    stopValue = high * (1 - longTrailPerc)
    math.max(stopValue, longTrailPrice[1])
else
    0

shortTrailPrice := if (strategy.position_size < 0)
    stopValue = low * (1 + shortTrailPerc)
    math.min(stopValue, shortTrailPrice[1])
else
    999999

// Determine stop loss prices
entryPrice = 0.0

entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)


longLossPrice = entryPrice * (1 - longStopPerc)

shortLossPrice = entryPrice * (1 + shortStopPerc)


// Plot stop loss values for confirmation

plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Short Trail Stop")

plot(series=(strategy.position_size > 0) ? longLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")

// Submit entry orders
if (buy)
    strategy.entry("Buy", strategy.long)

if (sell)
    strategy.entry("Sell", strategy.short)


//Evaluating trailing stop or stop loss to use

longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice

shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice

// STEP 3:
// Submit exit orders for stop price

if (strategy.position_size > 0)
    strategy.exit(id="Buy Stop", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="Sell Stop", stop=shortStopPrice)


Mais.