Regras Caóticas de Negociação Estratégia Stop Loss

Autora:ChaoZhang, Data: 2023-11-07 16:44:31
Tags:

img

Resumo

A ideia central desta estratégia é adicionar algumas regras de gerenciamento de negociação chave com base na estratégia RSI, incluindo stop loss, take profit, trailing stop loss e leverage tracking stop loss. Isso permite que a estratégia obtenha retornos mais altos durante os mercados de tendência e minimize as perdas durante os mercados variáveis em backtest.

Estratégia lógica

A estratégia primeiro calcula o indicador RSI. Vai longo quando o RSI está abaixo do nível de sobrevenda e vai curto quando o RSI está acima do nível de sobrecompra.

Após um sinal longo ser acionado, o preço mais alto naquele momento é registrado como o ponto de referência de stop loss.

Após um sinal curto ser acionado, o preço mais baixo naquele momento é registrado como o ponto de referência de stop loss.

Ao mesmo tempo, são definidas distâncias fixas de take profit e stop loss. Se o preço atingir a distância take profit, take profit para fechar a posição. Se atingir a distância stop loss, feche a posição por stop loss.

Além disso, uma linha de stop loss de rastreamento de alavancagem é definida com base na alavancagem.

Ao seguir o preço mais alto durante as tendências de alta e o preço mais baixo durante as tendências de baixa, combinado com distâncias fixas de take profit e stop loss, podem ser alcançados retornos mais altos em mercados de tendência.

Análise das vantagens

A maior vantagem desta estratégia é a introdução de múltiplas regras de gestão de negociação que controlam melhor os riscos, ao mesmo tempo em que aproveitam os pontos fortes da estratégia RSI.

Especificamente, as vantagens são:

  1. O trailing stop loss pode seguir continuamente a tendência para obter lucros mais elevados durante os mercados de tendência.

  2. Fixed take profit e stop loss bloqueiam alguns lucros e evitam que os lucros completos sejam eliminados quando a tendência se inverte.

  3. O rastreamento de perdas de parada de alavancagem ajuda a evitar a expansão de perdas e controla o risco.

  4. A combinação de vários métodos de stop loss pode exercer os seus pontos fortes em diferentes ambientes de mercado, melhorando a estabilidade geral da estratégia.

  5. O ajustamento flexível dos parâmetros da estratégia adapta-se a diferentes instrumentos de negociação e ambientes de mercado.

  6. A lógica fácil de entender facilita a verificação, otimização e aplicação.

Análise de riscos

Os principais riscos desta estratégia são:

  1. A estratégia RSI em si tem alguns riscos, que podem desencadear stop loss.

  2. Oscilações em torno de pontos de stop loss podem frequentemente desencadear stop loss.

  3. A distância de lucro não pode bloquear completamente os lucros durante os mercados de tendência.

  4. A distância fixa de stop loss pode ser muito pequena para evitar completamente as perdas.

  5. A alavancagem excessiva leva a que a perda de parada esteja demasiado próxima do preço de entrada.

  6. O período de ensaio posterior pode não representar plenamente as condições futuras do mercado, devendo ser implementado um controlo adequado dos riscos e testados diferentes períodos.

Os riscos acima podem ser mitigados através do ajuste de parâmetros, otimização de mecanismos de stop loss, controle de risco, etc. Mas nenhuma estratégia pode evitar completamente os riscos de mercado.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Otimizar os parâmetros do RSI para reduzir os negócios de serras e testar parâmetros ideais para diferentes mercados.

  2. Tente outros indicadores como KD, MACD combinados com RSI para filtrar entradas.

  3. Usar aprendizado de máquina para otimizar dinamicamente parâmetros de stop loss e take profit.

  4. Teste mecanismos de stop loss mais complexos, como stop loss oscilante, stop loss médio, stop loss dinâmico, etc.

  5. Otimizar a definição da alavancagem e estudar os impactos no controlo dos lucros e dos riscos.

  6. Ajustar automaticamente os parâmetros com base nas mudanças do regime de mercado, como α-Dual Thrust.

  7. Incorporar outros fatores para determinar a persistência da tendência, por exemplo, energia de volume.

  8. Usar modelos de aprendizagem profunda para desenvolver formas de stop loss mais robustas e interpretáveis.

  9. Testar dados de diferentes instrumentos e períodos de tempo para avaliar a robustez da estratégia.

Conclusão

Esta estratégia complementa a estratégia RSI com vários métodos de stop loss, dando pleno jogo aos efeitos duplos da stop loss em lucrar com tendências e controlar riscos. Ainda há um grande espaço para otimização. As ideias podem ser estendidas a mais estratégias e instrumentos de negociação.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)

/////////////// Component Code Start ///////////////
testStartYear = input(2011, "Backtest Start Year") 
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2016, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
/////////////// Component Code Stop ///////////////

///////////// RSI component /////////////
length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close

vrsi = rsi(price, length)
notna = not na(vrsi)

/////////////// STRATEGY ///////////////
ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100

long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)

last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal

long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)

long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)

leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call

if testPeriod()
    strategy.entry("Long", strategy.long, when=long_signal)
    strategy.entry("Short", strategy.short, when=short_signal)

    // plot(long_call, color=red)
    // plot(short_call, color=green)
    strategy.close("Long", when=long_call_signal)
    strategy.close("Short", when=short_call_signal)
    strategy.close("Long", when=long_tp)
    strategy.close("Short", when=short_tp)
    strategy.close("Long", when=long_sl)
    strategy.close("Short", when=short_sl)
    strategy.close("Long", when=long_ts)
    strategy.close("Short", when=short_ts)

Mais.