移動平均クロスオーバーに基づくトレンドフォロー戦略


作成日: 2024-01-31 15:17:31 最終変更日: 2024-01-31 15:17:31
コピー: 1 クリック数: 597
1
フォロー
1617
フォロワー

移動平均クロスオーバーに基づくトレンドフォロー戦略

概要

この戦略は,異なる種類の平均線 ((単純な移動平均SMA,指数移動平均EMA,Hull移動平均HMA,および重力移動平均VWMA) を計算し,その交差点を探すことで,市場動向を判断し,トレンドフォローを行う.より短い平均線がより長い平均線を下から通過すると買入シグナルを生成し,より短い平均線がより長い平均線を上から下から通過すると売り出しシグナルを生成する.

戦略原則

この戦略は,主に2つの異なる均線間の関係を比較することによって,市場動向を判断する.具体的には,入力パラメータを使用して2つの均線のタイプと長さを設定する.そのうちの最初の均線の長さは,長期のトレンドを表す.第二の均線の長さは,現在の短期のトレンドを表す.

短期平均線が長期平均線を下から通過すると,短期傾向が強くなって,価格が上昇傾向に入ると,この交差点で買い信号を発する.逆に,短期平均線が長期平均線を上から通過すると,短期傾向が弱くなって,価格が低下傾向に入ると,この交差点で売り信号を発する.

市場動向に合わせて取引を行うため,このような均線交差判断を行う.

戦略的優位性

  • 平均線交差を判断する主な傾向は,古典的で実用的技術指標である
  • 多種多様な均線組合せをサポートし,柔軟性が高い
  • 戦略の論理はシンプルで明快で,容易に理解できる実装で,量的な取引の自動化に適しています.
  • 異なる市場環境に適応する柔軟な設定可能なパラメータ

リスク分析

  • 平均線は遅滞性があり,交差信号を発信する時には,価格動きが既に発生しているか,または逆転点に近づいている可能性があり,一定の遅滞誤報のリスクがあります.
  • トレンド判断は誤りであり,不必要な損失を招く可能性があります.
  • 平均線参数には合理的な配置が必要で,異なる参数により結果が大きく異なる可能性があります.

リスク対策:

  • 平均周期を適切に短縮し,市場の変化に対する感受性を高めること
  • 他の指標と組み合わせて検証して 誤判を避ける
  • パラメータ最適化方法: 巡回,機械学習,遺伝的アルゴリズムなど
  • ポジションの規模とストップポイントを適切に制御する

戦略最適化の方向性

  • 他の指標のフィルターを追加し,複数の指標の判断を組み合わせて,意思決定の正確性を向上させる
  • 市場状況に応じて平均線パラメータを自動的に調整する
  • 機械学習アルゴリズムと組み合わせた自動優位性パラメータ
  • ストップ・ロスの最適化

要約する

この戦略は,均線交差判断の主なトレンドの古典的な考えに基づいています.異なる均線の組み合わせによって柔軟に適用されます. 戦略の論理はシンプルで,容易に実装され,自動取引に適しています. 全体的に,この戦略は,ある程度の実用性がありますが,いくつかの改善の最適化スペースもあります.パラメータの最適化,他のフィルター判断の追加などの方法によって,戦略のパフォーマンスを継続的に向上させることができます.

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

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)


//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition)
    strategy.entry("Short", strategy.short)