Estratégia de duplo impulso baseada no corpo do candelabro

Autora:ChaoZhang, Data: 2023-11-16 17:14:48
Tags:

img

Resumo

Esta estratégia usa o comprimento do corpo da vela para determinar a direção longa e curta. Ele calcula o comprimento médio do corpo dos 30 velas recentes. Quando o comprimento do corpo da vela alta é maior que a média, ele vai longo. Quando o comprimento do corpo da vela baixa é maior que a média, ele vai curto.

Estratégia lógica

Esta estratégia calcula primeiro o corpo do corpo do candelabro e o comprimento médio do corpo dos últimos 30 candelabros.

Quando o candelabro de hoje é de baixa (barra==-1) e o comprimento do corpo é maior que o comprimento médio do corpo, ele abre uma posição longa (para cima1).

Quando o candelabro de hoje está em alta (barra==1) e o comprimento do corpo é maior que o comprimento médio do corpo, ele abre uma posição curta (dn1).

Depois de abrir longo, se o candelabro de hoje for otimista (barra==1) e a posição atual for lucrativa, ele fecha a posição longa.

Depois de abrir curto, se o candelabro de hoje for de baixa (barra==-1) e a posição atual for lucrativa, ele fecha a posição curta.

A estratégia usa simples e efetivamente o comprimento do corpo do candelabro para determinar a tendência do mercado. Quanto mais longo o corpo, mais forte a tendência.

Análise das vantagens

As vantagens desta estratégia:

  1. A lógica é simples e clara, fácil de compreender e implementar.

  2. Usando o comprimento do corpo do candelabro para determinar a tendência, evitar interferências de ruído.

  3. Adotar um cálculo médio dinâmico, adaptar-se às alterações do mercado.

  4. Definir condições de saída rentáveis para melhorar a rentabilidade.

  5. Parâmetros configuráveis, adaptáveis aos diferentes ambientes de mercado.

Análise de riscos

Os riscos desta estratégia:

  1. Corpo longo não significa necessariamente uma tendência forte, pode ser uma flutuação normal.

  2. Uma janela de tempo de comprimento corporal médio inadequado pode perder oportunidades de negociação.

  3. Os eventos do cisne negro podem causar perdas.

  4. Deter posições por muito tempo pode aumentar as perdas.

Soluções:

  1. Combine com outros indicadores para determinar a tendência, evitar negócios errados.

  2. Teste diferentes valores de parâmetros, otimize o cálculo do comprimento médio do corpo.

  3. Configure stop loss para controlar perda única.

  4. Otimizar a lógica de entrada e saída para evitar a retenção demasiado longa.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Combine MACD, RSI para determinar a tendência, evitar sinais errados de flutuações normais.

  2. Teste diferentes parâmetros da janela de tempo de comprimento corporal médio para encontrar o conjunto de parâmetros ideal.

  3. Adicionar a lógica de controle de dimensionamento de posição, reduzir gradualmente o tamanho da posição quando incorrer em perdas.

  4. Estabelecer um objetivo de stop loss ou lucro para controlar a percentagem de perdas individuais.

  5. Optimize as condições de entrada e saída para evitar negócios ineficazes.

  6. Evite negociar em determinados períodos ou em torno da divulgação de dados importantes para controlar as perdas decorrentes da volatilidade.

Conclusão

A estratégia tem uma lógica clara e fácil de entender de comparar o corpo do candelabro ao seu comprimento médio para o tempo de entrada. Grande espaço para otimização a partir de múltiplas dimensões para adaptá-lo melhor para diferentes ambientes de mercado.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's ColorBar Strategy v1.0", shorttitle = "ColorBar str v1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usebody = input(true, defval = true, title = "Use body")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Signals
bar = close > open ? 1 : close < open ? - 1 : 0
body = abs(close - open)
sbody = ema(body, 30)

up1 = bar == -1 and (body > sbody or usebody == false)
dn1 = bar == 1 and (body > sbody or usebody == false)

plus = (close > strategy.position_avg_price and strategy.position_size > 0) or (close < strategy.position_avg_price and strategy.position_size < 0)
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and plus

if up1
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00) or exit
    strategy.close_all()

Mais.