이것은 부분적 이윤 취득과 함께 단계적 인 트레일링 스톱을 활용하는 출구 전략입니다. 첫 번째 이윤 취득 수준에 도달한 후 스톱 손실을 손익분기 수준으로 이동하고 두 번째 수준에 도달한 후 첫 번째 이윤 취득 수준으로 이동합니다. 이는 수익 잠재력을 유지하면서 일부 이윤을 잠금 할 수 있습니다.
이 전략의 주요 구성 요소는 다음과 같습니다.
구체적으로, 먼저 100 포인트의 스톱 로스를 설정하고 100/200/300 포인트의 이익을 취합니다.curProfitInPts
이 함수는 현재 가격과 입시 가격에 기초하여 현재 수익을 계산합니다.calcStopLossPrice
이 함수는 점 거리를 기준으로 스톱 로스 가격을 계산합니다.
핵심 논리는getCurrentStage
위치가 있는지 확인하고 이익이 각 취득 수익 수준을 초과했는지 확인하는 함수입니다. 예를 들어 단계 2는 100 포인트 수익 후, 단계 3는 200 포인트 수익 후 달성됩니다.
마지막으로, 스톱 손실은 단계에 따라 수정됩니다. 단계 1은 원래 스톱, 단계 2는 브레이크 에븐, 단계 3는 첫 번째 수익 수준을 추적합니다.
이 단계적 트레일링 스톱 전략의 장점:
고려해야 할 몇 가지 위험 요소가 있습니다.
이 전략을 개선할 수 있는 몇 가지 방법:
/*backtest start: 2023-11-20 00:00:00 end: 2023-11-27 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © adolgov // @description // when tp1 is reached, sl is moved to break-even // when tp2 is reached, sl is moved to tp1 // when tp3 is reached - exit //@version=4 strategy("Stepped trailing strategy example", overlay=true) // random entry condition longCondition = crossover(sma(close, 14), sma(close, 28)) if (longCondition) strategy.entry("My Long Entry Id", strategy.long) // sl & tp in points sl = input(100) tp1 = input(100) tp2 = input(200) tp3 = input(300) curProfitInPts() => if strategy.position_size > 0 (high - strategy.position_avg_price) / syminfo.mintick else if strategy.position_size < 0 (strategy.position_avg_price - low) / syminfo.mintick else 0 calcStopLossPrice(OffsetPts) => if strategy.position_size > 0 strategy.position_avg_price - OffsetPts * syminfo.mintick else if strategy.position_size < 0 strategy.position_avg_price + OffsetPts * syminfo.mintick else 0 calcProfitTrgtPrice(OffsetPts) => calcStopLossPrice(-OffsetPts) getCurrentStage() => var stage = 0 if strategy.position_size == 0 stage := 0 if stage == 0 and strategy.position_size != 0 stage := 1 else if stage == 1 and curProfitInPts() >= tp1 stage := 2 else if stage == 2 and curProfitInPts() >= tp2 stage := 3 stage stopLevel = -1. profitLevel = calcProfitTrgtPrice(tp3) // based on current stage set up exit // note: we use same exit ids ("x") consciously, for MODIFY the exit's parameters curStage = getCurrentStage() if curStage == 1 stopLevel := calcStopLossPrice(sl) strategy.exit("x", loss = sl, profit = tp3, comment = "sl or tp3") else if curStage == 2 stopLevel := calcStopLossPrice(0) strategy.exit("x", stop = stopLevel, profit = tp3, comment = "breakeven or tp3") else if curStage == 3 stopLevel := calcStopLossPrice(-tp1) strategy.exit("x", stop = stopLevel, profit = tp3, comment = "tp1 or tp3") else strategy.cancel("x") // this is debug plots for visulalize TP & SL levels plot(stopLevel > 0 ? stopLevel : na, style = plot.style_linebr) plot(profitLevel > 0 ? profitLevel : na, style = plot.style_linebr)