A estratégia de negociação de cruz de ouro é uma estratégia de rastreamento de tendências de médio a longo prazo. Identifica a direção de tendência dos preços das ações calculadamente o indicador SR e o indicador de sinal SR, e implementa operações de rastreamento de tendência desenhando um canal de tendência usando algoritmos de rede neural. Quando o indicador SR cruza o sinal SR, um sinal de compra é gerado. Quando o indicador SR cruza abaixo do sinal SR, um sinal de venda é gerado. Esta estratégia também usa uma técnica de filtro de regressão linear adaptativa para otimizar a curva do canal, que suprime efetivamente os falsos sinais.
O indicador SR é uma síntese secundária da média móvel WMA e da média móvel SMA com um período de 8. O indicador SR é o indicador SR calculado com um período de 20.
Esta estratégia usa um algoritmo de rede neural para traçar automaticamente os limites superior e inferior do preço das ações para formar um canal adaptativo. O limite superior leva o valor máximo histórico do indicador SR como entrada, o limite inferior leva o valor mínimo histórico como entrada e as curvas de regressão são calculadas como os limites superior e inferior do canal, respectivamente. A curva do canal é mais suave após a filtragem de regressão linear adaptativa.
Quando o indicador SR cruza o sinal SR, um sinal de compra é gerado. Quando o indicador SR cruza abaixo do sinal SR, um sinal de venda é gerado. Após os sinais longos e curtos serem emitidos, a relação entre o preço da ação e os limites superior e inferior do canal determina as posições de stop loss e take profit.
Os principais riscos desta estratégia de acompanhamento de tendências são:
Para controlar os riscos, recomenda-se a combinação com outras estratégias em vez de confiar numa única estratégia; ao mesmo tempo, otimizar as definições dos parâmetros para se adaptarem aos diferentes ambientes de mercado.
Esta estratégia pode ser otimizada nos seguintes aspectos:
Otimizar os parâmetros do indicador SR e do indicador de sinal para melhorar a estabilidade dos sinais cruzados;
Otimizar o período de ciclo do canal adaptativo para suavizar a curva do canal;
Adicionar outros indicadores do filtro para evitar erros de funcionamento, tais como indicadores de energia, indicadores de volatilidade, etc.;
Incorporar algoritmos de aprendizagem profunda para otimizar as curvas do canal em tempo real e melhorar a adaptabilidade.
A estratégia de negociação de cruz de ouro é uma estratégia quantitativa eficaz para rastrear tendências de médio a longo prazo. Ela tem uma alta probabilidade de determinar corretamente a direção da tendência e baixos riscos operacionais.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // strategy(title = " Strategy PyramiCover", shorttitle = "S-PC", overlay = true, precision = 8, calc_on_order_fills = true, calc_on_every_tick = true, backtest_fill_limits_assumption = 0, default_qty_type = strategy.fixed, default_qty_value = 2, initial_capital = 10000, pyramiding=50, currency = currency.USD, linktoseries = true) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool) FromMonth = input(defval = 1, title = "Month", minval = 1) FromDay = input(defval = 1, title = "Day", minval = 1) FromYear = input(defval = 2014, title = "Year", minval = 2014) backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool) ToMonth = input(defval = 31, title = "Month", minval = 1) ToDay = input(defval = 12, title = "Day", minval = 1) ToYear = input(defval = 9999, title = "Year", minval = 2014) backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59)) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // per = input(14,title="🔹 Length") // up = 0.0 nup= 0.0 lowl = 0.0 nin = 0.0 // srl=wma(close,8) srr = sma(close,8) sr = 2*srl - srr // srsl=wma(close,20) srsr= sma(close,20) srsignal = 2*srsl - srsr // if sr>srsignal up := highest(sr,round(150)) nup :=highest(srsignal,round(20)) else up := highest(srsignal,round(150)) nup := highest(sr,round(20)) // if sr<srsignal lowl := lowest(sr,round(150)) nin := lowest(srsignal,round(20)) else lowl := lowest(sr,round(150)) nin := lowest(srsignal,round(20)) //reg alexgrover f_reg(src,length)=> x = bar_index y = src x_ = sma(x, length) y_ = sma(y, length) mx = stdev(x, length) my = stdev(y, length) c = correlation(x, y, length) slope = c * (my / mx) inter = y_ - slope * x_ reg = x * slope + inter reg // up_=f_reg(up,per) lowl_=f_reg(lowl,per) nup_=f_reg(nup,per) nin_=f_reg(nin,per) // plot(sr, title='SR', color=color.green, linewidth=2, style=plot.style_line,transp=0) plot(srsignal, title='SR-Signal', color=color.red, linewidth=2, style=plot.style_line,transp=0) plot(up_, title='Upper limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0) plot(lowl_, title='Lower limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0) a=plot(nup_, title='Neuronal Upper', color=color.gray, linewidth=1, style=plot.style_line,transp=0) b=plot(nin_, title='Neuronal Lower', color=color.gray, linewidth=1, style=plot.style_line,transp=0) fill(a, b, color=color.gray) plotshape(crossunder(sr,nup_)? sr+atr(20):na, title="Sell", text="🐻", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.black,transp=0) plotshape(crossover(sr,nin_)? sr-atr(20):na, title="Buy", text="🐂", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.black,transp=0) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // if backTestPeriod() strategy.entry("Buy", true, 1, when = crossover(sr,nin_)) strategy.entry("Short", false, 1, when = crossunder(sr,nup_))