この戦略は,移動平均線に基づいたモメント戦略である.異なる期間の単純な移動平均線を計算し,それらのクロスオーバー状況を比較することによって取引信号を生成する.特に,短期移動平均線が長期移動平均線を越えると,購入信号が生成され,短期移動平均線が長期移動平均線を下回ると,販売信号が生成される.
この戦略の基本論理は,株価トレンドの持続性であるモメンタム効果に基づいている. 移動平均線は,株価の変動傾向を効果的に反映することができる. 短期移動平均線が長期移動平均線を上回ると,株価が上昇傾向に入ることを意味する.逆に,短期移動平均線が長期移動平均線を下回ることを意味する. この戦略は,この原則に基づいて取引信号を生成する.
戦略では13日間のシンプル・ムービング・平均値と34日間のシンプル・ムービング・平均値が定義されている.これらの2つの移動平均値を日々の閉盤価格に基づいて計算した後,その大きさ関係が比較される.13日間の線が34日間の線を超えると,株価が上昇傾向に入り,ロングポジションが確立されるべきであることを示す買い信号が生成され,13日間の線が34日間の線を下に突入すると,株価が下落傾向に入り,ポジションが閉鎖されるべきであることを示す販売信号が生成される.
この戦略の最大の利点は,単純で理解し実行しやすいことである.移動平均線は最も基本的な,一般的に使用される技術指標の一つです.その原則は,理解し適用しやすく,簡単です.同時に,移動平均線クロスオーバー信号も長期的実践を通じて有効であることが証明されています.
さらに,この戦略のパラメータ設定は柔軟であり,異なる品種や市場状況に応じて調整することができます.例えば,移動平均線のサイクルパラメータは,戦略の敏感性を調整するために変更できます.これは戦略の最適化と調整の余地を提供します.
この戦略の最大のリスクは,より多くの誤った信号があり,レンジバインド市場に捕まる可能性があります.価格が急激に変動すると,移動平均線は頻繁にクロスオーバーを生成し,誤った信号を生む可能性があります.この時点で,移動平均線のサイクルパラメータを調整してノイズをフィルタリングする必要があります.
さらに,市場逆転が大きくなった場合,ストップロスのポイントが破られ,損失が大きくなります.これはストップロスの戦略を最適化し,ストップロスの範囲を適切に緩和する必要があります.
この戦略の次の側面は最適化できる:
移動平均線のサイクルのパラメータを最適化して,異なる品種と市場条件に最適なパラメータの組み合わせを見つけます.
MACD や KD などの他の技術指標のフィルタリングを追加し,レンジ・バインド市場での誤った信号を生成しないようにします.
ストップ・ロスの戦略を最適化し,動的に調整し,ストップ・ロスのポイントがあまりにも近いのを避ける一方で,ストップ・ロスの破裂の可能性が高いことを保証する.
固定投資やポジション比などのポジション管理メカニズムを強化し,単一の取引リスクを制御する.
この戦略は,非常に古典的な移動平均クロスオーバー戦略である. 短期間の移動平均と長期間の関係を計算し比較することによって,買い売り信号を生成する. この戦略の利点は,シンプルで柔軟なパラメータであり,初心者が学ぶのに適している. 欠点は,信号が十分に安定していない可能性があり,範囲に制限された市場で簡単に捕まる可能性があることである. 適切な最適化により,それは依然として非常に実践的な定量戦略になることができます.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // TODO: update strategy name strategy("{STRATEGY NAME}", overlay=true) // === TA LOGIC === // // // TODO: PUT YOUR TA LOGIC HERE LONG_SIGNAL_BOOLEAN = crossover(sma(close, 13), sma(close, 34)) SHORT_SIGNAL_BOOLEAN = crossunder(sma(close, 12), sma(close, 21)) // === INPUT BACKTEST DATE RANGE === enableShorts = input(false, title="Enable short entries?") FromMonth = input(defval = 5, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2017) ToMonth = input(defval = 9, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2018, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // === STRATEGY BUY / SELL ENTRIES === // TODO: update the placeholder LONG_SIGNAL_BOOLEAN and SHORT_SIGNAL_BOOLEAN to signal // long and short entries buy() => window() and LONG_SIGNAL_BOOLEAN sell() => window() and SHORT_SIGNAL_BOOLEAN if buy() strategy.entry("Long", strategy.long, comment="Long") if sell() if (enableShorts) strategy.entry("Short", strategy.short, comment="Short") else strategy.close("Long") // === BACKTESTING: EXIT strategy === sl_inp = input(10, title='Stop Loss %', type=float)/100 tp_inp = input(30, title='Take Profit %', type=float)/100 stop_level = strategy.position_avg_price * (1 - sl_inp) take_level = strategy.position_avg_price * (1 + tp_inp) strategy.exit("Stop Loss/Profit", "Long", stop=stop_level, limit=take_level)