예스스탁
예스스탁 답변
2020-11-16 15:13:26
안녕하세요
예스스탁입니다.
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),
Text1(0),처리구분("");
Array:고점[10,2](0),저점[10,2](0); //가격,위치
#고점[1,1]~고점[9,1]에는 고점가격을 저장
#고점[1,2]~고점[9,2]에는 고점봉번호을 저장
#저점[1,1]~저점[9,1]에는 저점가격을 저장
#저점[1,2]~저점[9,2]에는 저점봉번호을 저장
#매봉 처리구분변수는 ""으로 시작
처리구분 = "";
#현재봉 고가가 length봉 최고가이면서 현재봉 저가가 length봉 최저가이면
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
# 저가가 저점[1,1]에 저장된 값보다 작으면 처리구분은 "저점처리"
If 저점[1,1] > L Then 처리구분 = "저점처리";
# 고가가 고점[1,1]에 저장된 값보다 작으면 처리구분은 "고점처리"
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
#최고가와 최저가가 동시 만족한 것이 아니고 현재봉 고가가 length봉 최고가이면
#처리구분은 고점처리
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
#최고가와 최저가가 동시 만족한 것이 아니고 현재봉 저가가 length봉 최저가이면
#처리구분은 저점처리
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
#처리구분이 고점처리라면
If 처리구분 == "고점처리" Then
{
# lastHiVal는 현재봉 고가
lastHiVal = H;
#최근 고점 봉번호가 최근 저점 봉번호보다 작으면(최근고점 다음 최근저점발생함을 의미)
If 고점[1,2] < 저점[1,2] Then
{
#고점[1,1]과 고점[1,2]에 새로운 고점의 값과 봉번호를 저장하기 위해
#고점의 가격과 봉번호를 다음방으로 넘겨 보관함
#10번방에는 기존 9번방의 값
#9번방에는 기존 8번방의 값
#~~
#2번방에는 기존 1번방의 값
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
#새로운 고점 발생
#최근 고점 봉번호가 최근 저점 봉번호보다 작거나 고가가 고점[1,1]에 저장된 값보다 크면
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
#고점[1,1]에 고가 저장
고점[1,1] = H;
#고점[1,2]에 봉번호 저장
고점[1,2] = Index;
#sBar에 저점과 현재봉사이의 봉갯수를 저장
#이후에 최근 저점이 현재봉으로 부터 몇개봉전인지 알기 위함임
sBar = Index - 저점[1,2];
#eBar에 0 저장
eBar = 0;
#TL1 추세선의 시작날짜와 저점봉의 날짜와 같고
#TL1 추세선의 시작시간이 저점봉의 시간과 같으면
#추세선과 텍스트를 새로 출력하기 위해 기존것을 삭제
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
#TL1추세선 삭제
TL_Delete(TL1);
#text1 텍스트 삭제
Text_Delete(Text1);
}
#새로운 추세선 생성(저점에서 현재봉 고점까지)
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
#현재봉에 값 출력
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],2)
+NewLine+"진폭"+NumToStr((고점[1,1]-저점[1,1]),2));
#텍스트 정렬은 좌우는 중앙, 상하는 상
Text_SetStyle(Text1, 2, 1);
}
}
#처리구분이 저점처리라면
If 처리구분 == "저점처리" Then
{
# lastLoVal는 현재봉 저가
lastLoVal = L;
#최근 저점 봉번호가 최근 고점 봉번호보다 작으면(최근저점 다음 최근고점발생함을 의미)
If 저점[1,2] < 고점[1,2] then
{
#저점[1,1]과 저점[1,2]에 새로운 저점의 값과 봉번호를 저장하기 위해
#저점의 가격과 봉번호를 다음방으로 넘겨 보관함
#10번방에는 기존 9번방의 값
#9번방에는 기존 8번방의 값
#~~
#2번방에는 기존 1번방의 값
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
#새로운 저점 발생
#최근 저점 봉번호가 최근 고점 봉번호보다 작거나 저가가 저점[1,1]에 저장된 값보다 작으면
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
#저점[1,1]에 고가 저장
저점[1,1] = L;
#저점[1,2]에 봉번호 저장
저점[1,2] = Index;
#sBar에 고점과 현재봉사이의 봉갯수를 저장
#이후에 최근 고점이 현재봉으로 부터 몇개봉전인지 알기 위함임
sBar = Index - 고점[1,2];
#eBar에 0 저장
eBar = 0;
#TL1 추세선의 시작날짜와 고점봉의 날짜와 같고
#TL1 추세선의 시작시간이 고점봉의 시간과 같으면
#추세선과 텍스트를 새로 출력하기 위해 기존것을 삭제
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
#TL1추세선 삭제
TL_Delete(TL1);
#text1 텍스트 삭제
Text_Delete(Text1);
}
#새로운 추세선 생성(고점에서 현재봉 저점까지)
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
#현재봉에 값 출력
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],2)
+NewLine+"진폭"+NumToStr((고점[1,1]-저점[1,1]),2));
#텍스트 정렬은 좌우는 중앙, 상하는 하
Text_SetStyle(Text1, 2, 0);
}
}
//추세선 TL1의 굵기
TL_SetSize(TL1,2);
//추세선 TL1의 색상
TL_SetColor(TL1,BLACk);
즐거운 하루되세요
> 샐리짱 님이 쓴 글입니다.
> 제목 : 글 번호-58459 수식에 관한 자세한 주석을 부탁드립니다
> 안녕하세요.
항상 수고가 많으십니다.
질문드립니다 -----------------------------------------------------------------------
아래 수식은 글 번호 58459 수식입니다.
죄송하지만 각각의 수식에 대해 자세한 주석을 달아 주시면 감사하겠습니다.
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),
Text1(0),처리구분("");
Array:고점[10,2](0),저점[10,2](0); //가격,위치
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],2)
+NewLine+"진폭"+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 2, 1);
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],2)
+NewLine+"진폭"+NumToStr((고점[1,1]-저점[1,1]),2));
Text_SetStyle(Text1, 2, 0);
}
}
//
TL_SetSize(TL1,2);
TL_SetColor(TL1,BLACk);
//
----------------------------------------------------------------------------------
다시 한번 감사드립니다.