価格とSMAクロスオーバーに基づく定量取引戦略


作成日: 2024-02-22 17:34:09 最終変更日: 2024-02-22 17:34:09
コピー: 0 クリック数: 572
1
フォロー
1617
フォロワー

価格とSMAクロスオーバーに基づく定量取引戦略

概要

この戦略は,価格とSMAの交差をベースにした量的な取引戦略であるという.これは,主に異なる周期のSMAを計算し,価格とSMAの交差を追跡することで取引信号を生成する.価格が下から上へとSMAを突破すると,購入信号を生成し,価格が上から下へとSMAを突破すると,販売信号を生成する.

戦略原則

この戦略の核心的な論理は,価格が21日間のSMAと交差している状況を追跡することです.同時に,戦略は50日間のSMAと200日間のSMAを計算し,大まかなトレンドを判断するのに役立ちます.

具体的には,戦略は,指定された日付の範囲で株式の閉店価格を取得し,入力されたSMAサイクルに基づいて異なるSMAを計算します.価格が下から上方21日SMAを破れば,買取シグナルを設定します.価格が上から下まで21日SMAを破れば,売りシグナルを設定します.

SMAを計算し,交差を判断すると同時に,戦略は現在の保有状況を追跡する.買取シグナルが触発されたときに,戦略は保有に入ります.売出シグナルが触発されたときに,戦略は平仓します.この方法で,SMA交差システムに基づく自動取引を完了します.

優位分析

この戦略の最大の利点は,シンプルで使いやすく,理解しやすく,実行できることです. SMAは,よく使用される技術分析指標であり,SMA交差は,一般的な取引シグナルの一つです. この指標交差に基づく戦略は,異なる株式と時間帯に容易に適用され,自動取引に適しています.

戦略のもう一つの優点は,SMAパラメータを調整することで最適化できるということです.例えば,異なるSMA周期の組み合わせをテストして,特定の株式の変動法則に適した最適なパラメータを探します.さらに,戦略は,他の指標を追加することで検証および最適化することができます.

リスクと解決策

この策略の最大のリスクは,指標類策略が誤ったシグナルを多く生み出すことにある.例えば,振動期を整理する際に,価格はしばしばSMAを地上から横切り,不必要な取引シグナルを引き起こす可能性がある.

常見の解決方法には,止損設定,パラメータの調整,またはフィルタ条件の追加などがある.例えば,最大損失比率を設定してリスクを制限することができる.SMA周期を調整して,より安定したパラメータの組み合わせを選択することもできる.または,他の指標の確認を追加して,部分信号をフィルタリングすることもできる.

最適化の方向

この戦略は以下の方向で最適化できます.

  1. 最適なSMAパラメータの組み合わせをテストして選択します.異なるSMA長さを回測して,最も適切な周期を探します.

  2. RSI,MACDなどの他の指標のFilterSignal confirmationを追加します. これは誤った信号をフィルターすることができます.

  3. ストップロジックを追加する. 最大許容損失を設定するか,ストップロジックを移動させると,リスクをコントロールできます.

  4. 入場タイミングを最適化する.SMA交差を厳格に追跡するよりも,重要な突破点の近くに入場することを考慮することができる.

  5. 複合戦略のテスト 傾向追跡などの他のタイプの戦略と組み合わせて検討できます

要約する

この戦略は,単純なSMA指標の交差によって自動取引を実現する. 優点は,簡単でわかりやすいこと; 欠点は,信号が頻繁で,簡単に套用されること. 戦略の効果をパラメータの最適化,フィルターの追加,停止などの方法によって改善することができます. この戦略は,新しい要素を常に追加することによって,戦略を豊かにし,向上させるための基礎の枠組みを提供します.

ストラテジーソースコード
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Price Cross Above/Below SMA Strategy", shorttitle="Tressy Strat", overlay=true)

// Define start and end year inputs
start_year = input.int(2022, title="Start Year")
end_year = input.int(2022, title="End Year")

// Define start and end month inputs
start_month = input.int(1, title="Start Month", minval=1, maxval=12)
end_month = input.int(12, title="End Month", minval=1, maxval=12)

// Define SMA length inputs
sma_length = input.int(21, title="SMA Length")
sma_length_50 = input.int(50, title="50 SMA Length")
sma_length_200 = input.int(200, title="200 SMA Length")

// Filter data within the specified date range
filter_condition = true
filtered_close = request.security(syminfo.tickerid, "D", close[0], lookahead=barmerge.lookahead_on)

// Define SMAs using the input lengths
sma = ta.sma(filtered_close, sma_length)
sma_50 = ta.sma(filtered_close, sma_length_50)
sma_200 = ta.sma(filtered_close, sma_length_200)

// Initialize position
var bool in_position = false

// Condition for a price cross above SMA within the date range
cross_above = filter_condition and ta.crossover(filtered_close, sma)

// Condition for a price cross below SMA within the date range
cross_below = filter_condition and ta.crossunder(filtered_close, sma)

// Buy condition
if cross_above
    in_position := true

// Sell condition
if cross_below
    in_position := false

// Strategy entry and exit
if cross_above
    strategy.entry("Buy", strategy.long)
if cross_below
    strategy.close("Buy")

// Plot the SMAs on the chart
plot(sma, color=color.blue, title="21 SMA")
plot(sma_50, color=color.red, title="50 SMA")
plot(sma_200, color=color.orange, title="200 SMA")

// Plot the Buy and Sell signals with "tiny" size
plotshape(cross_above, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Buy Signal")
plotshape(cross_below, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Sell Signal")