예스스탁
예스스탁 답변
2022-07-11 12:02:45
안녕하세요
예스스탁입니다.
수식에 a틱,b틱으로 고저점간의 차이(조정값)가 지정되어 있습니다.
주석만 추가해 드립니다.
input:length(5),a틱(10),b틱(10),c틱(5);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),Text1(0),process(0);
Array:HH[10,2](0),LL[10,2](0);
#상승하락 진행 방향판단
process = 0;
#지정기간 최고가와 최저가가 동시발생하면
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{
#저가가 직전 저점보다 작아면 하락방향으로 체크
If LL[1,1] > L Then process = -1;
#고가가 직전 고점보다 크면 상승방향으로 체크
If HH[1,1] < H Then process = 1;
}
#동시발생 아니고 최고가만 발생했을 경우는 상승방향으로 체크
Else If Highest(H,length) == H and lastHiVal <> H Then process = 1;
#동시발생 아니고 최저가만 발생했을 경우는 하락방향으로 체크
Else If Lowest(L,length) == L and lastLoVal <> L Then process = -1;
#상승방향일때
If process == 1 Then
{
#최근고가값 저장
lastHiVal = H;
#최근고점 발생후 최근저점 발생했으면
If HH[1,2] < LL[1,2] Then
{
#최근 고점값과 봉번호를 다음 배열방으로 이동
For j = 10 DownTo 2
{
HH[j,1] = HH[j-1,1];
HH[j,2] = HH[j-1,2];
}
}
#전고전 발생후 저점발생했거나 현재봉 고점이 전고점보다 크면
If HH[1,2] < LL[1,2] or HH[1,1] < H Then
{
#현재봉 고가를 최근 고점으로 저장
HH[1,1] = H;
#현재봉 봉번호를 최근 고점봉으로 저장
HH[1,2] = Index;
#최근 저점과 현재봉사이의 봉갯수
sBar = Index - LL[1,2];
#현재봉 봉번호
eBar = 0;
#상승추세선의 시작점이 최근 저점봉이면
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
#추세선 삭제
TL_Delete(TL1);
#텍스트 삭제
Text_Delete(Text1);
}
#최근 저점값이 있으면
if LL[1,1] > 0 Then
{
#최근저점과 최근 고점을 연결하는 추세선을 그림
TL1 = TL_New(sDate[sBar],sTime[sBar],LL[1,1],sDate[eBar],sTime[eBar],HH[1,1]);
#고점봉에 최근 저점과 최근 저점의 차이값을 틱수로 표시
Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
#텍스트 상하좌우 정렬
Text_SetStyle(Text1, 2, 1);
}
Else
{
#기존 텍스트 삭제
Text_Delete(text1);
#새로운 틱수로 갱신
Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,2));
#텍스트 상하좌우 정렬
Text_SetStyle(Text1, 2, 1);
}
}
if MarketPosition <= 0 and #현재 무포지션이거나 매도포지션이고
HH[2,1] >= LL[2,1]+PriceScale*a틱 and #전고점이 전저점대비 a틱 이상이고
LL[1,1] <= HH[2,1]-PriceScale*b틱 Then #최근저점이 전고점대비 b틱 이하이면
Buy("b",AtStop,HH[2,1]+PriceScale*c틱); #전고점+c틱 이상 상승하면 매수
}
#하락방향일때
If process == -1 Then
{
#최근저가값 저장
lastLoVal = L;
#최근 저점 발생후 최근 저점발생했으면
If LL[1,2] < HH[1,2] Then
{
#최근 저점값과 봉번호를 다음 배열방으로 이동
For j = 10 DownTo 2
{
LL[j,1] = LL[j-1,1];
LL[j,2] = LL[j-1,2];
}
}
#최근저점 발생후 최근고점발생했거나 현재봉 저가가 전저점보다 작으면
If LL[1,2] < HH[1,2] or LL[1,1] > L Then
{
#현재봉 저가를 최근 저점값으로 저장
LL[1,1] = L;
#현재봉 봉번호를 최근 저점봉으로 저장
LL[1,2] = Index;
#최근 고점봉과 현재봉 사이의 봉개수
sBar = Index - HH[1,2];
#현재봉 봉번호
eBar = 0;
#최근추세선의 시작점이 최근 고점봉이면
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
#추세선 삭제
TL_Delete(TL1);
#텍스트 삭제
Text_Delete(Text1);
}
#최근 고점값이 있으면
if HH[1,1] > 0 Then
{
#최근고점과 최근 저점을 연결하는 추세선을 그림
TL1 = TL_New(sDate[sBar],sTime[sBar],HH[1,1],sDate[eBar],sTime[eBar],LL[1,1]);
#저점봉에 최근 고점과 최근 저점의 차이값을 틱수로 표시
Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
#텍스트 상하좌우 정렬
Text_SetStyle(Text1, 2, 0);
}
Else#아니면
{
#기존 텍스트 삭제
Text_Delete(text1);
#새로운 틱수로 갱신
Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
#텍스트 상하좌우 정렬
Text_SetStyle(Text1, 2, 0);
}
}
if MarketPosition >= 0 and #현재 무포지션이거나 매수포지션이고
LL[2,1] <= HH[2,1]-PriceScale*a틱 and #전저점이 전고점대비 a틱 이하이고
HH[1,1] >= LL[2,1]+PriceScale*b틱 Then #최근고점이 전저점대비 b틱 이상이면
Sell("s",AtStop,LL[2,1]-PriceScale*c틱); #전저점-c틱 이하로 하락하면 매도
}
즐거운 하루되세요
> 예스요 님이 쓴 글입니다.
> 제목 : 문의 드립니다.~~~~
> 전에 올려주신 답변인데 이해가 부족하여 공부를 위해
자세한 주석 부탁드립니다.
그리고 고점 저점에 대한 판단은
n틱이상 조정 받은 전고점과 전저점을 고점과 저점의 판단 기준으로 삼고 싶습니다.
> 예스요 님이 쓴 글입니다.
> 제목 : 문의 드립니다.~~~~
> 항상 감사합니다.
-전저점 대비 a틱(변수)이상 상승 후 b틱(변수)이상
하락시 고점처리 ( 챠트에 저점과 고점을 차이 틱수를 고점에 출력하고
저점과 고점을 연결하는 추세선(빨강)그림 )
-전고점 대비 b틱(변수)이상 하락 후 a틱(변수)이상
상승시 저점 처리( 챠트에 고점과 저점의 차이 차이 틱수를 저점에 출력하고
고점과 저점을 연결하는 추세선(파랑)그림)
-매수진입: 저점 형성후 전고점을 돌파하여 전고점대비 c틱(변수) 상승지점에서
매수 진입.
-매도진입: 고점 형성후 전저점을 돌파하여 전저점대비 c틱(변수) 하락지점에서
매도 진입.
- 장중 내내 위 진입을 계속 반복하는 수식 부탁드립니다.
안녕하세요
예스스탁입니다.
올리신 내용에 기준이 되는 고점과 저점 판단에 대한 내용이 없습니다.
게시판에 많이 사용되는 지그재그 식을 이용해 작성해 드립니다.
input:length(5),a틱(10),b틱(10),c틱(5);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),Text1(0),process(0),T(0);
Array:HH[10,2](0),LL[10,2](0);
process = 0;
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{
If LL[1,1] > L Then process = -1;
If HH[1,1] < H Then process = 1;
}
Else If Highest(H,length) == H and lastHiVal <> H Then process = 1;
Else If Lowest(L,length) == L and lastLoVal <> L Then process = -1;
If process == 1 Then
{
T = 1;
lastHiVal = H;
If HH[1,2] < LL[1,2] Then
{
For j = 10 DownTo 2
{
HH[j,1] = HH[j-1,1];
HH[j,2] = HH[j-1,2];
}
}
If HH[1,2] < LL[1,2] or HH[1,1] < H Then
{
HH[1,1] = H;
HH[1,2] = Index;
sBar = Index - LL[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
if LL[1,1] > 0 Then
{
TL1 = TL_New(sDate[sBar],sTime[sBar],LL[1,1],sDate[eBar],sTime[eBar],HH[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 1);
}
Else
{
Text_Delete(text1);
Text1 = Text_New(sDate[eBar],sTime[eBar],HH[1,1],"+"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,2));
Text_SetStyle(Text1, 2, 1);
}
Text_SetStyle(Text1, 2, 1);
}
if MarketPosition <= 0 and
HH[2,1] >= LL[2,1]+PriceScale*a틱 and
LL[1,1] <= HH[2,1]-PriceScale*b틱 Then
Buy("b",AtStop,HH[2,1]+PriceScale*c틱);
}
If process == -1 Then
{
T = -1;
lastLoVal = L;
If LL[1,2] < HH[1,2] Then
{
For j = 10 DownTo 2
{
LL[j,1] = LL[j-1,1];
LL[j,2] = LL[j-1,2];
}
}
If LL[1,2] < HH[1,2] or LL[1,1] > L Then
{
LL[1,1] = L;
LL[1,2] = Index;
sBar = Index - HH[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
if HH[1,1] > 0 Then
{
TL1 = TL_New(sDate[sBar],sTime[sBar],HH[1,1],sDate[eBar],sTime[eBar],LL[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 0);
}
Else
{
Text_Delete(text1);
Text1 = Text_New(sDate[eBar],sTime[eBar],LL[1,1],"-"+NumToStr(abs(HH[1,1]-LL[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 0);
}
}
if MarketPosition >= 0 and
LL[2,1] <= HH[2,1]-PriceScale*a틱 and
HH[1,1] >= LL[2,1]+PriceScale*b틱 Then
Sell("s",AtStop,LL[2,1]-PriceScale*c틱);
}