ゴールデンクロスに基づくトレンド・トレーディング戦略

作者: リン・ハーンチャオチャン開催日:2023年11月23日 (火) 14:07:11
タグ:

img

概要

ゴールデンクロス・トレーディング戦略は,中長期のトレンド・トラッキング戦略である. SR指標とSR信号指標を計算することによって株価のトレンド方向を特定し,神経ネットワークアルゴリズムを使用してトレンドチャネルを描き,トレンド・トラッキング操作を実装する. SR指標がSR信号を横切ると購入信号が生成される. SR指標がSR信号を下回ると販売信号が生成される.この戦略は,チャネル曲線を最適化するために適応線性回帰フィルター技術も使用し,誤った信号を効果的に抑制する.

原則

この戦略のコア指標は,SR指標とSR信号指標である.SR指標は,WMA移動平均とSMA移動平均の二次合成であり,期間が8である.SR信号指標は,20の期間で計算されたSR指標である.SR指標とSR信号の黄金十字と死亡は,トレンド方向を決定するために使用される.

この戦略は,ニューラルネットワークアルゴリズムを使用して,自律的なチャネルを形成するために,株価格の上下限を自動的にプロットする.上限はSR指標の歴史的最大値を入力として,下限は歴史的最小値を入力として,回帰曲線はそれぞれチャネルの上下限として計算される. 適応線形回帰フィルタリングの後,チャネル曲線はよりスムーズである.

SRインジケーターがSR信号を横切ると,購入信号が生成される.SRインジケーターがSR信号を下回ると,販売信号が生成される.ロングとショート信号が発行された後,株価とチャネルの上下限の関係がストップ・ロストと収益ポジションを決定する.

利点

  • 価格変動の影響を排除し,傾向の方向性を正確に決定するために二線性合成技術を使用する.
  • アダプティブチャネルアルゴリズムは入出タイミングを最適化し 偽のブレイクを回避します
  • チャネル曲線は,極端からの歪みを避けるため,適応型線形回帰フィルタリング技術を適用する.
  • ストップ・ロストと 収益のポジションは チャンネルに沿って動的に変化し 利益の傾向を自動的に追跡します

リスク分析

このトレンド追跡戦略の主なリスクは次のとおりです.

  • 振動傾向において多くの誤った信号と過度に無効な操作を生成する.
  • 突発的な出来事によって チャンネルの下限を下回る 急速な断裂は 大きな損失をもたらします
  • 間違ったパラメータ設定は 戦略の失敗を容易に引き起こす.

リスクを制御するために,単一の戦略に頼る代わりに他の戦略と組み合わせることを推奨し,同時に異なる市場環境に適応するためにパラメータ設定を最適化します.

オプティマイゼーションの方向性

この戦略は,次の側面で最適化できます.

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

もっと