Coordenar estratégia de stop loss deslizante


Data de criação: 2023-11-02 16:28:55 última modificação: 2023-11-02 16:28:55
cópia: 0 Cliques: 562
1
focar em
1617
Seguidores

Coordenar estratégia de stop loss deslizante

Visão geral

A estratégia usa Stochastic RSI e indicadores de taxa de variação de preços para identificar a direção da tendência para entrar em ações em aberto e gerenciar o risco usando o método de stop loss de deslizamento de coordenadas.

Princípio da estratégia

Em primeiro lugar, a estratégia usa um indicador RSI de comprimento 5 e um indicador estocástico de comprimento 7 para calcular o RSI estocástico. Quando o valor de K do RSI estocástico é superior ao valor de D, é um sinal de otimização, quando o valor de K é inferior ao valor de D, é um sinal de baixa.

Em segundo lugar, a estratégia calcula a taxa de variação do preço com o indicador EMA ROC. Quando o EMA ROC é superior a metade da depreciação ou inferior a metade negativa da depreciação, o preço é considerado em movimento ativo.

Em seguida, em combinação com o sinal de pluralidade do RSI estocástico e o indicador de taxa de variação de preços, é possível identificar a direção da tendência. Faça mais quando o RSI estocástico é positivo e o preço está ativamente movendo; Faça um curto quando o RSI estocástico é negativo e o preço está ativamente movendo.

Finalmente, a estratégia gerencia o risco usando o método de parada de deslizamento de coordenadas. Após a abertura da posição, continue a atualizar o preço mais alto ou mais baixo, com uma distância proporcional do preço mais alto ou mais baixo como ponto de parada.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Usando o indicador Stochastic RSI, pode-se identificar com eficiência tendências e situações de sobrecompra e sobrevenda.

  2. Os indicadores de volatilidade dos preços podem filtrar os mercados de correção de turbulência e evitar falsos sinais.

  3. O método de parada de deslizamento de coordenadas permite o bloqueio máximo de lucro e, ao mesmo tempo, controla o risco.

  4. Os parâmetros de estratégia têm muito espaço para otimização e podem ser ajustados para diferentes variedades.

  5. A estratégia é simples, clara e fácil de entender.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. O RSI estocástico pode produzir falsos sinais e precisa ser confirmado em combinação com outros fatores.

  2. A perda de deslizamento de coordenadas pode ser muito radical, sendo atingida por gaps durante a noite.

  3. A reversão em curto prazo pode desencadear um stop loss.

  4. Os parâmetros da estratégia precisam ser otimizados para diferentes variedades, caso contrário, podem não ser eficazes.

  5. Os custos de transação afetam a rentabilidade da estratégia e a frequência de transação razoável deve ser considerada.

Direção de otimização

A estratégia também pode ser melhorada nos seguintes aspectos:

  1. Optimizar os parâmetros do RSI estocástico, reduzindo a taxa de falso sinal. Pode testar diferentes parâmetros de K e D.

  2. Optimizar os parâmetros do indicador de variação de preço para melhorar a eficácia da filtragem. Pode testar diferentes períodos de janela e os limiares de variação.

  3. Combinando indicadores de tendência para evitar a inversão de paradas. Indicadores como adicionar médias móveis.

  4. Optimizar a taxa de perda, reduzir o risco de ser coberto. Você pode testar diferentes níveis de perda.

  5. Adicionar gerenciamento de posições para controlar o risco individual. Por exemplo, fixar o valor de stop loss ou ajustar posições de forma dinâmica de acordo com o saldo da conta.

  6. Teste de diferentes variedades de parâmetros para melhorar a adaptabilidade. Preferencialmente verificado em vários mercados em vários períodos de tempo.

Resumir

O conceito geral da estratégia é claro e simples. Usando o Stochastic RSI para identificar a direção da tendência, e em conjunto com os sinais de filtragem do índice de variação de preço, pode efetivamente capturar oportunidades de tendência de linha média e longa. O método de parada de deslizamento de coordenadas pode bloquear o lucro e controlar o risco.

Código-fonte da estratégia
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Sto2", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
///////////// Stochastic calc /////////////
smoothK = input(1, minval=1)
smoothD = input(7, minval=1)
lengthRSI = input(5, minval=1)
lengthStoch = input(7, minval=1)
src = input(close, title="RSI Source")

up = sma(max(change(src), 0), lengthRSI) 
down = sma(-min(change(src), 0), lengthRSI)
rsi1 = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

///////////// Rate Of Change ///////////// 
source = close, roclength = input(14, minval=1), pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// STRATEGY ///////////////
long = k > d and isMoving()
short = k < d and isMoving()

last_long = 0.0
last_short = 0.0
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 = 0.0
last_open_short_signal = 0.0
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 = 0.0
last_short_signal = 0.0
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 = 0.0
last_low = 0.0
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])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(9.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long)
    strategy.entry("Short Entry", strategy.short, when=short)
    strategy.exit("Long Ex", "Long Entry", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short Entry", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
p1 = plot(k, color=color.gray, linewidth=0)
p2 = plot(d, color=color.gray, linewidth=0)
h0 = hline(100)
h1 = hline(50)
h3 = hline(0)
fill(p1, p2, color = k > d ? color.lime : color.red, transp=70)