Estratégia multi-tempo

Autora:ChaoZhang, Data: 2024-02-19 11:13:22
Tags:

img

Resumo

Esta estratégia utiliza a concordância de indicadores em vários prazos para rastrear tendências.

Estratégia lógica

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.

Vantagens

  1. Usar vários prazos para confirmar tendências pode efetivamente filtrar falhas e determinar a direção da tendência.

  2. O stop loss dinâmico pode maximizar a proteção do capital.

  3. Critérios de entrada rigorosos reduzem as transacções desnecessárias e os custos de deslizamento.

  4. Combinar vários prazos equilibra a velocidade e a estabilidade dos lucros.

Riscos

  1. Os critérios de admissão podem ser demasiado rigorosos, perdendo algumas oportunidades.

  2. A definição incorreta de stop loss pode ser demasiado agressiva ou conservadora.

  3. As selecções de prazos inadequadas podem não estar alinhadas com as tendências a longo ou curto prazo.

  4. O valor da posição em risco deve ser calculado em função do valor da posição em risco.

Áreas de melhoria

  1. Otimizar as selecções de prazos para equilibrar a velocidade e a estabilidade dos lucros.

  2. Teste diferentes configurações de parâmetros para otimizar os níveis de stop loss.

  3. Adicionar algoritmos de aprendizagem de máquina para ajudar a julgar pontos de reversão.

  4. Monitorizar eventos significativos para evitar perdas por reversões súbitas.

Resumo

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)


Mais.