커뮤니티

수식 작성 부탁 드립니다

프로필 이미지
힘내라
2021-10-18 20:42:21
1349
글번호 152972
답변완료
보조지표 파인스크립트를 해석한것 입니다, 이걸 예스 랭귀지로 만들어 주셨으면 합니다.. 높은 시간대가 양봉이면 중간시간대와 낮은시간대중 높은 상승률을 출력 높은 시간대가 음봉이면 중간시간대와 낮은시간대중 낮은 상승률을 출력 하는 지표입니다. //@version=2 study("내 스크립트") // 현재 시간대를 쓸것인가? indip = input(1,type=bool,title="Use current timeframe?") // 기준시간대 (현재 시간대를 쓰지 않을 경우에 임의로 지정할 수 있음) tf = (indip==0?(input('60',type=resolution,title="Timeframe (only if previous opt is unflagged)")):period) // 높은시간대 (기준시간대에 따라 고시간대 설정) // 기준시간대가 X이면 고시간대를 Y로 설정 // 일이면 월, 4시간이면 주, 2시간이면 주, 1시간이면 주, 15분이면 640분, 5분이면 360분, 그외이면 없음 Timeframem = (tf=='D'?'M' :(tf=='240'?'W' :(tf=='120'?'W': (tf=='60'?'W' :(tf=='15'?'640':(tf=='5'?'360':'na')))))) // 중간시간대 (기준시간대에 따라 중시간대 설정) // 기준시간대가 X이면 중시간대를 Y로 설정 // 일이면 2주, 4시간이면 2일, 2시간이면 2일, 1시간이면 일, 15분이면 6시간, 5분이면 3시간, 그외이면 없음 Timeframed = (tf=='D'?'2W':(tf=='240'?'2D':(tf=='120'?'2D':(tf=='60'?'D' :(tf=='15'?'360':(tf=='5'?'180':'na')))))) // 낮은시간대 (기준시간대에 따라 저시간대 설정) // 기준시간대가 X이면 저시간대를 Y로 설정 // 일이면 주, 4시간이면 일, 2시간이면 일, 1시간이면 12시간, 15분이면 3시간, 5분이면 90분, 그외이면 없음 Timeframeh = (tf=='D'?'W' :(tf=='240'?'D' :(tf=='120'?'D': (tf=='60'?'720':(tf=='15'?'180':(tf=='5'?'90':'na')))))) // 높은시간대의 시가 불러옴 chm = security(tickerid, Timeframem, open) // 높은시간대의 종가 불러옴 chm1 = security(tickerid, Timeframem, close) // 높은시간대의 시가대비 종가 상승률 (종가 몸통의 비율) defm = (chm1/chm) -1 // 중간시간대의 시가 불러옴 chd = security(tickerid, Timeframed, open) // 중간시간대의 종가 불러옴 chd1 = security(tickerid, Timeframed, close) // 중간시간대의 시가대비 종가 상승률 (종가 몸통의 비율) defd = (chd1/chd) -1 // 낮은시간대의 시가 불러옴 chh = security(tickerid, Timeframeh, open) // 낮은시간대의 종가 불러옴 chh1 = security(tickerid, Timeframeh, close) // 낮은시간대의 시가대비 종가 상승률 (종가 몸통의 비율) defh = (chh1/chh) -1 // 출력 = // 높은시간대의 종가 몸통의 비율이 0보다 클때(높은시간대가 양봉일때) >>> 중간시간대와 낮은시간대중 상승률이 큰 시간대의 상승률을 채택 // 높은시간대의 종가 몸통의 비율이 0보다 클때(높은시간대가 양봉이 아닐때) >>> 중간시간대와 낮은시간대중 상승률이 작은 시간대의 상승률을 채택 output = defm > 0 ? (defd > defh ? defd : defh):(defd > defh ? defh : defd) // 채택된 시간대의 상승률 출력(영역) plot(output,linewidth=2,color=output>0?lime:red,transp=50,style=area) // 낮은시간대의 상승률 출력(선) plot(defh,color=defh>0?lime:red,transp=0,linewidth=1) // 낮은시간대의 상승률 출력(영역) plot(defh,color=defh>0?lime:red,transp=75,style=area) // 0선 hline(0)
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-10-19 14:43:46

안녕하세요 예스스탁입니다. 예스랭귀지는 차트에 적용되어 차트의 데이타를 이용합니다. 수식안에서 차트의 주기를 변경하거나 특정주기의 데이타를 별도로 불러오는 기능이 없습니다. 올려주신 내용과 같이 구현하려면 기본차트의 데이타를 이용해 다른 주기의 시고저종을 계산해서 사용해야 하며 기본차트와 배수로 큰 주기만 계산이 가능합니다. 예를 들어 기본차트가 5분 주기인데 5분보다 주기를 계산하거나 5분과 배수가 맞지 않는 7분주기등과 같은 주기는 계산이 불가능합니다. 기본차트를 가장낮은 시간대로 지정하고 중간과 높은 시간대만 계산해서 해당 값이 출력되게 작성해 드립니다. "D"는 일봉, "W"는 주봉, "M"은 월봉이고 "60"과 같이 ""안에 숫자를 지정하시면 다른주기 분봉을 계산합니다. input : 중간시간대("D"); input : 높은시간대("W"); var : S1(0),D1(0),M1(0),F1(0); var : S2(0),D2(0),M2(0),F2(0); var : defm(0),defh(0),defd(0),output(0); if 중간시간대 == "M" Then { if Bdate > Bdate[1]+30Then var1 = O; } else if 중간시간대 == "W" Then { if DayOfWeek(Bdate) < DayOfWeek(Bdate[1]) Then var1 = O; } Else if 중간시간대 == "D" then { var1 = DayOpen(0); } Else { value1 = StrToNum(중간시간대); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then{ if sdate == D1 Then M1 = TimeToMinutes(stime)-S1; Else M1 = TimeToMinutes(stime)+1440-S1; F1 = M1%value1; if Bdate != Bdate[1] or (Bdate == Bdate[1] and value1 > 1 and F1 < F1[1]) or (Bdate == Bdate[1] and value1 > 1 and M1 >= M1[1]+value1) or (Bdate == Bdate[1] and value1 == 1 and M1 > M1[1]) Then { var1 = O; } } } if 높은시간대 == "M" Then { if Bdate > Bdate[1]+30Then var2 = O; } else if 높은시간대 == "W" Then { if DayOfWeek(Bdate) < DayOfWeek(Bdate[1]) Then var2 = O; } Else if 높은시간대 == "D" then { var2 = DayOpen(0); } Else { value2 = StrToNum(높은시간대); if Bdate != Bdate[1] Then { S2 = TimeToMinutes(stime); D2 = sdate; } if D2 > 0 then{ if sdate == D2 Then M2 = TimeToMinutes(stime)-S2; Else M2 = TimeToMinutes(stime)+1440-S2; F2 = M2%value2; if Bdate != Bdate[1] or (Bdate == Bdate[1] and value2 > 1 and F2 < F2[1]) or (Bdate == Bdate[1] and value2 > 1 and M2 >= M2[1]+value2) or (Bdate == Bdate[1] and value2 == 1 and M2 > M2[1]) Then { var2 = O; } } } if var2 > 0 Then defm = (c/var2) -1; if var1 > 0 Then defd = (c/var1) -1; defh = C/O-1; output = iff(defm > 0 , IFf(defd > defh , defd , defh),IFf(defd > defh , defh , defd)); Plot1(output); Plot2(defh); 즐거운 하루되세요 > 힘내라 님이 쓴 글입니다. > 제목 : 수식 작성 부탁 드립니다 > 보조지표 파인스크립트를 해석한것 입니다, 이걸 예스 랭귀지로 만들어 주셨으면 합니다.. 높은 시간대가 양봉이면 중간시간대와 낮은시간대중 높은 상승률을 출력 높은 시간대가 음봉이면 중간시간대와 낮은시간대중 낮은 상승률을 출력 하는 지표입니다. //@version=2 study("내 스크립트") // 현재 시간대를 쓸것인가? indip = input(1,type=bool,title="Use current timeframe?") // 기준시간대 (현재 시간대를 쓰지 않을 경우에 임의로 지정할 수 있음) tf = (indip==0?(input('60',type=resolution,title="Timeframe (only if previous opt is unflagged)")):period) // 높은시간대 (기준시간대에 따라 고시간대 설정) // 기준시간대가 X이면 고시간대를 Y로 설정 // 일이면 월, 4시간이면 주, 2시간이면 주, 1시간이면 주, 15분이면 640분, 5분이면 360분, 그외이면 없음 Timeframem = (tf=='D'?'M' :(tf=='240'?'W' :(tf=='120'?'W': (tf=='60'?'W' :(tf=='15'?'640':(tf=='5'?'360':'na')))))) // 중간시간대 (기준시간대에 따라 중시간대 설정) // 기준시간대가 X이면 중시간대를 Y로 설정 // 일이면 2주, 4시간이면 2일, 2시간이면 2일, 1시간이면 일, 15분이면 6시간, 5분이면 3시간, 그외이면 없음 Timeframed = (tf=='D'?'2W':(tf=='240'?'2D':(tf=='120'?'2D':(tf=='60'?'D' :(tf=='15'?'360':(tf=='5'?'180':'na')))))) // 낮은시간대 (기준시간대에 따라 저시간대 설정) // 기준시간대가 X이면 저시간대를 Y로 설정 // 일이면 주, 4시간이면 일, 2시간이면 일, 1시간이면 12시간, 15분이면 3시간, 5분이면 90분, 그외이면 없음 Timeframeh = (tf=='D'?'W' :(tf=='240'?'D' :(tf=='120'?'D': (tf=='60'?'720':(tf=='15'?'180':(tf=='5'?'90':'na')))))) // 높은시간대의 시가 불러옴 chm = security(tickerid, Timeframem, open) // 높은시간대의 종가 불러옴 chm1 = security(tickerid, Timeframem, close) // 높은시간대의 시가대비 종가 상승률 (종가 몸통의 비율) defm = (chm1/chm) -1 // 중간시간대의 시가 불러옴 chd = security(tickerid, Timeframed, open) // 중간시간대의 종가 불러옴 chd1 = security(tickerid, Timeframed, close) // 중간시간대의 시가대비 종가 상승률 (종가 몸통의 비율) defd = (chd1/chd) -1 // 낮은시간대의 시가 불러옴 chh = security(tickerid, Timeframeh, open) // 낮은시간대의 종가 불러옴 chh1 = security(tickerid, Timeframeh, close) // 낮은시간대의 시가대비 종가 상승률 (종가 몸통의 비율) defh = (chh1/chh) -1 // 출력 = // 높은시간대의 종가 몸통의 비율이 0보다 클때(높은시간대가 양봉일때) >>> 중간시간대와 낮은시간대중 상승률이 큰 시간대의 상승률을 채택 // 높은시간대의 종가 몸통의 비율이 0보다 클때(높은시간대가 양봉이 아닐때) >>> 중간시간대와 낮은시간대중 상승률이 작은 시간대의 상승률을 채택 output = defm > 0 ? (defd > defh ? defd : defh):(defd > defh ? defh : defd) // 채택된 시간대의 상승률 출력(영역) plot(output,linewidth=2,color=output>0?lime:red,transp=50,style=area) // 낮은시간대의 상승률 출력(선) plot(defh,color=defh>0?lime:red,transp=0,linewidth=1) // 낮은시간대의 상승률 출력(영역) plot(defh,color=defh>0?lime:red,transp=75,style=area) // 0선 hline(0)