
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.
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.
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.
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.
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.
O sinal de média móvel é simples, fácil de entender e de implementar.
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.
Percentagem de stop loss intuitivamente ajustável para controlar a perda máxima por transação.
A combinação de trailing stop e stop-loss fixo, tanto para bloquear os lucros quanto para controlar o risco.
A estratégia de média móvel é propensa a gerar falsos sinais, introduzindo condições de filtragem mais fortes.
A paragem de cauda pode ocorrer prematuramente, e a paragem de cauda deve ser adequadamente relaxada.
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.
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.
Tentar combinações de EMAs com diferentes parâmetros para encontrar o melhor equilíbrio.
A adição de indicadores como volume de transações para filtrar os sinais falsos.
Teste mais ações para encontrar o parâmetro de stop loss adequado.
Tente adicionar um stop móvel, ajustando a posição do stop de acordo com o mercado.
O tempo de parada é avaliado em função de indicadores como o RSI.
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.
/*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)