
이 전략은 이동 평균을 기반으로 한 동적 전략이다. 그것은 다른 주기에서 간단한 이동 평균을 계산하고 그 교차 상황을 비교하여 거래 신호를 생성한다. 구체적으로, 단기 이동 평균 위에 장기 이동 평균을 가로질러 구매 신호를 생성하고, 단기 이동 평균 아래에 장기 이동 평균을 가로질러 판매 신호를 생성한다.
이 전략의 핵심 논리는 동량 효과, 즉 주식 가격 경향의 지속성을 기반으로 한다. 이동 평균은 주식 가격 변화의 경향을 효과적으로 반영할 수 있다. 단기 이동 평균 위에 장기 이동 평균을 뚫을 때, 주식 가격이 상승 추세에 들어간다는 것을 나타낸다. 반대로, 단기 이동 평균 아래에 장기 이동 평균을 뚫을 때, 주식 가격이 하향 추세에 들어간다는 것을 나타낸다. 이 전략은 이 원칙에 따라 거래 신호를 생성한다.
구체적으로, 전략에는 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)