커뮤니티

지표 시작 시간 도움 요청드립니다.

프로필 이미지
이만스닥
2022-04-26 11:50:39
1265
글번호 158338
답변완료
안녕하세요 항상 성실한 답변 정말로 감사합니다. 답변 주시는 것들로 많이 공부하고 있습니다. 고맙습니다. 2가지 요청사항이 있습니다. 1. 아래의 range bar의 시작이 미장 시작이 되었으면 좋겠습니다. 아래는 수식지왕님의 range bar 차트인데요, 제가 살펴보니 if index = 0라는 수식이 23번째 줄에 있는 것으로 봐서, 주식용으로 만들어 진 것 같습니다. 미장 시작하고 첫번쨰 틱부터가 range bar의 시작이었으면 좋겠습니다. 도와주세요 2. (국장 주식 기준) 현재 수식으로는 장 마감후 갭상승 또는 갭락이 뜨면 없는 허봉이 생성이 되는데요, 그런거 없이 그냥 당일 종가(또는 장 마감 1분전)에 range bar도 강제로 완성되고, 다음날 갭상이나 갭락 뜨면 그냥 당일 첫번쨰 가격을 기준으로 다시 range bar가 생기게 해주세요. 감사합니다 #==============================================================================# # 지 표 명 : Range Bar # 작 성 자 : 수식지왕 # 내 용 : 분봉 차트를 Range Bar Chart로 변환 # 블 로 그 : http://yahoosir.blog.me #==============================================================================# Input:tick(20); Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0); Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0); #==============================================================================# # Range Bar Chart 계산 #==============================================================================# If Index == 0 Then { tickVal = tick * PriceScale; oneTick = PriceScale; OO[0] = O; HH[0] = O; LL[0] = O; CC[0] = O; } count = 0; val[0] = O; val[3] = C; If O > C Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If O < C Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] > O Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] < O Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == 1 Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == -1 Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } For k = 0 To 3 { If HH[0] > 0 && HH[0] < val[k] Then { While val[k] - LL[0] > tickVal { HH[0] = LL[0] + tickVal; CC[0] = HH[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = HH[1] + oneTick; LL[0] = OO[0]; } If val[k] - LL[0] <= tickVal Then { HH[0] = val[k]; CC[0] = val[k]; } } Else If LL[0] > val[k] Then { While HH[0] - val[k] > tickVal { LL[0] = HH[0] - tickVal; CC[0] = LL[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = LL[1] - oneTick; HH[0] = OO[0]; } If HH[0] - val[k] <= tickVal Then { LL[0] = val[k]; CC[0] = val[k]; } } Else { CC[0] = val[k]; } } #==============================================================================# # 지표식 표현 # 분봉의 장대봉이 레인지 바차트로 전환하면서 여러개 봉으로 변환될 경우 # 중간에 표현할 봉의 개수를 remain에 저장 #==============================================================================# If DayIndex == 0 Then remain = 0; remain = remain + count; If remain > 0 Then { n = remain; If OO[n] < CC[n] Then { plot1(LL[n],"고저1",RED); plot2(HH[n],"고저2",RED); plot3(OO[n],"시가",RED); plot4(CC[n],"종가",RED); } Else { plot1(HH[n],"고저1",BLUE); plot2(LL[n],"고저2",BLUE); plot3(OO[n],"시가",BLUE); plot4(CC[n],"종가",BLUE); } remain = remain - 1; } If LastBarOnChart == 1 Then { If OO[0] < CC[0] Then { plot1(LL[0],"고저1",RED); plot2(HH[0],"고저2",RED); plot3(OO[0],"시가",RED); plot4(CC[0],"종가",RED); } Else { plot1(HH[0],"고저1",BLUE); plot2(LL[0],"고저2",BLUE); plot3(OO[0],"시가",BLUE); plot4(CC[0],"종가",BLUE); } }
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-04-26 15:20:45

안녕하세요 예스스탁입니다. index == 0은 차트 첫봉을 지칭합니다. 영업일 변경시로 변경해 드립니다. 모든 종목에서 영업일 변경 첫봉부터 새로 다시 계산됩니다. #==============================================================================# # 지 표 명 : Range Bar # 작 성 자 : 수식지왕 # 내 용 : 분봉 차트를 Range Bar Chart로 변환 # 블 로 그 : http://yahoosir.blog.me #==============================================================================# Input:tick(20); Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0); Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0); #==============================================================================# # Range Bar Chart 계산 #==============================================================================# If bdate != Bdate[1] or Index == 0 Then { tickVal = tick * PriceScale; oneTick = PriceScale; OO[0] = O; HH[0] = O; LL[0] = O; CC[0] = O; } count = 0; val[0] = O; val[3] = C; If O > C Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If O < C Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] > O Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] < O Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == 1 Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == -1 Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } For k = 0 To 3 { If HH[0] > 0 && HH[0] < val[k] Then { While val[k] - LL[0] > tickVal { HH[0] = LL[0] + tickVal; CC[0] = HH[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = HH[1] + oneTick; LL[0] = OO[0]; } If val[k] - LL[0] <= tickVal Then { HH[0] = val[k]; CC[0] = val[k]; } } Else If LL[0] > val[k] Then { While HH[0] - val[k] > tickVal { LL[0] = HH[0] - tickVal; CC[0] = LL[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = LL[1] - oneTick; HH[0] = OO[0]; } If HH[0] - val[k] <= tickVal Then { LL[0] = val[k]; CC[0] = val[k]; } } Else { CC[0] = val[k]; } } #==============================================================================# # 지표식 표현 # 분봉의 장대봉이 레인지 바차트로 전환하면서 여러개 봉으로 변환될 경우 # 중간에 표현할 봉의 개수를 remain에 저장 #==============================================================================# If Bdate != Bdate[1] Then remain = 0; remain = remain + count; If remain > 0 Then { n = remain; If OO[n] < CC[n] Then { plot1(LL[n],"고저1",RED); plot2(HH[n],"고저2",RED); plot3(OO[n],"시가",RED); plot4(CC[n],"종가",RED); } Else { plot1(HH[n],"고저1",BLUE); plot2(LL[n],"고저2",BLUE); plot3(OO[n],"시가",BLUE); plot4(CC[n],"종가",BLUE); } remain = remain - 1; } If LastBarOnChart == 1 Then { If OO[0] < CC[0] Then { plot1(LL[0],"고저1",RED); plot2(HH[0],"고저2",RED); plot3(OO[0],"시가",RED); plot4(CC[0],"종가",RED); } Else { plot1(HH[0],"고저1",BLUE); plot2(LL[0],"고저2",BLUE); plot3(OO[0],"시가",BLUE); plot4(CC[0],"종가",BLUE); } } 즐거운 하루되세요 > 이만스닥 님이 쓴 글입니다. > 제목 : 지표 시작 시간 도움 요청드립니다. > 안녕하세요 항상 성실한 답변 정말로 감사합니다. 답변 주시는 것들로 많이 공부하고 있습니다. 고맙습니다. 2가지 요청사항이 있습니다. 1. 아래의 range bar의 시작이 미장 시작이 되었으면 좋겠습니다. 아래는 수식지왕님의 range bar 차트인데요, 제가 살펴보니 if index = 0라는 수식이 23번째 줄에 있는 것으로 봐서, 주식용으로 만들어 진 것 같습니다. 미장 시작하고 첫번쨰 틱부터가 range bar의 시작이었으면 좋겠습니다. 도와주세요 2. (국장 주식 기준) 현재 수식으로는 장 마감후 갭상승 또는 갭락이 뜨면 없는 허봉이 생성이 되는데요, 그런거 없이 그냥 당일 종가(또는 장 마감 1분전)에 range bar도 강제로 완성되고, 다음날 갭상이나 갭락 뜨면 그냥 당일 첫번쨰 가격을 기준으로 다시 range bar가 생기게 해주세요. 감사합니다 #==============================================================================# # 지 표 명 : Range Bar # 작 성 자 : 수식지왕 # 내 용 : 분봉 차트를 Range Bar Chart로 변환 # 블 로 그 : http://yahoosir.blog.me #==============================================================================# Input:tick(20); Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0); Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0); #==============================================================================# # Range Bar Chart 계산 #==============================================================================# If Index == 0 Then { tickVal = tick * PriceScale; oneTick = PriceScale; OO[0] = O; HH[0] = O; LL[0] = O; CC[0] = O; } count = 0; val[0] = O; val[3] = C; If O > C Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If O < C Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] > O Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } Else If C[1] < O Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == 1 Then { val[1] = H; val[2] = L; If L < C Then trend = 1; Else trend = -1; } Else If trend == -1 Then { val[1] = L; val[2] = H; If H > C Then trend = -1; Else trend = 1; } For k = 0 To 3 { If HH[0] > 0 && HH[0] < val[k] Then { While val[k] - LL[0] > tickVal { HH[0] = LL[0] + tickVal; CC[0] = HH[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = HH[1] + oneTick; LL[0] = OO[0]; } If val[k] - LL[0] <= tickVal Then { HH[0] = val[k]; CC[0] = val[k]; } } Else If LL[0] > val[k] Then { While HH[0] - val[k] > tickVal { LL[0] = HH[0] - tickVal; CC[0] = LL[0]; For j = 998 DownTo 0 { OO[j+1] = OO[j]; HH[j+1] = HH[j]; LL[j+1] = LL[j]; CC[j+1] = CC[j]; } count = count + 1; OO[0] = LL[1] - oneTick; HH[0] = OO[0]; } If HH[0] - val[k] <= tickVal Then { LL[0] = val[k]; CC[0] = val[k]; } } Else { CC[0] = val[k]; } } #==============================================================================# # 지표식 표현 # 분봉의 장대봉이 레인지 바차트로 전환하면서 여러개 봉으로 변환될 경우 # 중간에 표현할 봉의 개수를 remain에 저장 #==============================================================================# If DayIndex == 0 Then remain = 0; remain = remain + count; If remain > 0 Then { n = remain; If OO[n] < CC[n] Then { plot1(LL[n],"고저1",RED); plot2(HH[n],"고저2",RED); plot3(OO[n],"시가",RED); plot4(CC[n],"종가",RED); } Else { plot1(HH[n],"고저1",BLUE); plot2(LL[n],"고저2",BLUE); plot3(OO[n],"시가",BLUE); plot4(CC[n],"종가",BLUE); } remain = remain - 1; } If LastBarOnChart == 1 Then { If OO[0] < CC[0] Then { plot1(LL[0],"고저1",RED); plot2(HH[0],"고저2",RED); plot3(OO[0],"시가",RED); plot4(CC[0],"종가",RED); } Else { plot1(HH[0],"고저1",BLUE); plot2(LL[0],"고저2",BLUE); plot3(OO[0],"시가",BLUE); plot4(CC[0],"종가",BLUE); } }