동적 이중 이동 평균 돌파 거래 시스템

EMA SMA CROSS
생성 날짜: 2024-12-05 16:22:32 마지막으로 수정됨: 2024-12-05 16:22:32
복사: 1 클릭수: 384
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 이중 이동 평균 돌파 거래 시스템

개요

이 시스템은 9주기 및 21주기 지수 이동 평균 ((EMA) 을 핵심 지표로 사용하여 두 개의 평행선의 교차 신호를 포착하여 거래를 수행합니다. 이 시스템은 스톱 스톱 손실 관리를 통합하고 시각적 인터페이스 지원을 제공하며 거래 신호와 중요한 가격 수준을 직관적으로 표시합니다.

전략 원칙

전략은 빠른 EMA ((9주기) 와 느린 EMA ((21주기) 를 사용하여 거래 시스템을 구축한다. 빠른 EMA가 느린 EMA를 상향으로 통과하면, 시스템은 다중 신호를 발생시킨다. 빠른 EMA가 느린 EMA를 상향으로 통과하면, 시스템은 공백 신호를 발생시킨다. 시스템은 매번 포지션을 개시할 때, 기본 설정된 스톱 손실 비율에 따라 자동으로 스톱 손실 가격을 설정한다. 거래 실행은 백분율 포지션 관리 방식을 채택하고, 기본으로 계정 자금 100%를 사용하여 거래한다.

전략적 이점

  1. 신호 명확성: 거래 신호로 평행선 교차를 사용, 신호는 명확하고 이해하기 쉽고 실행
  2. 위험 제어: 모든 거래에 대해 미리 설정된 위험 제어 장치와 함께 통합된 스톱/스트롭 관리 시스템
  3. 시각화 지원: 입시 시간, 가격, 중지 손실 및 중지 위치와 같은 중요한 정보를 포함하는 거래 표 표시 기능을 제공합니다.
  4. 매개 변수 유연성: 다른 시장 환경에 맞게 EMA 주기, 스톱 스톱 손실 비율 등의 매개 변수를 조정할 수 있습니다.
  5. 완전한 평준화 메커니즘: 역전 신호가 발생했을 때 자동 평준화하여 서로 상쇄되는 포지션을 피합니다.

전략적 위험

  1. 흔들림 시장 위험: 수평 변동이 있는 상황에서 빈번하게 가짜 브레이크 신호가 발생하여 연속적인 손실이 발생할 수 있습니다.
  2. 슬라이드 포인트 위험: 시장의 격렬한 변동이 있을 때, 슬라이드 포인트로 인해 실제 거래 가격이 이상적인 가격에서 벗어날 수 있습니다.
  3. 자금 관리 위험: 100% 자금 거래를 기본으로 사용하는 것은 너무 위험 할 수 있습니다.
  4. 신호 지연성: EMA는 자체적으로 지연성을 가지고 있으며, 최적의 출전 시기를 놓치거나 출전이 지연될 수 있다.
  5. 단일 지표 의존성: 쌍평평선 교차에만 의존하는 것은 다른 중요한 시장 정보를 무시할 수 있습니다.

전략 최적화 방향

  1. 트렌드 확인 지표를 추가: ADX 또는 트렌드 강도 지표를 추가하여 위조 시장을 필터링하는 것이 좋습니다.
  2. 자금 관리를 최적화: 시장의 변동에 따라 포지션 개설 비율을 조정하는 동적 포지션 관리 기능을 추가하는 것이 좋습니다.
  3. 손해 차단 메커니즘 개선: 수익을 더 잘 보호하기 위해 추적 손해 차단 기능을 추가할 수 있습니다.
  4. 시장 환경 필터를 추가합니다: 변동성 지표를 추가하여 거래에 적합하지 않은 시장 환경에서 자동으로 거래를 중단합니다.
  5. 최적화된 신호 확인 메커니즘: 수량 확인을 늘리거나 다른 기술 지표와 연동하는 것을 고려할 수 있습니다.

요약하다

이것은 합리적이고, 논리적으로 명확하게 설계된 일률적 교차 전략 시스템이다. 이 전략은 EMA 교차 신호와 위험 관리 메커니즘을 종합적으로 사용함으로써 트렌드 시장에서 수익을 얻을 수 있다. 일부 고유한 위험이 존재하지만, 제안된 최적화 방향은 전략의 안정성과 신뢰성을 더욱 향상시킬 수 있다. 이 전략은 중·장기 경향을 추적하는 데 특히 적합하며, 인내심이있는 거래자에게는 좋은 선택이다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//
//  ██╗         █████╗         ██████╗     ██████╗     ██╗   ██╗    ██╗
//  ██║        ██╔══██╗       ██╔═══██╗    ██╔══██╗    ██║   ██║    ██║
//  ██║        ███████║       ██║   ██║    ██║  ██║    ██║   ██║    ██║
//  ██║        ██╔══██║       ██║   ██║    ██║  ██║    ██║   ██║    ██║
//  ███████╗   ██║  ██║       ╚██████╔╝    ██████╔╝    ╚██████╔╝    ██║
//  ╚══════╝   ╚═╝  ╚═╝        ╚═════╝     ╚═════╝      ╚═════╝     ╚═╝
//
//  BTC-EMA做多策略(5分钟确认版) - 作者:LAODUI
//  版本:2.0
//  最后更新:2024
// ═══════════════════════════════════════════════════════════════════════════

strategy("EMA Cross Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// 添加策略参数设置
var showLabels = input.bool(true, "显示标签", group="显示设置")
var stopLossPercent = input.float(5.0, "止损百分比", minval=0.1, maxval=20.0, step=0.1, group="风险管理")
var takeProfitPercent = input.float(10.0, "止盈百分比", step=0.1, group="风险管理")

// EMA参数设置
var emaFastLength = input.int(9, "快速EMA周期", minval=1, maxval=200, group="EMA设置")
var emaSlowLength = input.int(21, "慢速EMA周期", minval=1, maxval=200, group="EMA设置")

// 计算EMA
ema_fast = ta.ema(close, emaFastLength)
ema_slow = ta.ema(close, emaSlowLength)

// 绘制EMA线
plot(ema_fast, "快速EMA", color=color.blue, linewidth=2)
plot(ema_slow, "慢速EMA", color=color.red, linewidth=2)

// 检测交叉
crossOver = ta.crossover(ema_fast, ema_slow)  
crossUnder = ta.crossunder(ema_fast, ema_slow)

// 格式化时间显示 (UTC+8)
utc8Time = time + 8 * 60 * 60 * 1000
timeStr = str.format("{0,date,MM-dd HH:mm}", utc8Time)

// 计算止损止盈价格
longStopLoss = strategy.position_avg_price * (1 - stopLossPercent / 100)
longTakeProfit = strategy.position_avg_price * (1 + takeProfitPercent / 100)
shortStopLoss = strategy.position_avg_price * (1 + stopLossPercent / 100)
shortTakeProfit = strategy.position_avg_price * (1 - takeProfitPercent / 100)

// 交易逻辑
if crossOver
    if strategy.position_size < 0  
        strategy.close("做空")     
    strategy.entry("做多", strategy.long)  
    if showLabels
        label.new(bar_index, high, text="做多入场\n" + timeStr + "\n入场价: " + str.tostring(close) + "\n止损价: " + str.tostring(longStopLoss) + "\n止盈价: " + str.tostring(longTakeProfit), color=color.green, textcolor=color.white, style=label.style_label_down, yloc=yloc.abovebar)

if crossUnder
    if strategy.position_size > 0  
        strategy.close("做多")     
    strategy.entry("做空", strategy.short)  
    if showLabels
        label.new(bar_index, low, text="做空入场\n" + timeStr + "\n入场价: " + str.tostring(close) + "\n止损价: " + str.tostring(shortStopLoss) + "\n止盈价: " + str.tostring(shortTakeProfit), color=color.red, textcolor=color.white, style=label.style_label_up, yloc=yloc.belowbar)

// 设置止损止盈
if strategy.position_size > 0  // 多仓止损止盈
    strategy.exit("多仓止损止盈", "做多", stop=longStopLoss, limit=longTakeProfit)
    
if strategy.position_size < 0  // 空仓止损止盈
    strategy.exit("空仓止损止盈", "做空", stop=shortStopLoss, limit=shortTakeProfit)