이 전략은 다양한 유형의 이동 평균 (단순 이동 평균 SMA, 기하급수 이동 평균 EMA, 허ల్ 이동 평균 HMA 및 가중 이동 평균 VWMA) 을 계산하여 거래 신호를 생성하고 시장 트렌드를 결정하고 따라가기 위해 그 사이의 교차점을 감지하여 거래 신호를 생성합니다. 단기 MA가 아래에서 장기 MA를 넘어서면 구매 신호를 생성하고 반대 교차가 발생하면 판매 신호를 만듭니다.
이 전략의 핵심 아이디어는 두 개의 이동 평균을 비교하여 시장 트렌드를 판단하는 것입니다. 구체적으로 입력 매개 변수를 통해 서로 다른 유형과 길이의 두 개의 MA를 구성 할 수 있습니다. 첫 번째 MA는 주요 트렌드를 대표하는 더 긴 기간을 가지고 있으며 두 번째 MA는 현재 단기 트렌드를위한 짧은 기간을 가지고 있습니다.
단기 MA가 아래에서 장기 MA를 넘을 때, 단기 MA가 강화되고 시장이 상승 추세로 진입한다는 신호를 제공합니다. 따라서 이 교차 지점에서 구매 신호가 생성됩니다. 반대로 단기 MA가 장기 MA를 넘을 때 단기 MA가 약화되고 시장이 하향 추세를 나타냅니다. 따라서 판매 신호가 생성됩니다.
이러한 MA 크로스오버를 탐지함으로써 이 전략은 거래에 대한 시장 추세를 따르고 있습니다.
해결책:
이 전략은 주요 트렌드 검출을 위해 MA 크로스오버를 사용하는 고전적인 아이디어에 기반합니다. 유연한 MA 조합으로 구현이 간단하고 알고리즘 거래 자동화에 적합합니다. 전반적으로 합리적으로 실용적이지만 성능을 더욱 향상시키기 위해 매개 변수 조정, 추가 필터 등과 같은 개선에 대한 여지가 있습니다.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //study(title="MA Crossover Strategy", overlay = true) strategy("MA Crossover Strategy", overlay=true) src = input(close, title="Source") price = request.security(syminfo.tickerid, timeframe.period, src) ma1 = input(25, title="1st MA Length") type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) ma2 = input(7, title="2nd MA Length") type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"]) f_hma(_src, _length)=> _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length))) price1 = if (type1 == "SMA") sma(price, ma1) else if (type1 == "EMA") ema(price, ma1) else if (type1 == "VWMA") vwma(price, ma1) else f_hma(price, ma1) price2 = if (type2 == "SMA") sma(price, ma2) else if (type2 == "EMA") ema(price, ma2) else if (type2 == "VWMA") vwma(price, ma2) else f_hma(price, ma2) //plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0) plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0) plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0) longCondition = crossover(price1, price2) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(price1, price2) if (shortCondition) strategy.entry("Short", strategy.short)