Estratégia combinada de captura de tendência de reversão e de stop loss dinâmico

Autora:ChaoZhang, Data: 2024-02-05 09:54:13
Tags:

img

Resumo

Esta estratégia combina uma estratégia de captura de tendências de reversão e uma estratégia dinâmica de stop loss para capturar tendências de reversão, controlando os riscos com paradas dinâmicas.

Estratégia lógica

Estratégia de captura da tendência de reversão

Esta estratégia é baseada nos valores K e D do Oscilador Estocástico. Ela gera sinais de compra quando o preço cai por dois dias consecutivos, enquanto K sobe acima de D. Ela gera sinais de venda quando o preço sobe por dois dias, enquanto K cai abaixo de D. Isso capta tendências de reversão de preço.

Estratégia dinâmica de stop loss

Esta estratégia define o stop loss dinâmico com base na volatilidade do preço e na inclinação. Ele calcula a flutuação do máximo máximo e do mínimo mais baixo recentemente e julga se está em um canal superior ou inferior com base na inclinação, em seguida, define o preço de stop dinâmico em conformidade. Isso ajusta a posição de stop com base na condição do mercado.

As duas estratégias trabalham juntas para captar sinais de reversão e estabelecer paradas dinâmicas para controlar os riscos.

Análise das vantagens

  • Pontos de reversão do preço da captura, bons para negociação de reversão
  • Paradas dinâmicas ajustadas ao ambiente de mercado
  • Confirmação de sinal duplo evita sinais falsos
  • Controlar os riscos e assegurar os lucros

Análise de riscos

  • Risco de falha de reversão.
  • Os parâmetros errados podem afetar o desempenho.
  • Risco de liquidez Alguns produtos têm pouca liquidez para parar perdas.

Os riscos podem ser controlados pela otimização de parâmetros, estritas stop loss, escolha de produtos com boa liquidez.

Orientações de otimização

  • Otimizar parâmetros estocásticos para a melhor combinação
  • Otimizar parâmetros de parada para melhor posição de parada
  • Adicionar filtros para evitar a abertura em mercados de gama
  • Adicionar dimensionamento de posição para limitar a perda máxima

As otimizações abrangentes permitem que a estratégia capte reversões enquanto controla os riscos.

Resumo

A estratégia combina captura de tendência de reversão e paradas dinâmicas para negociação estável a curto prazo.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 07/12/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
//  The Kase Dev Stops system finds the optimal statistical balance between letting profits run, 
//  while cutting losses.  Kase DevStop seeks an ideal stop level by accounting for volatility (risk),
//  the variance in volatility (the change in volatility from bar to bar), and volatility skew 
//  (the propensity for volatility to occasionally spike incorrectly).
//  Kase Dev Stops are set at points at which there is an increasing probability of reversal against 
//  the trend being statistically significant based on the log normal shape of the range curve.  
//  Setting stops will help you take as much risk as necessary to stay in a good position, but not more.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

KaseDevStops(Length, Level) =>
    pos = 0.0
    RWH = (high - low[Length]) / (atr(Length) * sqrt(Length))
    RWL = (high[Length] - low) / (atr(Length) * sqrt(Length))
    Pk = wma((RWH-RWL),3)
    AVTR = sma(highest(high,2) - lowest(low,2), 20)
    SD = stdev(highest(high,2) - lowest(low,2),20)
    Val4 = iff(Pk>0, highest(high-AVTR-3*SD,20), lowest(low+AVTR+3*SD,20))
    Val3 = iff(Pk>0, highest(high-AVTR-2*SD,20), lowest(low+AVTR+2*SD,20))
    Val2 = iff(Pk>0, highest(high-AVTR-SD,20), lowest(low+AVTR+SD,20))
    Val1 = iff(Pk>0, highest(high-AVTR,20), lowest(low+AVTR,20))
    ResPrice = iff(Level == 4, Val4,
                 iff(Level == 3, Val3,
                  iff(Level == 2, Val2,
                     iff(Level == 1, Val1, Val4))))
    pos := iff(close < ResPrice , -1, 1)
    pos

strategy(title="Combo Backtest 123 Reversal & Kase Dev Stops", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthKDS = input(30, minval=2, maxval = 100)
LevelKDS = input(title="Trade From Level", defval=4, options=[1, 2, 3, 4])
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKaseDevStops = KaseDevStops(LengthKDS, LevelKDS)
pos = iff(posReversal123 == 1 and posKaseDevStops == 1 , 1,
	   iff(posReversal123 == -1 and posKaseDevStops == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Mais.