패러볼릭 SAR 트렌드 추적 스톱 로스 역전 전략

저자:차오장, 날짜: 2024-02-01 14:54:09
태그:

img

전반적인 설명

패러볼릭 SAR 트렌드 추적 스톱 로스 역전 전략은 트렌드를 식별하고 트렌드가 역전될 때 역트렌드 포지션을 입력하기 위해 패러볼릭 SAR 지표를 사용하는 전략이다. 이 전략은 또한 위험을 제어하기 위해 스톱 로스 및 수익 메커니즘을 포함합니다.

전략 논리

이 전략은 현재 시장 트렌드를 판단하기 위해 파라볼릭 SAR 지표를 사용합니다. 파라볼릭 SAR는 파라볼릭 스톱 앤 리버스 (Parabolic Stop and Reverse) 를 의미합니다. 이 지표 라인은 가격 차트에서 일련의 파라볼라를 형성하며 이러한 파라볼라 포인트는 잠재적 인 반전 지점을 나타냅니다.

SAR 포인트가 하락하고 가격 이하로 떨어지면 상승 추세를 나타냅니다. SAR 포인트가 상승하고 가격 이상으로 떨어지면 하락 추세를 나타냅니다. 전략은 SAR 포인트의 위치에 따라 현재 트렌드 방향을 판단합니다.

구체적으로, SAR 포인트가 상승 추세를 보이고 가격보다 높을 때 전략은 단축됩니다; SAR 포인트가 하락 추세를 보이고 가격보다 낮을 때 전략은 길게됩니다. 즉 SAR 포인트가 트렌드 반전을 나타낼 때 역 트렌드 지위에 진입합니다.

또한, 전략은 또한 스톱 로스 및 영업 메커니즘을 설정합니다. 장기간에 걸리면 손실을 제한하기 위해 스톱 로스 가격을 설정할 수 있습니다. 동시에 특정 목표 이익에 도달한 후 포지션을 닫기 위해 영업 가격을 설정할 수 있습니다. 쇼트 이동은 비슷합니다.

이점 분석

트렌드 지표와 스톱 로스/프로프트 취득 메커니즘을 결합하는 주요 장점은 다음과 같습니다.

  1. 역동 트렌드 기회를 적시에 파악하여 역동 트렌드 거래를 할 수 있습니다.
  2. 스톱 로스를 설정하고 이윤을 취함으로써 위험과 이윤을 적극적으로 제어합니다.
  3. 파라볼 SAR는 광범위하게 사용되고 효과적인 역지표입니다.
  4. 간단하고 명확한 전략 규칙, 이해하기 쉽고 실행하기 쉽습니다.

위험 분석

이 전략에는 몇 가지 위험 요소가 있습니다.

  1. 파라볼리 SAR 표시기가 완벽하지 않아서 가끔 잘못된 신호를 발생시킵니다.
  2. 스톱 로즈와 영업 영업 가격은 합리적으로 설정되어야 합니다. 그렇지 않으면 조기 중단되거나 영업 영업이 될 수 있습니다.
  3. 거래 수수료는 또한 전체 이익에 영향을 미칩니다.
  4. 반전 후의 새로운 경향은 단기적일 수 있습니다.

이러한 위험은 매개 변수 최적화, 다른 필터 지표 등을 사용하여 해결할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 가장 좋은 조합을 찾기 위해 Parabolic SAR 매개 변수를 최적화합니다.
  2. 다른 스톱 로스를 시도하고, 스톱 로스를 추적하는 것과 같은 수익 전략을 취하십시오.
  3. 역거래 신호를 필터링하기 위해 지표 또는 조건을 추가합니다.
  4. 시장 조건에 따라 위치 조절을 추가합니다.
  5. 각기 다른 거래 도구에 대한 매개 변수를 조정합니다.

결론

일반적으로, 이것은 트렌드 추적 스톱 로스 역전 전략입니다. 트렌드 역전을 식별하고 또한 스톱 로스 및 수익을 취하는 수단으로 위험을 제어합니다. 최적화 후 라이브 트레이딩에 유용한 전략이 될 수 있습니다.


/*backtest
start: 2024-01-24 00:00:00
end: 2024-01-31 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Parabolic SAR Strategy", overlay=true)
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na
if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := min(AF + increment, maximum)
	if uptrend
		SAR := min(SAR, low[1])
		if bar_index > 1
			SAR := min(SAR, low[2])
	else
		SAR := max(SAR, high[1])
		if bar_index > 1
			SAR := max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)
	if barstate.isconfirmed
		if uptrend
			strategy.entry("ParSE", strategy.short, stop=nextBarSAR, comment="ParSE")
			strategy.cancel("ParLE")
		else
			strategy.entry("ParLE", strategy.long, stop=nextBarSAR, comment="ParLE")
			strategy.cancel("ParSE")
plot(SAR, style=plot.style_cross, linewidth=3, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=3, color=color.aqua)
//Stop Loss Inputs
use_short_stop_loss = input(false, title="Short Stop Loss", group="Stop Loss and Take Profit", inline="Short_SL")
short_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, 
     defval=5, group="Stop Loss and Take Profit", inline="Short_SL") * 0.01
use_long_stop_loss = input(false, title="Long Stop Loss", group="Stop Loss and Take Profit", inline="Long_SL")
long_stop_loss = input(title="(%)", type=input.float, minval=0.0, step=0.1, 
     defval=5, group="Stop Loss and Take Profit", inline="Long_SL") * 0.01

//Take Profit Inputs     
use_short_take_profit = input(false, title="Short Take Profit", group="Stop Loss and Take Profit", inline="Short_TP")
short_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1,
     defval = 20, group="Stop Loss and Take Profit", inline="Short_TP") * .01
use_long_take_profit = input(false, title="Long Take Profit", group="Stop Loss and Take Profit", inline="Long_TP")
long_take_profit = input(title="(%)", type=input.float, minval=0.0, step=0.1,
     defval = 20, group="Stop Loss and Take Profit", inline="Long_TP") * .01


longStopPrice  = strategy.position_avg_price * (1 - long_stop_loss)
shortStopPrice = strategy.position_avg_price * (1 + short_stop_loss)
longLimitPrice = strategy.position_avg_price * (1 + long_take_profit)
shortLimitPrice = strategy.position_avg_price * (1 - short_take_profit)


if (strategy.position_size > 0.0)
    if (use_long_stop_loss and not use_long_take_profit)
        strategy.exit("Long", stop = longStopPrice)
    if (use_long_take_profit and not use_long_stop_loss)
        strategy.exit("Long", limit = longLimitPrice)
    if (use_long_take_profit and use_long_stop_loss)
        strategy.exit("Long", stop = longStopPrice, limit=longLimitPrice)
if (strategy.position_size < 0.0)
    if (use_short_stop_loss and not use_short_take_profit)
        strategy.exit("Short", stop = shortStopPrice)
    if (use_short_take_profit and not use_short_stop_loss)
        strategy.exit("Short", limit = shortLimitPrice)
    if (use_short_take_profit and use_short_stop_loss)
        strategy.exit("Short", stop = shortStopPrice, limit = shortLimitPrice)

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

더 많은