Tabela de Equilíbrio Misto de Ichimoku

Autora:ChaoZhang, Data: 2023-11-27 11:50:43
Tags:

img

I. Visão geral da estratégia

Esta estratégia utiliza de forma abrangente indicadores técnicos como Ichimoku Kinko Hyo, Macd, Chaikin Money Flow e Tsi Oscillator para julgar com precisão a direção das tendências do mercado para negociação a curto prazo.

II. Princípio da estratégia

A estratégia usa a linha Tenkan-sen, a linha Kijun-sen, as linhas Senkou Span A e Senkou Span B em Ichimoku para julgar as tendências de preços intradiários. Ao mesmo tempo, combina os sinais cruzados das linhas médias móveis rápidas e lentas do Macd e o indicador de fluxo de dinheiro e o indicador de oscilação para determinar a entrada e saída de fundos. Após o julgamento abrangente de vários indicadores, as decisões de compra e venda são tomadas.

Quando a linha Tenkan-sen cruza acima da linha Kijun-sen, o Chikou Span está acima do eixo 0, e o preço de fechamento está acima da nuvem Ichimoku, é um sinal de alta. Pelo contrário, quando a linha Tenkan-sen cruza abaixo da linha Kijun-sen, o Chikou Span está abaixo do eixo 0, e o preço de fechamento está abaixo da nuvem, é um sinal de baixa. Ao mesmo tempo, a estratégia detecta se o histograma MACD é positivo e se o indicador Chaikin Money Flow e o oscilador TSI são positivos na mesma direção. Se os indicadores são altos na mesma direção, a posição longa é aberta comprando, e se os indicadores são baixos na mesma direção, a posição curta é aberta vendendo.

Quando o indicador emite um sinal oposto ao anterior, é feita uma troca inversa para nivelar a posição anterior.

III. Vantagens da Estratégia

  1. A utilização de uma combinação de múltiplos indicadores melhora a precisão do julgamento.

  2. As operações de curto prazo acompanham as flutuações do mercado em tempo real.

  3. Sem intervenção manual, negociação algorítmica totalmente automatizada.

IV. Riscos da Estratégia e soluções

  1. O julgamento combinado de vários indicadores que são de alta ou baixa ao mesmo tempo tem o risco de erro de julgamento.

  2. A negociação de curto prazo de alta frequência tem taxas de comissão relativamente elevadas e é difícil detectar tendências.

  3. Não há configuração de stop loss que possa levar a perdas maiores. Pontos de stop loss apropriados ou stop loss móvel podem ser definidos com base no ATR.

V. Orientações para a otimização da estratégia

  1. Otimizar as combinações de parâmetros, ajustar os parâmetros da média móvel para se adaptarem a diferentes ciclos e variedades.

  2. Aumentar o mecanismo de stop loss, definir linhas de stop loss dinâmicas combinadas com o indicador ATR.

  3. Aumentar a gestão de posições, ajustar dinamicamente as proporções de volume de negociação.

  4. Combinar tecnologia de aprendizagem de máquina para otimizar indicadores e sinais.

VI. Conclusão

Esta estratégia usa abrangentemente vários indicadores técnicos para determinar flutuações de tendência em tempo real para negociação de curto prazo de alta frequência. Embora existam alguns riscos, ele pode ser melhorado através da otimização.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
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/
// © exlux99

//@version=4
strategy("Ichimoku with MACD/ CMF/ TSI", overlay=true, margin_long=0, margin_short=0)



//Inputs
ts_bars = input(10, minval=1, title="Tenkan-Sen Bars")
ks_bars = input(30, minval=1, title="Kijun-Sen Bars")
ssb_bars = input(52, minval=1, title="Senkou-Span B Bars")
cs_offset = input(26, minval=1, title="Chikou-Span Offset")
ss_offset = input(26, minval=1, title="Senkou-Span Offset")
long_entry = input(true, title="Long Entry")
short_entry = input(true, title="Short Entry")

middle(len) => avg(lowest(len), highest(len))

// Ichimoku Components
tenkan = middle(ts_bars)
kijun = middle(ks_bars)
senkouA = avg(tenkan, kijun)
senkouB = middle(ssb_bars)


ss_high = max(senkouA[ss_offset-1], senkouB[ss_offset-1])
ss_low = min(senkouA[ss_offset-1], senkouB[ss_offset-1])

// Entry/Exit Signals
fast_length = input(title="Fast Length", type=input.integer, defval=17)
slow_length = input(title="Slow Length", type=input.integer, defval=28)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 5)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=true)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)

// Calculating
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


tk_cross_bull = tenkan > kijun
tk_cross_bear = tenkan < kijun
cs_cross_bull = mom(close, cs_offset-1) > 0
cs_cross_bear = mom(close, cs_offset-1) < 0
price_above_kumo = close > ss_high
price_below_kumo = close < ss_low


//CMF
lengthA = input(8, minval=1, title="CMF Length")
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, lengthA) / sum(volume, lengthA)


//TSI
long = input(title="Long Length", type=input.integer, defval=8)
short = input(title="Short Length", type=input.integer, defval=8)
price = close
double_smooth(src, long, short) =>
	fist_smooth = ema(src, long)
	ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)



bullish = tk_cross_bull and cs_cross_bull and price_above_kumo and hist > 0 and mf > 0.1 and tsi_value > 0
bearish = tk_cross_bear and cs_cross_bear and price_below_kumo and hist < 0  and mf < -0.1 and tsi_value < 0



strategy.entry("Long", strategy.long, when=bullish and long_entry)
strategy.entry("Short", strategy.short, when=bearish and short_entry)

strategy.close("Long", when=bearish and not short_entry)
strategy.close("Short", when=bullish and not long_entry)

Mais.