Esta é uma estratégia clássica de média móvel de cruz de ouro. A estratégia utiliza duas médias móveis, TENKAN e KIJUN, com períodos de tempo diferentes para formar sinais de cruz de ouro e cruz de morte para negociações longas e curtas.
A estratégia baseia-se principalmente num método de análise técnica de ações japonês chamado Ichimoku Kinko Hyo, utilizando múltiplas médias móveis como as linhas TENKAN e KIJUN para determinar a direção da tendência do mercado.
Em primeiro lugar, a linha TENKAN é uma linha de 9 dias que representa a tendência de curto prazo; a linha KIJUN é uma linha de 26 dias que representa a tendência de médio prazo. Quando a linha TENKAN cruza acima da linha KIJUN, um sinal de compra é gerado. Quando a linha TENKAN cai abaixo da linha KIJUN, um sinal de venda é gerado. Isso forma a clássica média móvel estratégia de cruz de ouro e cruz de morte.
Em segundo lugar, a estratégia também introduz a linha Senkou Span A (SSA) e a linha Senkou Span B (SSB). A linha SSA é a média das linhas TENKAN e KIJUN, enquanto a linha SSB é uma média móvel de 52 dias. Juntos, eles formam as bandas
Por último, para filtrar os falsos sinais, esta estratégia também examina a posição do preço em comparação com o Chikou Span (o preço de fechamento atrasado em 26 dias)
Esta é uma estratégia de média móvel muito típica.
A utilização de duas médias móveis de períodos diferentes permite avaliar simultaneamente as direcções de tendência a curto e médio prazo.
As tendências a longo prazo são determinadas com as bandas Kumo para evitar compras em mercados de baixa a longo prazo.
Comparar preços com a linha Chikou atrasada filtra muitos sinais falsos e reduz transações desnecessárias.
Ao utilizar habilmente várias funções das médias móveis, esta estratégia pode seguir as tendências em prazos curtos, médios e longos.
Os principais riscos desta estratégia incluem:
As estratégias de média móvel tendem a produzir muitos sinais falsos.
Esta estratégia concentra-se fortemente nos aspectos técnicos sem considerar os fundamentos.
Não é incluído nenhum mecanismo de stop loss. Uma vez que o julgamento da direção do mercado é errado, as perdas podem acumular-se.
Por conseguinte, precisamos de sistemas de média móvel mais avançados, regras de stop loss adequadas ou sinais fundamentais suplementares, para refinar ainda mais esta estratégia e diminuir os riscos.
Esta estratégia pode também ser melhorada nos seguintes aspectos:
Procurar conjuntos de parâmetros mais estáveis e eficientes através de mais backtests.
Adicione regras de stop loss.
Complementar sinais fundamentais como as revisões das estimativas de lucros que contêm informações sobre as perspectivas de uma empresa.
Otimizar a estratégia de comparação de preços da linha Chikou com soluções mais estáveis.
Incorporar sinais de seleção de ações. Fatores de pontuação como a proporção de PE e ROE podem filtrar ações de menor qualidade.
Esta é uma estratégia de média móvel muito típica e prática. Ao monitorar simultaneamente as tendências de curto, médio e longo prazo, utilizando várias funções de médias móveis, ele gera sinais de negociação com desempenho sólido. Podemos melhorá-lo ainda mais ajustando os parâmetros, adicionando stop loss, seleção de ações etc. No geral, esta é uma estratégia quantitativa promissora digna de pesquisa e rastreamento.
/*backtest start: 2022-11-28 00:00:00 end: 2023-12-04 00:00:00 period: 1d basePeriod: 1h 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/ // © mdeous //@version=4 strategy( title="Ichimoku Kinko Hyo Strategy", shorttitle="Ichimoku Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency="USD", commission_type=strategy.commission.percent, commission_value=0.0 ) // // SETTINGS // // Ichimoku int TENKAN_LEN = input(title="Tenkan-Sen Length", defval=9, minval=1, step=1) int KIJUN_LEN = input(title="Kijun-Sen Length", defval=26, minval=1, step=1) int SSB_LEN = input(title="Senkou Span B Length", defval=52, minval=1, step=1) int OFFSET = input(title="Offset For Chikou Span / Kumo", defval=26, minval=1, step=1) // Strategy int COOLDOWN = input(title="Orders Cooldown Period", defval=5, minval=0, step=1) bool USE_CHIKOU = input(title="Use Imperfect Chikou Position Detection", defval=false) // // HELPERS // color _red = color.red color _blue = color.blue color _lime = color.lime color _fuchsia = color.fuchsia color _silver = color.silver color _aqua = color.aqua f_donchian(_len) => avg(lowest(_len), highest(_len)) // // ICHIMOKU INDICATOR // float tenkan = f_donchian(TENKAN_LEN) float kijun = f_donchian(KIJUN_LEN) float ssa = avg(tenkan, kijun) float ssb = f_donchian(SSB_LEN) plot(tenkan, title="Tenkan", color=_silver) plot(close, title="Chikou", offset=-OFFSET+1, color=_aqua) _ssa = plot(ssa, title="SSA", offset=OFFSET-1, color=_lime) _ssb = plot(ssb, title="SSB", offset=OFFSET-1, color=_red) fill(_ssa, _ssb, color=ssa > ssb ? _lime : _fuchsia, transp=90) // // STRATEGY // // Check if price is "above or below" Chikou (i.e. historic price line): // This detection is highly imperfect, as it can only know what Chikou position // was 2*offset candles in the past, therefore if Chikou crossed the price // line in the last 2*offset periods it won't be detected. // Use of this detection is disabled by default, float _chikou_val = close[OFFSET*2+1] float _last_val = close[OFFSET+1] bool above_chikou = USE_CHIKOU ? _last_val > _chikou_val : true bool below_chikou = USE_CHIKOU ? _last_val < _chikou_val : true // Identify short-term trend with Tenkan bool _above_tenkan = min(open, close) > tenkan bool _below_tenkan = max(open, close) < tenkan // Check price position compared to Kumo bool _above_kumo = min(open, close) > ssa bool _below_kumo = max(open, close) < ssb // Check if Kumo is bullish or bearish bool bullish_kumo = ssa > ssb bool bearish_kumo = ssa < ssb // Correlate indicators to confirm the trend bool bullish_trend = _above_tenkan and _above_kumo and bullish_kumo bool bearish_trend = _below_tenkan and _below_kumo and bearish_kumo // Build signals bool buy1 = (close > open) and ((close > ssa) and (open < ssa)) // green candle crossing over SSA bool buy2 = bullish_kumo and bearish_kumo[1] // bullish Kumo twist bool sell1 = (close < open) and ((close < ssb) and (open > ssb)) // red candle crossing under SSB bool sell2 = bearish_kumo and bullish_kumo[1] // bearish Kumo twist bool go_long = below_chikou and (bullish_trend and (buy1 or buy2)) bool exit_long = above_chikou and (bearish_trend and (sell1 or sell2)) // // COOLDOWN // f_cooldown() => _cd_needed = false for i = 1 to COOLDOWN by 1 if go_long[i] _cd_needed := true break _cd_needed go_long := f_cooldown() ? false : go_long // // ORDERS // strategy.entry("buy", strategy.long, when=go_long) strategy.close_all(when=exit_long) // // ALERTS // alertcondition( condition=go_long, title="Buy Signal", message="{{exchange}}:{{ticker}}: A buy signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})." ) alertcondition( condition=exit_long, title="Sell Signal", message="{{exchange}}:{{ticker}}: A sell signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})." )