移動平均に基づく定量取引戦略


作成日: 2024-01-16 17:37:13 最終変更日: 2024-01-16 17:37:13
コピー: 0 クリック数: 711
1
フォロー
1617
フォロワー

移動平均に基づく定量取引戦略

概要

この戦略は,異なる周期の移動平均を計算し,それらの金叉死叉が取引信号を形成することを判断することによって,典型的なトレンド追跡戦略に属します. 主に加重移動平均WMAと自主移動平均ALMAを使用しています.

戦略原則

この戦略は,まず価格の中短期移動平均 (ma1とma2) を計算し,ma1はより短い周期で,ma2はより長い周期である.それから,ma1とma2の差値 (ma3) を計算し,そして,ma3に対して平滑移動平均 (ma4) を計算する.ma3を上から穿越すると買い信号が生じ,下から穿越すると売り信号が生じます.

このように,ma3は価格の中期期間のトレンド方向を反映し,ma4はma3内の部分的なノイズをフィルターし,より信頼性の高い取引信号を形成する.ma1とma2の周期比はパラメータmaLenで設定され,ユーザーは異なる市場調整周期に応じて最適なパラメータの組み合わせを得ることができる.

戦略的優位性

この戦略の利点は以下の通りです.

  1. 適応移動平均ALMAと加重移動平均WMAを使用することで,市場の変化にうまく適応できます.

  2. 多周期価格平均の方法が適用され,取引シグナルがより信頼性が高くなる.

  3. パラメータは調整可能で,ユーザーは異なる市場向けに最適化することができます.適用範囲は広範囲です.

  4. 戦略は明快で理解しやすい.

  5. 市場が動いているときも,動いているときも,良い結果が得られます.

リスクと解決

この戦略にはいくつかのリスクがあります.

  1. 劇的に変化する市場状況では,移動平均戦略は取引信号の不明確さ,遅延などの問題を引き起こす可能性があります.移動平均周期とパラメータを調整することによって最適化することができます.

  2. 純粋なトレンド追跡戦略で,震動の整合段階で損失が生じやすい.他の指標をフィルター条件として組み合わせることができる.

  3. パラメータを正しく設定しない場合,超短期の過剰取引が起こりうる.適切なパラメータを慎重に選択してください.

戦略の最適化

この戦略は以下の点で最適化できます.

  1. 線形移動平均,重量移動平均など,より多くの種類の移動平均をテストします.

  2. 変動率,価格チャネルなどの指標に基づくストップ・ローズメカニズムの追加

  3. 複数のタイムサイクル分析と組み合わせて,ロールの最適化パラメータを採用する.

  4. 機械学習アルゴリズムを追加し,パラメータの自動最適化を実現する.

要約する

この戦略は,移動平均の金叉死叉をベースに取引シグナルを形成する. 適応的な移動平均と多時間周期価格平均を適用することで,シグナルがより正確で信頼性が高くなります. この戦略のパラメータは調整可能で,適用範囲は広い,考え方はシンプルで明快で,トレンド市場では効果が良く,実戦価値は高くなります.

ストラテジーソースコード
/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Oracle Move Strategy", overlay=true)

maLen = input(30, "ma period")
mode =  input(defval="wma", options=["alma", "ema", "wma"])
price = close

ma(src, len) =>
     mode=="alma"  ? alma(src, len, 0.85, 6) :
     mode=="ema"? ema(src, len) : 
     wma(src, len)
    

ma1 = ma(price, floor(maLen / 2))
ma2 = ma(price, maLen)
ma3 = 2.0 * ma1 - ma2
ma4 = ma(ma3, floor(sqrt(maLen)))

//plot(ma1, color = red)
//plot(ma2, color = green)
plot(ma3, color = blue)
plot(ma4, color = orange)


mafast = ma3
maslow = ma4

if (crossover(mafast, maslow))
    strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")

if (crossunder(mafast, maslow))
    strategy.entry("MA2CrossSE", strategy.short, comment="MA2CrossSE")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)