골든 크로스 트레이딩 전략


생성 날짜: 2023-11-23 14:07:11 마지막으로 수정됨: 2023-11-23 14:07:11
복사: 0 클릭수: 614
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

골든 크로스 트레이딩 전략

개요

골드 크로스 거래 전략은 중장선 트렌드 추적 전략이다. 그것은 주식 가격의 SR 지표와 SR 신호 지표를 계산하여 주식 가격의 트렌드 방향을 식별하고, 신경망과 결합하여 트렌드 채널을 그리는 트렌드 추적 동작을 구현한다. SR 지표가 SR 신호를 통과할 때 구매 신호를 생성하고, SR 지표가 SR 신호를 통과할 때 판매 신호를 생성한다. 이 전략은 또한 자기 적응형 선형 회귀 필러브 기술을 사용하여 채널 곡선을 최적화하여 잘못된 신호를 효과적으로 억제한다.

전략 원칙

이 전략의 핵심 지표는 SR 지표와 SR 신호 지표이다. SR 지표는 8주기 파라미터로 계산된 WMA 평균선과 SMA 평균선의 2차 합성이다. SR 신호 지표는 20주기 파라미터로 계산된 SR 지표이다.

이 전략은 신경망 알고리즘을 사용하여 주식 가격의 상하계를 자동으로 도출하여 자기 적응 통로를 형성한다. 상하계는 SR 지표의 역사 극치를 입력하고, 하하계는 역사 극치를 입력하고, 회귀 곡선을 각각 통로의 상하계로 계산한다. 통로 곡선은 자기 적응적 선형 회귀 파를 통과한 후 더욱 부드럽게 된다.

SR 지표 상에서 SR 신호를 통과하면 구매 신호가 발생하고, SR 지표 아래에서 SR 신호를 통과하면 판매 신호가 발생한다. 더 많은 공백 신호가 발신된 후, 채널 상하계와 주가 가격의 관계는 중지 손실 중지 위치를 결정한다.

우위 분석

  • 이중선 합성 기술을 사용하여 가격 변동의 영향을 제거하고, 동향 방향을 정확하게 판단합니다.
  • “자동 적응 통로 알고리즘으로 진출과 출전 시기를 최적화하고, 가짜 돌파구를 피하십시오”.
  • 통로 곡선은 자기 적응형 선형 회귀 필러링 기술을 적용하여 곡선이 극한 값에 영향을 받지 않도록합니다.
  • Stop Loss Stop Stop 위치: 통로 동적으로 변경됨에 따라 자동으로 트렌드를 추적하여 수익을 얻습니다.

위험 분석

이 전략은 주로 트렌드 추적에 기반을 두고 있으며, 다음과 같은 주요 위험들이 있습니다.

  • 지진 추세에서 많은 잘못된 신호와 너무 많은 비효율적인 조작이 발생했습니다.
  • 급격한 사건으로 인해 Fast는 하향으로 갈라진 통로의 하위 경계를 뚫고 큰 손실을 입었습니다.
  • 잘못된 변수 설정으로 인해 정책이 실패할 수 있습니다.

위험을 제어하기 위해, 다른 전략을 조합하여 단일 전략 동작을 피하는 것이 좋습니다. 동시에 다양한 시장 환경에 적응하기 위해 매개 변수 설정을 최적화하십시오.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. SR 지표와 신호 지표의 매개 변수를 최적화하여 교차 신호의 안정성을 향상시킵니다.

  2. 통로의 길이를 최적화하고 통로의 곡선을 평형화합니다.

  3. 다른 필터 지표를 추가하여 오작동을 방지합니다. 예를 들어 양력 지표, 변동률 지표 등;

  4. 딥러닝 알고리즘과 결합하여 실시간으로 통로 곡선을 최적화하여 적응력을 향상시킵니다.

요약하다

골드 크로스 트레이딩 전략은 중장선 트렌드를 효과적으로 추적하는 정량화 전략이다. 트렌드 방향을 올바르게 판단할 확률이 높고, 운용 위험은 낮다. 알고리즘 모델 최적화 공간이 넓어짐에 따라 이 전략은 주식 트렌드 변화를 추적하는 강력한 도구가 될 전망이다.

전략 소스 코드
/*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_))