Média móvel exponencial combinada com trailing stop loss e stop loss percentual estratégia de negociação quantitativa de ações


Data de criação: 2024-01-03 16:25:54 última modificação: 2024-01-03 16:25:54
cópia: 0 Cliques: 699
1
focar em
1621
Seguidores

Média móvel exponencial combinada com trailing stop loss e stop loss percentual estratégia de negociação quantitativa de ações

Visão geral

O núcleo da estratégia é usar a média móvel de deslizamento do índice como um sinal de compra e venda, combinado com o stop loss de seguimento e o stop loss percentual para bloquear os lucros e controlar o risco. A estratégia é simples de implementar e é aplicável a negociações quantitativas de ações e outros produtos financeiros.

Princípio da estratégia

  1. Calcule o EMA rápido e o EMA lento, com um ciclo de EMA rápido de 20 dias e um ciclo de EMA lento de 50 dias. Quando o EMA rápido atravessa o EMA lento, gera um sinal de compra; quando o EMA rápido atravessa o EMA lento, gera um sinal de venda.

  2. O ponto de parada de seguimento após a entrada, a porcentagem de parada de seguimento de várias posições e a parada de seguimento de uma posição vazia, por exemplo, é de 7%. A parada de seguimento ajusta-se automaticamente a cada linha K, bloqueando o máximo de lucro possível.

  3. Ao mesmo tempo, configure uma posição de parada de perda, dependendo da direção da posição e do preço de entrada, respectivamente, configure a porcentagem de parada de perda de várias posições e a parada de perda de posição vazia, por exemplo, 2%. A posição de parada de perda é fixa, para evitar perdas excessivas.

  4. Comparando o preço de parada de perdas e o preço de parada de perdas, escolha a posição de parada de perdas para a transação mais próxima do preço de mercado e emita a ordem de parada de perdas.

Vantagens estratégicas

  1. O sinal de média móvel é simples, fácil de entender e de implementar.

  2. O bloqueio de perdas de seguimento pode maximizar o bloqueio de lucros e, ao mesmo tempo, evitar erros de julgamento que levem a perdas desnecessárias.

  3. Percentagem de stop loss intuitivamente ajustável para controlar a perda máxima por transação.

  4. A combinação de trailing stop e stop-loss fixo, tanto para bloquear os lucros quanto para controlar o risco.

Riscos e soluções

  1. A estratégia de média móvel é propensa a gerar falsos sinais, introduzindo condições de filtragem mais fortes.

  2. A paragem de cauda pode ocorrer prematuramente, e a paragem de cauda deve ser adequadamente relaxada.

  3. A configuração inadequada da posição de parada fixa pode ser muito radical ou conservadora, e é necessário testar e ajustar os parâmetros percentuais.

  4. O stop loss mecânico pode perder a oportunidade de uma reversão do mercado, e pode ser combinado com indicadores técnicos para determinar o stop loss.

Otimização de ideias

  1. Tentar combinações de EMAs com diferentes parâmetros para encontrar o melhor equilíbrio.

  2. A adição de indicadores como volume de transações para filtrar os sinais falsos.

  3. Teste mais ações para encontrar o parâmetro de stop loss adequado.

  4. Tente adicionar um stop móvel, ajustando a posição do stop de acordo com o mercado.

  5. O tempo de parada é avaliado em função de indicadores como o RSI.

Resumir

A estratégia integra os sinais de negociação de média móvel, trailing stop loss e percentual stop loss, e pode ser aplicada a uma variedade de ações e mercadorias, com otimização de parâmetros, com um controle rigoroso do risco e ganhos estáveis. Vale a pena quantificar a prática de pesquisa e otimização contínua dos comerciantes.

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