이 전략의 핵심 아이디어는 입력 스톱 손실을 사용 하 고 수익을 취하는 금액을 합리적인 스톱 손실을 설정 하 고 수익 틱 수준을 취 하 고, 각 거래의 위험과 보상을 관리 하는 것입니다.
전략은 먼저 무작위 입력 신호를 설정하고, SMA14가 SMA28를 넘을 때 길게 이동하고, SMA14가 SMA28를 넘을 때 짧게 이동합니다.
입력 후, 전략은 Stop Loss 달러 금액 입력에 기초하여 Stop Loss 틱 레벨을 계산하기 위해 moneyToSLPoints 함수를 사용합니다. 마찬가지로, 이윤 틱 레벨을 계산합니다. 이것은 달러 금액에 기초하여 Stop Loss 및 이윤을 구현합니다.
예를 들어, 매 틱 값이 10달러에 해당하는 100개의 계약을 장기간에 걸고, 스톱 로스가 100달러로 설정되면, 스톱 로스 틱 레벨은 100/10/100 = 0.1 틱으로 계산됩니다.
드디어strategy.exit스톱 로스 및 영업 출구 포인트를 설정하는 데 사용됩니다. 스톱 로스 및 영업 출구 라인은 디버깅 목적으로도 그래프화됩니다.
이 가격 기반의 스톱 로스 및 영업 전략의 가장 큰 장점은 매개 변수가 직관적이기 때문입니다. 위험과 보상 사이의 관계는 매개 변수 선택에 대한 지침을 명확하게 볼 수 있습니다.
또한, 달러 금액의 스톱은 시장 변동성이 변할 때 고정된 틱 스톱에 비해 실제 위험 노출을 더 잘 제어 할 수 있습니다.
이 스톱 로스 및 수익 전략에는 몇 가지 위험이 있습니다.
만약 스톱 러스가 너무 넓다면, 반전에 걸리기 쉽다. 만약 스톱 거리가 너무 커지면, 단기 반전이 가능해지고 트레이드를 잡을 수 있다.
만약 이윤을 얻는 거리가 너무 가깝다면 이윤을 얻는 것이 어려울 수 있습니다. 이윤을 얻는 거리가 매우 작다면 정상적인 일방적 추세가 이윤을 얻는 것이 어려울 수 있습니다.
적절한 계약이 선택되어야 합니다. 원유와 같은 높은 틱 가치 계약이 사용된다면, 같은 달러 스톱 손실은 소음으로 쉽게 멈출 수있는 매우 작은 틱으로 번역됩니다.
이 전략이 개선 될 수 있는 몇 가지 방법은:
진입 신호는 트렌드, 변동성, 계절성 등을 시간 엔트리에 더 잘 결합함으로써 강화 될 수 있습니다.
적절한 스톱/이익 비율은 다른 상품에 따라 선택할 수 있습니다. 더 큰 스톱은 매우 변동적인 상품에서 사용할 수 있습니다.
스톱은 변동성에 적응할 수 있습니다. 변동성이 증가할 때 넓어지고 변동성이 떨어질 때 단단해집니다.
서로 다른 거래 세션에 다른 스톱/프로프트 접근 방식을 사용할 수 있습니다. 미국 세션 동안 더 긴 스톱을 사용할 수 있습니다.
이 전략은 직관적 인 스톱 손실을 구현하고 달러 금액에 따라 이익을 취합니다. 이의 장점은 직관적 인 매개 변수 및 자본 통제입니다. 단점은 반전과 손실 된 이익에 걸리는 것이 쉽다. 엔트리를 향상시키고 스톱 / 타겟을 최적화하고 더 안정적으로 만들기 위해 더 나은 제품을 선택하여 개선 할 수 있습니다.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 10m 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 // //@version=4 strategy("Stop loss and Take Profit in $$ example", overlay=true) // random entry condition 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) moneyToSLPoints(money) => strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na p = moneyToSLPoints(input(200, title = "Take Profit $$")) l = moneyToSLPoints(input(100, title = "Stop Loss $$")) strategy.exit("x", profit = p, loss = l) // debug plots for visualize SL & TP levels pointsToPrice(pp) => na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick pp = plot(pointsToPrice(p), style = plot.style_linebr ) lp = plot(pointsToPrice(-l), style = plot.style_linebr ) avg = plot( strategy.position_avg_price, style = plot.style_linebr ) fill(pp, avg, color = color.green) fill(avg, lp, color = color.red)