파인스크립트 기본반
분류 예제

지표에서 포지션에 따라 복수 얼러트 방지하기

페이지 정보

본문

전략 백테스트의 경우 매매가 발생하여 포지션이 있는 상태에서 다시 같은 매매 신호가 발생하더라도 추가 신호는 나오지 않습니다.

(단, 파라미딩을 2이상 설정하면 추가 신호 발생)


지표는 포지션을 따로 계산하는 변수가 없습니다.

따라서, 임의로 포지션 변수를 주어 매매가 발생할때마다 수동으로 포지션을 바꿔줘야합니다.


대부분의 경우에는 매수와 매수청산, 매도와 매도 청산이 교차로 반복하여 나오기 때문에 중복 신호가 나오지 않습니다.

예를 들어 이평선 크로스 전략이라면, 골든 크로스 후에는 반드시 데드 크로스가 나와야 골든 크로스가 다시 나올 수 있습니다.

골든 크로스가 나온 후 다시 골든 크로스가 또 나오지는 않기 때문에 이런 방지 기능을 넣을 필요는 없습니다.


하지만, 특별한 경우에는 필요할 수 있습니다.

여기서 설명하는 방법외에도 다른 방법으로 구현 가능할것입니다.



[방법]

nowPosition이라는 변수에 포지션에 들어갔는지 여부를 저장해놓고 포지션에 따라 반복 신호를 방지해보겠습니다.


nowPosition의 초기값 0은 포지션이 없는 상태입니다.

롱포지션에 들어가면 nowPosition을 1로 바꿉니다.

숏포지션에 들어가면 nowPodition을 -1로 바꿉니다.

포지션을 청산하는 경우에는 nowPosition을 0으로 바꿉니다.


롱포지션에 들어가는 경우, 직전까지 롱포지션을 유지하고 있는 상태면 안되므로, nowPosition[1]이 1이면 들어갈 수 없습니다.

숏포지션에 들어가는 경우, 직전까지 숏포지션을 유지하고 있는 상태면 안되므로, nowPosition[1]이 -1이면 들어갈 수 없습니다.

롱포지션을 청산하는 경우, 직전까지 롱 포지션을 유지하고 있어야 하므로, nowPosition[1]이 1이어야 합니다.

숏포지션을 청산하는 경우, 직전까지 숏 포지션을 유지하고 있어야 하므로, nowPosition[1]이 -1이어야 합니다.

(nowPosition[1] 은 직전의 nowPosition)


즉, nowPosition이

0이면 포지션이 없는상태,

1이면 롱포지션,

-1이면 숏포지션입니다.


아래 두 예제를 참고해보세요.


[매매 조건]

매수 진입 : 8000달러 초과, 9000달러 미만

매수 청산 : 9000달러 초과

매도 진입 : 7000달러 미만, 6000달러 초과

매도 청산 : 6000달러 미만



1. 매매 조건에 의한 신호 (복수 신호)


4e02092a5031d6f51f1124ac7f36a460_1589006667_72.png
 

//@version=4
study("example", "EX", true)
longCondition = close > 8000 and close < 9000
exitLongCondition = close > 9000
 
shortCondition = close < 7000 and close > 6000
exitShortCondition = close < 6000
 
plotshape(longCondition[1], "Long", shape.arrowup, location.belowbar, color.green, text="Long")
plotshape(shortCondition[1], "Short", shape.arrowdown, location.abovebar, color.red, text="Short")
plotshape(exitLongCondition[1], "exitLong", shape.arrowdown, location.abovebar, color.purple, text="exitLong")
plotshape(exitShortCondition[1], "exitShort", shape.arrowup, location.belowbar, color.purple, text="exitShort")



2. 포지션을 고려한 신호 (단수 교차 신호)


4e02092a5031d6f51f1124ac7f36a460_1589006689_6.png
 

//@version=4

study("example", "EX", true)
nowPosition = 0
 
longCondition = close > 8000 and close < 9000 and nowPosition[1] != 1
exitLongCondition = close > 9000 and nowPosition[1] == 1
 
shortCondition = close < 7000 and close > 6000 and nowPosition[1] != -1
exitShortCondition = close < 6000 and nowPosition[1] == -1
 
nowPosition :=
 longCondition ? 1 :
 exitLongCondition or exitShortCondition ? 0 :
 shortCondition ? -1 : nz(nowPosition [1])
 
plotshape(longCondition, "Long", shape.arrowup, location.belowbar, color.green, text="Long")
plotshape(shortCondition, "Short", shape.arrowdown, location.abovebar, color.red, text="Short")
plotshape(exitLongCondition, "exitLong", shape.arrowdown, location.abovebar, color.purple, text="exitLong")
plotshape(exitShortCondition, "exitShort", shape.arrowup, location.belowbar, color.purple, text="exitShort")

관련자료

전체 25건 / 1페이지

+ 최근글


+ 새댓글


통계