Esta estratégia utiliza a concordância de indicadores em vários prazos para rastrear tendências.
A estratégia julga a direção da tendência usando quatro prazos - diário, de 10 dias, de 15 dias e de 30 dias. Quando os preços de fechamento são superiores aos preços de abertura em todos os quatro prazos, indica um sinal de alta. Quando os preços de fechamento são inferiores aos preços de abertura em todos os quatro prazos, indica um sinal de baixa.
Quando o sinal é de alta, ele vai longo. Quando o sinal é de baixa, ele vai curto. Depois de entrar, o canal KC é usado para stop loss dinâmico.
Especificamente, a estratégia compara os preços de abertura e de fechamento em diferentes prazos para determinar a direção da tendência. Se o preço de fechamento for superior ao preço de abertura, o prazo é considerado de alta e representado em verde. Se o preço de fechamento for inferior ao preço de abertura, o prazo é considerado de baixa e representado em vermelho.
Quando todos os quatro prazos concordarem com um sinal de alta, a estratégia abrirá uma posição longa. Quando todos os quatro prazos concordarem com um sinal de baixa, a estratégia abrirá uma posição curta.
Usar vários prazos para confirmar tendências pode efetivamente filtrar falhas e determinar a direção da tendência.
O stop loss dinâmico pode maximizar a proteção do capital.
Critérios de entrada rigorosos reduzem as transacções desnecessárias e os custos de deslizamento.
Combinar vários prazos equilibra a velocidade e a estabilidade dos lucros.
Os critérios de admissão podem ser demasiado rigorosos, perdendo algumas oportunidades.
A definição incorreta de stop loss pode ser demasiado agressiva ou conservadora.
As selecções de prazos inadequadas podem não estar alinhadas com as tendências a longo ou curto prazo.
O valor da posição em risco deve ser calculado em função do valor da posição em risco.
Otimizar as selecções de prazos para equilibrar a velocidade e a estabilidade dos lucros.
Teste diferentes configurações de parâmetros para otimizar os níveis de stop loss.
Adicionar algoritmos de aprendizagem de máquina para ajudar a julgar pontos de reversão.
Monitorizar eventos significativos para evitar perdas por reversões súbitas.
Esta estratégia integra julgamentos em vários prazos, com critérios de entrada rigorosos e paradas dinâmicas, visando retornos constantes.
/*backtest start: 2024-01-19 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("[RichG] Easy MTF Strategy v1.1", overlay=false) TF_1_time = input("D", "Timeframe 1") TF_2_time = input("10D", "Timeframe 2") TF_3_time = input("15D", "Timeframe 3") TF_4_time = input("30D", "Timeframe 4") lengthKC=input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") lengthBB=input(20, title="BB Length") transaction_size = input(1, "Contract/Share Amount") src = close, len = 20 out = sma(src, len) width = 5 upcolor = green downcolor = red neutralcolor = blue linestyle = line kc() => ma = sma(close, lengthKC) range = tr rangema = sma(range, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC [lowerKC, upperKC] bb() => source = close basis = sma(source, lengthBB) dev = multKC * stdev(source, lengthBB) upperBB = basis + dev lowerBB = basis - dev [upperBB, lowerBB] TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false TF_1_color = TF_1 ? upcolor:downcolor TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false TF_2_color = TF_2 ? upcolor:downcolor TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false TF_3_color = TF_3 ? upcolor:downcolor TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false TF_4_color = TF_4 ? upcolor:downcolor TF_global = TF_1 and TF_2 and TF_3 and TF_4 TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false TF_global_color = TF_global ? green : TF_global_bear ? red : white TF_trigger_width = TF_global ? 6 : width plot(1, style=linestyle, linewidth=width, color=TF_1_color) plot(5, style=linestyle, linewidth=width, color=TF_2_color) plot(10, style=linestyle, linewidth=width, color=TF_3_color) plot(15, style=linestyle, linewidth=width, color=TF_4_color) plot(25, style=linestyle, linewidth=4, color=TF_global_color) exitCondition_Long = TF_global_bear exitCondition_Short = TF_global longCondition = TF_global if (longCondition) strategy.entry("MTF_Long", strategy.long, qty=transaction_size) shortCondition = TF_global_bear if (shortCondition) strategy.entry("MTF_Short", strategy.short, qty=transaction_size) [kc_lower,kc_upper] = kc() strategy.close("MTF_Long", when=close < kc_upper) strategy.close("MTF_Short", when=close > kc_lower)