상세 컨텐츠

본문 제목

고점 돌파 전략 보완하기

Trading

by jaryeonge 2024. 11. 9. 12:14

본문

이전 포스팅에서 다뤘던 고점 돌파 전략을 보완해보려고 한다.

 

2024.10.02 - [Trading] - Long and High Strategy (고점 돌파 전략)

 

Long and High Strategy (고점 돌파 전략)

최근에 다양한 오실레이터들을 사용해서 선물 트레이딩 전략을 수립해보면서 느낀점이 있다.CCI, RSI, MACD, ADX... 이런 것들이 과연 변화하는 시장에서 유연하게 대처할 수 있는데 도움을 주는 것

alpha-miner.tistory.com

 

위 글에서 내가 실시간 가격으로 청산하는 것을 파인스크립트로 구현하기 어렵다고 했는데 아니었다. 빌트인 함수 레퍼런스를 더 꼼꼼히 읽어봤어야 했는데... 아무튼 실시간 가격으로 청산하는 것 + sma를 통해서 진입 신호 필터링을 추가해보았다.

 

우선 전략 수정의 논리는 아래와 같다.

1. 진입 신호 필터링 없이 트레일링 라인을 극히 올리면서 실패 리스크에 대응하겠다. -> 진입신호를 잘 잡았음에도 불구하고 시장의 노이즈가 있을 때 너무나도 쉽게 청산한다. -> 필터링을 추가하고, 좀 더 관대한 트레일링 스탑라인을 적용한다.

2. 추세 필터링을 적용한다면 고점 돌파하는 시점을 좀 더 촘촘히 보자.

3. 실시간 가격 기준 청산을 적용하여 실제 시그널메이커와 유사한 백테스트를 해보자.

 

AS-IS

장기 고점 봉수: 150

단기 고점 봉수: 20

트레일링 %: 0.001%

 

TO-BE

장기 고점 봉수: 50

단기 고점 봉수: 10

SMA를 이용해 추세 필터링

실시간 가격 기준 청산

트레일링 %: 0.006%

 

Pinescript code

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jaryeonge

//@version=5
strategy("NQ60 long and high", overlay=true)

TRAIL_X = 0.9960

global_highest = ta.highest(close, 50)
global_lowest = ta.lowest(close, 150)

local_highest = ta.highest(close, 10)
local_lowest = ta.lowest(close, 50)

trail_line = local_highest * TRAIL_X

sma1 = ta.sma(close, 5)
sma2 = ta.sma(close, 13)
sma3 = ta.sma(close, 30)
sma4 = ta.sma(close, 80)
sma5 = ta.sma(close, 300)

plot(global_highest, color=color.green)
plot(global_lowest, color=color.black)
plot(local_highest, color=color.blue)
plot(local_lowest, color=color.purple)
plot(trail_line, color = color.red)

longCondition = close >= global_highest and local_lowest > global_lowest and sma1 > sma2 and sma2 > sma3 and sma3 > sma4 and close > sma5
longClose = close <= trail_line

if (longCondition)
    strategy.entry("long", strategy.long)

strategy.exit("long", stop = trail_line)

 

Chart 예시

 

전략 테스팅 결과

AS-IS

 

TO-BE

 

승률, 수익 팩터, 최대 손실폭, 순익 등등 모든 수치가 개선 된 것을 볼 수 있다. 기본적인 추세 필터링은 아무래도 중요하다는 것을 다시 한 번 느낀다.

관련글 더보기