A Noro
A estratégia primeiro calcula a média dos preços mais altos e mais baixos durante um determinado período para construir um canal de preço médio. Quando o preço quebra acima do canal de baixo, é considerado um sinal longo. Quando o preço quebra abaixo do canal de cima, é considerado um sinal curto.
Ao mesmo tempo, a estratégia incorpora duas regras auxiliares: RSI rápido e cor da vela. Quando o RSI rápido está abaixo de 25%, ele indica o estado de sobrevenda e os preços podem se recuperar. Junto com uma quebra acima do canal, isso produz um sinal longo mais forte. Em contraste, quando o RSI rápido está acima de 75%, ele indica o estado de sobrecompra e os preços podem cair. Junto com uma quebra abaixo do canal, isso produz um sinal curto mais forte. Além disso, a estratégia acompanha as mudanças de cor da vela nas duas últimas velas. Duas velas vermelhas consecutivas aumentam o sinal curto, enquanto duas velas verdes consecutivas aumentam o sinal longo.
Ao combinar esses três indicadores de sinal, a estratégia pode identificar efetivamente tendências de médio a longo prazo e estabelecer posições de acordo.
A maior vantagem desta estratégia é a incorporação de múltiplos indicadores para determinar a direcção da tendência e evitar o ruído das flutuações de curto prazo do mercado.
O canal de preços identifica claramente a direcção e a força da tendência.
O RSI rápido avalia as condições de sobrecompra/supervenda para evitar perseguir tendências em pontos de virada.
A validação da cor da vela verifica ainda mais a persistência da tendência.
A estratégia só entra em duas velas consecutivas da mesma cor quebrando o canal, evitando falsos sinais de oscilações de curto prazo.
O stop loss médio simples fecha as posições quando a cor da vela muda, minimizando as perdas efetivamente.
Há também alguns riscos a considerar para esta estratégia:
As configurações incorretas dos parâmetros do canal de preços podem resultar em canais demasiado largos ou demasiado estreitos, em pontos de mudança de tendência em falta ou em sinais falsos excessivos.
As configurações incorretas dos parâmetros RSI rápidos podem não identificar com precisão as condições de sobrecompra/supervenda, perdendo assim oportunidades de reversão.
O mecanismo de stop loss simples pode ser demasiado sensível a tendências agitadas, causando abertura e fechamento excessivos de posições.
Não pode prever a continuação da tendência real após a ruptura do canal de preços, levando a perdas amplificadas.
Não pode adaptar-se a eventos de cisne negro com impactos súbitos no mercado, resultando em perdas enormes.
Algumas das principais oportunidades para reforçar a estratégia incluem:
Ajustar dinamicamente os parâmetros do canal de preços para melhor se adaptar à volatilidade em diferentes períodos e mercados.
Incorporar medidas de volatilidade para ajustar os parâmetros do RSI, diminuindo a sensibilidade durante a alta volatilidade e aumentando a sensibilidade durante a baixa volatilidade.
Adicionar mecanismos de stop de trail com níveis de stop baseados na volatilidade da tendência para evitar stop outs excessivamente sensíveis.
Melhorar a identificação da força da ruptura e das divergências de baixa/alta para evitar falsas rupturas.
Incorporar modelos de formação de dados históricos para ajudar a estimar pontos de virada de tendência de alta probabilidade e melhorar a precisão de entrada.
Otimizar os modelos de dimensionamento das posições para ajustar dinamicamente as alocações com base nas condições de risco.
No geral, a estratégia de canal de preços da Noro
/*backtest start: 2023-09-23 00:00:00 end: 2023-10-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Price Channel Strategy v1.1", shorttitle = "Price Channel str 1.1", 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") usecol = input(true, defval = true, title = "Use color strategy") usersi = input(true, defval = true, title = "Use RSI strategy") lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage") pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel") showcl = input(true, defval = true, title = "Show center-line") 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") src = close //Price channel lasthigh = highest(src, pch) lastlow = lowest(src, pch) center = (lasthigh + lastlow) / 2 trend = low > center ? 1 : high < center ? -1 : trend[1] col = showcl ? blue : na plot(center, color = col, linewidth = 2) //Bars bar = close > open ? 1 : close < open ? -1 : 0 rbars = sma(bar, 2) == -1 gbars = sma(bar, 2) == 1 //Fast RSI fastup = rma(max(change(src), 0), 2) fastdown = rma(-min(change(src), 0), 2) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Signals body = abs(close - open) abody = sma(body, 10) up1 = rbars and close > center and usecol dn1 = gbars and close < center and usecol up2 = fastrsi < 25 and close > center and usersi dn2 = fastrsi > 75 and close < center and usersi exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2) lot = strategy.equity / close * lev //Trading if up1 or up2 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()