골든 크로스 트레이딩 전략 (golden cross trading strategy) 은 중장기 트렌드 추적 전략이다. SR 지표와 SR 신호 지표를 계산하여 주식 가격의 트렌드 방향을 파악하고, 신경 네트워크 알고리즘을 사용하여 트렌드 채널을 그리면서 트렌드 추적 작업을 구현한다. SR 지표가 SR 신호를 넘을 때 구매 신호가 생성된다. SR 지표가 SR 신호 아래를 넘을 때 판매 신호가 생성된다. 이 전략은 또한 적응형 선형 회귀 필터 기술을 사용하여 채널 곡선을 최적화하여 잘못된 신호를 효과적으로 억제한다.
이 전략의 핵심 지표는 SR 지표와 SR 신호 지표이다. SR 지표는 WMA 이동 평균과 SMA 이동 평균의 2차 합성이며 기간은 8이다. SR 신호 지표는 20의 기간으로 계산된 SR 지표이다. SR 지표와 SR 신호의 황금 십자가와 사망은 트렌드 방향을 결정하는 데 사용됩니다.
이 전략은 신경 네트워크 알고리즘을 사용하여 자동으로 적응 채널을 형성하기 위해 주식 가격의 상위 및 하위 한계를 그래프화합니다. 상위 한도는 SR 지표의 역사적 최대 값을 입력으로, 하위 한도는 역사적 최소 값을 입력으로, 회귀 곡선은 각각 채널의 상위 및 하위 한도로 계산됩니다. 적응 선형 회귀 필터링 후에 채널 곡선은 부드럽습니다.
SR 지표가 SR 신호를 넘을 때 구매 신호가 생성됩니다. SR 지표가 SR 신호 아래를 넘을 때 판매 신호가 생성됩니다. 긴 신호와 짧은 신호가 발급된 후 주식 가격과 채널의 상하계와 상하계 사이의 관계는 스톱 로스 및 수익 포지션을 결정합니다.
이 트렌드 추적 전략의 주요 위험은 다음과 같습니다.
위험을 제어하기 위해 단일 전략에 의존하는 대신 다른 전략과 결합하는 것이 좋습니다. 동시에 다양한 시장 환경에 적응하기 위해 매개 변수 설정을 최적화하십시오.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
크로스오버 신호의 안정성을 높이기 위해 SR 표시기와 신호 표시기의 매개 변수를 최적화한다.
채널 곡선을 매끄럽게 하기 위해 적응 채널의 사이클 기간을 최적화 합니다.
다른 필터 표시기를 추가하여 에너지 표시기, 변동성 표시기 등 오류를 방지합니다.
딥러닝 알고리즘을 통합하여 실시간으로 채널 곡선을 최적화하고 적응력을 향상시킵니다.
골든 크로스 트레이딩 전략은 중장기 트렌드를 추적하는 효과적인 수치 전략이다. 트렌드 방향과 낮은 운영 위험을 올바르게 결정할 확률이 높다. 알고리즘 모델을 최적화하는 데 큰 여지가 있어 이 전략은 주식 트렌드의 변화를 추적하는 강력한 도구가 될 가능성이 있다.
/*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_))