커뮤니티

부탁드립니다

프로필 이미지
bigman
2020-10-18 01:55:04
965
글번호 143180
답변완료
아래 as8282님 질문 66689 (작성일 : 2020-03-26 오후 3:01:22)를 돌려보니 "선언되지 않은 이름 'IndiDivergence'가 사용되었씁니다" 라는 에러가 뜨는데 올려주신 ChgRateZigZag.yfu와 같이 Function 파일이 필요한것 같습니다 한번 확인 부탁 드립니다. 감사합니다 > as8282 님이 쓴 글입니다. > 제목 : 문의드립니다. > 아래식은 지난 선배님의 수식인데... 에러가나서 어떻게 해결할지 못해 문의드립니다. Input:Rate(3), kind(1); // 1:일반다이버전스,2:히든다이버전스,3:과장된다이버전스,4:3중다이버전스 Var:j(0),jj(0),iValue(0), 고저구분(0), // 1: 고점, 2: 저점 신규여부(0); // 1: 신규, 2: 연장 Array:HH[10,4](0),LL[10,4](0), // 1:가격, 2:Index, 3:sDate, 4:sTime IH[10,4](0),IL[10,4](0), // 지표의 고,저점을 관리 TL[10](0), BeginIndex[4](0); var : tx1(0),tx2(0); #==========================================# iValue = RSI(9); // 지표값은 아래와 같이 다양하게 변경 가능 // iValue = StochasticsK(10,5); // iValue = StochasticsD(5,3,3); // iValue = MACD(12,26); // iValue = MACD_OSC(12,26,9); // iValue = CCI(9); // iValue = LRS(C,14); // iValue = Volume; Plot1(iValue); #==========================================# // 주가 차트에 대한 파동선 고저구분 = ChgRateZigZag(Rate,0,HH,LL,신규여부); // 최소변동률지그재그 If 고저구분 == 1 Then { // 고점 If 신규여부 == 1 Then { TL[0] = TL_New(LL[1,3],LL[1,4],LL[1,1],HH[1,3],HH[1,4],HH[1,1]); } If 신규여부 == 2 Then // 고점 연장 { TL_SetEnd(TL[0],HH[1,3],HH[1,4],HH[1,1]); } } Else If 고저구분 == -1 Then { // 저점 If 신규여부 == 1 Then { TL[0] = TL_New(HH[1,3],HH[1,4],HH[1,1],LL[1,3],LL[1,4],LL[1,1]); } If 신규여부 == 2 Then // 저점 연장 { TL_SetEnd(TL[0],LL[1,3],LL[1,4],LL[1,1]); } } TL_SetSize(TL[0],1); TL_SetColor(TL[0],PINK); if 고저구분 == 1 Then { if 고저구분[1] != 1 Then { tx1 = Text_New(HH[1,3],HH[1,4],HH[1,1],NumToStr(HH[1,1],2)); Text_SetStyle(tx1,2,1); } Else { Text_SetString(tx1,NumToStr(HH[1,1],2)); Text_SetLocation(tx1,HH[1,3],HH[1,4],HH[1,1]); } } if 고저구분 == -1 Then { if 고저구분[1] != -1 Then { tx1 = Text_New(LL[1,3],LL[1,4],LL[1,1],NumToStr(LL[1,1],2)); Text_SetStyle(tx1,2,0); } Else { Text_SetString(tx1,NumToStr(LL[1,1],2)); Text_SetLocation(tx1,LL[1,3],LL[1,4],LL[1,1]); } } #==========================================# // 보조지표에 대한 파동선 Value1 = IndiDivergence(고저구분,신규여부,iValue,IH,IL); // 주가의 지그재그파동 결과를 입력 // 결과값이 1이면 정상, 0이면 오류 If Value1 == 1 Then { If 고저구분 == 1 Then { // 고점 If 신규여부 == 1 Then // 주가 파동에 신규 고점 발생 { TL[1] = TL_New_Self(IL[1,3],IL[1,4],IL[1,1],IH[1,3],IH[1,4],IH[1,1]); tx2 = Text_New_Self(IH[1,3],IH[1,4],IH[1,1],NumToStr(IH[1,1],2)); Text_SetStyle(tx2,2,1); } Else // 주가의 꼭지점이 그대로라도 지표는 변하므로 매봉마다 연장처리 { TL_SetEnd(TL[1],IH[1,3],IH[1,4],IH[1,1]); Text_SetString(tx2,NumToStr(IH[1,1],2)); Text_SetLocation(tx2,IH[1,3],IH[1,4],IH[1,1]); } } Else If 고저구분 == -1 Then { // 저점 If 신규여부 == 1 Then // 주가 파동에 신규 저점 발생 { TL[1] = TL_New_Self(IH[1,3],IH[1,4],IH[1,1],IL[1,3],IL[1,4],IL[1,1]); tx2 = Text_New_Self(IL[1,3],IL[1,4],IL[1,1],NumToStr(IL[1,1],2)); Text_SetStyle(tx2,2,0); } Else { TL_SetEnd(TL[1],IL[1,3],IL[1,4],IL[1,1]); Text_SetString(tx2,NumToStr(IL[1,1],2)); Text_SetLocation(tx2,IL[1,3],IL[1,4],IL[1,1]); } } TL_SetSize(TL[1],1); TL_SetColor(TL[1],BLUE); } #==========================================# // 다이버전스 표시 If (kind == 1 and HH[2,1] < HH[1,1] and IH[2,1] > IH[1,1]) or // 일반 약세 다이버전스 : 주가 고점 상승, 보조지표 고점 하락 (kind == 2 and HH[2,1] > HH[1,1] and IH[2,1] < IH[1,1]) or // 히든 약세 다이버전스 : 주가 고점 하락, 보조지표 고점 상승 (kind == 3 and abs(HH[2,1] - HH[1,1]) <= 2 * PriceScale and IH[2,1] > IH[1,1]) Then { // 과장된 약세 다이버전스 : 주가 고점의 차이가 2틱 이내이고 보조지표 고점 하락 Value2 = (HH[1,1]-HH[2,1])/(HH[1,2]-HH[2,2])*(Index-HH[2,2])+HH[2,1]; Value3 = (IH[1,1]-IH[2,1])/(IH[1,2]-IH[2,2])*(Index-IH[2,2])+IH[2,1]; If BeginIndex[0] == HH[2,2] Then { // 다이버전스를 나타내는 추세선의 시작점이 변함이 없으면 추세선 끝점만 연장 TL_SetEnd(TL[2],sDate,sTime,Value2); TL_SetEnd(TL[3],sDate,sTime,Value3); } Else { TL[2] = TL_New(HH[2,3],HH[2,4],HH[2,1],sDate,sTime,Value2); TL[3] = TL_New_Self(IH[2,3],IH[2,4],IH[2,1],sDate,sTime,Value3); BeginIndex[0] = HH[2,2]; // 추세선 시작점인 2번 고점의 index 값을 저장 } TL_SetSize(TL[2],3); TL_SetSize(TL[3],3); TL_SetColor(TL[2],LGREEN); TL_SetColor(TL[3],LGREEN); } If (kind == 1 and LL[2,1] > LL[1,1] and IL[2,1] < IL[1,1]) or // 일반 강세 다이버전스 : 주가 저점 하락, 보조지표 저점 상승 (kind == 2 and LL[2,1] < LL[1,1] and IL[2,1] > IL[1,1]) or // 히든 강세 다이버전스 : 주가 저점 상승, 보조지표 저점 하락 (kind == 3 and abs(LL[2,1] - LL[1,1]) <= 2 * PriceScale and IL[2,1] < IL[1,1]) Then { // 과장된 강세 다이버전스 : 주가 저점의 차이가 2틱 이내, 보조지표 저점 상승 Value4 = (LL[1,1]-LL[2,1])/(LL[1,2]-LL[2,2])*(Index-LL[2,2])+LL[2,1]; Value5 = (IL[1,1]-IL[2,1])/(IL[1,2]-IL[2,2])*(Index-IL[2,2])+IL[2,1]; If BeginIndex[1] == LL[2,2] Then { TL_SetEnd(TL[4],sDate,sTime,Value4); TL_SetEnd(TL[5],sDate,sTime,Value5); } Else { TL[4] = TL_New(LL[2,3],LL[2,4],LL[2,1],sDate,sTime,Value4); TL[5] = TL_New_Self(IL[2,3],IL[2,4],IL[2,1],sDate,sTime,Value5); BeginIndex[1] = LL[2,2]; } TL_SetSize(TL[4],3); TL_SetSize(TL[5],3); TL_SetColor(TL[4],MAGENTA); TL_SetColor(TL[5],MAGENTA); } If kind == 4 and HH[3,1] < HH[1,1] and // 주가 고점 상승 (HH[1,1]-HH[3,1])/(HH[1,2]-HH[3,2])*(HH[2,2]-HH[3,2])+HH[3,1] > HH[2,1] and // 2번 고점은 1번과 3번 고점을 잇는 선보다 밑에 위치 IH[3,1] > IH[1,1] and // 보조지표 고점 하락 (IH[1,1]-IH[3,1])/(IH[1,2]-IH[3,2])*(IH[2,2]-IH[3,2])+IH[3,1] > IH[2,1] Then { // 2번 고점은 1번과 3번 고점을 잇는 선보다 밑에 위치 Value2 = (HH[1,1]-HH[3,1])/(HH[1,2]-HH[3,2])*(Index-HH[3,2])+HH[3,1]; Value3 = (IH[1,1]-IH[3,1])/(IH[1,2]-IH[3,2])*(Index-IH[3,2])+IH[3,1]; If BeginIndex[0] == HH[3,2] Then { TL_SetEnd(TL[2],sDate,sTime,Value2); TL_SetEnd(TL[3],sDate,sTime,Value3); } Else { TL[2] = TL_New(HH[3,3],HH[3,4],HH[3,1],sDate,sTime,Value2); TL[3] = TL_New_Self(IH[3,3],IH[3,4],IH[3,1],sDate,sTime,Value3); BeginIndex[0] = HH[3,2]; } TL_SetSize(TL[2],3); TL_SetSize(TL[3],3); TL_SetColor(TL[2],LGREEN); TL_SetColor(TL[3],LGREEN); } If kind == 4 and LL[3,1] > LL[1,1] and // 주가 저점 하락 (LL[1,1]-LL[3,1])/(LL[1,2]-LL[3,2])*(LL[2,2]-LL[3,2])+LL[3,1] < LL[2,1] and // 2번 저점이 1번,3번 저점을 잇는 선보다 위에 위치 IL[3,1] < IL[1,1] and // 보조지표 저점 상승 (IL[1,1]-IL[3,1])/(IL[1,2]-IL[3,2])*(IL[2,2]-IL[3,2])+IL[3,1] < IL[2,1] Then { Value4 = (LL[1,1]-LL[3,1])/(LL[1,2]-LL[3,2])*(Index-LL[3,2])+LL[3,1]; Value5 = (IL[1,1]-IL[3,1])/(IL[1,2]-IL[3,2])*(Index-IL[3,2])+IL[3,1]; If BeginIndex[1] == LL[3,2] Then { TL_SetEnd(TL[4],sDate,sTime,Value4); TL_SetEnd(TL[5],sDate,sTime,Value5); } Else { TL[4] = TL_New(LL[3,3],LL[3,4],LL[3,1],sDate,sTime,Value4); TL[5] = TL_New_Self(IL[3,3],IL[3,4],IL[3,1],sDate,sTime,Value5); BeginIndex[1] = LL[3,2]; } TL_SetSize(TL[4],3); TL_SetSize(TL[5],3); TL_SetColor(TL[4],MAGENTA); TL_SetColor(TL[5],MAGENTA); }
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-10-19 16:52:46

안녕하세요 예스스탁입니다. 아래내용을 사용자함수로 작성하시면 됩니다. 해당 내용은 아래블로그를 운영하시는 수식지왕님이 작성해서 배포한 수식입니다. Blog.naver.con/yahoosir 1 사용자함수명 : ChgRateZigZag 반환값형 : 숫자형 #==========================================# # 사용자함수 : 최소변동률 지그재그 파동 # 버 전 : 1.2 # 작 성 자 : 수식지왕 # 블 로 그 : http://yahoosir.blog.me #==========================================# Input:ChgRate(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),hiBar(0),loBar(0),최종꼭지점(""),처리구분(""); #==========================================# HH = IFF(useCLprice==1,C,H); LL = IFF(useCLprice==1,C,L); If Index == 0 Then { oHiZZ[1,1] = HH; oHiZZ[1,2] = 0; oHiZZ[1,3] = sDate; oHiZZ[1,4] = sTime; oLoZZ[1,1] = LL; oLoZZ[1,2] = 0; oLoZZ[1,3] = sDate; oLoZZ[1,4] = sTime; } If Index > 0 Then { // Index가 0일때는 이전 봉이 없으므로 Index가 1일때부터 1씩 증가 hiBar = hiBar + 1; // 최고점을 찍은 고[저]가의 위치를 저장 해놓기 위해 봉번호를 카운트한다. loBar = loBar + 1; } If HH[hiBar] < HH Then hiBar = 0; // 현재 봉이 최고가이면 봉번호를 0으로 초기화 If LL[loBar] > LL Then loBar = 0; Condition1 = oLoZZ[1,1] * (1 + (ChgRate/100)) < HH and hiBar == 0; // 전저점에서 최소변동률만큼 더한 값보다 고가가 크다면 추세가 변한 것으로 보고 신규 고점으로 인식 Condition2 = oHiZZ[1,1] * (1 - (ChgRate/100)) > LL and loBar == 0; // 전고점에서 최소변동률만큼 뺀 값보다 저가가 작다면 추세가 변한 것으로 보고 신규 저점으로 인식 처리구분 = ""; If Condition1 and Condition2 Then { // 고점과 저점 조건 동시 만족 If oHiZZ[1,1] < HH and oLoZZ[1,1] > LL Then { // 기존의 파동을 벗어난 경우 If HH - oHiZZ[1,1] > oLoZZ[1,1] - LL Then // 많이 벗어난 쪽으로 처리 처리구분 = "고점처리"; Else If HH - oHiZZ[1,1] < oLoZZ[1,1] - LL Then 처리구분 = "저점처리"; Else If 최종꼭지점 == "저점" Then // 벗어난 정도가 동일하면 지그재그 순서대로 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } Else If oLoZZ[1,1] > LL Then 처리구분 = "저점처리"; Else If oHiZZ[1,1] < HH Then 처리구분 = "고점처리"; Else If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; oTL_NewBit = 0; #==========================================# If 처리구분 == "고점처리" Then { 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; hiBar = -1; // 다음 봉의 고가가 기준 고가로 인식되려면 hiBar 값이 0이 되어야 한다. // 봉이 바뀔 때마다 hiBar의 값을 1씩 증가시키므로 다음 봉의 hiBar 값은 0이 된다. loBar = -1; 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; hiBar = -1; loBar = -1; oTL_NewBit = 2; } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { 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; hiBar = -1; loBar = -1; 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; hiBar = -1; loBar = -1; oTL_NewBit = 2; } 최종꼭지점 = "저점"; } If 최종꼭지점 == "고점" Then ChgRateZigZag = 1; Else If 최종꼭지점 == "저점" Then ChgRateZigZag = -1; Else ChgRateZigZag = 0; 2 사용자함수명 : IndiDivergence 반환값형 : 숫자형 Input:HiLoBit(NumericSimple),NewBit(NumericSimple),indicator(NumericSeries), oHi[MaxSize1,MaxSize2](NumericArrayRef), // 열번호 1:가격,2:Index,3:sDate,4:sTime oLo[MaxSize3,MaxSize4](NumericArrayRef); Var:j(0),jj(0),HiBar(0),LoBar(0),result(0); #==========================================# result = 1; If HiLoBit == 1 Then { // 주가의 마지막 꼭지점이 고점인 상태 If NewBit == 1 Then { // 주가의 고점이 신규이면 보조 지표의 파동도 신규 For j = 10 DownTo 2 { // 과거치는 하나씩 뒤로 보내고 For jj = 1 To 4 { oHi[j,jj] = oHi[j - 1,jj]; } } HiBar = 0; For j = 1 To Index - oLo[1,2] - 1 { // 마지막 저점 이후 보조 지표에서 고점 search If indicator[HiBar] < indicator[j] Then HiBar = j; } oHi[1,1] = indicator[HiBar]; oHi[1,2] = Index[HiBar]; oHi[1,3] = sDate[HiBar]; oHi[1,4] = sTime[HiBar]; } Else { // 주가의 고점이 바뀌지 않아도 보조 지표값은 계속 변하므로 HiBar = 0; For j = 1 To Index - oLo[1,2] - 1 { If indicator[HiBar] < indicator[j] Then HiBar = j; } oHi[1,1] = indicator[HiBar]; oHi[1,2] = Index[HiBar]; oHi[1,3] = sDate[HiBar]; oHi[1,4] = sTime[HiBar]; } } Else If HiLoBit == -1 Then { // 주가의 마지막 꼭지점이 저점 If NewBit == 1 Then { // 신규이면 For j = 10 DownTo 2 { // 배열값을 뒤로 move For jj = 1 To 4 { oLo[j,jj] = oLo[j - 1,jj]; } } LoBar = 0; For j = 1 To Index - oHi[1,2] - 1 { // 고점 이후 낮은 값 search If indicator[LoBar] > indicator[j] Then LoBar = j; } oLo[1,1] = indicator[LoBar]; oLo[1,2] = Index[LoBar]; oLo[1,3] = sDate[LoBar]; oLo[1,4] = sTime[LoBar]; } Else { LoBar = 0; For j = 1 To Index - oHi[1,2] - 1 { If indicator[LoBar] > indicator[j] Then LoBar = j; } oLo[1,1] = indicator[LoBar]; oLo[1,2] = Index[LoBar]; oLo[1,3] = sDate[LoBar]; oLo[1,4] = sTime[LoBar]; } } Else result = 0; // HiLoBit가 1(전고점), -1(전저점)이 아니면 에러 IndiDivergence = result; 즐거운 하루되세요 > bigman 님이 쓴 글입니다. > 제목 : 부탁드립니다 > 아래 as8282님 질문 66689 (작성일 : 2020-03-26 오후 3:01:22)를 돌려보니 "선언되지 않은 이름 'IndiDivergence'가 사용되었씁니다" 라는 에러가 뜨는데 올려주신 ChgRateZigZag.yfu와 같이 Function 파일이 필요한것 같습니다 한번 확인 부탁 드립니다. 감사합니다 > as8282 님이 쓴 글입니다. > 제목 : 문의드립니다. > 아래식은 지난 선배님의 수식인데... 에러가나서 어떻게 해결할지 못해 문의드립니다. Input:Rate(3), kind(1); // 1:일반다이버전스,2:히든다이버전스,3:과장된다이버전스,4:3중다이버전스 Var:j(0),jj(0),iValue(0), 고저구분(0), // 1: 고점, 2: 저점 신규여부(0); // 1: 신규, 2: 연장 Array:HH[10,4](0),LL[10,4](0), // 1:가격, 2:Index, 3:sDate, 4:sTime IH[10,4](0),IL[10,4](0), // 지표의 고,저점을 관리 TL[10](0), BeginIndex[4](0); var : tx1(0),tx2(0); #==========================================# iValue = RSI(9); // 지표값은 아래와 같이 다양하게 변경 가능 // iValue = StochasticsK(10,5); // iValue = StochasticsD(5,3,3); // iValue = MACD(12,26); // iValue = MACD_OSC(12,26,9); // iValue = CCI(9); // iValue = LRS(C,14); // iValue = Volume; Plot1(iValue); #==========================================# // 주가 차트에 대한 파동선 고저구분 = ChgRateZigZag(Rate,0,HH,LL,신규여부); // 최소변동률지그재그 If 고저구분 == 1 Then { // 고점 If 신규여부 == 1 Then { TL[0] = TL_New(LL[1,3],LL[1,4],LL[1,1],HH[1,3],HH[1,4],HH[1,1]); } If 신규여부 == 2 Then // 고점 연장 { TL_SetEnd(TL[0],HH[1,3],HH[1,4],HH[1,1]); } } Else If 고저구분 == -1 Then { // 저점 If 신규여부 == 1 Then { TL[0] = TL_New(HH[1,3],HH[1,4],HH[1,1],LL[1,3],LL[1,4],LL[1,1]); } If 신규여부 == 2 Then // 저점 연장 { TL_SetEnd(TL[0],LL[1,3],LL[1,4],LL[1,1]); } } TL_SetSize(TL[0],1); TL_SetColor(TL[0],PINK); if 고저구분 == 1 Then { if 고저구분[1] != 1 Then { tx1 = Text_New(HH[1,3],HH[1,4],HH[1,1],NumToStr(HH[1,1],2)); Text_SetStyle(tx1,2,1); } Else { Text_SetString(tx1,NumToStr(HH[1,1],2)); Text_SetLocation(tx1,HH[1,3],HH[1,4],HH[1,1]); } } if 고저구분 == -1 Then { if 고저구분[1] != -1 Then { tx1 = Text_New(LL[1,3],LL[1,4],LL[1,1],NumToStr(LL[1,1],2)); Text_SetStyle(tx1,2,0); } Else { Text_SetString(tx1,NumToStr(LL[1,1],2)); Text_SetLocation(tx1,LL[1,3],LL[1,4],LL[1,1]); } } #==========================================# // 보조지표에 대한 파동선 Value1 = IndiDivergence(고저구분,신규여부,iValue,IH,IL); // 주가의 지그재그파동 결과를 입력 // 결과값이 1이면 정상, 0이면 오류 If Value1 == 1 Then { If 고저구분 == 1 Then { // 고점 If 신규여부 == 1 Then // 주가 파동에 신규 고점 발생 { TL[1] = TL_New_Self(IL[1,3],IL[1,4],IL[1,1],IH[1,3],IH[1,4],IH[1,1]); tx2 = Text_New_Self(IH[1,3],IH[1,4],IH[1,1],NumToStr(IH[1,1],2)); Text_SetStyle(tx2,2,1); } Else // 주가의 꼭지점이 그대로라도 지표는 변하므로 매봉마다 연장처리 { TL_SetEnd(TL[1],IH[1,3],IH[1,4],IH[1,1]); Text_SetString(tx2,NumToStr(IH[1,1],2)); Text_SetLocation(tx2,IH[1,3],IH[1,4],IH[1,1]); } } Else If 고저구분 == -1 Then { // 저점 If 신규여부 == 1 Then // 주가 파동에 신규 저점 발생 { TL[1] = TL_New_Self(IH[1,3],IH[1,4],IH[1,1],IL[1,3],IL[1,4],IL[1,1]); tx2 = Text_New_Self(IL[1,3],IL[1,4],IL[1,1],NumToStr(IL[1,1],2)); Text_SetStyle(tx2,2,0); } Else { TL_SetEnd(TL[1],IL[1,3],IL[1,4],IL[1,1]); Text_SetString(tx2,NumToStr(IL[1,1],2)); Text_SetLocation(tx2,IL[1,3],IL[1,4],IL[1,1]); } } TL_SetSize(TL[1],1); TL_SetColor(TL[1],BLUE); } #==========================================# // 다이버전스 표시 If (kind == 1 and HH[2,1] < HH[1,1] and IH[2,1] > IH[1,1]) or // 일반 약세 다이버전스 : 주가 고점 상승, 보조지표 고점 하락 (kind == 2 and HH[2,1] > HH[1,1] and IH[2,1] < IH[1,1]) or // 히든 약세 다이버전스 : 주가 고점 하락, 보조지표 고점 상승 (kind == 3 and abs(HH[2,1] - HH[1,1]) <= 2 * PriceScale and IH[2,1] > IH[1,1]) Then { // 과장된 약세 다이버전스 : 주가 고점의 차이가 2틱 이내이고 보조지표 고점 하락 Value2 = (HH[1,1]-HH[2,1])/(HH[1,2]-HH[2,2])*(Index-HH[2,2])+HH[2,1]; Value3 = (IH[1,1]-IH[2,1])/(IH[1,2]-IH[2,2])*(Index-IH[2,2])+IH[2,1]; If BeginIndex[0] == HH[2,2] Then { // 다이버전스를 나타내는 추세선의 시작점이 변함이 없으면 추세선 끝점만 연장 TL_SetEnd(TL[2],sDate,sTime,Value2); TL_SetEnd(TL[3],sDate,sTime,Value3); } Else { TL[2] = TL_New(HH[2,3],HH[2,4],HH[2,1],sDate,sTime,Value2); TL[3] = TL_New_Self(IH[2,3],IH[2,4],IH[2,1],sDate,sTime,Value3); BeginIndex[0] = HH[2,2]; // 추세선 시작점인 2번 고점의 index 값을 저장 } TL_SetSize(TL[2],3); TL_SetSize(TL[3],3); TL_SetColor(TL[2],LGREEN); TL_SetColor(TL[3],LGREEN); } If (kind == 1 and LL[2,1] > LL[1,1] and IL[2,1] < IL[1,1]) or // 일반 강세 다이버전스 : 주가 저점 하락, 보조지표 저점 상승 (kind == 2 and LL[2,1] < LL[1,1] and IL[2,1] > IL[1,1]) or // 히든 강세 다이버전스 : 주가 저점 상승, 보조지표 저점 하락 (kind == 3 and abs(LL[2,1] - LL[1,1]) <= 2 * PriceScale and IL[2,1] < IL[1,1]) Then { // 과장된 강세 다이버전스 : 주가 저점의 차이가 2틱 이내, 보조지표 저점 상승 Value4 = (LL[1,1]-LL[2,1])/(LL[1,2]-LL[2,2])*(Index-LL[2,2])+LL[2,1]; Value5 = (IL[1,1]-IL[2,1])/(IL[1,2]-IL[2,2])*(Index-IL[2,2])+IL[2,1]; If BeginIndex[1] == LL[2,2] Then { TL_SetEnd(TL[4],sDate,sTime,Value4); TL_SetEnd(TL[5],sDate,sTime,Value5); } Else { TL[4] = TL_New(LL[2,3],LL[2,4],LL[2,1],sDate,sTime,Value4); TL[5] = TL_New_Self(IL[2,3],IL[2,4],IL[2,1],sDate,sTime,Value5); BeginIndex[1] = LL[2,2]; } TL_SetSize(TL[4],3); TL_SetSize(TL[5],3); TL_SetColor(TL[4],MAGENTA); TL_SetColor(TL[5],MAGENTA); } If kind == 4 and HH[3,1] < HH[1,1] and // 주가 고점 상승 (HH[1,1]-HH[3,1])/(HH[1,2]-HH[3,2])*(HH[2,2]-HH[3,2])+HH[3,1] > HH[2,1] and // 2번 고점은 1번과 3번 고점을 잇는 선보다 밑에 위치 IH[3,1] > IH[1,1] and // 보조지표 고점 하락 (IH[1,1]-IH[3,1])/(IH[1,2]-IH[3,2])*(IH[2,2]-IH[3,2])+IH[3,1] > IH[2,1] Then { // 2번 고점은 1번과 3번 고점을 잇는 선보다 밑에 위치 Value2 = (HH[1,1]-HH[3,1])/(HH[1,2]-HH[3,2])*(Index-HH[3,2])+HH[3,1]; Value3 = (IH[1,1]-IH[3,1])/(IH[1,2]-IH[3,2])*(Index-IH[3,2])+IH[3,1]; If BeginIndex[0] == HH[3,2] Then { TL_SetEnd(TL[2],sDate,sTime,Value2); TL_SetEnd(TL[3],sDate,sTime,Value3); } Else { TL[2] = TL_New(HH[3,3],HH[3,4],HH[3,1],sDate,sTime,Value2); TL[3] = TL_New_Self(IH[3,3],IH[3,4],IH[3,1],sDate,sTime,Value3); BeginIndex[0] = HH[3,2]; } TL_SetSize(TL[2],3); TL_SetSize(TL[3],3); TL_SetColor(TL[2],LGREEN); TL_SetColor(TL[3],LGREEN); } If kind == 4 and LL[3,1] > LL[1,1] and // 주가 저점 하락 (LL[1,1]-LL[3,1])/(LL[1,2]-LL[3,2])*(LL[2,2]-LL[3,2])+LL[3,1] < LL[2,1] and // 2번 저점이 1번,3번 저점을 잇는 선보다 위에 위치 IL[3,1] < IL[1,1] and // 보조지표 저점 상승 (IL[1,1]-IL[3,1])/(IL[1,2]-IL[3,2])*(IL[2,2]-IL[3,2])+IL[3,1] < IL[2,1] Then { Value4 = (LL[1,1]-LL[3,1])/(LL[1,2]-LL[3,2])*(Index-LL[3,2])+LL[3,1]; Value5 = (IL[1,1]-IL[3,1])/(IL[1,2]-IL[3,2])*(Index-IL[3,2])+IL[3,1]; If BeginIndex[1] == LL[3,2] Then { TL_SetEnd(TL[4],sDate,sTime,Value4); TL_SetEnd(TL[5],sDate,sTime,Value5); } Else { TL[4] = TL_New(LL[3,3],LL[3,4],LL[3,1],sDate,sTime,Value4); TL[5] = TL_New_Self(IL[3,3],IL[3,4],IL[3,1],sDate,sTime,Value5); BeginIndex[1] = LL[3,2]; } TL_SetSize(TL[4],3); TL_SetSize(TL[5],3); TL_SetColor(TL[4],MAGENTA); TL_SetColor(TL[5],MAGENTA); }