자유게시판

키움수식을 파인스크립트 수식으로 바꾸었는데 뭐가 잘 못 된것일까요?

페이지 정보

작성일

본문

키움 수식은 아래와 같습니다. 

TrendDown()

 and 

UpShadow() < Height() * 0.5

 and 

DownShadow() > Body() * 1.5

 and 

!Doji()

and

V > avg(V, Period) * Multiple 


지표변수

Multiple 1.5

Period 6

--------------------------------------------------


파인에디터 수식은 아래와 같습니다


close>avg(close,20)

and high-max(open, close)< (high-low) * 0.5

and min(open, close)-low > abs(open-close)*1.5 

and open != close 

and volume > avg(volume, volume[6]) * 1.5



이렇게 작성했는데 키움에 나오는 신호와 파인에디터에서 나오는 신호가 다르게 됩니다

제가 무엇을 잘 못 한것일까요?

관련자료

김철호님의 댓글

제가 해본 결과 3군데에서 문제가 있었습니다.

1. 영웅문 수식의 avg와 파인 스크립트 avg가 다른 함수 입니다.
영웅문 avg와 같은 파인 스크립트 함수는 sma가 됩니다.
파인 스크립트 함수의 avg는 avg안에 들어있는 요소의 평균을 구할때 씁니다.
avg(100, 50, 20, 40) 이렇게 하면 (100+50+20+40) / 4가 됩니다.

2. 영웅문의 TrendDown을 구현하신 파인 스크립트의 비교 연산자의 방향이 잘못되었습니다.
TrendDown이 이평선을 기준으로 상승하락 트렌드를 판단하는 것 같네요.
하락 트렌드 이므로 주가가 이평선 아래 있어야 하므로 주가가 더 작아야겠지요.
좀더 검색해보니 이평과 주가가 같은 경우에도 하락 트렌드로 보는 것 같네요.

3. 거래량의 이평 공식이 잘못되었습니다.
6일간의 거래량 이평을 구하는 부분에서 sma(거래량, 기간)형식으로 쓰셨어야 하는데,
sma(거래량, 6일전 거래량) 이런식이 되어서 결과가 다르게 나온것 같습니다.

추가적으로, 트레이딩뷰의 거래량과 영웅문의 거래량이 아주 미묘한 차이가 있더군요.
정확한 원인은 알 수 없습니다만...
여튼 큰 차이는 아니라 결과는 거의 같게 나오겠지만, 그 차이로 결과가 다르게 나올 확률도 있다는 것을 염두에 두셔야 할것 같습니다.
아래에는 제가 수정해본 스크립트 입니다.
비교해보시고, 더 궁금하신 내용이 있으시면 글 남겨주세요.

조건문이 가로로 길어지는 것을 방지하기(가독성) 위해 줄바꿈을 했는데, and 앞에 한칸은 반드시 띄워주어야 윗줄과 이어진 것으로 인식합니다.

//@version=4
study("내 스크립트")
period = input(6, "기간")
multiple = input(1.5, "배수")

a = close <= sma(close, 20)
 and high - max(open, close) < (high-low) * 0.5
 and min(open, close) - low > abs(open-close) * 1.5
 and open != close
 and volume > sma(volume, period) * multiple

plot(a ? 1 : 0, "결과")

phyphy님의 댓글

안녕하세요
제가 댓글을 보기전에 혼자 고민해서 수정을 해보았었습니다.
댓글로 해주신 것과 제가 고민한것과 차이는 마지막줄인것 같은데요
제가 하는 방법과 알려주신 방법과 동일한 것일까요? 아니면 약간 다른 것인가요?
제가 트레이딩뷰에 적용해보니 비슷하게 나오는데 한두개는 다르게 나와서요
period와 multiple을 정의 하지 않고 무식하게 때려넣은 것인데 이렇게 하는 것과 input쓰는 것과의 차이가 있을까요?

 close<sma(close, 20)
 and high-max(open, close)< (high-low) * 0.5
and min(open, close)-low > abs(open-close)*1.5
and open != close
 and volume > avg(volume, volume[1], volume[2], volume[3], volume[4], volume[5], volume[6]) * 1.5

김철호님의 댓글

input으로 period와 multiple 값을 받게되면 차트 속성 창에서 기간과 배수를 편하게 다른 값으로 바꿀 수 있습니다.
input으로 받지 않는다면 계속 스크립트를 수정해야하는데, input을 쓰는 것보다 비효율적이라고 생각합니다.
만약 6일과 1.5배를 계속 평생 쓰실 생각이시면 input을 쓸 필요없이 작성하신대로 하시면 됩니다.

작성하신 부분에서 첫번째줄의 부등호가 다릅니다. 제가 나름 찾아본 결과로는 trenddown은 이평과 종가가 같을떄에도 성립하는데, 생각하시는 바에 따라서 사용하시면 되겠습니다.

마지막줄의 결과는 period가 6일 경우에만 phyphy님과 제가 작성한 결과가 같습니다.
전체 66건 / 1페이지