이 전략은 110일 및 200일 기하급수적 이동 평균 (EMA) 의 교차를 기반으로하는 트렌드 추적 거래 시스템이다. 단기 및 장기 EMA의 교차를 통해 시장 트렌드를 식별하며, 위험 통제를 위해 스톱 로스 및 영리 메커니즘을 통합합니다. 시스템은 트렌드 확인에 따라 장기 및 단기 포지션을 자동으로 실행하며 지속적으로 포지션 리스크를 모니터링합니다.
핵심 논리는 유가 트렌드의 연속성에 의존하며, EMA110과 EMA200 크로스오버를 사용하여 트렌드 역전 신호를 캡처합니다. 단기 이동 평균 (EMA110) 이 장기 이동 평균 (EMA200) 을 넘을 때 상승 추세 형성을 신호하여 긴 포지션을 유발합니다. 반대로, 단기 이동 평균이 장기 이동 평균을 넘을 때 하락 추세 형성을 신호하여 짧은 포지션을 유발합니다. 위험 관리를 위해 전략은 수익을 보호하고 잠재적 인 손실을 제한하기 위해 각 포지션에 1%의 스톱 로스와 0.5%의 영리 수준을 설정합니다.
이 전략은 이동 평균 크로스오버를 통해 트렌드를 포착하고 스톱 로스 및 영업 메커니즘을 통해 위험을 관리하며 건전한 디자인과 논리적 엄격성을 보여줍니다. 다양한 시장에서 성과를 떨어뜨릴 수 있지만 제안된 최적화는 전략 안정성과 수익성을 더욱 향상시킬 수 있습니다. 이 전략은 안정적인 수익을 추구하는 중장기 투자자에게 적합합니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA110/200 Cross with Stop-Loss and Take-Profit", overlay=true) // 定义EMA110和EMA200 ema110 = ta.ema(close, 110) ema200 = ta.ema(close, 250) // 画出EMA plot(ema110, color=color.blue, title="EMA110") plot(ema200, color=color.red, title="EMA200") // 计算交叉信号 longCondition = ta.crossover(ema110, ema200) // EMA110上穿EMA200,做多 shortCondition = ta.crossunder(ema110, ema200) // EMA110下穿EMA200,做空 // 设置止损和止盈 stopLoss = 0.01 // 止损1% takeProfit = 0.005 // 止盈0.5% // 判断是否已有仓位 isLong = strategy.position_size > 0 // 当前是否为多头仓位 isShort = strategy.position_size < 0 // 当前是否为空头仓位 // 执行策略:做多时平空,做空时平多 if (longCondition and not isLong) // 如果满足做多条件并且当前没有多头仓位 if (isShort) // 如果当前是空头仓位,先平空 strategy.close("Short") strategy.entry("Long", strategy.long) // 执行做多 strategy.exit("Take Profit/Stop Loss", "Long", stop=close * (1 - stopLoss), limit=close * (1 + takeProfit)) if (shortCondition and not isShort) // 如果满足做空条件并且当前没有空头仓位 if (isLong) // 如果当前是多头仓位,先平多 strategy.close("Long") strategy.entry("Short", strategy.short) // 执行做空 strategy.exit("Take Profit/Stop Loss", "Short", stop=close * (1 + stopLoss), limit=close * (1 - takeProfit)) // 在表格中显示信号 var table myTable = table.new(position.top_right, 1, 1) if (longCondition and not isLong) table.cell(myTable, 0, 0, "Buy Signal", text_color=color.green) if (shortCondition and not isShort) table.cell(myTable, 0, 0, "Sell Signal", text_color=color.red)