커뮤니티

부탁 드립니다.

프로필 이미지
yes
2018-01-11 12:09:50
256
글번호 115666
답변완료

첨부 이미지

도움 주심에 깊이 감사 드립니다. 그림의 설명처럼 부탁 드립니다. 미리 감사 드립니다. 사용된 수식) Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else { // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } 사용된 함수) 함수명:HiLoLineZigZag 수식) Input:Length(NumericSimple),useCLprice(NumericSimple), oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime oLoZZ[MaxSize3,MaxSize4](NumericArrayRef), oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""); #==========================================# HH = IFF(useCLprice==1,C,H); LL = IFF(useCLprice==1,C,L); If Index == 0 Then { oHiZZ[1,1] = HH; oLoZZ[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생 If 최종꼭지점 == "저점" Then { If oLoZZ[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If oHiZZ[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; oTL_NewBit = 0; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { oHiZZ[j,jj] = oHiZZ[j-1,jj]; } } oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oHiZZ[1,1] < HH Then { // 1번 고점보다 높은 고가 출현 oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { oLoZZ[j,jj] = oLoZZ[j-1,jj]; } } oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oLoZZ[1,1] > LL then { oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "저점"; } If 최종꼭지점 == "고점" Then HiLoLineZigZag = 1; Else If 최종꼭지점 == "저점" Then HiLoLineZigZag = -1; Else HiLoLineZigZag = 0;
지표
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2018-01-12 10:13:27

안녕하세요 예스스탁입니다. 비율은 어떻게 계산식을 만들어 드러야 할지 모르겠습니다. 가격과 지표의 가격차이만 저장하는 식 올려드립니다. 아래식 참고하셔서 수정보완해 사용하시기 바랍니다. Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else{ // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } input : P(10); var : TRIXv(0); var : 가격차이1(0),지표차이1(0); var : 가격차이2(0),지표차이2(0); var : 가격차이3(0),지표차이3(0); var : 가격차이4(0),지표차이4(0); var : 가격차이5(0),지표차이5(0); TRIXv = TRIX(P); if value1 == 1 then{ #상승5 -> 하락4 -> 상승3 -- > 하락2 --> 상승1(현재) #상승1의 가격차이와 지표차이 가격차이1 = abs(고[1,1]-저[1,1]); 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]]); #하락2의 가격차이와 지표차이 가격차이2 = abs(고[2,1]-저[1,1]); 지표차이2 = max(Trixv[index-고[2,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[1,2]]); #상승3의 가격차이와 지표차이 가격차이3 = abs(고[2,1]-저[2,1]); 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]]); #하락4의 가격차이와 지표차이 가격차이4 = abs(고[3,1]-저[2,1]); 지표차이4 = max(Trixv[index-고[3,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[2,2]]); #상승5의 가격차이와 지표차이 가격차이5 = abs(고[3,1]-저[3,1]); 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]]); } else { #하락5 -> 상승4 -> 하락3 -> 상승2 -- > 하락1(현재) #하락1의 가격차이와 지표차이 가격차이1 = abs(고[1,1]-저[1,1]); 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]]); #상승2의 가격차이와 지표차이 가격차이2 = abs(고[1,1]-저[2,1]); 지표차이2 = max(Trixv[index-고[1,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[2,2]]); #하락3의 가격차이와 지표차이 가격차이3 = abs(고[2,1]-저[2,1]); 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]]); #상승4의 가격차이와 지표차이 가격차이4 = abs(고[2,1]-저[3,1]); 지표차이4 = max(Trixv[index-고[2,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[3,2]]); #하락5의 가격차이와 지표차이 가격차이5 = abs(고[3,1]-저[3,1]); 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]]); } 즐거운 하루되세요 > yes 님이 쓴 글입니다. > 제목 : 부탁 드립니다. > 도움 주심에 깊이 감사 드립니다. 그림의 설명처럼 부탁 드립니다. 미리 감사 드립니다. 사용된 수식) Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else { // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } 사용된 함수) 함수명:HiLoLineZigZag 수식) Input:Length(NumericSimple),useCLprice(NumericSimple), oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime oLoZZ[MaxSize3,MaxSize4](NumericArrayRef), oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""); #==========================================# HH = IFF(useCLprice==1,C,H); LL = IFF(useCLprice==1,C,L); If Index == 0 Then { oHiZZ[1,1] = HH; oLoZZ[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생 If 최종꼭지점 == "저점" Then { If oLoZZ[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If oHiZZ[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; oTL_NewBit = 0; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { oHiZZ[j,jj] = oHiZZ[j-1,jj]; } } oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oHiZZ[1,1] < HH Then { // 1번 고점보다 높은 고가 출현 oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { oLoZZ[j,jj] = oLoZZ[j-1,jj]; } } oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oLoZZ[1,1] > LL then { oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "저점"; } If 최종꼭지점 == "고점" Then HiLoLineZigZag = 1; Else If 최종꼭지점 == "저점" Then HiLoLineZigZag = -1; Else HiLoLineZigZag = 0;
프로필 이미지

yes

2018-01-16 15:35:14

답변 감사 드립니다. 답변수식에서 plot1(가격차이1,"가격차이1"); plot2(지표차이1,"지표차이"); 및 plot1(가격차이2,"가격차이2"); plot2(지표차이2,"지표차이2"); 와 같은방법으로 가격차이 3,4,5 지표차이3,4,5를 실행한 결과 원하는지표가 나오지 않아 첨부 그림과 같이 재 부탁 드리고자 합니다. 미리 감사 드립니다. 미리 감사 드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 부탁 드립니다. > 안녕하세요 예스스탁입니다. 비율은 어떻게 계산식을 만들어 드러야 할지 모르겠습니다. 가격과 지표의 가격차이만 저장하는 식 올려드립니다. 아래식 참고하셔서 수정보완해 사용하시기 바랍니다. Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else{ // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } input : P(10); var : TRIXv(0); var : 가격차이1(0),지표차이1(0); var : 가격차이2(0),지표차이2(0); var : 가격차이3(0),지표차이3(0); var : 가격차이4(0),지표차이4(0); var : 가격차이5(0),지표차이5(0); TRIXv = TRIX(P); if value1 == 1 then{ #상승5 -> 하락4 -> 상승3 -- > 하락2 --> 상승1(현재) #상승1의 가격차이와 지표차이 가격차이1 = abs(고[1,1]-저[1,1]); 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]]); #하락2의 가격차이와 지표차이 가격차이2 = abs(고[2,1]-저[1,1]); 지표차이2 = max(Trixv[index-고[2,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[1,2]]); #상승3의 가격차이와 지표차이 가격차이3 = abs(고[2,1]-저[2,1]); 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]]); #하락4의 가격차이와 지표차이 가격차이4 = abs(고[3,1]-저[2,1]); 지표차이4 = max(Trixv[index-고[3,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[2,2]]); #상승5의 가격차이와 지표차이 가격차이5 = abs(고[3,1]-저[3,1]); 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]]); } else { #하락5 -> 상승4 -> 하락3 -> 상승2 -- > 하락1(현재) #하락1의 가격차이와 지표차이 가격차이1 = abs(고[1,1]-저[1,1]); 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]]); #상승2의 가격차이와 지표차이 가격차이2 = abs(고[1,1]-저[2,1]); 지표차이2 = max(Trixv[index-고[1,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[2,2]]); #하락3의 가격차이와 지표차이 가격차이3 = abs(고[2,1]-저[2,1]); 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]]); #상승4의 가격차이와 지표차이 가격차이4 = abs(고[2,1]-저[3,1]); 지표차이4 = max(Trixv[index-고[2,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[3,2]]); #하락5의 가격차이와 지표차이 가격차이5 = abs(고[3,1]-저[3,1]); 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]]); } 즐거운 하루되세요 > yes 님이 쓴 글입니다. > 제목 : 부탁 드립니다. > 도움 주심에 깊이 감사 드립니다. 그림의 설명처럼 부탁 드립니다. 미리 감사 드립니다. 사용된 수식) Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else { // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } 사용된 함수) 함수명:HiLoLineZigZag 수식) Input:Length(NumericSimple),useCLprice(NumericSimple), oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime oLoZZ[MaxSize3,MaxSize4](NumericArrayRef), oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""); #==========================================# HH = IFF(useCLprice==1,C,H); LL = IFF(useCLprice==1,C,L); If Index == 0 Then { oHiZZ[1,1] = HH; oLoZZ[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생 If 최종꼭지점 == "저점" Then { If oLoZZ[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If oHiZZ[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; oTL_NewBit = 0; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { oHiZZ[j,jj] = oHiZZ[j-1,jj]; } } oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oHiZZ[1,1] < HH Then { // 1번 고점보다 높은 고가 출현 oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { oLoZZ[j,jj] = oLoZZ[j-1,jj]; } } oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oLoZZ[1,1] > LL then { oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "저점"; } If 최종꼭지점 == "고점" Then HiLoLineZigZag = 1; Else If 최종꼭지점 == "저점" Then HiLoLineZigZag = -1; Else HiLoLineZigZag = 0;
프로필 이미지

예스스탁 예스스탁 답변

2018-01-17 11:37:02

안녕하세요 예스스탁입니다. Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else{ // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } input : P(10); var : TRIXv(0); var : 가격차이1(0),지표차이1(0),봉갯수1(0); var : 가격차이2(0),지표차이2(0),봉갯수2(0); var : 가격차이3(0),지표차이3(0),봉갯수3(0); var : 가격차이4(0),지표차이4(0),봉갯수4(0); var : 가격차이5(0),지표차이5(0),봉갯수5(0); TRIXv = TRIX(P); if value1 == 1 then{ #상승5 -> 하락4 -> 상승3 -- > 하락2 --> 상승1(현재) #상승1의 가격차이와 지표차이 봉갯수1 = abs(고[1,2]-저[1,2]); 가격차이1 = abs(고[1,1]-저[1,1])/봉갯수1; 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]])/봉갯수1; #하락2의 가격차이와 지표차이 봉갯수2 = abs(고[2,2]-저[1,2]); 가격차이2 = abs(고[2,1]-저[1,1])/봉갯수2; 지표차이2 = max(Trixv[index-고[2,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[1,2]])/봉갯수2; #상승3의 가격차이와 지표차이 봉갯수3 = abs(고[2,2]-저[2,2]); 가격차이3 = abs(고[2,1]-저[2,1])/봉갯수3; 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]])/봉갯수3; #하락4의 가격차이와 지표차이 봉갯수4 = abs(고[3,2]-저[2,2]); 가격차이4 = abs(고[3,1]-저[2,1])/봉갯수4; 지표차이4 = max(Trixv[index-고[3,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[2,2]])/봉갯수4; #상승5의 가격차이와 지표차이 봉갯수5 = abs(고[3,2]-저[3,2]); 가격차이5 = abs(고[3,1]-저[3,1])/봉갯수5; 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]])/봉갯수5; } else { #하락5 -> 상승4 -> 하락3 -> 상승2 -- > 하락1(현재) #하락1의 가격차이와 지표차이 봉갯수1 = abs(고[1,2]-저[1,2]); 가격차이1 = abs(고[1,1]-저[1,1])/봉갯수1; 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]])/봉갯수1; #상승2의 가격차이와 지표차이 봉갯수2 = abs(고[1,2]-저[2,2]); 가격차이2 = abs(고[1,1]-저[2,1])/봉갯수2; 지표차이2 = max(Trixv[index-고[1,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[2,2]]/봉갯수2); #하락3의 가격차이와 지표차이 봉갯수3 = abs(고[2,2]-저[2,2]); 가격차이3 = abs(고[2,1]-저[2,1])/봉갯수3; 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]])/봉갯수3; #상승4의 가격차이와 지표차이 봉갯수4 = abs(고[2,2]-저[3,2]); 가격차이4 = abs(고[2,1]-저[3,1])/봉갯수4; 지표차이4 = max(Trixv[index-고[2,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[3,2]])/봉갯수4; #하락5의 가격차이와 지표차이 봉갯수5 = abs(고[3,2]-저[3,2]); 가격차이5 = abs(고[3,1]-저[3,1])/봉갯수5; 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]])/봉갯수5; } 즐거운 하루되세요 > yes 님이 쓴 글입니다. > 제목 : Re : Re : 부탁 드립니다. > 답변 감사 드립니다. 답변수식에서 plot1(가격차이1,"가격차이1"); plot2(지표차이1,"지표차이"); 및 plot1(가격차이2,"가격차이2"); plot2(지표차이2,"지표차이2"); 와 같은방법으로 가격차이 3,4,5 지표차이3,4,5를 실행한 결과 원하는지표가 나오지 않아 첨부 그림과 같이 재 부탁 드리고자 합니다. 미리 감사 드립니다. 미리 감사 드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 부탁 드립니다. > 안녕하세요 예스스탁입니다. 비율은 어떻게 계산식을 만들어 드러야 할지 모르겠습니다. 가격과 지표의 가격차이만 저장하는 식 올려드립니다. 아래식 참고하셔서 수정보완해 사용하시기 바랍니다. Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else{ // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } input : P(10); var : TRIXv(0); var : 가격차이1(0),지표차이1(0); var : 가격차이2(0),지표차이2(0); var : 가격차이3(0),지표차이3(0); var : 가격차이4(0),지표차이4(0); var : 가격차이5(0),지표차이5(0); TRIXv = TRIX(P); if value1 == 1 then{ #상승5 -> 하락4 -> 상승3 -- > 하락2 --> 상승1(현재) #상승1의 가격차이와 지표차이 가격차이1 = abs(고[1,1]-저[1,1]); 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]]); #하락2의 가격차이와 지표차이 가격차이2 = abs(고[2,1]-저[1,1]); 지표차이2 = max(Trixv[index-고[2,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[1,2]]); #상승3의 가격차이와 지표차이 가격차이3 = abs(고[2,1]-저[2,1]); 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]]); #하락4의 가격차이와 지표차이 가격차이4 = abs(고[3,1]-저[2,1]); 지표차이4 = max(Trixv[index-고[3,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[2,2]]); #상승5의 가격차이와 지표차이 가격차이5 = abs(고[3,1]-저[3,1]); 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]]); } else { #하락5 -> 상승4 -> 하락3 -> 상승2 -- > 하락1(현재) #하락1의 가격차이와 지표차이 가격차이1 = abs(고[1,1]-저[1,1]); 지표차이1 = max(Trixv[index-고[1,2]],Trixv[index-저[1,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[1,2]]); #상승2의 가격차이와 지표차이 가격차이2 = abs(고[1,1]-저[2,1]); 지표차이2 = max(Trixv[index-고[1,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[1,2]],Trixv[index-저[2,2]]); #하락3의 가격차이와 지표차이 가격차이3 = abs(고[2,1]-저[2,1]); 지표차이3 = max(Trixv[index-고[2,2]],Trixv[index-저[2,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[2,2]]); #상승4의 가격차이와 지표차이 가격차이4 = abs(고[2,1]-저[3,1]); 지표차이4 = max(Trixv[index-고[2,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[2,2]],Trixv[index-저[3,2]]); #하락5의 가격차이와 지표차이 가격차이5 = abs(고[3,1]-저[3,1]); 지표차이5 = max(Trixv[index-고[3,2]],Trixv[index-저[3,2]])-min(Trixv[index-고[3,2]],Trixv[index-저[3,2]]); } 즐거운 하루되세요 > yes 님이 쓴 글입니다. > 제목 : 부탁 드립니다. > 도움 주심에 깊이 감사 드립니다. 그림의 설명처럼 부탁 드립니다. 미리 감사 드립니다. 사용된 수식) Input:length(20); Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0), TL_NewBit(0); // 1:NewLine 2:SetEndLine Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit); If Value1 == 1 Then { // 고점 If TL_NewBit == 1 Then { // 신규 고점 TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);} TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = 0; For j = 2 To 10 { If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다 k = j; j = 10; // exit loop } } q = q + 1; // 고점이 새로 추가되었으므로 1 증가 If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내 TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } Else { // 신규 고점이 아니면 기존 추세선만 연장 If k > 1 Then { TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 2 and q <= 10 Then { TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); } } Else If Value1 == -1 Then { // 저점 If TL_NewBit == 1 Then { // 신규 저점 TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); TL_SetSize(TL1,1); TL_Setcolor(tl1,white); k = k + 1; // 저점이 새로 추가되었으므로 1 증가 If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내 TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } } Else { // 신규 저점이 아니면 기존 추세선만 연장 If k > 2 and k <= 10 Then { TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]); } If q > 1 Then { TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]); } } If TL_NewBit == 2 Then { TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); } } 사용된 함수) 함수명:HiLoLineZigZag 수식) Input:Length(NumericSimple),useCLprice(NumericSimple), oHiZZ[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime oLoZZ[MaxSize3,MaxSize4](NumericArrayRef), oTL_NewBit(NumericRef); // 1:NewLine 2:SetEndLine Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""); #==========================================# HH = IFF(useCLprice==1,C,H); LL = IFF(useCLprice==1,C,L); If Index == 0 Then { oHiZZ[1,1] = HH; oLoZZ[1,1] = LL; } Condition1 = Highest(HH,length) == HH and 최종고가 <> HH; Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL; 처리구분 = ""; If Condition1 and Condition2 Then { // 기간고점과 기간저점 동시 발생 If 최종꼭지점 == "저점" Then { If oLoZZ[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If oHiZZ[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; oTL_NewBit = 0; #==========================================# If 처리구분 == "고점처리" Then { 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { oHiZZ[j,jj] = oHiZZ[j-1,jj]; } } oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oHiZZ[1,1] < HH Then { // 1번 고점보다 높은 고가 출현 oHiZZ[1,1] = HH; oHiZZ[1,2] = Index; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { oLoZZ[j,jj] = oLoZZ[j-1,jj]; } } oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 1; } Else If oLoZZ[1,1] > LL then { oLoZZ[1,1] = LL; oLoZZ[1,2] = Index; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; oTL_NewBit = 2; } 최종꼭지점 = "저점"; } If 최종꼭지점 == "고점" Then HiLoLineZigZag = 1; Else If 최종꼭지점 == "저점" Then HiLoLineZigZag = -1; Else HiLoLineZigZag = 0;