Estratégia de tendência alfa com stop loss

Autora:ChaoZhang, Data: 2023-11-27 15:25:35
Tags:

img

Resumo

A estratégia de tendência alfa com trailing stop loss é uma versão melhorada da estratégia de tendência alfa, incorporando um mecanismo de trailing stop loss, que pode controlar os riscos de forma mais eficaz e melhorar os retornos globais.

Estratégia lógica

A estratégia usa primeiro o indicador Alpha para determinar as tendências de preços. Quando o indicador Alpha sobe, é um sinal de alta. Quando o indicador Alpha desce, é um sinal de baixa. A estratégia gera sinais de compra e venda com base na cruz de ouro e cruz morta do indicador Alpha.

Enquanto isso, um mecanismo de stop loss está habilitado. O nível de stop loss por defeito é de 10% do preço de fechamento do dia. Ao manter posições longas, se o preço cair abaixo do nível de stop loss, a estratégia sairá da posição para parar a perda. Da mesma forma para posições curtas. Isso ajuda a melhor bloquear lucros e reduzir riscos.

Análise das vantagens

  1. A tendência alfa tem capacidades mais fortes de determinar as tendências dos preços do que as médias móveis simples e outros indicadores.

  2. Ao permitir o trailing stop loss, a perda de uma única transação pode ser eficazmente controlada, reduzindo os riscos.

  3. Esta estratégia tem fortes capacidades de controlo de riscos. Mesmo em condições desfavoráveis de mercado, as perdas ainda podem ser minimizadas.

  4. Com menos entradas de referência, esta estratégia é eficiente de calcular, adequada para negociação de alta frequência.

Análise de riscos

  1. Em mercados de intervalo lateral, a estratégia pode gerar muitos sinais de negociação desnecessários, aumentando os custos de negociação e as perdas de deslizamento.

  2. Quando se permite a suspensão de perdas, a percentagem de perdas de suspensão deve ser definida adequadamente.

  3. No caso de preços em forte flutuação, a probabilidade de ação de stop loss aumentará significativamente, aumentando o risco de ficar preso em posições.

  4. Ao otimizar os parâmetros de stop loss, vários fatores, incluindo as características do subjacente e a frequência de negociação, devem ser considerados, não apenas a busca de retornos máximos.

Os riscos acima mencionados poderiam ser atenuados ajustando os parâmetros do indicador alfa, definindo stop loss dinâmico, encurtação dos ciclos de negociação, etc.

Orientações de otimização

  1. Podem ser testados diferentes parâmetros de indicador para encontrar combinações de parâmetros de indicador alfa mais adequadas.

  2. Tentar definir as percentagens de stop loss de forma dinâmica com base no ATR para se adaptar melhor às flutuações do mercado.

  3. Combine com outros indicadores como MACD, KD para filtrar alguns sinais falsos.

  4. Os parâmetros podem ser otimizados automaticamente com base em resultados de negociação ao vivo e backtesting, usando técnicas de aprendizado de máquina para melhorar a inteligência da seleção de parâmetros.

Conclusão

A Estratégia de Tendência Alfa com Trailing Stop Loss combina determinação de tendência e controle de risco. Ela pode identificar efetivamente as tendências de preço e bloquear lucros para reduzir riscos. Em comparação com estratégias simples de rastreamento de tendência, esta estratégia pode obter retornos mais altos e constantes. Com vários aspectos de otimização, tem o potencial de alcançar um desempenho ainda melhor.


/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5

strategy("AlphaTrend Strategy", shorttitle='ATst', overlay=true, format=format.price, precision=2, margin_long=100, margin_short=100)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=false)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[1] ? #00E60F : AlphaTrend < AlphaTrend[1] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))


// //ENTER SOME SETUP TRADES FOR TSL EXAMPLE
// longCondition = ta.crossover(ta.sma(close, 10), ta.sma(close, 20))
// if longCondition
//     strategy.entry('My Long Entry Id', strategy.long)

// shortCondition = ta.crossunder(ta.sma(close, 10), ta.sma(close, 20))
// if shortCondition
//     strategy.entry('My Short Entry Id', strategy.short)



longCondition = buySignalk
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = sellSignalk
if (shortCondition)
    strategy.entry("Short", strategy.short)
    

enableTrailing = input.bool(title='Enable Trailing Stop (%)',defval = true)
//TRAILING STOP CODE
trailStop = input.float(title='Trailing (%)', minval=0.0, step=0.1, defval=10) * 0.01



longStopPrice = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0
shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + trailStop)
    math.min(stopValue, shortStopPrice[1])
else
    999999

//PLOT TSL LINES
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(series=strategy.position_size < 0 ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Short Trail Stop', offset=1, title='Short Trail Stop')

    
if enableTrailing
    //EXIT TRADE @ TSL
    if strategy.position_size > 0
        strategy.exit(id='Close Long', stop=longStopPrice)
    if strategy.position_size < 0
        strategy.exit(id='Close Short', stop=shortStopPrice)


 

Mais.