최근에 전략을 운용하면서 뭔가 아쉽다는 생각이 계속들었다. 트레일링 스탑 라인이 높아 시장이 요동치면 금방 청산한다던가 아니면 일정 수익을 거두면 익절을 해야하는데 트레일링 스탑 라인으로 떨어질 때까지 청산하지 않아 기껏 거두었던 수익이 사라진다던가... 그래서 이번 기회에 익절과 손절 전략의 문제점을 파악해보고 청산을 다양하게 설정하여 전략을 보완해보고자 한다.
위의 차트에 나온 사례가 두 가지 경우를 모두 포함하고 있다. 1월 30일~2월1일 정도까지의 NQ 차트인데 1번 거래의 경우 분명히 상승추세에 있지만 트레일링 스탑라인에 걸쳐 손절을 해버린 경우고, 2번 거래의 경우는 이익을 거뒀지만 익절을 하지 않다가 하락하여 스탑라인에 도달했을 때 청산을 해서 그닥 좋은 수익을 거두진 못한 경우다.
그래서 이를 해결하기 위해 세 가지 접근 방법을 택해 백테스트를 진행했다.
일단 익절한 뒤, 어차피 상승추세일 때 또 고점을 돌파하면 재진입하는 식으로 추세를 놓치지 않고 편승한다.
ATR만 가지고 스탑라인을 설정하면 주간 시장의 변동성이 적은 경우 라인이 올라가게 되기 때문에 피보나치의 0.618 수치를 이용하여 둘 중 더 낮은 것을 트레일링 스탑라인으로 설정한다.
스탑라인이 낮아질 경우, 큰 손실이 발생할 가능성이 있기에 진입 지점에서 일정 퍼센트 하락하면 손절을 진행해 최악의 상황을 대비한다.
이를 시그널메이커 코드로 구현해보면 다음과 같다.
// Finding Swing High And Low
if Highest(High, SwingParam) == high Then SwingHighValue = high;
if Lowest(Low, SwingParam) == low Then SwingLowValue = low;
// Calculate Fibonacci levels
Fib0 = SwingHighValue;
Fib1 = SwingLowValue;
Fib382 = SwingHighValue - (SwingHighValue - SwingLowValue) * 0.382;
Fib50 = SwingHighValue - (SwingHighValue - SwingLowValue) * 0.5;
Fib618 = SwingHighValue - (SwingHighValue - SwingLowValue) * 0.618;
TrailLine = min(LocalHighest - (ATR(ATRParam) * ATRX), Fib618);
// 중간생략...
/* 매수진입 */
If CurrentEntries == 0 And LongCondition Then Buy("Buy", AtStop, GlobalHighest * EntryX, 4);
// 1번
SetPercentTrailing(TrailPercentParam, 1);
// 2번
ExitLong ("ExitLong", AtStop, TrailLine, DEF, 4);
// 3번
SetStopLoss(StopLossPercentParam, PercentStop);
트레이딩뷰의 경우 세 가지 청산 방법을 다 담기에는 코딩의 한계가 있어서... 어쩔 수 없이 가독성이 좀 떨어지는 시그널메이커 예시를 가져왔다. 일정 수익을 거둔 후 익절을 해 단기 하락을 방지하고, 다시 고점을 돌파하면 재진입한다는 전략이 제대로 구현된 것을 확인할 수 있다.
횡보 트레이딩 아이디어 (trading when the market is in sideways) (1) | 2025.02.02 |
---|---|
나스닥 선물 숏 전략 만들기 (with 시그널메이커, 트레이딩뷰) (4) | 2025.01.17 |
고점 돌파 전략 보완하기 (1) | 2024.11.09 |
Long and High Strategy (고점 돌파 전략) (1) | 2024.10.02 |
횡보란 무엇인가? (1) | 2024.08.21 |