커뮤니티

지표 수식(지표1, 2, 3)의 작성을 부탁드립니다.

프로필 이미지
원칙투자자
2022-02-16 16:58:17
948
글번호 156373
답변완료
담당자님, 안녕하세요. 작성해주신 지표 수식을 잘 활용하고 있습니다. Q&A 75889번의 수식을 제가 변형해서 수정해보려고 했는데 계속 에러가 발생하고 제가 의도하는 수식으로 수정할 수 없어서 작성을 부탁드립니다. (KOSPI200 주가지수 선물) 분봉 차트에서, 예를 들면 3분봉 차트에서 적용하는 지표라고 가정하고 다음과 같은 지표1, 지표2, 지표3 수식의 작성을 부탁드립니다. (Q&A 75889번 및 직전 수정의뢰 75978번과 연관되는 수식입니다.) =========================================================== =========================================================== <지표 1> (3분봉 차트에서 적용) 1) 과거 n일(n=10) 기간 중 (고가-저가) 값이 큰 상위 5개의 30분봉(30분 구간)을 선택 * 당일(D)의 수치(가격)는 계산에 반영(포함)되지 않으며 (D-1)일 부터 (D-10)일 까지의 10일간의 수치(가격)를 반영하여 산출함. ** 다른 일자의 (고가-저가) 보다 크다면 동일한 날에서 최대 2개~5개까지도 선택될 수 있음. cf. Q&A 75889번에서는 각 일자별로 그날의 30분봉 중에서 고점과 저점 사이의 봉길이가 최대인 30분봉을 1개씩만 선택하였으나 이번 수식에서는 동일한 일자에서 5개까지도 선택 가능함. 2) 위에서 선택된 상위 5개의 30분봉('고가-저가'의 값)으로 각각의 '(고가+저가)/2'를 계산하여 그 값을 각각 5개의 수평선 라인으로 표시 [=> 최종 결과값은 총 5개의 수평라인 산출] cf. ('고가-저가'의 값) 5번째 상위값 봉과 (고가-저가)값이 같은 봉이 2개 이상이면 먼저 발생한 봉을 선택 또는 담당자님이 정하는 원칙에 따라 최종적으로 총 5개만 선정되도록 함. (추가1) 위의 조건 충족한 당일(D)의 5개 수평라인은 '당일(D)의 장시작 ~ 장마감'의 기간에만 표시함. (cf. Q&A 75889번과 동일) (추가2) n일(n=10) 기간의 수치는 외부입력 변수로 하여 지표속성창에서 변경 입력이 가능 하도록 구현 (추가3) Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); 등 그 외 사항은 Q&A 75889번과 동일 ============================================================ 위와 같이 지표1의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 2> (Q&A 75978번의 수정 내용도 반영하여 주시기 바랍니다.) (3분봉 차트에서 적용) 1) <지표1>과 동일 2) <지표1>과 동일 3) 위에서 선택된 '고가-저가'의 값이 큰 상위 5개의 30분봉에서 그 봉에 해당하는 각각의 '(종가+시가)/2'를 계산하여 그 값을 각각 수평선 라인으로 표시 [=> 총 5개의 수평라인 산출] cf. <지표1>과의 차이는 '고가-저가'의 값이 큰 상위 5개를 선택한 후 그 30분봉의 '(고가+저가)/2'가 아니고 그 30분봉의 '(종가+시가)/2'를 산출하는 것임. (추가1) <지표1>과 동일 (추가2) <지표1>과 동일 (추가3) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표2의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 3> (Q&A 75978번의 수정 내용도 반영하여 주시기 바랍니다.) (3분봉 차트에서 적용) 1) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 2) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 3) (고가-저가)를 절대값(종가-시가)로, '(고가+저가)/2'를 '(종가+시가)/2'로 적용 이외에는 <지표1>과 동일 (추가1) <지표1>과 동일 (추가2) <지표1>과 동일 (추가3) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표3의 수식 작성을 부탁드립니다. 위와 같이 지표1, 자표2, 지표3의 작성을 부탁드립니다. 지표작성해 주신 것에 대해 담당자님께 미리 감사드립니다. 항상 건강하시고 건승하시기 바랍니다. (담당자님의 편의를 위하여 Q&A 75889번의 담당자님 답변내용과 제 질의 내용을 아래에 기재하였습니다.) ============================================== ============================================== 수식작성 Q&A 75889번 담당자님 답변(작성 수식) 및 질의 내용 ============================================== ============================================== 작성자 : 예스스탁 작성일 : 2022-02-14 오전 9:35:15 조회수 : 9 지표 Re : 지표 수식(지표1, 지표2, 지표3) 작성 부탁드립니다. 안녕하세요 예스스탁입니다. 올림차순 또는 내림차순으로 지정해 드리기는 어렵습니다. 최근 n일 값을 계산해서 NTHVALUE에 오름차순으로 값이 저장됩니다. 10일 중 가장작은값 3개는 NTHVALUE[8],NTHVALUE[9],NTHVALUE[10]으로 지정해 출력하시면 됩니다. 1 input : 타주기분(30),n(10); var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; for cnt = 1 to 49 { R1[cnt] = R1[cnt-1][1]; M1[cnt] = M1[cnt-1][1]; } } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { HH = H; LL = L; if Bdate != Bdate[1] Then { R1[0] = HH-LL; M1[0] = (HH+LL)/2; } } if H > HH Then HH = H; if L < LL Then LL = L; if HH-LL > R1[0] Then { R1[0] = HH-LL; M1[0] = (HH+LL)/2; } if M1[n] > 0 Then { for ii = 0 to 49 { tempR1[ii] = R1[ii]; tempM1[ii] = M1[ii]; } For i1 = 1 to n { tempmax = -1; For i2 = 1 to n { if (tempR1[i2] >= tempmax ) then { tempmax = tempR1[i2]; tempi = i2; } } NTHVALUE[i1] = tempM1[tempi]; tempR1[tempi] = -1; } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); } } 2 input : 타주기분(30),n(10); var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0),OO(0),CC(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; for cnt = 1 to 49 { R1[cnt] = R1[cnt-1][1]; M1[cnt] = M1[cnt-1][1]; } } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { HH = H; LL = L; OO = O; if Bdate != Bdate[1] Then { R1[0] = HH-LL; M1[0] = (HH+LL)/2; } } if H > HH Then HH = H; if L < LL Then LL = L; CC = C; if HH-LL > R1[0] Then { R1[0] = HH-LL; M1[0] = (OO+CC)/2; } if M1[n] > 0 Then { for ii = 0 to 49 { tempR1[ii] = R1[ii]; tempM1[ii] = M1[ii]; } For i1 = 1 to n { tempmax = -1; For i2 = 1 to n { if (tempR1[i2] >= tempmax ) then { tempmax = tempR1[i2]; tempi = i2; } } NTHVALUE[i1] = tempM1[tempi]; tempR1[tempi] = -1; } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); } } 3 input : 타주기분(30),n(10); var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),CC(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; for cnt = 1 to 49 { R1[cnt] = R1[cnt-1][1]; M1[cnt] = M1[cnt-1][1]; } } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { OO = O; CC = C; if Bdate != Bdate[1] Then { R1[0] = abs(OO-CC); M1[0] = (OO+CC)/2; } } CC = C; if abs(OO-CC) > R1[0] Then { R1[0] = abs(OO-CC); M1[0] = (OO+CC)/2; } if M1[n] > 0 Then { for ii = 0 to 49 { tempR1[ii] = R1[ii]; tempM1[ii] = M1[ii]; } For i1 = 1 to n { tempmax = -1; For i2 = 1 to n { if (tempR1[i2] >= tempmax ) then { tempmax = tempR1[i2]; tempi = i2; } } NTHVALUE[i1] = tempM1[tempi]; tempR1[tempi] = -1; } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); } } 즐거운 하루되세요 > 원칙투자자 님이 쓴 글입니다. > 제목 : 지표 수식(지표1, 지표2, 지표3) 작성 부탁드립니다. > 담당자님, 안녕하세요. 작성해주신 지표 수식을 너무나 잘 활용하고 있습니다. 거듭 감사드립니다. (KOSPI200 주가지수 선물) 분봉 차트에서, 예를 들면 3분봉 차트에서 적용하는 지표라고 가정하고 다음과 같은 지표1, 지표2, 지표3 수식의 작성을 부탁드립니다. =========================================================== =========================================================== <지표 1> (3분봉 차트에서 적용) 1) 매일의 30분봉(장시작~09:30, 09:30~10:00.....15:30~장마감의 30분 단위 구간)의 (고가-저가) 중에서 각 해당일의 30분 구간 (고가-저가)가 최대인 30분봉(30분 구간)을 각 일자별로 1개씩 선택 (즉, 각 일자별로 그날의 30분봉 중에서 고점과 저점 사이의 봉길이가 최대인 30분봉을 1개씩 선택함) cf. 어떤 날에 (고가-저가)의 최대값이 같은 봉이 2개 이상이면(즉, 같은 수치의 최대봉이 2개 이상이면) 그 날 가장 먼저 발생한 봉을 선택 또는 담당자님이 정하는 원칙으로 각 일자에서는 1개씩만 선정함. 2) 위에서 계산된 각 일자별 (고가-저가)가 최대인 30분봉 중 (D-1)일 부터 소급하여 과거 n일(n=10) 기간 중 (고가-저가) 값이 큰 상위 3개의 30분봉(30분 구간)을 총 3개 선택 * 당일(D)의 수치(가격)는 계산에 반영(포함)되지 않으며 (D-1)일 부터 (D-10)일 까지의 10일간의 수치(가격)를 반영하여 산출함. 3) 위에서 선택된 상위 3개의 30분봉('고가-저가'의 값)으로 각각의 '(고가+저가)/2'를 계산하여 그 값을 각각 3개의 수평선 라인으로 표시 [=> 최종 결과값은 총 3개의 수평라인 산출] * [중요] 위의 조건 충족한 당일(D)의 3개 수평라인은 '당일(D)의 장시작 ~ 장마감'의 기간에만 표시함. (cf. 실시간 차트에서는 당일(D) 장시작 하면서(첫봉 만들어지면서) 바로 라인이 표시되며 그 이후 장중 분봉이 형성되면서 순차적으로 동일한 라인이 장마감까지 표시될 것으로 예상) 또한, 당일 보다 과거 기간에는 당일 조건에 의한 라인은 표시되지 않고 각 해당일의 조건에 의해 선정된 수평라인만 표시되므로 과거 각 일자에 해당하는 차트 구간에도 최대 3개 라인이 표시됨. (추가 요건1) [중요] 최종 결과물인 수평라인 3개를 plot1, plot2, plot3로 산출할 때, (최종 수치인 '(고가+저가)/2'를 sort, 정렬하여) plot1, 2, 3가 최종수치인 '(고가+저가)/2'의 크기대로 올림차순 또는 내림차순이 되도록 배열 (cf. plot1, 2, 3가 [고가-저가]의 크기 순대로의 배열이 아님) (추가 요건2) n일(n=10) 기간의 수치는 외부입력 변수로 하여 지표속성창에서 변경 입력이 가능 하도록 구현 =============================================================================== (예시) D-10일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 360.00 359.00 1.00 09:30 ~10:00 361.00 358.10 2.90 (=> 선택2) 359.55(-> 당일(D) 구간에 라인 표시) ..... 15:00~ 장마감 360.00 359.60 0.40 ---------------------------------------------------------------------------------------- ................. D-7일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 358.50 357.00 1.50 (=> 선택3) 357.75(-> 당일(D) 구간에 라인 표시) 09:30 ~10:00 359.20 358.00 1.20 ..... 15:00~ 장마감 359.40 359.00 0.40 ---------------------------------------------------------------------------------------- ................. D-5일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 380.50 376.40 3.60 (=> 선택1) 378.45(-> 당일(D) 구간에 라인 표시) 09:30 ~10:00 378.00 375.00 3.00 ..... 15:00~ 장마감 377.00 356.40 0.60 ---------------------------------------------------------------------------------------- ................. D-2일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 358.40 357.00 1.40 (=> 미선택) 357.70 (D-2일의 최대 30분봉 '고가-저가'값이 상위 3개에 미포함 되므로 1.40은 미선택됨) 09:30 ~10:00 359.10 358.00 1.10 ..... 15:00~ 장마감 359.50 359.00 0.50 ---------------------------------------------------------------------------------------- ................. D일(당일) 시가 : 361.00 ------------------------------------------------------------ <최종 구현되는 결과(plot 1,2,3의 값을 올림차순 또는 내림차순 정렬)> plot1 : 357.75 plot1 : 378.45 plot2 : 359.55 또는 plot2 : 359.55 plot3 : 378.45 plot3 : 357.75 (올림차순) (내림차순) ============================================================ 위와 같이 지표1의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 2> (3분봉 차트에서 적용) 1) <지표1>과 동일 2) <지표1>과 동일 3) 위에서 선택된 '고가-저가'의 값이 큰 상위 3개의 30분봉에서 그 봉에 해당하는 각각의 '(종가+시가)/2'를 계산하여 그 값을 각각 수평선 라인으로 표시 [=> 총 3개의 수평라인 산출] cf. <지표1>과의 차이는 '(고가+저가)/2'가 아니고 선택된 30분봉의 '(종가+시가)/2'를 적용하는 것임. (추가 요건1) <지표1>과 동일 (추가 요건2) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표2의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 3> (3분봉 차트에서 적용) 1) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 2) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 3) (고가-저가)를 절대값(종가-시가)로, '(고가+저가)/2'를 '(종가+시가)/2'로 적용 이외에는 <지표1>과 동일 (추가 요건1) plot1, 2, 3가 최종수치인 '(종가+시가)/2'의 크기대로 올림차순 또는 내림차순이 되도록 배열 (추가 요건2) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표3의 수식 작성을 부탁드립니다.
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-02-17 11:07:02

안녕하세요 예스스탁입니다. 해당 내용은 이전식과 구조적으로 다릅니다. 최근 N일간의 지정한 분주기 구간으로 모든 값을 저장해서 비교해야 하므로 배열사이즈가 커야 합니다. 타주기분과 날짜수에 따라 필요한 배열갯수에 차이가 있습니다. 타주기분과 날짜수에 따라 아래 배열사이즈를 해당 부분 감안하셔서 늘리거나 줄이셔야 합니다. 아래는 30분 주기로 10일이면 약 150개 정도가 필요한데 넉넉히 200개로 지정했습니다. DI배열변수는 날짜변경시만 값을 저장하므로 조정하지 않으셔도 됩니다. 1 input : 타주기분(30),n(10),nth(5); var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),HH(0),LL(0),CC(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : RR[200](0),MM[200](0),DI[50](0); Array : tempRR[200](0),tempMM[200](0),NTHVALUE[200](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { ii = ii+1; if Bdate != Bdate[1] Then { DI[0] = ii; for cnt = 1 to 49 { Di[cnt] = Di[cnt-1][1]; } } OO = O; HH = H; LL = L; RR[0] = 0; MM[0] = 0; for cnt = 1 to 199 { RR[cnt] = RR[cnt-1][1]; MM[cnt] = MM[cnt-1][1]; tempRR[cnt] = RR[cnt]; tempMM[cnt] = MM[cnt]; } } if H > HH Then HH = H; if L < LL Then LL = L; CC = C; RR[0] = HH-LL; MM[0] = (HH+LL)/2; tempRR[0] = RR[0]; tempMM[0] = MM[0]; if D1[n] > 0 Then { if Bdate != Bdate[1] Then { For i1 = 1 to nth { tempmax = -1; For i2 = 1 to ii-DI[n] { if (tempRR[i2] >= tempmax ) then { tempmax = tempRR[i2]; tempi = i2; } } NTHVALUE[i1] = tempMM[tempi]; tempRR[tempi] = -1; } } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); Plot4(NTHVALUE[4]); Plot5(NTHVALUE[5]); } } 2 input : 타주기분(30),n(10),nth(5); var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),HH(0),LL(0),CC(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : RR[200](0),MM[200](0),DI[50](0); Array : tempRR[200](0),tempMM[200](0),NTHVALUE[200](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { ii = ii+1; if Bdate != Bdate[1] Then { DI[0] = ii; for cnt = 1 to 49 { Di[cnt] = Di[cnt-1][1]; } } OO = O; HH = H; LL = L; RR[0] = 0; MM[0] = 0; for cnt = 1 to 199 { RR[cnt] = RR[cnt-1][1]; MM[cnt] = MM[cnt-1][1]; tempRR[cnt] = RR[cnt]; tempMM[cnt] = MM[cnt]; } } if H > HH Then HH = H; if L < LL Then LL = L; CC = C; RR[0] = HH-LL; MM[0] = (OO+CC)/2; tempRR[0] = RR[0]; tempMM[0] = MM[0]; if D1[n] > 0 Then { if Bdate != Bdate[1] Then { For i1 = 1 to nth { tempmax = -1; For i2 = 1 to ii-DI[n] { if (tempRR[i2] >= tempmax ) then { tempmax = tempRR[i2]; tempi = i2; } } NTHVALUE[i1] = tempMM[tempi]; tempRR[tempi] = -1; } } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); Plot4(NTHVALUE[4]); Plot5(NTHVALUE[5]); } } 3 input : 타주기분(30),n(10),nth(5); var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),HH(0),LL(0),CC(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : RR[200](0),MM[200](0),DI[50](0); Array : tempRR[200](0),tempMM[200](0),NTHVALUE[200](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { ii = ii+1; if Bdate != Bdate[1] Then { DI[0] = ii; for cnt = 1 to 49 { Di[cnt] = Di[cnt-1][1]; } } OO = O; HH = H; LL = L; RR[0] = 0; MM[0] = 0; for cnt = 1 to 199 { RR[cnt] = RR[cnt-1][1]; MM[cnt] = MM[cnt-1][1]; tempRR[cnt] = RR[cnt]; tempMM[cnt] = MM[cnt]; } } if H > HH Then HH = H; if L < LL Then LL = L; CC = C; RR[0] = abs(OO-CC); MM[0] = (OO+CC)/2; tempRR[0] = RR[0]; tempMM[0] = MM[0]; if D1[n] > 0 Then { if Bdate != Bdate[1] Then { For i1 = 1 to nth { tempmax = -1; For i2 = 1 to ii-DI[n] { if (tempRR[i2] >= tempmax ) then { tempmax = tempRR[i2]; tempi = i2; } } NTHVALUE[i1] = tempMM[tempi]; tempRR[tempi] = -1; } } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); Plot4(NTHVALUE[4]); Plot5(NTHVALUE[5]); } } 즐거운 하루되세요 > 원칙투자자 님이 쓴 글입니다. > 제목 : 지표 수식(지표1, 2, 3)의 작성을 부탁드립니다. > 담당자님, 안녕하세요. 작성해주신 지표 수식을 잘 활용하고 있습니다. Q&A 75889번의 수식을 제가 변형해서 수정해보려고 했는데 계속 에러가 발생하고 제가 의도하는 수식으로 수정할 수 없어서 작성을 부탁드립니다. (KOSPI200 주가지수 선물) 분봉 차트에서, 예를 들면 3분봉 차트에서 적용하는 지표라고 가정하고 다음과 같은 지표1, 지표2, 지표3 수식의 작성을 부탁드립니다. (Q&A 75889번 및 직전 수정의뢰 75978번과 연관되는 수식입니다.) =========================================================== =========================================================== <지표 1> (3분봉 차트에서 적용) 1) 과거 n일(n=10) 기간 중 (고가-저가) 값이 큰 상위 5개의 30분봉(30분 구간)을 선택 * 당일(D)의 수치(가격)는 계산에 반영(포함)되지 않으며 (D-1)일 부터 (D-10)일 까지의 10일간의 수치(가격)를 반영하여 산출함. ** 다른 일자의 (고가-저가) 보다 크다면 동일한 날에서 최대 2개~5개까지도 선택될 수 있음. cf. Q&A 75889번에서는 각 일자별로 그날의 30분봉 중에서 고점과 저점 사이의 봉길이가 최대인 30분봉을 1개씩만 선택하였으나 이번 수식에서는 동일한 일자에서 5개까지도 선택 가능함. 2) 위에서 선택된 상위 5개의 30분봉('고가-저가'의 값)으로 각각의 '(고가+저가)/2'를 계산하여 그 값을 각각 5개의 수평선 라인으로 표시 [=> 최종 결과값은 총 5개의 수평라인 산출] cf. ('고가-저가'의 값) 5번째 상위값 봉과 (고가-저가)값이 같은 봉이 2개 이상이면 먼저 발생한 봉을 선택 또는 담당자님이 정하는 원칙에 따라 최종적으로 총 5개만 선정되도록 함. (추가1) 위의 조건 충족한 당일(D)의 5개 수평라인은 '당일(D)의 장시작 ~ 장마감'의 기간에만 표시함. (cf. Q&A 75889번과 동일) (추가2) n일(n=10) 기간의 수치는 외부입력 변수로 하여 지표속성창에서 변경 입력이 가능 하도록 구현 (추가3) Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); 등 그 외 사항은 Q&A 75889번과 동일 ============================================================ 위와 같이 지표1의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 2> (Q&A 75978번의 수정 내용도 반영하여 주시기 바랍니다.) (3분봉 차트에서 적용) 1) <지표1>과 동일 2) <지표1>과 동일 3) 위에서 선택된 '고가-저가'의 값이 큰 상위 5개의 30분봉에서 그 봉에 해당하는 각각의 '(종가+시가)/2'를 계산하여 그 값을 각각 수평선 라인으로 표시 [=> 총 5개의 수평라인 산출] cf. <지표1>과의 차이는 '고가-저가'의 값이 큰 상위 5개를 선택한 후 그 30분봉의 '(고가+저가)/2'가 아니고 그 30분봉의 '(종가+시가)/2'를 산출하는 것임. (추가1) <지표1>과 동일 (추가2) <지표1>과 동일 (추가3) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표2의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 3> (Q&A 75978번의 수정 내용도 반영하여 주시기 바랍니다.) (3분봉 차트에서 적용) 1) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 2) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 3) (고가-저가)를 절대값(종가-시가)로, '(고가+저가)/2'를 '(종가+시가)/2'로 적용 이외에는 <지표1>과 동일 (추가1) <지표1>과 동일 (추가2) <지표1>과 동일 (추가3) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표3의 수식 작성을 부탁드립니다. 위와 같이 지표1, 자표2, 지표3의 작성을 부탁드립니다. 지표작성해 주신 것에 대해 담당자님께 미리 감사드립니다. 항상 건강하시고 건승하시기 바랍니다. (담당자님의 편의를 위하여 Q&A 75889번의 담당자님 답변내용과 제 질의 내용을 아래에 기재하였습니다.) ============================================== ============================================== 수식작성 Q&A 75889번 담당자님 답변(작성 수식) 및 질의 내용 ============================================== ============================================== 작성자 : 예스스탁 작성일 : 2022-02-14 오전 9:35:15 조회수 : 9 지표 Re : 지표 수식(지표1, 지표2, 지표3) 작성 부탁드립니다. 안녕하세요 예스스탁입니다. 올림차순 또는 내림차순으로 지정해 드리기는 어렵습니다. 최근 n일 값을 계산해서 NTHVALUE에 오름차순으로 값이 저장됩니다. 10일 중 가장작은값 3개는 NTHVALUE[8],NTHVALUE[9],NTHVALUE[10]으로 지정해 출력하시면 됩니다. 1 input : 타주기분(30),n(10); var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; for cnt = 1 to 49 { R1[cnt] = R1[cnt-1][1]; M1[cnt] = M1[cnt-1][1]; } } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { HH = H; LL = L; if Bdate != Bdate[1] Then { R1[0] = HH-LL; M1[0] = (HH+LL)/2; } } if H > HH Then HH = H; if L < LL Then LL = L; if HH-LL > R1[0] Then { R1[0] = HH-LL; M1[0] = (HH+LL)/2; } if M1[n] > 0 Then { for ii = 0 to 49 { tempR1[ii] = R1[ii]; tempM1[ii] = M1[ii]; } For i1 = 1 to n { tempmax = -1; For i2 = 1 to n { if (tempR1[i2] >= tempmax ) then { tempmax = tempR1[i2]; tempi = i2; } } NTHVALUE[i1] = tempM1[tempi]; tempR1[tempi] = -1; } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); } } 2 input : 타주기분(30),n(10); var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0),OO(0),CC(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; for cnt = 1 to 49 { R1[cnt] = R1[cnt-1][1]; M1[cnt] = M1[cnt-1][1]; } } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { HH = H; LL = L; OO = O; if Bdate != Bdate[1] Then { R1[0] = HH-LL; M1[0] = (HH+LL)/2; } } if H > HH Then HH = H; if L < LL Then LL = L; CC = C; if HH-LL > R1[0] Then { R1[0] = HH-LL; M1[0] = (OO+CC)/2; } if M1[n] > 0 Then { for ii = 0 to 49 { tempR1[ii] = R1[ii]; tempM1[ii] = M1[ii]; } For i1 = 1 to n { tempmax = -1; For i2 = 1 to n { if (tempR1[i2] >= tempmax ) then { tempmax = tempR1[i2]; tempi = i2; } } NTHVALUE[i1] = tempM1[tempi]; tempR1[tempi] = -1; } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); } } 3 input : 타주기분(30),n(10); var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),CC(0); var : ii(0),i1(0),i2(0),tempmax(0),tempi(0); Array : R1[50](0),M1[50](0); Array : tempR1[50](0),tempM1[50](0),NTHVALUE[50](0); if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; for cnt = 1 to 49 { R1[cnt] = R1[cnt-1][1]; M1[cnt] = M1[cnt-1][1]; } } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF = TM%타주기분; if Bdate != Bdate[1] or (Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or (Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or (Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then { OO = O; CC = C; if Bdate != Bdate[1] Then { R1[0] = abs(OO-CC); M1[0] = (OO+CC)/2; } } CC = C; if abs(OO-CC) > R1[0] Then { R1[0] = abs(OO-CC); M1[0] = (OO+CC)/2; } if M1[n] > 0 Then { for ii = 0 to 49 { tempR1[ii] = R1[ii]; tempM1[ii] = M1[ii]; } For i1 = 1 to n { tempmax = -1; For i2 = 1 to n { if (tempR1[i2] >= tempmax ) then { tempmax = tempR1[i2]; tempi = i2; } } NTHVALUE[i1] = tempM1[tempi]; tempR1[tempi] = -1; } Plot1(NTHVALUE[1]); Plot2(NTHVALUE[2]); Plot3(NTHVALUE[3]); } } 즐거운 하루되세요 > 원칙투자자 님이 쓴 글입니다. > 제목 : 지표 수식(지표1, 지표2, 지표3) 작성 부탁드립니다. > 담당자님, 안녕하세요. 작성해주신 지표 수식을 너무나 잘 활용하고 있습니다. 거듭 감사드립니다. (KOSPI200 주가지수 선물) 분봉 차트에서, 예를 들면 3분봉 차트에서 적용하는 지표라고 가정하고 다음과 같은 지표1, 지표2, 지표3 수식의 작성을 부탁드립니다. =========================================================== =========================================================== <지표 1> (3분봉 차트에서 적용) 1) 매일의 30분봉(장시작~09:30, 09:30~10:00.....15:30~장마감의 30분 단위 구간)의 (고가-저가) 중에서 각 해당일의 30분 구간 (고가-저가)가 최대인 30분봉(30분 구간)을 각 일자별로 1개씩 선택 (즉, 각 일자별로 그날의 30분봉 중에서 고점과 저점 사이의 봉길이가 최대인 30분봉을 1개씩 선택함) cf. 어떤 날에 (고가-저가)의 최대값이 같은 봉이 2개 이상이면(즉, 같은 수치의 최대봉이 2개 이상이면) 그 날 가장 먼저 발생한 봉을 선택 또는 담당자님이 정하는 원칙으로 각 일자에서는 1개씩만 선정함. 2) 위에서 계산된 각 일자별 (고가-저가)가 최대인 30분봉 중 (D-1)일 부터 소급하여 과거 n일(n=10) 기간 중 (고가-저가) 값이 큰 상위 3개의 30분봉(30분 구간)을 총 3개 선택 * 당일(D)의 수치(가격)는 계산에 반영(포함)되지 않으며 (D-1)일 부터 (D-10)일 까지의 10일간의 수치(가격)를 반영하여 산출함. 3) 위에서 선택된 상위 3개의 30분봉('고가-저가'의 값)으로 각각의 '(고가+저가)/2'를 계산하여 그 값을 각각 3개의 수평선 라인으로 표시 [=> 최종 결과값은 총 3개의 수평라인 산출] * [중요] 위의 조건 충족한 당일(D)의 3개 수평라인은 '당일(D)의 장시작 ~ 장마감'의 기간에만 표시함. (cf. 실시간 차트에서는 당일(D) 장시작 하면서(첫봉 만들어지면서) 바로 라인이 표시되며 그 이후 장중 분봉이 형성되면서 순차적으로 동일한 라인이 장마감까지 표시될 것으로 예상) 또한, 당일 보다 과거 기간에는 당일 조건에 의한 라인은 표시되지 않고 각 해당일의 조건에 의해 선정된 수평라인만 표시되므로 과거 각 일자에 해당하는 차트 구간에도 최대 3개 라인이 표시됨. (추가 요건1) [중요] 최종 결과물인 수평라인 3개를 plot1, plot2, plot3로 산출할 때, (최종 수치인 '(고가+저가)/2'를 sort, 정렬하여) plot1, 2, 3가 최종수치인 '(고가+저가)/2'의 크기대로 올림차순 또는 내림차순이 되도록 배열 (cf. plot1, 2, 3가 [고가-저가]의 크기 순대로의 배열이 아님) (추가 요건2) n일(n=10) 기간의 수치는 외부입력 변수로 하여 지표속성창에서 변경 입력이 가능 하도록 구현 =============================================================================== (예시) D-10일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 360.00 359.00 1.00 09:30 ~10:00 361.00 358.10 2.90 (=> 선택2) 359.55(-> 당일(D) 구간에 라인 표시) ..... 15:00~ 장마감 360.00 359.60 0.40 ---------------------------------------------------------------------------------------- ................. D-7일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 358.50 357.00 1.50 (=> 선택3) 357.75(-> 당일(D) 구간에 라인 표시) 09:30 ~10:00 359.20 358.00 1.20 ..... 15:00~ 장마감 359.40 359.00 0.40 ---------------------------------------------------------------------------------------- ................. D-5일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 380.50 376.40 3.60 (=> 선택1) 378.45(-> 당일(D) 구간에 라인 표시) 09:30 ~10:00 378.00 375.00 3.00 ..... 15:00~ 장마감 377.00 356.40 0.60 ---------------------------------------------------------------------------------------- ................. D-2일 고가 저가 고가-저가 (고가+저가)/2 장시작~09:30 358.40 357.00 1.40 (=> 미선택) 357.70 (D-2일의 최대 30분봉 '고가-저가'값이 상위 3개에 미포함 되므로 1.40은 미선택됨) 09:30 ~10:00 359.10 358.00 1.10 ..... 15:00~ 장마감 359.50 359.00 0.50 ---------------------------------------------------------------------------------------- ................. D일(당일) 시가 : 361.00 ------------------------------------------------------------ <최종 구현되는 결과(plot 1,2,3의 값을 올림차순 또는 내림차순 정렬)> plot1 : 357.75 plot1 : 378.45 plot2 : 359.55 또는 plot2 : 359.55 plot3 : 378.45 plot3 : 357.75 (올림차순) (내림차순) ============================================================ 위와 같이 지표1의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 2> (3분봉 차트에서 적용) 1) <지표1>과 동일 2) <지표1>과 동일 3) 위에서 선택된 '고가-저가'의 값이 큰 상위 3개의 30분봉에서 그 봉에 해당하는 각각의 '(종가+시가)/2'를 계산하여 그 값을 각각 수평선 라인으로 표시 [=> 총 3개의 수평라인 산출] cf. <지표1>과의 차이는 '(고가+저가)/2'가 아니고 선택된 30분봉의 '(종가+시가)/2'를 적용하는 것임. (추가 요건1) <지표1>과 동일 (추가 요건2) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표2의 수식 작성을 부탁드립니다. =========================================================== =========================================================== <지표 3> (3분봉 차트에서 적용) 1) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 2) (고가-저가)를 절대값(종가-시가)로 적용하는 것 이외에는 <지표1>과 동일 3) (고가-저가)를 절대값(종가-시가)로, '(고가+저가)/2'를 '(종가+시가)/2'로 적용 이외에는 <지표1>과 동일 (추가 요건1) plot1, 2, 3가 최종수치인 '(종가+시가)/2'의 크기대로 올림차순 또는 내림차순이 되도록 배열 (추가 요건2) <지표1>과 동일 ============================================================= ============================================================= 위와 같이 지표3의 수식 작성을 부탁드립니다.