
二重移動平均取引戦略 (Dual Moving Average Trading Strategy) は,2つの異なる周期の移動平均を利用して取引信号を構築する量的な取引戦略である.この戦略は,2つの移動平均の間の関係を計算して市場の傾向と機会を判断し,トレンド性のある状況で優れた追跡効果を持つ.
この戦略は,主に2つの移動平均を用いて技術指標分析を行う.戦略では,より短い周期の5日移動平均ma0とより長い周期の21日移動平均ma1を定義している.戦略は,価格とma0の差 osc0とma0とma1の差 osc1の正負を比較することによって,現在のトレンド状態を判断する.
osc0>0とosc1>0であるとき,短期平均線が長期平均線を上穿過していることを示し,多頭行情に属す.osc0とosc1であるとき,短期平均線が長期平均線を下穿過していることを示し,空頭行情に属す.戦略は,多頭行情を判断する際に,買入してポジションを開設する操作をとる.空頭行情を判断する際に,売り出ししてポジション開設する操作をとる.
ポジション開設後,戦略はosc0とosc1のリアルタイム変化をモニタリングすることによって,ポジションの収益スペースを判断する.多頭ポジションのosc0<0とosc1<0の後に,トレンドの反転を示し,多頭ポジションを平らにする.空頭ポジションのosc0>0とosc1>0の後に,トレンドの反転を示し,空頭ポジションを平らにする.
双動平均の取引戦略は以下の利点があります.
操作原理はシンプルで,理解しやすい実装で,量化取引の初心者にも適しています.
取引は順調で,トレンドの動きを追跡し,収益が優れています.
移動平均の周期パラメータを調整することで,異なる市場の特徴に適応できます.
他の指標や戦略の組み合わせで利用でき,利益の余地を増やすことができます.
移動平均の二重取引戦略にはいくつかのリスクがあります.
市場が逆転する時には,その損失を一時的に止めることができず,大きな損失を招く可能性があります.
震災の場合は,輪廻で損耗が起き,実現が困難になる.
パラメータを最適化するのが難しいので,5日と21日は最適でない.
取引シグナルが遅れて,入場が遅れた場合,利得率に影響を与える可能性があります.
双移動平均の取引戦略は,以下の点で最適化できます.
VOL指数と組み合わせて,本当のトレンドの始まりを特定し,偽の突破を回避する.
取引信号の信頼性を確保するために,価格の突破や取引量の増加などの追加判断条件を追加する.
ポジションを動的に停止し,損失を早期に制御する.
移動平均の差値のパラメータ値を最適化して,誤差率を下げる.
移動平均の周期パラメータを自動最適化するために,機械学習の方法を使用する.
双移動平均線取引戦略は,全体的に比較して古典的で実用的なトレンド追跡戦略である.この戦略は操作が簡単で,量化取引の初心者練習に適している.順番に,追跡効果は良好である.拡張性が強く,他の技術指標や戦略の組み合わせと簡単に組み合わせられる.しかし,この戦略にはいくつかの欠陥があり,異常な行動を処理し,リスクを軽減し,安定性を高めるためにさらなる最適化が必要である.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("[STRATEGY][RS]MA Strategy test V0", overlay=true)
length0 = input(5)
length1 = input(21)
isinsession = not na(time('1', '0400-1500'))
price = open
ma0 = ema(ema(price, length0), length0)
ma1 = ema(ema(price, length1), length1)
plot(ma0, color=navy)
plot(ma1, color=black)
osc0 = price-ma0
osc1 = ma0-ma1
isbull = osc0 > 0 and osc1 > 0
buy_condition = isinsession and isbull and not isbull[1]
buy_exit_condition = osc0 < 0 and osc1 < 0
strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
strategy.close(id='buy', when=buy_exit_condition)
isbear = osc0 < 0 and osc1 < 0
sell_condition = isinsession and isbear and not isbear[1]
sell_exit_condition = osc0 > 0 and osc1 > 0
strategy.entry("sell", strategy.short, comment="sell", when=sell_condition)
strategy.close(id='sell', when=sell_exit_condition)
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)