가격 기반 스톱 로스 및 영업 전략

저자:차오장, 날짜: 2023-11-23 15:36:00
태그:

img

전반적인 설명

이 전략의 핵심 아이디어는 입력 스톱 손실을 사용 하 고 수익을 취하는 금액을 합리적인 스톱 손실을 설정 하 고 수익 틱 수준을 취 하 고, 각 거래의 위험과 보상을 관리 하는 것입니다.

전략 논리

전략은 먼저 무작위 입력 신호를 설정하고, SMA14가 SMA28를 넘을 때 길게 이동하고, SMA14가 SMA28를 넘을 때 짧게 이동합니다.

입력 후, 전략은 Stop Loss 달러 금액 입력에 기초하여 Stop Loss 틱 레벨을 계산하기 위해 moneyToSLPoints 함수를 사용합니다. 마찬가지로, 이윤 틱 레벨을 계산합니다. 이것은 달러 금액에 기초하여 Stop Loss 및 이윤을 구현합니다.

예를 들어, 매 틱 값이 10달러에 해당하는 100개의 계약을 장기간에 걸고, 스톱 로스가 100달러로 설정되면, 스톱 로스 틱 레벨은 100/10/100 = 0.1 틱으로 계산됩니다.

드디어strategy.exit스톱 로스 및 영업 출구 포인트를 설정하는 데 사용됩니다. 스톱 로스 및 영업 출구 라인은 디버깅 목적으로도 그래프화됩니다.

이점 분석

이 가격 기반의 스톱 로스 및 영업 전략의 가장 큰 장점은 매개 변수가 직관적이기 때문입니다. 위험과 보상 사이의 관계는 매개 변수 선택에 대한 지침을 명확하게 볼 수 있습니다.

또한, 달러 금액의 스톱은 시장 변동성이 변할 때 고정된 틱 스톱에 비해 실제 위험 노출을 더 잘 제어 할 수 있습니다.

위험 분석

이 스톱 로스 및 수익 전략에는 몇 가지 위험이 있습니다.

  1. 만약 스톱 러스가 너무 넓다면, 반전에 걸리기 쉽다. 만약 스톱 거리가 너무 커지면, 단기 반전이 가능해지고 트레이드를 잡을 수 있다.

  2. 만약 이윤을 얻는 거리가 너무 가깝다면 이윤을 얻는 것이 어려울 수 있습니다. 이윤을 얻는 거리가 매우 작다면 정상적인 일방적 추세가 이윤을 얻는 것이 어려울 수 있습니다.

  3. 적절한 계약이 선택되어야 합니다. 원유와 같은 높은 틱 가치 계약이 사용된다면, 같은 달러 스톱 손실은 소음으로 쉽게 멈출 수있는 매우 작은 틱으로 번역됩니다.

최적화 방향

이 전략이 개선 될 수 있는 몇 가지 방법은:

  1. 진입 신호는 트렌드, 변동성, 계절성 등을 시간 엔트리에 더 잘 결합함으로써 강화 될 수 있습니다.

  2. 적절한 스톱/이익 비율은 다른 상품에 따라 선택할 수 있습니다. 더 큰 스톱은 매우 변동적인 상품에서 사용할 수 있습니다.

  3. 스톱은 변동성에 적응할 수 있습니다. 변동성이 증가할 때 넓어지고 변동성이 떨어질 때 단단해집니다.

  4. 서로 다른 거래 세션에 다른 스톱/프로프트 접근 방식을 사용할 수 있습니다. 미국 세션 동안 더 긴 스톱을 사용할 수 있습니다.

결론

이 전략은 직관적 인 스톱 손실을 구현하고 달러 금액에 따라 이익을 취합니다. 이의 장점은 직관적 인 매개 변수 및 자본 통제입니다. 단점은 반전과 손실 된 이익에 걸리는 것이 쉽다. 엔트리를 향상시키고 스톱 / 타겟을 최적화하고 더 안정적으로 만들기 위해 더 나은 제품을 선택하여 개선 할 수 있습니다.


/*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)

더 많은