이 전략은 트렌드를 추적하는 전형적인 방법인 이중 이동 평균 크로스오버를 채택하고 있으며, 트렌드 시장에서 큰 수익을 얻는 것을 목표로 스톱 로스, 영리 및 트레일 스톱 로스 등의 리스크 관리 메커니즘과 결합됩니다.
위험은 다음과 같이 감소 할 수 있습니다.
1. 거짓 신호를 다른 신호로 필터링한다.
2. 거래 빈도를 낮추기 위한 매개 변수 최적화
3. 시장 거래의 범위를 피하기 위해 트렌드 판단 지표를 추가합니다.
4. 단일 무역 위험을 낮추기 위해 포지션 크기를 조정합니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
요약하자면, 이것은 전형적인 이중 EMA 크로스오버 트렌드 추적 전략이다. 이는 스톱 로스, 영리 및 트레일링 스톱 로스와 같은 위험 관리 메커니즘과 통합된 트렌드 움직임을 캡처하는 장점을 가지고 있다. 그러나 소음과 범위 제한 시장에 대한 높은 민감성, 함락되기 쉬운 것과 같은 몇 가지 전형적인 약점도 있다. 추가 지표, 매개 변수 최적화, 동적 조정 및 포트폴리오 사용을 도입하여 전략의 성능을 향상시킬 수 있다. 전반적으로, 적절한 매개 변수 조정과 제품 및 시장 조건에 대한 좋은 적합성으로, 이 전략은 괜찮은 결과를 얻을 수 있다.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true) // Revision: 1 // Author: @JayRogers // // *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION *** // === GENERAL INPUTS === // short ma maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 14, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1) // === STRATEGY RELATED INPUTS === tradeInvert = input(defval = false, title = "Invert Trade Direction?") // the risk management inputs inpTakeProfit = input(defval = 1000, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 200, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 200, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) // === RISK MANAGEMENT VALUE PREP === // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na // === SERIES SETUP === /// a couple of ma's.. maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) // === PLOTTING === fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50) // === LOGIC === // is fast ma above slow ma? aboveBelow = maFast >= maSlow ? true : false // are we inverting our trade direction? tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false // === STRATEGY - LONG POSITION EXECUTION === enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions exitLong() => tradeDirection[1] and not tradeDirection strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in strategy.close(id = "Long", when = exitLong()) // ...and when to get out // === STRATEGY - SHORT POSITION EXECUTION === enterShort() => tradeDirection[1] and not tradeDirection exitShort() => not tradeDirection[1] and tradeDirection strategy.entry(id = "Short", long = false, when = enterShort()) strategy.close(id = "Short", when = exitShort()) // === STRATEGY RISK MANAGEMENT EXECUTION === // finally, make use of all the earlier values we got prepped strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)