이 전략은 이동 평균과 가격의 교차를 기반으로 구매 및 판매 신호를 생성합니다. 그것은 다양한 유형의 이동 평균과 거짓 브레이크오웃을 필터하기 위한 관용 매개 변수를 제공합니다. 전략은 트렌드를 따르는 가격 트렌드의 전환점을 캡처하는 것을 목표로합니다.
이 전략은 폐쇄 가격에 기초하여 길이 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)