커뮤니티

수식문의드려요

프로필 이미지
oni
2025-07-07 20:15:23
235
글번호 192332
답변완료
안녕하세요. 만기일 관련해서 필요한 지표를 찾아보던중 답변된 내용이 있어 해당수식을 사용해보았는데, 만기일에 선표시는 잘되나 각만기일에 해당하는 고저폭을 계산하는 부분이 제대로 되지않아 해당부분을 수정해주셨으면 좋겠습니다. 옵션만기일, 선물만기일, 위클리만기일에서 해당 구간의 최고값과 최저값의 폭을 표시 할 수 있도록 수정해주세요. 그리고 두번째로 첨부하는 코드는 잔존만기일 계산인데, 이것을 분기별 3째주 금요일을 기준으로 계산되게 수정부탁드립니다. ------------------- 1번 코드 --------------------- var : month(0),nday(0),week(0); var : OX(False),OH(0),OL(0),OTL(0),OTX(0); var : FX(false),FH(0),FL(0),FTL(0),FTX(0); var : WOX(False),WOH(0),WOL(0),WOTL(0),WOTX(0); month = int(date/100)-int(date/10000)*100; nday = date - int(date/100)*100; Week = DayOfWeek(date); #옵션만기 if nday >= 8 and nday <= 14 and week == 4 Then { OX = true; } Else OX = False; if Bdate != Bdate[1] Then { if OX == False and OX[1] == true Then { OH = h; OL = L; } } if OH > 0 and H > OH Then OH = H; if OL > 0 and L < OL Then OL = L; if OX == true and sTime >= 150000 and sTime[1] < 150000 then { OTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(OTL,RED); OTX = Text_New(sDate,sTime,H,NumToStr(OH-OL,2)); Text_SetColor(OTX,Red); Text_SetStyle(OTX,2,1); } #선물만기 if Month%3 == 0 and nday >= 8 and nday <= 14 and week == 4 Then { FX = true; } Else FX = false; if Bdate != Bdate[1] Then { if FX == False and FX[1] == true Then { FH = h; FL = L; } } if FH > 0 and H > FH Then FH = H; if FL > 0 and L < FL Then FL = L; if FX == true and sTime >= 150000 and sTime[1] < 150000 then { FTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(FTL,BLUE); FTX = Text_New(sDate,sTime,H,NumToStr(FH-FL,2)); Text_SetColor(FTX,BLUE); Text_SetStyle(FTX,2,1); } #위클리옵션만기 if OX == False and week == 4 Then { WOX = true; } Else WOX = false; if Bdate != Bdate[1] Then { if WOX == False and WOX[1] == true Then { WOH = h; WOL = L; } } if WOH > 0 and H > WOH Then WOH = H; if WOL > 0 and L < WOL Then WOL = L; if WOX == true and sTime >= 150000 and sTime[1] < 150000 then { WOTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(WOTL,Green); WOTX = Text_New(sDate,sTime,H,NumToStr(WOH-WOL,2)); Text_SetColor(WOTX,Green); Text_SetStyle(WOTX,2,1); } ------------------2번 코드 ------------------------ Var : Year(0),Month(0),ndate1(0),ndate2(0); var : cnt(0),count1(0),count2(0); var : XD1(0),XD2(0),Xdate(0),remain(0); Year = Floor(sDate / 10000)*10000; month = Floor(FracPortion(sdate/10000)*100)*100; ndate1 = year+month+1; if Month+100 <= 1200 Then ndate2 = year+(month+100)+1; Else ndate2 = (year+10000)+100+1; count1 = 0; count2 = 0; for cnt = 0 to 15 { if dayofweek(ndate1+cnt) == 4 Then { count1 = count1+1; if count1 == 2 Then { XD1 = ndate1+cnt; } } if dayofweek(ndate2+cnt) == 4 Then { count2 = count2+1; if count2 == 2 Then { XD2 = nDate2+cnt; } } } if sDate <= XD1 Then { Xdate = XD1; } Else { Xdate = XD2; } if Xdate > 0 Then { remain = DateToJulian(Xdate)-DateToJulian(sDate); Plot1(remain); }
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-07-09 10:23:22

안녕하세요 예스스탁입니다. 1 1번수식 살펴보았지만 직전 만기일 다음날부터 만기일까지 고저폭이 맞게 표시되게 있습니다. 다만 만기일 15시봉까지의 값으로 표시되고 있는데 해당 부분을 만기일 마지막봉기준으로 표시되게 수정해 드립니다. var : month(0),nday(0),week(0); var : OX(False),OH(0),OL(0),OTL(0),OTX(0); var : FX(false),FH(0),FL(0),FTL(0),FTX(0); var : WOX(False),WOH(0),WOL(0),WOTL(0),WOTX(0); month = int(date/100)-int(date/10000)*100; nday = date - int(date/100)*100; Week = DayOfWeek(date); #옵션만기 if nday >= 8 and nday <= 14 and week == 4 Then { OX = true; } Else OX = False; if Bdate != Bdate[1] Then { if OX == False and OX[1] == true Then { OH = h; OL = L; } } if OH > 0 and H > OH Then OH = H; if OL > 0 and L < OL Then OL = L; if OX == true Then { if OX[1] == False then { OTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(OTL,RED); OTX = Text_New(sDate,sTime,H,NumToStr(OH-OL,2)); Text_SetColor(OTX,Red); Text_SetStyle(OTX,2,1); } Else { TL_SetBegin(OTL,sDate,sTime,0); TL_SetEnd(OTL,sDate,sTime,9999999); Text_SetString(OTX,NumToStr(OH-OL,2)); Text_SetLocation(OTX,sDate,sTime,H); } } #선물만기 if Month%3 == 0 and nday >= 8 and nday <= 14 and week == 4 Then { FX = true; } Else FX = false; if Bdate != Bdate[1] Then { if FX == False and FX[1] == true Then { FH = h; FL = L; } } if FH > 0 and H > FH Then FH = H; if FL > 0 and L < FL Then FL = L; if FX == true Then { if FX[1] == False Then { FTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(FTL,BLUE); FTX = Text_New(sDate,sTime,H,NumToStr(FH-FL,2)); Text_SetColor(FTX,BLUE); Text_SetStyle(FTX,2,1); } Else { TL_SetBegin(FTL,sDate,sTime,0); TL_SetEnd(FTL,sDate,sTime,9999999); Text_SetString(FTX,NumToStr(FH-FL,2)); Text_SetLocation(FTX,sDate,sTime,H); } } #위클리옵션만기 if OX == False and week == 4 Then { WOX = true; } Else WOX = false; if Bdate != Bdate[1] Then { if WOX == False and WOX[1] == true Then { WOH = h; WOL = L; } } if WOH > 0 and H > WOH Then WOH = H; if WOL > 0 and L < WOL Then WOL = L; if WOX == true Then { if WOX[1] == False Then { WOTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(WOTL,Green); WOTX = Text_New(sDate,sTime,H,NumToStr(WOH-WOL,2)); Text_SetColor(WOTX,Green); Text_SetStyle(WOTX,2,1); } Else { TL_SetBegin(WOTL,sDate,sTime,0); TL_SetEnd(WOTL,sDate,sTime,9999999); Text_SetString(WOTX,NumToStr(WOH-WOL,2)); Text_SetLocation(WOTX,sDate,sTime,H); } } 2 Var : YYYY(0),MM(0),YYYYMM(0); var : cnt(0),count(0),XD(0),remain(0); if Bdate != Bdate[1] Then { YYYY = Floor(sDate / 10000); MM = int(bdate/100)-int(bdate/10000)*100; if MM%3 == 0 Then YYYYMM = YYYY*100+MM; Else YYYYMM = (YYYY*100+MM)+(3-MM%3); count = 0; For cnt = 1 to 30 { if DayOfWeek((YYYYMM*100)+cnt) == 5 Then { count = count+1; if count == 3 Then XD = (YYYYMM*100)+cnt; } } if Bdate > XD Then { MM = MM+3; if MM > 12 Then { YYYY = YYYY+1; MM = MM-12; } YYYYMM = YYYY*100+MM; count = 0; For cnt = 1 to 30 { if DayOfWeek((YYYYMM*100)+cnt) == 5 Then { count = count+1; if count == 3 Then XD = (YYYYMM*100)+cnt; } } } } if XD > 0 Then { remain = DateToJulian(XD)-DateToJulian(bDate); Plot1(remain); } 즐거운 하루되세요 > oni 님이 쓴 글입니다. > 제목 : 수식문의드려요 > 안녕하세요. 만기일 관련해서 필요한 지표를 찾아보던중 답변된 내용이 있어 해당수식을 사용해보았는데, 만기일에 선표시는 잘되나 각만기일에 해당하는 고저폭을 계산하는 부분이 제대로 되지않아 해당부분을 수정해주셨으면 좋겠습니다. 옵션만기일, 선물만기일, 위클리만기일에서 해당 구간의 최고값과 최저값의 폭을 표시 할 수 있도록 수정해주세요. 그리고 두번째로 첨부하는 코드는 잔존만기일 계산인데, 이것을 분기별 3째주 금요일을 기준으로 계산되게 수정부탁드립니다. ------------------- 1번 코드 --------------------- var : month(0),nday(0),week(0); var : OX(False),OH(0),OL(0),OTL(0),OTX(0); var : FX(false),FH(0),FL(0),FTL(0),FTX(0); var : WOX(False),WOH(0),WOL(0),WOTL(0),WOTX(0); month = int(date/100)-int(date/10000)*100; nday = date - int(date/100)*100; Week = DayOfWeek(date); #옵션만기 if nday >= 8 and nday <= 14 and week == 4 Then { OX = true; } Else OX = False; if Bdate != Bdate[1] Then { if OX == False and OX[1] == true Then { OH = h; OL = L; } } if OH > 0 and H > OH Then OH = H; if OL > 0 and L < OL Then OL = L; if OX == true and sTime >= 150000 and sTime[1] < 150000 then { OTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(OTL,RED); OTX = Text_New(sDate,sTime,H,NumToStr(OH-OL,2)); Text_SetColor(OTX,Red); Text_SetStyle(OTX,2,1); } #선물만기 if Month%3 == 0 and nday >= 8 and nday <= 14 and week == 4 Then { FX = true; } Else FX = false; if Bdate != Bdate[1] Then { if FX == False and FX[1] == true Then { FH = h; FL = L; } } if FH > 0 and H > FH Then FH = H; if FL > 0 and L < FL Then FL = L; if FX == true and sTime >= 150000 and sTime[1] < 150000 then { FTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(FTL,BLUE); FTX = Text_New(sDate,sTime,H,NumToStr(FH-FL,2)); Text_SetColor(FTX,BLUE); Text_SetStyle(FTX,2,1); } #위클리옵션만기 if OX == False and week == 4 Then { WOX = true; } Else WOX = false; if Bdate != Bdate[1] Then { if WOX == False and WOX[1] == true Then { WOH = h; WOL = L; } } if WOH > 0 and H > WOH Then WOH = H; if WOL > 0 and L < WOL Then WOL = L; if WOX == true and sTime >= 150000 and sTime[1] < 150000 then { WOTL = TL_New(sDate,sTime,0,sDate,sTime,9999999); TL_SetColor(WOTL,Green); WOTX = Text_New(sDate,sTime,H,NumToStr(WOH-WOL,2)); Text_SetColor(WOTX,Green); Text_SetStyle(WOTX,2,1); } ------------------2번 코드 ------------------------ Var : Year(0),Month(0),ndate1(0),ndate2(0); var : cnt(0),count1(0),count2(0); var : XD1(0),XD2(0),Xdate(0),remain(0); Year = Floor(sDate / 10000)*10000; month = Floor(FracPortion(sdate/10000)*100)*100; ndate1 = year+month+1; if Month+100 <= 1200 Then ndate2 = year+(month+100)+1; Else ndate2 = (year+10000)+100+1; count1 = 0; count2 = 0; for cnt = 0 to 15 { if dayofweek(ndate1+cnt) == 4 Then { count1 = count1+1; if count1 == 2 Then { XD1 = ndate1+cnt; } } if dayofweek(ndate2+cnt) == 4 Then { count2 = count2+1; if count2 == 2 Then { XD2 = nDate2+cnt; } } } if sDate <= XD1 Then { Xdate = XD1; } Else { Xdate = XD2; } if Xdate > 0 Then { remain = DateToJulian(Xdate)-DateToJulian(sDate); Plot1(remain); }