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