Combo Trend Reversal Moving Average Crossover Estratégia

Autora:ChaoZhang, Data: 2023-11-28 13:47:05
Tags:

img

Resumo

Esta é uma estratégia combinada que combina a inversão de tendência e as estratégias de cruzamento de média móvel para gerar sinais de negociação mais precisos.

Estratégia lógica

A estratégia consiste em duas partes:

  1. 123 Estratégia de reversão: ir longo quando o preço de fechamento sobe por 2 dias consecutivos e o estocástico lento de 9 dias está abaixo de 50; ir curto quando o preço de fechamento cai por 2 dias consecutivos e o estocástico rápido de 9 dias está acima de 50.

  2. Estratégia de média de Bill Williams: Calcule as médias móveis de preços de 13, 8 e 5 dias e vá longo quando os MAs mais rápidos cruzam acima dos MAs mais lentos; vá curto quando os MAs mais rápidos cruzam abaixo dos MAs mais lentos.

Finalmente, um sinal de negociação real é gerado apenas quando ambas as estratégias concordam com a direção; caso contrário, não há negociação.

Análise das vantagens

A estratégia de combinação filtra o ruído usando validações de tendência dupla, melhorando assim a precisão do sinal.

Análise de riscos

Os riscos são:

  1. O filtro duplo pode perder alguns bons negócios.
  2. Ajustes MA incorretos podem julgar incorretamente as tendências
  3. As próprias estratégias de reversão apresentam riscos de perdas

Os riscos podem ser reduzidos através da otimização dos parâmetros de MA ou da lógica de entrada/saída.

Orientações de otimização

A estratégia pode ser otimizada por:

  1. Teste de diferentes combinações de MA para encontrar parâmetros ótimos
  2. Adição de stop loss para limitar perdas
  3. Incorporar o volume para identificar a qualidade do sinal
  4. Usando aprendizado de máquina para otimização automática

Conclusão

Esta estratégia combina filtros de tendência dupla e MAs para efetivamente filtrar ruídos e melhorar a precisão de decisão.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/06/2019
// This is combo strategies for get 
// a cumulative signal. Result signal will return 1 if two strategies 
// is long, -1 if all strategies is short and 0 if signals of strategies is not equal.
//
// 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
// This indicator calculates 3 Moving Averages for default values of
// 13, 8 and 5 days, with displacement 8, 5 and 3 days: Median Price (High+Low/2).
// The most popular method of interpreting a moving average is to compare 
// the relationship between a moving average of the security's price with 
// the security's price itself (or between several moving averages).
//
// 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

BillWilliamsAverages(LLength, MLength,SLength, LOffset,MOffset, SOffset ) =>
    xLSma = sma(hl2, LLength)[LOffset]
    xMSma = sma(hl2, MLength)[MOffset]
    xSSma = sma(hl2, SLength)[SOffset]
    pos = 0
    pos := iff(close < xSSma and xSSma < xMSma and xMSma < xLSma, -1,
    	   iff(close > xSSma and xSSma > xMSma and xMSma > xLSma, 1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Bill Williams Averages. 3Lines", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LLength = input(13, minval=1)
MLength = input(8,minval=1)
SLength = input(5,minval=1)
LOffset = input(8,minval=1)
MOffset = input(5,minval=1)
SOffset = input(3,minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posBillWilliamsAverages = BillWilliamsAverages(LLength, MLength,SLength, LOffset, MOffset, SOffset)
pos = iff(posReversal123 == 1 and posBillWilliamsAverages == 1 , 1,
	   iff(posReversal123 == -1 and posBillWilliamsAverages == -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 ? red: possig == 1 ? green : blue ) 

Mais.