커뮤니티
HiLoLineZigZag 의 함수수식 좀 알려주세요.
2019-05-05 22:45:50
347
글번호 128433
한가지 더 요청드립니다.
함수 수식을 알수있을까요?
HiLoLineZigZag 의 사용자함수 수식을 좀 알려주세요.
답변 2
예스스탁 예스스탁 답변
2019-05-07 10:57:11
안녕하세요
예스스탁입니다.
다른 사용자분이 만들어서 배포한 내용이라 아래 내용과 다를수 있습니다.
함수명 : 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;
즐거운 하루되세요
> 양정희 님이 쓴 글입니다.
> 제목 : HiLoLineZigZag 의 함수수식 좀 알려주세요.
> 한가지 더 요청드립니다.
함수 수식을 알수있을까요?
HiLoLineZigZag 의 사용자함수 수식을 좀 알려주세요.
양정희
2019-05-07 13:48:48
함수 잘 적용했는데 이 함수를 이용한 추세선지표식으로 지표를 만들었는데
이 추세선에 수치표시가 안되어서 수치를 표시하게끔 지표수식을 어떻게 더 추가해서 변경할수 있을까요? 좀 알려주시면 좋겠습니다.
Input:length(10);
Var:TL1(0),TL2(0),TL2_exist(0),color(0),
종가사용여부(0), // 종가로 계산하려면 1로 설정한다.
TL_NewBit(0), // 1:NewLine 2:SetEndLine
slope(0),mid_idx(0),mid_val(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
Value1 = HiLoLineZigZag(length,종가사용여부,고,저,TL_NewBit);
// HiLoLineZigZag는 사용자함수입니다. 링크에서 내려받으세요..
If Value1 == 1 Then { // 고점
If TL_NewBit == 1 Then { // 신규
If 고[2,1] < 고[1,1] Then { // 신규 고점이 이전 고점을 상향 돌파
// y = 기울기 * x + 절편
// x = (y - 절편) / 기울기
// y = 고[2,1]
// 절편 = 저[1,1]
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]); // 추세선의 기울기
mid_idx = Floor((고[2,1] - 저[1,1]) / slope); // 고[2,1]과 만나는 지점
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx); // 추세선의 중간지점 x좌표
TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2]; // 이전 색깔을 따라감
TL_SetColor(TL1,color[Var2]);
color = RED; // 상향 돌파했으므로 빨간색으로 전환
TL_SetColor(TL2,color);
TL2_exist = 1; // 추세선 2개를 연결해서 그린 것이므로 추세선이 2개임을 저장
} Else {
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2); // 추세선이 2개면 두번째 추세선도 삭제
If 고[2,1] < 고[1,1] Then {
slope = (고[1,1] - 저[1,1]) / (고[1,2] - 저[1,2]);
mid_idx = Floor((고[2,1] - 저[1,1]) / slope);
mid_val = slope * mid_idx + 저[1,1];
Var1 = Index - (저[1,2] + mid_idx);
TL1 = TL_New(저[1,3],저[1,4],저[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,고[1,3],고[1,4],고[1,1]);
Var2 = Index - 저[1,2];
TL_SetColor(TL1,color[Var2]);
color = RED;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
} Else If Value1 == -1 Then { // 저점
If TL_NewBit == 1 Then { // 신규
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
If TL_NewBit == 2 Then { // 연장
TL_Delete(TL1);
If TL2_exist == 1 Then TL_Delete(TL2);
If 저[2,1] > 저[1,1] Then {
slope = (저[1,1] - 고[1,1]) / (저[1,2] - 고[1,2]);
mid_idx = Floor((저[2,1] - 고[1,1]) / slope);
mid_val = slope * mid_idx + 고[1,1];
Var1 = Index - (고[1,2] + mid_idx);
TL1 = TL_New(고[1,3],고[1,4],고[1,1],sDate[Var1],sTime[Var1],mid_val);
TL2 = TL_New(sDate[Var1],sTime[Var1],mid_val,저[1,3],저[1,4],저[1,1]);
Var2 = Index - 고[1,2];
TL_SetColor(TL1,color[Var2]);
color = BLUE;
TL_SetColor(TL2,color);
TL2_exist = 1;
} Else {
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetColor(TL1,color);
TL2_exist = 0;
}
}
}
TL_SetSize(TL1,2);
TL_SetSize(TL2,2);
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : HiLoLineZigZag 의 함수수식 좀 알려주세요.
> 안녕하세요
예스스탁입니다.
다른 사용자분이 만들어서 배포한 내용이라 아래 내용과 다를수 있습니다.
함수명 : 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;
즐거운 하루되세요
> 양정희 님이 쓴 글입니다.
> 제목 : HiLoLineZigZag 의 함수수식 좀 알려주세요.
> 한가지 더 요청드립니다.
함수 수식을 알수있을까요?
HiLoLineZigZag 의 사용자함수 수식을 좀 알려주세요.
다음글