SMAクロスオーバー戦略


作成日: 2024-03-28 17:50:00 最終変更日: 2024-03-28 17:50:00
コピー: 1 クリック数: 587
1
フォロー
1617
フォロワー

SMAクロスオーバー戦略

概要

この戦略は,簡単な SMA 平均線交差戦略である.これは,2つの異なる周期の SMA を使って,下から上へと速い線が遅い線を横切るときにポジションを上げ,上から下へと速い線が遅い線を横切るときに平仓する.この戦略は,2つの平均線の長さをカスタマイズすることができ,また,反測の開始と終了日を設定することができる.

この戦略の主な構想は,均線のトレンド特性と均線交差の信号特性を利用して取引を行うことである. 快線がスローラインの上にあるときは,現在の上昇傾向にあることを示す,多頭ポジションを保持すべきである. 快線がスローラインの下にある時は,現在の下降傾向にあることを示す,空売りを望すべきである.

戦略原則

  1. 2つの異なる周期のSMAを計算し,周期の長さをカスタマイズできます.
  2. 現在,測定時間ウィンドウ内にあるかどうかを判断し,もしない場合は,操作を行わない.
  3. 速線が下から上へと遅線を横切るなら,さらに多く開けます.
  4. 速線が上から下へと遅線を横切ると,すべての多頭ポジションを平らにする.
  5. 倉庫は空いて見守られ,操作は行われません.

優位分析

  1. シンプルで分かりやすく,論理が明確で,初心者向けに学習・使用が可能です.
  2. 平均線は広く使用される技術指標で,トレンド特性がより顕著で,現在の市場動向をよりよく反映します.
  3. 平均線交差は,トレンドを追跡する古典的な信号で,トレンドの変化を素早く捉えることができます.
  4. 平均線周期と回測時間ウィンドウをカスタマイズでき,柔軟性が高い。
  5. トレンド性のある品種と時間周期に適用する.

リスク分析

  1. 平均線には一定の遅延性があり,市場の変動が大きい場合,トレンドが繰り返されると,交差信号が頻繁に発生し,取引回数が過剰になり,手数料コストが増加する可能性があります.
  2. この戦略は,一方的な上下を捉えるだけで,震動や一方的な下下を捉えることはできません.
  3. 平均線パラメータの選択は,異なる品種と時間周期に応じて最適化する必要があり,異なるパラメータは,大きな差異を呈する可能性があります.
  4. この戦略は,いかなる止損策も持っていないため,市場が激しく波動する時には,より大きな引き戻しリスクに直面する可能性があります.

最適化の方向

  1. ATR ベースの移動式ストップのような適切なストップ対策を導入することを検討し,単一取引の最大損失を制御する.
  2. 取引量,波動率などのフィルタリング条件を考慮して,偽信号をフィルタリングすることができます.
  3. 遺伝的アルゴリズムなどのインテリジェントアルゴリズムを使用して最適のパラメータの組み合わせを探すことなど,パラメータを最適化することを考えることができます.
  4. 戦略の信頼性と有効性を高めるために,他の技術指標や取引シグナル,例えばMACD,RSIなどの均線交差と組み合わせることを検討することができます.

要約する

SMA均線交差策略は,初心者の学習と使用に適したシンプルで分かりやすい,クラシックなトレンド追跡策略である.均線のトレンド特性と均線交差の信号特性を利用し,市場のトレンドの変化を迅速に捉えることができる.しかし,この戦略には,遅滞性,頻繁な取引,ストップの欠如など,いくつかの制限とリスクがあります.したがって,実際のアプリケーションでは,特定の状況に応じて,戦略の安定性と収益性を高めるために,適切な最適化と改善が必要である.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © j0secyn

//@version=5
strategy("MA Cross", overlay=true, margin_long=100, margin_short=100, default_qty_value=100, default_qty_type=strategy.percent_of_equity, initial_capital=10000)

// === INPUT BACKTEST RANGE ===
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2018,title = "From Year", minval = 1970)
thruDay   = input.int(defval = 30, title = "Thru Day", minval = 1, maxval = 31)
thruMonth = input.int(defval = 9, title = "Thru Month", minval = 1, maxval = 12)
thruYear  = input.int(defval = 2024, title = "Thru Year", minval = 1970)

slow_ma_length = input.int(defval = 100, title = "Slow MA lenght")
fast_ma_length = input.int(defval = 30, title = "Fast MA lenght")

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)            // backtest start  window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)            // backtest finish window
window()  => true

// === LOGIC ===
crossOv = ta.crossover(ta.sma(close, fast_ma_length), ta.sma(close, slow_ma_length))
crossUn = ta.crossunder(ta.sma(close, fast_ma_length), ta.sma(close, slow_ma_length))

// === EXECUTION ===
// strategy.entry("L", strategy.long, when = window() and crossOv)        // enter long when "within window of time" AND crossover
// strategy.close("L", when = window() and crossUn)                       // exits long when "within window of time" AND crossunder         
strategy.entry("L", strategy.long, when = window() and crossOv)        // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and crossUn)                       // exits long when "within window of time" AND crossunder