
이중 이동 평균 교차 전략은 일반적인 양자 거래 전략이다. 이 전략은 두 개의 다른 주기의 이동 평균을 구매/판매 신호로 사용하여, 단기 평균선 상에서 장기 평균선 을 통과할 때 구매하고, 단기 평균선 아래에서 장기 평균선 을 통과할 때 판매한다. 이 전략 코드는 여러 가지 일반적인 이동 평균 유형을 지원한다.
이 전략의 핵심 원칙은 두 개의 다른 주기 이동 평균의 추세 특성과 지연성을 활용하여 가격 동향을 포착하는 것입니다. 일반적으로, 단기 평균선은 가격 변화에 더 민감하고, 장기 평균선은 상대적으로 지연되어 있습니다. 가격이 상승 추세에있을 때, 단기 평균선은 장기 평균선보다 먼저 상향으로 이동하고 최종적으로 장기 평균선을 통과하여 “금叉” 구매 신호를 형성합니다. 반대로, 가격이 하향 추세에있을 때, 단기 평균선은 장기 평균선보다 먼저 하향으로 이동하고 최종적으로 장기 평균선을 통과하여 “죽은 포크” 판매 신호를 형성합니다.
간단하고 사용하기 쉬운: 이중 이동 평균 크로스 전략은 이해하기 쉽고 실행하기 쉬운 양적 거래 전략으로, 초보자 트레이더들이 배우고 사용할 수 있습니다.
적용 범위: 이 전략은 주식, 선물, 외환, 암호화폐와 같은 다양한 금융 시장과 거래 지표에 적용할 수 있습니다.
변수 유연성: 이 전략 코드는 여러 가지 일반적인 이동 평균 유형과 가격 유형을 지원합니다. 사용자는 다른 시장 환경과 거래 스타일에 맞게 자신의 필요에 따라 변수를 조정할 수 있습니다.
트렌드 추적: 두 개의 다른 주기적 평균선의 교차 신호를 통해, 이 전략은 가격의 주요 트렌드를 더 잘 포착할 수 있으며, 부진을 방지하기 위해 부진 거래를 피하는 데 도움이 된다.
지연성: 이동 평균은 본질적으로 트렌드 추적 지표이며, 약간의 지연성이 존재하며, 최고의 입출장 및 출장 시기를 놓칠 수 있다.
흔들리는 시장에서 실패: 흔들리는 시장 또는 수평 정리 상황에서 가격 변동이 크고 평균선 교차 신호가 자주 발생하여 전략이 자주 거래되어 높은 거래 비용과 자본 손실이 발생할 수 있습니다.
매개 변수 최적화 난이도: 평균선주기의 선택은 전략 효과에 큰 영향을 미치지만, 최적의 매개 변수는 종종 시장 상황의 차이에 따라 차이가 있으며, 모든 곳에서 정확한 최적의 매개 변수 조합을 찾는 것은 어렵습니다.
트렌드 필터 도입: 평행선 교차 신호를 기반으로, MACD, ADX 등과 같은 다른 트렌드 지표와 결합하여 트렌드 필터링을 수행할 수 있으며, 트렌드가 명확한 경우에만 거래하고, 흔들리는 시장에서 자주 거래하는 것을 피한다.
최적화 스톱 스톱: 전략에 합리적인 스톱 스톱 로직을 추가하여 단일 거래 위험을 제어하고 전략의 리스크 수익률을 향상시킵니다.
동적 파라미터 최적화: 다양한 시장 환경에 대해, 평균선 주기 등의 파라미터를 주기적으로 동적으로 최적화하여, 전략이 시장 변화에 적응할 수 있도록 하고, 안정성을 높일 수 있다.
다인자 조합: 두 개의 이동 평균 교차 신호를 다른 효과적인 양적 요소 (동량, 가치, 교차량 등) 와 조합하여 더 안정적이고 효과적인 다인자 전략을 형성한다.
이중 이동 평균 교차 전략은 두 개의 다른 주기 평균의 교차 신호를 통해 가격 추세를 포착하는 간단한 고전적인 트렌드 추적 전략이며, 트렌드 시장에 적합하다. 그러나 이 전략은 낙후성 및 파라미터 최적화 어려움과 같은 문제가 있으며, 트렌드 필터링, 동적 파라미터 최적화, 다중 요소 조합과 같은 다른 방법과 함께 최적화 및 개선이 필요합니다. 전략의 적합성과 안정성을 높이기 위해.
/*backtest
start: 2023-05-08 00:00:00
end: 2024-05-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SustainableInvestment
//@version=5
strategy("Moving average strategy (이동평균선 전략)", overlay=true)
// === INPUTS ===
basisType = input.string(defval = "EMA", title = "MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA ",options=["SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA"])
shortLen = input.int(defval = 1, title = "Short MA Period", minval = 1)
longLen = input.int(defval = 20, title = "Long MA Period", minval = 1)
price = input.string(defval = "Typical", title = "Price Type : Close, High, Open, Low, Typical, Center ",options=["Close", "High", "Open", "Low", "Typical", "Center"])
// === BASE FUNCTIONS ===
// 가격 종류 설정
priceType(price) =>
Typical = (high+low+close)/3
Center = (high+low) / 2
price=="High"?high : price=="Low"?low : price=="Open"?open : price=="Typical"?Typical : price=="Center"?Center : close
// 이동평균선 종류 설정
variant(type, src, len) =>
v1 = ta.sma(src, len) // Simple
v2 = ta.ema(src, len) // Exponential
v3 = 2 * v2 - ta.ema(v2, len) // Double Exponential
v4 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len) // Triple Exponential
v5 = ta.wma(src, len) // Weighted
v6 = ta.vwma(src, len) // Volume Weighted
type=="EMA"?v2 : type=="DEMA"?v3 : type=="TEMA"?v4 : type=="WMA"?v5 : type=="VWMA"?v6 : v1
longCondition = ta.crossover(variant(basisType, priceType(price), shortLen), variant(basisType, priceType(price), longLen))
if (longCondition)
strategy.entry("Long Entry", strategy.long)
exitCondition = ta.crossunder(variant(basisType, priceType(price), shortLen), variant(basisType, priceType(price), longLen))
if (exitCondition)
strategy.close("Long Entry","Long Exit")