
この戦略は,価格と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周期を調整して,より安定したパラメータの組み合わせを選択することもできる.または,他の指標の確認を追加して,部分信号をフィルタリングすることもできる.
この戦略は以下の方向で最適化できます.
最適なSMAパラメータの組み合わせをテストして選択します.異なるSMA長さを回測して,最も適切な周期を探します.
RSI,MACDなどの他の指標のFilterSignal confirmationを追加します. これは誤った信号をフィルターすることができます.
ストップロジックを追加する. 最大許容損失を設定するか,ストップロジックを移動させると,リスクをコントロールできます.
入場タイミングを最適化する.SMA交差を厳格に追跡するよりも,重要な突破点の近くに入場することを考慮することができる.
複合戦略のテスト 傾向追跡などの他のタイプの戦略と組み合わせて検討できます
この戦略は,単純な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")