이 전략은 여러 퍼센트 수익 출구 설정 기능을 구현합니다. 전략은 먼저 입장을 입력하는 긴 조건과 짧은 조건을 판단합니다. 그 다음 사용자 지정 %AsPoints 함수를 사용하여 비율을 가격 틱으로 변환합니다. 프로그램은 구성에 따라 1%, 2%, 3% 및 4%의 이익 비율로 4 개의 출구를 설정하고 일반적인 2% 스톱 로스 출구를 설정합니다. 이것은 여러 퍼센트 이익 출구 효과를 달성합니다.
이 전략의 핵심 논리는 SMA 크로스오버를 사용하여 엔트리를 결정하는 것입니다. 구체적으로, 빠른 SMA (14) 가 느린 SMA (28) 를 넘을 때, 그것은 길게 갈 것입니다. 빠른 SMA (14) 가 느린 SMA (28) 를 넘을 때, 그것은 짧게 갈 것입니다.
그러면 어떻게 여러 퍼센트 수익 출구를 설정합니까? 여기 사용자 정의 퍼센트 AsPoints 함수는 비율을 가격 틱으로 변환하는 데 사용됩니다. 논리는:
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
포지션 크기가 0이 아닌 경우, 평균 입시 가격으로 곱하여 최소 틱 크기로 나누는 비율로 가격 틱을 계산합니다. 포지션 크기가 0이라면, na를 반환합니다.
이 함수로, 우리는 쉽게 점수를 틱으로 변환할 수 있습니다. 이 프로그램은 1%, 2%, 3% 및 4%의 이익 비율에 기초하여 4개의 출구를 설정합니다.
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
또한 모든 출구에 대해 일반적인 2% 스톱 로스를 사용합니다. 이것은 여러 퍼센트 수익 출구 효과를 달성합니다.
이 다수 비율의 수익 퇴출 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략은 더 큰 수익을 놓치지 않도록 단계적으로 수익을 얻을 수 있습니다. 일반적으로 후기 출구는 더 큰 수익 목표와 더 높은 위험을 가지고 있으며이 전략은 위험과 수익을 균형있게합니다.
대량으로 종료하면 자본 회수, 위험을 줄일 수 있습니다. 예를 들어 25% 대량으로 1% 이윤은 자본의 1/4을 반환 할 수 있으며 후속 포지션은 순수 이윤으로 모두됩니다.
2%의 스톱 로스는 비정상적인 시장 움직임에 따른 극심한 손실을 방지합니다.
구현은 간단하고 깨끗하고 이해하기 쉽고 수정 할 수 있습니다. 사용자 정의 비율 변환 기능은 몇 줄의 코드에서 여러 출구를 설정 할 수 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
비율의 출입은 출입 가격 주위에서 변동하는 가격으로 옆으로 흔들리는 것을 유발할 수 있으며, 빈번한 출입을 유발합니다. 이것은 거래 빈도와 수수료 비용을 증가시킵니다.
대량 출출은 거래와 수수료의 수를 증가시킵니다. 높은 수수료는 출출 수익의 일부를 지울 수 있습니다.
부적절한 출구 위치 또한 수익에 영향을 줄 수 있습니다. 지나치게 보수적인 출구는 충분한 수익을 초래할 수 있지만 너무 공격적인 출구는 더 높은 위험을 초래합니다.
고정 비율 출구는 시장 변동성과 추세를 고려하지 않습니다. 불안정한 시장에서는 더 작은 출구를 사용해야하며, 추세를 보이는 시장에서는 더 큰 출구를 목표로해야합니다.
위의 위험을 고려하면 다음 측면에서의 추가 최적화가 가능합니다.
시장의 변동성과 강도에 따라 적응을 위해 ATR 출구와 같은 방법을 사용하여 출구를 최적화하십시오. 불안정한 시장에서 더 긴 출구와 강한 트렌드에서 더 넓은 출구.
최적의 위험-수익 조합을 찾기 위해 팩 비율과 범위를 최적화합니다. 최적의 매개 변수를 찾기 위해 매개 변수 최적화를 추가하십시오.
과도한 거래를 피하기 위해 출구 수를 줄이십시오. 예를 들어 가격 버퍼 구역을 설정하고 특정 가격 움직임을 초과 한 후에만 출구하십시오.
수수료 요인을 고려하고, 예상 수익이 수수료 비용보다 낮을 경우 출출을 피하거나 수수료에 기반한 비율을 최적화하십시오.
출구 가격 이동 대신 깊이에 기반한 주문서 출구를 사용하십시오. 깊이 우선 순위에 기반한 최고의 입찰/구매 가격을 사용하여 출구하십시오.
이 전략은 1%, 2%, 3% 및 4%의 4 개의 출구로 여러 비율의 수익 출구 효과를 달성하며, 점진적으로 수익성있는 출구를 허용하며, 극단적인 움직임에서 큰 손실을 방지하기 위해 2%의 스톱 로스를 사용합니다. 위험과 수익을 균형 잡으며 추가 수익을 놓치지 않도록합니다. 그러나 혼란과 더 높은 거래 빈도와 같은 몇 가지 위험이 있습니다. 제공된 최적화 제안은 전략에 통합되면 더 많은 시장 조건에서 성과를 향상시키는 데 도움이 될 수 있습니다.
/*backtest start: 2023-10-31 00:00:00 end: 2023-11-30 00:00:00 period: 3h basePeriod: 15m 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 //@version=4 strategy("Multiple %% profit exits example", overlay=false, default_qty_value = 10) longCondition = crossover(sma(close, 14), sma(close, 28)) if (longCondition) strategy.entry("My Long Entry Id", strategy.long) shortCondition = crossunder(sma(close, 14), sma(close, 28)) if (shortCondition) strategy.entry("My Short Entry Id", strategy.short) percentAsPoints(pcnt) => strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) lossPnt = percentAsPoints(2) strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt) strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt) strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt) strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt) profitPercent(price) => posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0 (price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100 p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound") p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound") fill(p1, p2, color = color.red)