Estratégia de acompanhamento de tendências em vários períodos de tempo com base em Ichimoku Cloud, MACD e Estocástico


Data de criação: 2024-02-05 10:30:45 última modificação: 2024-02-05 10:30:45
cópia: 2 Cliques: 768
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendências em vários períodos de tempo com base em Ichimoku Cloud, MACD e Estocástico

Visão geral

Esta estratégia combina vários indicadores, como o gráfico da nuvem de Ichimoku, a média móvel, o MACD, o Stochastic e o ATR, para permitir a identificação e o acompanhamento de tendências em vários períodos de tempo. Após obter um sinal de tendência de maior probabilidade, o controle de risco é executado com o método de parada de perda de ciclo ATR.

Princípio da estratégia

  1. O gráfico da nuvem de Ichimoku determina a direção da tendência da linha média longa. A linha de rotação e a linha de referência que atravessam o gráfico da nuvem acima do preço CLOSE são sinais de múltiplas cabeças e abaixo do sinal de cabeças vazias.

  2. O MACD julga a tendência de linha curta e os casos de sobrevenda e sobrecompra. A linha de sinalização do MACD na coluna é um sinal de múltiplas cabeças e a linha de sinalização inferior é um sinal de cabeças vazias.

  3. A Stochastic KD julga a zona de super-compra e super-venda. A linha K usa 20 como sinal de cabeça e a linha inferior usa 80 como sinal de cabeça vazia.

  4. A média móvel determina a tendência de médio prazo. A média móvel é usada como sinal de cabeça em cima do preço de fechamento e como sinal de cabeça em baixo.

  5. A combinação de vários sinais indicadores acima, filtrando alguns sinais falsos, forma um sinal de tendência contínua de alta probabilidade.

  6. Com base no ATR, o preço de parada de perda é calculado. Com um determinado número de ATR como ponto de parada e ponto de parada, o controle de risco é realizado.

Vantagens estratégicas

  1. Identificação de tendências em múltiplos períodos de tempo para melhorar a precisão do sinal.

  2. A tecnologia de filtragem de combinação de indicadores é amplamente utilizada, filtrando efetivamente os falsos sinais.

  3. ATR Stop Loss Stop Stop, para controlar o máximo de perdas individuais.

  4. O grau de rigor das condições de admissão pode ser personalizado para atender a diferentes preferências de risco.

Risco estratégico

  1. O que é um “trend tracker” que não consegue identificar uma reversão de um evento inesperado?

  2. A perda periódica do ATR pode ser idealizada demais e difícil de ser totalmente reproduzida em disco.

  3. A configuração inadequada dos parâmetros pode levar a uma frequência de transação excessiva ou a uma precisão insuficiente de reconhecimento de sinais.

  4. Os parâmetros precisam ser ajustados para encontrar um equilíbrio, adaptando-se a diferentes variedades e condições de mercado.

Direção de otimização da estratégia

  1. Adição de algoritmos de aprendizagem de máquina para auxiliar na determinação de pontos de inflexão de tendências.

  2. Optimizar os parâmetros de multiplicação do ATR. Diferentes variedades podem ter multiplicações diferentes.

  3. Combinado com outros fatores, como mudanças no volume de transações, a precisão do sinal de ruptura é melhorada.

  4. Otimizar continuamente os parâmetros de acordo com os resultados do teste de retorno para encontrar a melhor combinação de parâmetros.

Resumir

Esta estratégia utiliza um conjunto de indicadores, como o Ichimoku, o MACD e o Stochastic, para identificar tendências em múltiplos períodos de tempo, capturando as tendências e, ao mesmo tempo, evitando ser preso por eventos inesperados. O método de parada de perdas periódicas do ATR é uma estratégia de rastreamento de tendências recomendada para controlar efetivamente os prejuízos individuais.

Código-fonte da estratégia
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 4h
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/
// © FXFUNDINGMATE

//@version=4
strategy(title="FXFUNDINGMATE TREND INDICATOR", overlay=true)

//Ichimoku Cloud
conversionPeriods = input(9, minval=1, title="Conversion Line Length")
basePeriods = input(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Length")
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)[displacement - 1]
leadLine2 = donchian(laggingSpan2Periods)[displacement - 1]


//macd
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)

fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


//kd
periodK = input(5, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)


//atr
atrlength = input(title="Atr Length", defval=8, minval=1)
SMulti = input(title="Stop loss multi Atr", defval=1.0)
TMulti = input(title="Take profit multi Atr", defval=1.0)
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
ma_function(source, length) =>
	if smoothing == "RMA"
		rma(source, length)
	else
		if smoothing == "SMA"
			sma(source, length)
		else
			if smoothing == "EMA"
				ema(source, length)
			else
				wma(source, length)
atr = ma_function(tr(true), atrlength)


operation_type = input(defval = "Both", title = "Position side", options = ["Long", "Short", "Both"])
operation = operation_type == "Long" ? 1 : operation_type == "Short" ? 2 : 3
showlines = input(true,  title="Show sl&tp lines")

// MA
sma_len = input(100, title="MA Length", type=input.integer)
sma = sma(close, sma_len)

longCond = crossover(k, 20) and macd > 0 and close > sma and close > leadLine1 and close > leadLine2
shortCond = crossunder(k, 80)  and macd < 0 and close < sma and close < leadLine1 and close < leadLine2

entry_price  = float(0.0) //set float
entry_price := strategy.position_size != 0 or longCond or shortCond ? strategy.position_avg_price : entry_price[1]
entry_atr = valuewhen(longCond or shortCond, atr,0)
short_stop_level     = float(0.0)   //set float
short_profit_level   = float(0.0)   //set float
long_stop_level      = float(0.0)   //set float
long_profit_level    = float(0.0)   //set float
short_stop_level    := entry_price + SMulti * entry_atr
short_profit_level  := entry_price - TMulti * entry_atr
long_stop_level     := entry_price - SMulti * entry_atr
long_profit_level   := entry_price + TMulti * entry_atr


//  Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("1 Jan 2020 00:00 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("31 Dec 2025 23:59 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true

if (operation == 1 or operation == 3)
    strategy.entry("long" , strategy.long , when=longCond and timeCond, alert_message = "Long")
    strategy.exit("SL/TP", from_entry = "long" , limit = long_profit_level , stop = long_stop_level , alert_message = "Long exit")

if (operation == 2 or operation == 3)
    strategy.entry("short", strategy.short, when=shortCond and timeCond, alert_message="Short")
    strategy.exit("SL/TP", from_entry = "short", limit = short_profit_level , stop = short_stop_level , alert_message = "Short exit")
    
if time > i_endTime  
    strategy.close_all(comment = "close all", alert_message = "close all")
    
plot(showlines and strategy.position_size <= 0 ? na : long_stop_level,    color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size <= 0 ? na : long_profit_level,  color=color.lime, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_stop_level,   color=color.red,  style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_profit_level, color=color.lime, style=plot.style_linebr, linewidth = 2)

//}