커뮤니티

문의 드립니다.~~~~

프로필 이미지
예스요
2022-07-10 14:31:54
1874
글번호 160607
답변완료
전에 올려주신 답변인데 이해가 부족하여 공부를 위해 자세한 주석 부탁드립니다. 그리고 고점 저점에 대한 판단은 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틱); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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틱); }