Estratégia além das nuvens

Autora:ChaoZhang, Data: 2023-11-03 16:10:33
Tags:

img

Resumo

Esta estratégia usa o indicador Super Trend para ajudar na colocação de ordens e filtra por camadas de nuvens e cores de velas para colocar ordens de limite para aumentar a lucratividade.

Estratégia lógica

  1. Calcular a média dos preços mais altos e mais baixos no período ATR como linha de base.

  2. Calcular as faixas superior e inferior com base no multiplicador do fator.

  3. Quando o fechamento estiver acima da banda superior, marque como 1; abaixo da banda inferior, marque como -1. Caso contrário, mantenha o estado anterior.

  4. Ajustar dinamicamente a linha de stop loss com base na posição do preço de fechamento em relação às faixas superior/inferior.

  5. Calcular o intervalo da camada de nuvens com base numa certa percentagem do intervalo de banda superior/inferior.

  6. Para longo, precisa fechar < aberto quando a Super Tendência é 1. Para curto, precisa fechar > aberto quando a Super Tendência é -1.

  7. Colocar ordens de compra de limite no preço de fechamento da barra anterior para longo. Colocar ordens de venda de limite para curto.

  8. Filtrar por intervalo de tempo, fechar todas as posições disponíveis.

Análise das vantagens

Esta estratégia combina Super Trend e conceito de nuvem, o que permite a captura rápida da tendência após o início da tendência.

  1. A Super Tendência é sensível e acompanha fortemente as tendências.

  2. O filtro de camadas de nuvens reduz as perdas de falhas.

  3. A cor do candelabro ajuda a evitar reversões.

  4. As ordens limitadas diminuem o impacto do deslizamento e aumentam a taxa de vitórias.

  5. Intervalo de tempo e gestão de posições personalizáveis adequados às diferentes necessidades de negociação.

Análise de riscos

Há também alguns riscos a ter em conta:

  1. Parâmetros de Super Tendência inadequados podem causar muita sensibilidade e batidas.

  2. A extensão excessiva de nuvens pode filtrar sinais válidos de ruptura, afetando a lucratividade.

  3. As ordens de limite podem não ser preenchidas durante a alta volatilidade, perdendo oportunidades.

  4. Nenhum stop loss pode evitar completamente o risco sistémico e grandes perdas.

  5. O tamanho maior das posições também amplifica as perdas.

Orientações de otimização

Esta estratégia pode ser melhorada nos seguintes aspectos:

  1. Testar diferentes mercados e instrumentos para obter parâmetros ótimos de Super Trend.

  2. Ajustar dinamicamente o nível de stop loss com base na volatilidade do mercado.

  3. Otimizar o alcance das nuvens para equilibrar a filtragem de ruído e a retenção de sinal.

  4. Adicionar módulo de dimensionamento de posições a posições de dimensionamento dinâmico com base nas condições de mercado.

  5. Usar diferentes conjuntos de parâmetros para diferentes sessões de negociação para se adaptar aos ritmos do mercado.

  6. Eficácia do ensaio quando combinado com outros indicadores.

Conclusão

Em conclusão, esta estratégia tem lógica clara e vantagem óbvia na captura de tendências. Mas nenhuma estratégia pode evitar completamente os riscos sistêmicos. É necessário controlar o tamanho da posição, manter a otimização para minimizar os riscos na negociação ao vivo e maximizar a vantagem. Esta estratégia tem grande potencial para testes e melhorias adicionais para se adaptar à dinâmica em evolução do mercado.


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

//Noro
//2018

//@version=2
strategy("Noro's SuperTrend Strategy v2.0 Limit", shorttitle = "STL str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
cloud = input(25, defval = 25, minval = 5, maxval = 50, title = "cloud, % of ATR")
Factor = input(title = "Super Trend", defval = 3, minval = 1, maxval = 100)
ATR = input(title = "ATR", defval = 7, minval = 1,maxval = 100)
centr = input(true, defval = true, title = "need center of ATR?")
border = input(false, defval = false, title = "need border?")
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")

//Super Trend ATR 1
src = close
Up=hl2-(Factor*atr(ATR))
Dn=hl2+(Factor*atr(ATR))
TUp=close[1]>TUp[1]? max(Up,TUp[1]) : Up
TDown=close[1]<TDown[1]? min(Dn,TDown[1]) : Dn
Trend = close > TDown[1] ? 1: close< TUp[1]? -1: nz(Trend[1],1)
Tsl1 = Trend==1? TUp: TDown
Tsl2 = Trend==1? TDown: TUp
limit = (Tsl1 - Tsl2) / 100 * cloud
upcloud = Tsl1 - limit
dncloud = Tsl2 + limit

//Cloud
linecolor = Trend == 1 ? green : red
centercolor = centr == true ? blue : na
cloudcolor = Trend == 1 ? green : red
cline = (Tsl1 + Tsl2) / 2
P1 = plot(Tsl1, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-1")
P2 = plot(Tsl2, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-2")
P3 = plot(cline, color = centercolor , style = line , linewidth = 1,title = "SuperTrend Center")
P4 = plot(upcloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center+1")
P5 = plot(dncloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center-1")
fill(P1, P4, color = linecolor == red ? red : lime, transp = 50)
fill(P2, P5, color = linecolor == red ? red : lime, transp = 50)

//Signals
up = 0.0
dn = 0.0
up := Trend != 1 ? 0 : Trend == 1 and close < open ? close : up[1]
dn := Trend != -1 ? close * 1000 : Trend == -1 and close > open ? close : dn[1]

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if true
    strategy.entry("Long", strategy.long, needlong ? lot : 0, limit = up, when = (Trend == 1 and time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.entry("Short", strategy.short, needshort ? lot : 0, limit = dn, when = (Trend == -1 and time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mais.