이 전략은 이동 평균 라인을 기반으로 한 모멘텀 전략이다. 그것은 다양한 기간의 간단한 이동 평균을 계산하고 그들의 교차 상황을 비교하여 거래 신호를 생성한다. 구체적으로, 단기 이동 평균 라인이 장기 이동 평균 라인을 넘을 때 구매 신호가 생성된다. 단기 이동 평균 라인이 장기 이동 평균 라인을 넘을 때 판매 신호가 생성된다.
이 전략의 핵심 논리는 동력 효과, 즉 주식 가격 트렌드의 지속을 기반으로 한다. 이동 평균선은 주식 가격의 변화 추세를 효과적으로 반영할 수 있다. 단기 이동 평균선이 장기 이동 평균선을 넘을 때, 그것은 주식 가격이 상승 추세로 진입하기 시작한다는 것을 의미한다; 반대로, 단기 이동 평균선이 장기 이동 평균선을 넘을 때, 그것은 주식 가격이 하향 추세로 진입하기 시작한다는 것을 의미한다. 이 전략은 이 원리에 기반한 거래 신호를 생성한다.
특히, 13일 간 간단한 이동 평균과 34일 간 간단한 이동 평균은 전략에 정의되어 있다. 매일 폐쇄 가격에 기초한 이 두 이동 평균을 계산한 후, 그 크기 관계가 비교된다. 13일 라인이 34일 라인의 위를 넘으면 구매 신호가 생성되며, 주식 가격이 상승 추세로 진입하고 긴 포지션을 설정해야 한다는 것을 나타낸다. 13일 라인이 34일 라인의 아래를 넘으면 판매 신호가 생성되며, 주식 가격이 하락 추세로 진입하고 포지션을 종료해야 한다는 것을 나타낸다.
이 전략의 가장 큰 장점은 간단하고 이해하기 쉽고 구현하기 쉽다는 것입니다. 이동 평균선은 가장 기본적이고 일반적으로 사용되는 기술 지표 중 하나입니다. 그 원리는 간단하고 이해하기 쉽고 적용 할 수 있습니다. 동시에 이동 평균 라인 크로스오버 신호는 장기적인 연습을 통해 효과적이라는 것이 입증되었습니다.
또한, 이 전략의 매개 변수 설정은 유연하며, 다른 품종과 시장 조건에 따라 조정될 수 있다. 예를 들어, 이동 평균선의 주기 매개 변수는 전략의 민감도를 조정하기 위해 변경될 수 있다. 이는 전략 최적화와 조정의 공간을 제공한다.
이 전략의 가장 큰 위험은 더 많은 잘못된 신호가 발생할 수 있고 범위 제한 시장에 갇힐 수 있다는 것입니다. 가격이 급격히 변동할 때, 이동 평균선은 종종 교차점을 생성하여 잘못된 신호를 초래할 수 있습니다. 이 시점에서 소음을 필터링하기 위해 이동 평균선의 사이클 매개 변수를 조정해야합니다.
또한, 더 큰 시장 반전이 있을 때 전략의 스톱 로스 포인트가 깨질 수 있어 더 큰 손실이 발생할 수 있습니다. 이것은 스톱 로스 전략을 최적화하고 적절한 스톱 로스 범위를 완화시키는 것이 필요합니다.
이 전략의 다음 측면은 최적화 될 수 있습니다.
이동 평균 라인의 사이클 매개 변수를 최적화하여 다양한 품종과 시장 조건에 최적의 매개 변수 조합을 찾습니다.
MACD와 KD와 같은 다른 기술 지표의 필터링을 추가하여 범위 제한 시장에서 잘못된 신호를 생성하지 않도록합니다.
스톱 로스 전략을 최적화하고 동적으로 조정하여 스톱 로스 포인트가 너무 가깝지 않도록 하고, 동시에 스톱 로스를 보장하며, 더 높은 확률로 깨질 수 있습니다.
단일 거래 위험을 통제하기 위해 고정 투자 및 위치 비율과 같은 위치 관리 메커니즘을 강화하십시오.
이 전략은 매우 고전적인 이동 평균 크로스오버 전략이다. 단기 및 장기 이동 평균의 관계를 계산하고 비교함으로써 구매 및 판매 신호를 생성한다. 이 전략의 장점은 간단하고 유연한 매개 변수이며 초보자도 배울 수 있는 것이 좋다; 단점은 신호가 충분히 안정적이지 않을 수 있고 범위 제한 시장에서 쉽게 잡힐 수 있다는 것이다. 적절한 최적화로, 여전히 매우 실용적인 양적 전략이 될 수 있다.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // TODO: update strategy name strategy("{STRATEGY NAME}", overlay=true) // === TA LOGIC === // // // TODO: PUT YOUR TA LOGIC HERE LONG_SIGNAL_BOOLEAN = crossover(sma(close, 13), sma(close, 34)) SHORT_SIGNAL_BOOLEAN = crossunder(sma(close, 12), sma(close, 21)) // === INPUT BACKTEST DATE RANGE === enableShorts = input(false, title="Enable short entries?") FromMonth = input(defval = 5, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2017) ToMonth = input(defval = 9, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2018, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // === STRATEGY BUY / SELL ENTRIES === // TODO: update the placeholder LONG_SIGNAL_BOOLEAN and SHORT_SIGNAL_BOOLEAN to signal // long and short entries buy() => window() and LONG_SIGNAL_BOOLEAN sell() => window() and SHORT_SIGNAL_BOOLEAN if buy() strategy.entry("Long", strategy.long, comment="Long") if sell() if (enableShorts) strategy.entry("Short", strategy.short, comment="Short") else strategy.close("Long") // === BACKTESTING: EXIT strategy === sl_inp = input(10, title='Stop Loss %', type=float)/100 tp_inp = input(30, title='Take Profit %', type=float)/100 stop_level = strategy.position_avg_price * (1 - sl_inp) take_level = strategy.position_avg_price * (1 + tp_inp) strategy.exit("Stop Loss/Profit", "Long", stop=stop_level, limit=take_level)