戦略を踏まえて 価格の移動平均線を横切る

作者: リン・ハーンチャオチャン,日付: 2024-01-26 15:18:29
タグ:

img

概要

この戦略は,移動平均値との価格の交差に基づいて購入・売却シグナルを生成する.様々な種類の移動平均値と偽ブレイクをフィルタリングするための寛容パラメータを提供します.この戦略は,トレンドフォローのために価格動向のターニングポイントを捕捉することを目的としています.

戦略の論理

ストラテジーは,閉盤価格に基づいて長さNの移動平均を計算する.典型的な移動平均タイプには,シンプル・ムービング・平均 (SMA),指数的な移動平均 (EMA),重度の移動平均 (WMA) などが含まれます.その後,容量レベルを設定し,例えば5%を設定し,上帯 (1.05倍移動平均) と下帯 (0.95倍移動平均) を計算します.閉盤価格が上帯を超えると,購入信号が生成されます.閉盤価格が下帯を超えると,販売信号が生成されます.これはいくつかの偽のブレイクをフィルターするのに役立ちます.また,ブールパラメータ"Short Only"が提供されています.有効化すると,市場をショートするために販売信号のみ生成されます.

利点

  • 動向平均の傾向を追求する特徴を用いて,価格動向を効果的に追跡する.
  • 柔軟な組み合わせのための様々な移動平均型を提供します.
  • 許容度パラメータは,偽のブレイクをフィルタリングし,不必要な取引を避けるのに役立ちます.
  • 短回りしかできない ダウントレンドを捉えるのに適している

リスク

  • 移動平均値は遅延効果があり,価格のターニングポイントを見逃す可能性があります.
  • 範囲限定の市場環境には適さない
  • 誤った許容量パラメータ設定は,有効な信号をフィルタリングする可能性があります.
  • ショート取引はリスクが高く 慎重な取引が必要です

オプティマイゼーションの方向性

  • 移動平均の種類と長さのパラメータを最適化
  • 異なる許容量パラメータ設定をテストする
  • フィルター信号に他の指標を追加する
  • 位置のサイズを決める戦略を用いること

結論

一般的に,これは傾向を追求する戦略である.価格と移動平均の関係を使用して,一定の柔軟性をもって傾向を決定する.パラメータの最適化と適切な信号フィルタリングを通じて,それは立派な量戦略になることができる.しかし,ショート時下向きのリスクを制御することは過度の損失を避けるために重要です.


/*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)


もっと