Estratégia de Posição de Momento da NoroBand

Autora:ChaoZhang, Data: 2024-01-18 10:58:48
Tags:

img

Resumo

Esta estratégia combina a teoria das bandas de Noros com técnicas quantitativas para formar uma estratégia de ruptura de momento.

Estratégia lógica

  1. Calcule as faixas superior e inferior usando a faixa verdadeira média.
  2. Use o indicador RSI para determinar zonas de sobrecompra e sobrevenda.
  3. A quebra dos preços máximos e mínimos mostra a direção do ímpeto dos preços.
  4. As barras coloridas indicam mercados de alta ou baixa. Verde significa mercado de alta para longo enquanto vermelho significa mercado de baixa para curto.
  5. Combinar a média móvel para identificar a divergência dos sinais comerciais.

Vantagens

  1. A combinação de múltiplos indicadores melhora a precisão.
  2. A combinação da teoria das bandas e das técnicas quantitativas torna a estratégia mais eficaz.
  3. A combinação de breakout e reversão média aumenta a margem de lucro.
  4. Alta extensibilidade para ajustar os parâmetros de acordo com os mercados.

Riscos

  1. Os parâmetros precisam de otimização e testes constantes.
  2. Não responde a tempo aos interruptores longos e curtos, causando perdas.
  3. Frequência de negociação elevada, facilmente afectada por taxas e deslizamentos.
  4. Os parâmetros devem ser ajustados em tempo útil para se adequarem aos diferentes ciclos.

Optimização

  1. Validação de vários prazos para encontrar a melhor combinação de parâmetros.
  2. Adicionar stop loss para reduzir a perda única.
  3. Uma maior gestão de posições para melhorar a eficiência dos lucros.
  4. Combine aprendizagem profunda para otimização automática de parâmetros.

Resumo

Esta estratégia combina indicadores quantitativos típicos para alcançar lucro efetivo através de indicadores de impulso e reversão média. Também usa a teoria do intervalo verdadeiro médio para localizar pontos de entrada razoáveis. Um bom exemplo de combinação de teoria e técnicas. Com otimização de parâmetros e melhoria do controle de risco, tornar-se-á uma estratégia quantitativa eficiente e estável.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.5", shorttitle = "NoroBands str 1.5", overlay=true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, defval = true, title = "Use ColorBar")
usecb = input(true, defval = true, title = "Use CryptoBottom")
usersi = input(true, defval = true, title = "Use RSI")
usemm = input(true, defval = true, title = "Use min/max")
usepyr = input(true, defval = true, title = "Use pyramiding")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
needlo = input(false, defval = false, title = "Show Locomotive")
needpy = input(false, defval = false, title = "Show Avg.price line")
src = close

//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))

//CryptoBottom
mac = sma(close, 10)
lencb = abs(close - mac)
sma = sma(lencb, 100)
max = max(open, close)
min = min(open, close)

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) and (min < min[1] or usemm == false) and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) and (max > max[1] or usemm == false) and (close > strategy.position_avg_price or usepyr == false or strategy.position_size >= 0) ? 1 : 0 
up2 = close < open and lencb > sma * 3 and min < min[1] and fastrsi < 10 and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0 //CryptoBottom
//dn2 = close > open and len > sma * 3 and max > max[1] and fastrsi > 90 ? 1 : 0 //CryptoBottom
up3 = fastrsi < 5 and usersi == true and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
//dn3 = fastrsi > 95 and usersi = true ? 1 : 0

//Avg Price
colpy = needpy == false ? na : black
plot(strategy.position_avg_price, color = colpy)

up4 = close < strategy.position_avg_price and usepyr == true and strategy.position_size >= 0 ? 1 : 0 
dn4 = close > strategy.position_avg_price and usepyr == true and strategy.position_size <= 0 ? 1 : 0 

//Locomotive
uploco = trend == 1 and close < open and min < min[1] and close < center ? 1 : 0
plotarrow(needlo == true and uploco == 1 ? 1 : 0, colorup = black, colordown = black, transp = 0)

longCondition = up == 1 or (up2 == 1 and usecb == true) or (up3 == 1 and usersi == true) or up4 == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1 or dn4 == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Mais.