この戦略は,SMA
この戦略の主な論理は,21日間のシンプル・ムービング・メアディア (SMA) で価格クロスオーバーを追跡することです.一方,一般的な傾向を決定するために50日間のSMAと200日間のSMAも計算します.
具体的には,この戦略は,与えられた日付範囲内で価格を閉じることを要求し,入力期間に基づいて異なるSMAを計算します.価格が21日間のSMAを上向きに突破した場合,購入信号を設定します.価格が21日間のSMAを下向きに突破した場合,販売信号を設定します.
SMAを計算し,クロスオーバーを決定するだけでなく,戦略は現在のポジションも追跡する. 購入信号トリガー時にポジションを入力し,セール信号トリガー時にポジションをフラット化する. このように,SMAクロスオーバーに基づく自動取引システムを実現する.
この戦略の最大の利点は,シンプルで理解し,実装しやすいことです.SMAは一般的に使用される技術指標であり,SMAクロスオーバーは最も一般的な取引シグナルの一つです.この種の指標クロスオーバー戦略は,自動取引のための異なる株式と時間帯に簡単に適用できます.
また,この戦略はSMAパラメータを調整することで最適化できるという利点もあります.例えば,SMA期間を組み合わせてテストして,特定の株に最適なものを見つけることができます.また,確認と最適化のための他の指標を追加することで戦略を改善することができます.
この戦略の最大のリスクは,指標ベースの戦略が過剰な誤った信号を生む傾向にあることである.例えば,価格は,範囲限定期間に頻繁にSMAをクロスオーバーし,不必要な取引を引き起こす可能性がある.
一般的な解決策は,ストップ・ロスを設定,パラメータをチューニング,またはフィルター条件を追加するなどである.例えば,リスクを制限するために最大損失比を設定したり,より安定したパラメータを見つけるためにSMA期間を調整したり,他の指標を使用していくつかの取引信号をフィルターすることができます.
戦略は以下の側面で最適化できます.
最適のSMAパラメータの組み合わせをテストして選択します.最良の期間を見つけるために異なるSMA長さをバックテストします.
RSI,MACD などなどのフィルターシグナル確認のための他の指標を追加します.これは偽のシグナルをフィルターするのに役立ちます.
ストップ・ロスのロジックを組み込む.リスクをよりよく制御するために最大許容可能な損失またはトラッキング・ストップを設定する.
入場タイミングを最適化する.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")