移動平均の価格ブレイクアウトによるトレンドフォロー戦略


作成日: 2024-01-26 15:18:29 最終変更日: 2024-01-26 15:18:29
コピー: 0 クリック数: 554
1
フォロー
1617
フォロワー

移動平均の価格ブレイクアウトによるトレンドフォロー戦略

概要

この策略は,価格と移動平均の交差を基に買入と売却の信号を生成する.これは,複数の種類の移動平均と,偽の突破をフィルターするための公差パラメータを提供する.この策略は,価格のトレンドの転換点を捕捉し,トレンド追跡を実現する.

戦略原則

この戦略は,価格の閉塞価格に基づいて,長さがNの移動平均を計算する.典型的な移動平均のタイプには,単純移動平均 ((SMA),インデックス移動平均 ((EMA),重力移動平均 ((WMA) などがある.それから,5%のような差異レベルを設定し,上線 (移動平均の1.05倍) と下線 (移動平均の0.95倍) を計算する.価格の閉塞価格が上線を突破すると,買入シグナルが生成され,価格の閉塞価格が下線を突破すると,売り出シグナルが生成される.これにより,部分的な偽の突破を回避することができる.また,この戦略は,ブルルパラメータのショートライン操作を用意し,このパラメータを起動した後で,売り出シグナルを生成し,空を見ることができます.

戦略的優位性

  • 移動平均のトレンド追跡機能を利用して,価格の動きを効果的に追跡できます.
  • 複数の移動平均型が提供され,柔軟な組み合わせが可能です.
  • 差異パラメータは偽突破をフィルターし,不必要な取引を回避します.
  • ダウントレンドを追跡するために使用できます.

戦略リスク

  • 移動平均は遅滞しており,価格の転換点を逃している可能性があります.
  • 価格の変動による市場環境の整合には適用されない
  • 誤差パラメータの設定は,有効な信号の一部をフィルタリングする可能性があります.
  • リスクが高いので慎重に操作する

最適化の方向

  • 移動平均の型と長さのパラメータを最適化
  • 異なる公差パラメータ設定をテストする
  • 他の指標と組み合わせたフィルター信号
  • ポジション管理戦略の追加

要約する

この戦略は,全体として,より典型的なトレンド追跡戦略である.これは,価格と移動平均の関係を使用してトレンドを判断し,一定の柔軟性を提供している.パラメータ最適化と適切な信号フィルタリングにより,これは,良い効果の量化戦略になることができます.しかし,空白のリスクを制御し,過度の損失を避けるために注意が必要です.

ストラテジーソースコード
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
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/
// © RafaelPiccolo

//@version=4
strategy("Price X MA Cross", overlay=true)

typ = input("HMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len = input(100, minval=1, title="Length")
src = input(close, "Source", type=input.source)
tol = input(0, minval=0, title="Tolerance (%)", type=input.float)
shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getMAPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

ma = getMAPoint(typ, len, src)
upperTol = ma * (1 + tol/100)
lowerTol = ma * (1 - tol/100)

longCondition = crossover(close, upperTol)
shortCondition = crossunder(close, lowerTol)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(ma, "Moving Average", close > ma ? color.green : color.red, linewidth = 2)
t1 = plot(tol > 0 ? upperTol : na, transp = 70)
t2 = plot(tol > 0 ? lowerTol : na, transp = 70)
fill(t1, t2, color = tol > 0 ? color.blue : na)