이중 이동 평균과 MACD 조합 거래 전략은 이동 평균과 동력 지표 모두를 활용하여 거래 신호를 생성하고 검증하는 양적 거래 전략이다. 이동 평균과 MACD의 동력 특성을 결합함으로써 이 전략은 엄격한 입출 기준을 설정함으로써 시장 트렌드의 윤곽을 효과적으로 파악할 수 있으며, 수익 범위가 좁아지거나 수익 또는 손실을 줄일 수 있는 시장 변동의 위험을 피할 수 있다.
이 전략은 20주기 단순한 이동 평균 (SMA) 과 5주기 기하급수적 이동 평균 (EMA) 의 조합을 사용한다. 20주기 SMA는 시장 변동을 효과적으로 완화하고 중장기 가격 추세를 결정할 수 있으며, 5주기 EMA는 최근 가격에 더 높은 무게를 부여하고 단기 가격 변화에 민감하게 반응한다. 가격이 20주기 라인을 넘어서면 5주기 라인을 넘어서면 구매 신호가 생성되고, 20주기 라인을 넘어서면 가격이 5주기 라인을 넘어서면 판매 신호가 생성된다. 이러한 이중 이동 평균 조합은 단기 이동 평균의 도입을 통해 신호의 민감성과 타이밍을 향상시키는 동시에 주요 트렌드를 따르는 무역 신호를 보장한다.
거래 신호가 생성된 후, 트렌드를 검증하기 위해 MACD 지표가 도입된다. 특히, 구매 신호가 발생했을 때, MACD DIFF 라인은 상승 추세를 확인하기 위해 여러 기간 동안 유지되는 DEA 라인과
마지막으로, 합리적인 스톱 로스 레벨은 롱 포지션과 쇼트 포지션 모두에 설정된다. 롱 스톱 로스 라인은 엔트리 이후 가장 낮은 지점 아래로 설정되며, 쇼트 스톱 로스 라인은 엔트리 이후 가장 높은 지점 위에 설정된다. 스톱 로스 레벨은 가격 변동에 따라 동적으로 업데이트된다. 이러한 스톱 로스 방법은 최대 범위에서 이익을 잠그고 심각한 시장 역전 시 허용할 수없는 손실을 방지한다.
MACD 매개 변수는 더 나은 협력을 위해 조정할 수 있습니다. 또한, 이동 평균 기간 매개 변수는 제품 특성에 따라 최적화가 필요합니다. 마지막으로, 주요 방향 움직임에 대한 전체 수익 방출을 허용하기 위해 중지 손실 범위는 합리적으로 느슨하게 할 수 있습니다.
이 전략에 대한 추가 최적화는 다음과 같은 방향으로 추진될 수 있습니다.
적응 가능한 이동 평균 알고리즘을 도입합니다. 동적 기간 이동 평균 조합은 수동 매개 변수 조정 필요없이 자동으로 시장에 적응합니다.
머신러닝 모델을 통합합니다. 딥러닝과 같은 알고리즘은 다양한 제품의 시장 특성을 자동으로 식별하고 최적의 매개 변수 설정을 실시간으로 출력합니다.
추가 필터를 추가합니다. 부가 판단 표준으로 부류 신호 위에 다른 기술적 지표를 도입 할 수 있습니다. 부피 인수를 통합하는 것과 같이.
스톱 로스 전략을 최적화한다. 브레이크오웃 스톱 로스 및 추적 스톱 로스와 같은 더 지능적인 스톱 로스 기법을 연구해야 하며, 위험을 통제하면서 더 큰 보상을 얻을 수 있다.
이중 이동 평균 및 MACD 조합 전략은 단일 기술 지표의 한계를 넘어 트렌드, 추진력, 위험 통제와 같은 측면을 포괄적으로 고려하고 양적 거래의 안정성을 효과적으로 향상시킬 수 있습니다. 이 전략은 매개 변수 조정을 통해 다른 시장 환경에 잘 적응하며 실시간 응용 및 지속적인 최적화를 가치가 있습니다. 한편으로 자동 최적화 및 최대 전략 효과를 위해 더 지능적인 기술을 통합하는 데 상당한 공간이 남아 있습니다.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Band Strategy with Early Signal (v5)", overlay=true) // Inputs length = 20 mult = 1.5 src = close riskRewardRatio = input(3.0, title="Risk-Reward Ratio") // Calculating Bollinger Bands basis = ta.ema(src, length) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // Plotting Bollinger Bands plot(upper, "Upper Band", color=color.red) plot(lower, "Lower Band", color=color.green) // Tracking Two Candles Ago Crossing Bollinger Bands var float twoCandlesAgoUpperCrossLow = na var float twoCandlesAgoLowerCrossHigh = na if (close[2] > upper[2]) twoCandlesAgoUpperCrossLow := low[2] if (close[2] < lower[2]) twoCandlesAgoLowerCrossHigh := high[2] // Entry Conditions longCondition = (not na(twoCandlesAgoLowerCrossHigh)) and (high > twoCandlesAgoLowerCrossHigh) shortCondition = (not na(twoCandlesAgoUpperCrossLow)) and (low < twoCandlesAgoUpperCrossLow) // Plotting Entry Points plotshape(longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Strategy Execution if (longCondition) stopLoss = low - (high - low) * 0.05 takeProfit = close + (close - stopLoss) * riskRewardRatio strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", stop=stopLoss, limit=takeProfit) if (shortCondition) stopLoss = high + (high - low) * 0.05 takeProfit = close - (stopLoss - close) * riskRewardRatio strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", stop=stopLoss, limit=takeProfit)