
이동 평균 가로 전략은 매우 고전적이고 일반적으로 사용되는 기술 분석 전략이다. 이 전략의 핵심 아이디어는 서로 다른 기간의 이동 평균 사이의 가로를 구매 신호로 이용하는 것이다. 단기 이동 평균이 아래에서 장기 이동 평균을 가로질러 구매 신호를 생성하고, 단기 이동 평균이 위에서 아래에서 장기 이동 평균을 가로질러 판매 신호를 생성한다.
이 전략은 입력 설정을 통해 입력 이동 평균의 종류 (SMA, EMA, WMA, RMA) 와 주기의 길이를, 그리고 재측정되는 시간 범위를 설정한다.
변수 함수에서 다양한 유형의 이동 평균을 계산한다. 계산된 이동 평균은 ma 변수로 보존된다.
클로즈 가격이 마를 넘으면 구매 신호가 발생하고, 클로즈 가격이 마를 넘으면 판매 신호가 발생한다.
스톱로드를 설정하기 위해,atr을 통해 14주기의 평균 실제 진동폭을 계산한다. 횡단점을 기준으로 하고, 상향 또는 하향으로 2배 더하기atr을 스톱 범위로 한다.
구체적인 입단 및 출전 논리는 다음과 같습니다.
다중 입점: close 위에 ma를 착용하고, 재검토 시간 동안, 정지점은 입점 close 다수 출전:close 아래의 ma를 2배atr으로 빼면 출전 손실이 발생하거나, 또는 최고 가격이 출전 지점을 초과할 때 close을 2배atr으로 더하면 출전 중단 공백 입구: close 아래로 ma를 뚫고 재검토 시간 동안, 정지점은 입구점 close 공허출장:close 상에 마를 입는 것 더하기 2배atr을 입었을 때 상쇄출장, 또는 최저값이 입점점보다 낮은 close 빼기 2배atr을 입었을 때 상쇄출장
위험 요소에 대해 최적화할 수 있는 방법은 다음과 같습니다:
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
이동 평균 가로 전략은 매우 전형적이고 일반적으로 사용되는 기술 분석 전략이다. 이 전략의 핵심 아이디어는 간단하고 쉽게 구현할 수 있으며, 각 시장에 적용되며, 양자 거래의 입문 전략 중 하나이다. 그러나 이 전략에는 빈번한 신호를 생성하고, 손해가 쉬운 등과 같은 몇 가지 문제도 있다. 적절한 최적화를 통해 이 전략의 실장 성능을 크게 향상시킬 수 있다.
/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)
type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])
length = input(28)
source = close
// === INPUT BACKTEST RANGE ===
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2000, title = "From Year", minval = 2000)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(9999, 1, 1, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
variant(type, src, len) =>
v1 = sma(src, len) // Simple
v2 = ema(src, len) // Exponential
v5 = wma(src, len) // Weighted
v7 = rma(src, len) // Smoothed
type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)
atr = security(syminfo.tickerid, "D", atr(14))
range = valuewhen(cross(close,ma), (atr*2), na)
ep = valuewhen(cross(close,ma), close, na)
plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
strategy.entry("Long Entry", true, when = crossover(close,ma) and window() , stop = ep )
strategy.exit("Long Exit", "Long Entry", stop = ep-range)
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] )
strategy.entry("Short Entry", false, when = crossunder(close,ma) and window() , stop = ep )
strategy.exit("Short Exit", "Short Entry", stop = ep+range)
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )