커뮤니티

문의드립니다.

프로필 이미지
잡다백수
2017-12-04 09:31:18
185
글번호 114659
답변완료
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다. 1. 시스템 아래 코딩을 쓰면 컴퓨터에 추세선들이 나와서 리소스를 많이 먹는 것 같더라구요. 여기서 매수 매도에 상관없는 내용들은 다 삭제좀 부탁드립니다. Input:chRate(0.2); //전환율 또는 변동률 Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),TL(0), date11(0),date12(0),time11(0),time12(0),TL1(0), date21(0),date22(0),time21(0),time22(0),TL2(0), date31(0),date32(0),time31(0),time32(0),TL3(0); Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0); //hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점 //hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다. //loVal[0]은 반대 개념 upRate = 1 + (chRate/100); //상승률 dnRate = 1 - (chRate/100); //하락률 for j = 1 to 9 { //전고,전저점을 9개까지 보관 loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리 hiBar[j] = hiBar[j] + 1; //전고점의 위치 } if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점 hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문 hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미 } else { hiBar[0] = hiBar[0] + 1; //현재 고점의 위치 } if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점 loVal[0] = L; loBar[0] = 0; } else { loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치 } if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr; //저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정 //단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다. //그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다. else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr; //고가가 저가 대비 변동률보다 높으면 상승추세로 설정 if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면 for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로 hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다. hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다. } hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입 hiBar[1] = hiBar[0]; hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가 hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다. date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜 time11 = stime[loBar[1]]; //추세선 시작시간 Value11 = loVal[1]; //추세선 시작가격 date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜 time12 = stime[hiBar[1]]; //추세선 종료시간 Value12 = hiVal[1]; //추세선 종료가격 TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); //TL_New는 신규 추세선을 그려주는 함수 } if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데 hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면 hiVal[0] * dnRate > L then { hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다. hiBar[1] = hiBar[0]; hiVal[0] = H; hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다. date12 = date[hiBar[1]]; //추세선 종료일 time12 = stime[hiBar[1]]; Value12 = hiVal[1]; TL_SetEnd(TL1, date12,time12,Value12); //TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다. //TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다. } if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우 for j = 8 downto 1 { //이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여 loVal[j+1] = loVal[j]; loBar[j+1] = loBar[j]; } loVal[1] = loVal[0]; loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date11 = date[hiBar[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다. time11 = stime[hiBar[1]]; Value11 = hiVal[1]; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); } if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데 loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면 loVal[0] * upRate < H then { loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다. loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL_SetEnd(TL1, date12,time12,Value12); } if trnd == upTr and loVal[2] > loVal[1] then TL_SetColor(TL1,BLUE); else if trnd == dnTr and hiVal[2] < hiVal[1] then TL_SetColor(TL1,RED); else TL_SetColor(TL1,BLACK); TL_SetSize(TL1,2); TL_SetColor(TL2,RED); TL_SetColor(TL3,BLUE); if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then{ var1 = 1; value1 = loval[1]; TL1 = Text_New(sdate[lobar[1]],stime[lobar[1]],value1-PriceScale*2,"●"); TL_SetColor(TL,RED); TL_SetSize(TL,2); Text_SetStyle(TL1,2,2); Text_SetColor(TL1,RED);#텍스트 색상 TL= Text_New(sdate[lobar[1]],stime[lobar[1]],L,"상승"); Text_SetColor(TL,RED);#텍스트 색상 } if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then{ var1 = -1; value1 = hival[1]; TL2 = Text_New(sdate[hibar[1]],stime[hibar[1]],value1+PriceScale*2,"●"); TL_SetColor(TL,BLUE); TL_SetSize(TL,2); Text_SetStyle(TL2,2,2);#텍스트 좌우 상하 정렬 Text_SetColor(TL2,BLUE);#텍스트 색상 TL= Text_New(sdate[hibar[1]],stime[hibar[1]],H,"하락"); Text_SetColor(TL,BLUE);#텍스트 색상 } input : P(10); var : MM(0),T(0); MM = (highest(H,P)+lowest(L,P))/2; if T == 0 and C > MM Then T = 1; if T == 0 and C < MM Then T = -1; if T == 1 and CrossDown(C,lowest(L,P)[1]) Then T = 0; if T == -1 and CrossUp(C,highest(H,P)[1]) Then T = 0; if T == 1 and var1 == 1 Then buy(); if T == -1 and var1 == -1 Then sell(); 2. 기타 -타주기 이격도 -분봉에서 일봉 이격도 코딩 부탁드립니다. 3. 시스템 -참조데이터 종가가 볼린저밴드 상단 위에 위치 -본 데이터 종가도 볼린저밴드 상단 위에 위치 -본 데이터 타주기 봉도 볼린저밴드 상단 이에 위치하면 매수 -위 조건 중 하나라도 무너지면 매도 4. 기타 -타주기 MFI -분봉에서 일봉 MFI 5. 종목검색 최근 20거래일간 상승률 n%를 기록했던 종목
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2017-12-04 14:00:35

안녕하세요 예스스탁입니다. 1. Input:chRate(0.2); //전환율 또는 변동률 Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0); Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0); //hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점 //hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다. //loVal[0]은 반대 개념 upRate = 1 + (chRate/100); //상승률 dnRate = 1 - (chRate/100); //하락률 for j = 1 to 9 { //전고,전저점을 9개까지 보관 loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리 hiBar[j] = hiBar[j] + 1; //전고점의 위치 } if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점 hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문 hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미 } else { hiBar[0] = hiBar[0] + 1; //현재 고점의 위치 } if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점 loVal[0] = L; loBar[0] = 0; } else { loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치 } if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr; //저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정 //단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다. //그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다. else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr; //고가가 저가 대비 변동률보다 높으면 상승추세로 설정 if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면 for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로 hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다. hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다. } hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입 hiBar[1] = hiBar[0]; hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가 hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; } if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데 hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면 hiVal[0] * dnRate > L then { hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다. hiBar[1] = hiBar[0]; hiVal[0] = H; hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; } if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우 for j = 8 downto 1 { //이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여 loVal[j+1] = loVal[j]; loBar[j+1] = loBar[j]; } loVal[1] = loVal[0]; loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; } if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데 loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면 loVal[0] * upRate < H then { loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다. loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; } if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then { var1 = 1; value1 = loval[1]; } if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then { var1 = -1; } input : P(10); var : MM(0),T(0); MM = (highest(H,P)+lowest(L,P))/2; if T == 0 and C > MM Then T = 1; if T == 0 and C < MM Then T = -1; if T == 1 and CrossDown(C,lowest(L,P)[1]) Then T = 0; if T == -1 and CrossUp(C,highest(H,P)[1]) Then T = 0; if T == 1 and var1 == 1 Then buy(); if T == -1 and var1 == -1 Then sell(); 2 input : P(20); var : cnt(0),sum(0),mav(0),dpt(0); sum = 0; for cnt = 0 to P-1{ sum = sum+DayClose(cnt); } mav = sum / P; dpt = C/mav*100; plot1(dpt); PlotBaseLine1(100); 3 input : 타주기분(30),P(20),Dv(2); var : S1(0,data1),D1(0,data1),TM(0,data1),TF(0,data1); var : cnt(0,data1),SumSqrt(0,data1),Stdv(0,data1); var : sum(0,data1),BBmd1(0,data1),Bbup1(0,data1),BBdn1(0,data1); var : TBBmd(0,data1),TBBup(0,data1),TBBdn(0,data1); var : BBmd2(0,data1),Bbup2(0,data1),BBdn2(0,data1); Array : CC[100](0,data1); bbup1 = data1(BollBandUp(P,dv)); bbdn1 = data1(BollBandDown(P,dv)); bbup2 = data2(BollBandUp(P,dv)); bbdn2 = data2(BollBandDown(P,dv)); if data1(Bdate != Bdate[1]) Then{ S1 = data1(TimeToMinutes(stime)); D1 = data1(sdate); } if D1 > 0 then{ if data1(sdate == D1) Then TM = data1(TimeToMinutes(stime)-S1); Else TM = data1(TimeToMinutes(stime)+1440-S1); TF = TM%타주기분; if data1(Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1])) Then{ for cnt = 1 to 99{ CC[cnt] = CC[cnt-1][1]; } } CC[0] = data1(C); if CC[P] > 0 then{ sum = 0; for cnt = 0 to P-1{ sum = sum + CC[cnt]; } TBBmd = sum/P; SumSqrt = 0; For cnt = 0 To P - 1 { SumSqrt = SumSqrt + (CC[cnt] - TBBmd)^2; } Stdv = SquareRoot(SumSqrt / P); TBBup = TBBmd + (Dv * Stdv); TBBdn = TBBmd - (Dv * Stdv); if data1(C > BBup1) and data1(C > TBBup) and data2(C>BBup2) Then buy(); if MarketPosition == 1 and (data1(C<BBup1) or data1(C<TBBup) or data2(C<BBup2)) Then exitlong(); } } 4-1 분봉에서 타분봉 Input :Atime(10),Period(14); var : TF(0),MFIv(0),cnt(0),sum1(0),sum2(0); Array : HH[100](0),LL[100](0),CC[100](0),Vv[100](0); Array : val1[100](0),val2[100](0),val3[100](0),val4[100](0); TF = TimeToMinutes(stime)%Atime; if dayindex() == 0 or (TF < TF[1] and stime > stime[1]) or stime >= 151500 Then{ HH[0] = H; LL[0] = L; VV[0] = 0; for cnt = 1 to 99{ HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; val1[cnt] = val1[cnt-1][1]; val2[cnt] = val2[cnt-1][1]; val3[cnt] = val3[cnt-1][1]; val4[cnt] = val4[cnt-1][1]; } } CC[0] = C; if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; VV[0] = VV[0]+V; val1[0] = HH[0] + LL[0] + CC[0]; val4[0] = VV[0] * Val1[0]/ 3; if val1[0] > val1[1] then val2[0] = val4[0]; else val2[0] = 0; if val1[0] < val1[1] then val3[0] = val4[0]; else val3[0] = 0; if CC[Period-1] > 0 Then{ sum1 = 0; sum2 = 0; for cnt = 0 to Period-1{ sum1 = sum1+val2[cnt]; sum2 = sum2+val3[cnt]; } MFIv = 100 - 100 / (1 + (sum1/sum2)); plot1(MFIv); PlotBaseLine1(20, "하단기준선"); PlotBaseLine2(80, "상단기준선"); } 4-2 분봉이하에 일봉 input : Period(14); var : cnt(0),sum1(0),sum2(0),MFIv(0); sum1 = 0; sum2 = 0; for cnt = 0 to Period-1{ if (dayhigh(cnt)+daylow(cnt)+DayClose(cnt)) > (dayhigh(cnt+1)+daylow(cnt+1)+DayClose(cnt+1)) Then sum1 = sum1 + DayVolume(cnt)*(dayhigh(cnt)+daylow(cnt)+DayClose(cnt))/3; Else sum1 = sum1+0; if (dayhigh(cnt)+daylow(cnt)+DayClose(cnt)) < (dayhigh(cnt+1)+daylow(cnt+1)+DayClose(cnt+1)) Then sum2 = sum2 + DayVolume(cnt)*(dayhigh(cnt)+daylow(cnt)+DayClose(cnt))/3; Else sum2 = sum2+0; } MFIv = 100 - 100 / (1 + (sum1 / sum2)); plot1(MFIv); PlotBaseLine1(20, "하단기준선"); PlotBaseLine2(80, "상단기준선"); 5 input : n(25); var1 =(C-C[1])/C[1]*100; if countif(var1 >= n,20) >= 1 Then find(1); 즐거운 하루되세요 > 잡다백수 님이 쓴 글입니다. > 제목 : 문의드립니다. > 도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다. 1. 시스템 아래 코딩을 쓰면 컴퓨터에 추세선들이 나와서 리소스를 많이 먹는 것 같더라구요. 여기서 매수 매도에 상관없는 내용들은 다 삭제좀 부탁드립니다. Input:chRate(0.2); //전환율 또는 변동률 Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),TL(0), date11(0),date12(0),time11(0),time12(0),TL1(0), date21(0),date22(0),time21(0),time22(0),TL2(0), date31(0),date32(0),time31(0),time32(0),TL3(0); Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0); //hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점 //hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다. //loVal[0]은 반대 개념 upRate = 1 + (chRate/100); //상승률 dnRate = 1 - (chRate/100); //하락률 for j = 1 to 9 { //전고,전저점을 9개까지 보관 loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리 hiBar[j] = hiBar[j] + 1; //전고점의 위치 } if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점 hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문 hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미 } else { hiBar[0] = hiBar[0] + 1; //현재 고점의 위치 } if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점 loVal[0] = L; loBar[0] = 0; } else { loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치 } if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr; //저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정 //단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다. //그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다. else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr; //고가가 저가 대비 변동률보다 높으면 상승추세로 설정 if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면 for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로 hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다. hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다. } hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입 hiBar[1] = hiBar[0]; hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가 hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다. date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜 time11 = stime[loBar[1]]; //추세선 시작시간 Value11 = loVal[1]; //추세선 시작가격 date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜 time12 = stime[hiBar[1]]; //추세선 종료시간 Value12 = hiVal[1]; //추세선 종료가격 TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); //TL_New는 신규 추세선을 그려주는 함수 } if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데 hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면 hiVal[0] * dnRate > L then { hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다. hiBar[1] = hiBar[0]; hiVal[0] = H; hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다. date12 = date[hiBar[1]]; //추세선 종료일 time12 = stime[hiBar[1]]; Value12 = hiVal[1]; TL_SetEnd(TL1, date12,time12,Value12); //TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다. //TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다. } if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우 for j = 8 downto 1 { //이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여 loVal[j+1] = loVal[j]; loBar[j+1] = loBar[j]; } loVal[1] = loVal[0]; loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date11 = date[hiBar[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다. time11 = stime[hiBar[1]]; Value11 = hiVal[1]; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); } if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데 loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면 loVal[0] * upRate < H then { loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다. loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL_SetEnd(TL1, date12,time12,Value12); } if trnd == upTr and loVal[2] > loVal[1] then TL_SetColor(TL1,BLUE); else if trnd == dnTr and hiVal[2] < hiVal[1] then TL_SetColor(TL1,RED); else TL_SetColor(TL1,BLACK); TL_SetSize(TL1,2); TL_SetColor(TL2,RED); TL_SetColor(TL3,BLUE); if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then{ var1 = 1; value1 = loval[1]; TL1 = Text_New(sdate[lobar[1]],stime[lobar[1]],value1-PriceScale*2,"●"); TL_SetColor(TL,RED); TL_SetSize(TL,2); Text_SetStyle(TL1,2,2); Text_SetColor(TL1,RED);#텍스트 색상 TL= Text_New(sdate[lobar[1]],stime[lobar[1]],L,"상승"); Text_SetColor(TL,RED);#텍스트 색상 } if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then{ var1 = -1; value1 = hival[1]; TL2 = Text_New(sdate[hibar[1]],stime[hibar[1]],value1+PriceScale*2,"●"); TL_SetColor(TL,BLUE); TL_SetSize(TL,2); Text_SetStyle(TL2,2,2);#텍스트 좌우 상하 정렬 Text_SetColor(TL2,BLUE);#텍스트 색상 TL= Text_New(sdate[hibar[1]],stime[hibar[1]],H,"하락"); Text_SetColor(TL,BLUE);#텍스트 색상 } input : P(10); var : MM(0),T(0); MM = (highest(H,P)+lowest(L,P))/2; if T == 0 and C > MM Then T = 1; if T == 0 and C < MM Then T = -1; if T == 1 and CrossDown(C,lowest(L,P)[1]) Then T = 0; if T == -1 and CrossUp(C,highest(H,P)[1]) Then T = 0; if T == 1 and var1 == 1 Then buy(); if T == -1 and var1 == -1 Then sell(); 2. 기타 -타주기 이격도 -분봉에서 일봉 이격도 코딩 부탁드립니다. 3. 시스템 -참조데이터 종가가 볼린저밴드 상단 위에 위치 -본 데이터 종가도 볼린저밴드 상단 위에 위치 -본 데이터 타주기 봉도 볼린저밴드 상단 이에 위치하면 매수 -위 조건 중 하나라도 무너지면 매도 4. 기타 -타주기 MFI -분봉에서 일봉 MFI 5. 종목검색 최근 20거래일간 상승률 n%를 기록했던 종목
프로필 이미지

잡다백수

2017-12-04 15:52:14

코딩 감사합니다. 다만 2번의 타주기 분봉 이격도 이건 없는 것 같아서 재 문의 드립니다. 2. 기타 -타주기 이격도 -분봉에서 일봉 이격도 코딩 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의드립니다. > 안녕하세요 예스스탁입니다. 1. Input:chRate(0.2); //전환율 또는 변동률 Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0); Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0); //hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점 //hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다. //loVal[0]은 반대 개념 upRate = 1 + (chRate/100); //상승률 dnRate = 1 - (chRate/100); //하락률 for j = 1 to 9 { //전고,전저점을 9개까지 보관 loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리 hiBar[j] = hiBar[j] + 1; //전고점의 위치 } if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점 hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문 hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미 } else { hiBar[0] = hiBar[0] + 1; //현재 고점의 위치 } if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점 loVal[0] = L; loBar[0] = 0; } else { loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치 } if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr; //저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정 //단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다. //그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다. else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr; //고가가 저가 대비 변동률보다 높으면 상승추세로 설정 if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면 for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로 hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다. hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다. } hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입 hiBar[1] = hiBar[0]; hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가 hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; } if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데 hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면 hiVal[0] * dnRate > L then { hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다. hiBar[1] = hiBar[0]; hiVal[0] = H; hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; } if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우 for j = 8 downto 1 { //이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여 loVal[j+1] = loVal[j]; loBar[j+1] = loBar[j]; } loVal[1] = loVal[0]; loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; } if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데 loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면 loVal[0] * upRate < H then { loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다. loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; } if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then { var1 = 1; value1 = loval[1]; } if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then { var1 = -1; } input : P(10); var : MM(0),T(0); MM = (highest(H,P)+lowest(L,P))/2; if T == 0 and C > MM Then T = 1; if T == 0 and C < MM Then T = -1; if T == 1 and CrossDown(C,lowest(L,P)[1]) Then T = 0; if T == -1 and CrossUp(C,highest(H,P)[1]) Then T = 0; if T == 1 and var1 == 1 Then buy(); if T == -1 and var1 == -1 Then sell(); 2 input : P(20); var : cnt(0),sum(0),mav(0),dpt(0); sum = 0; for cnt = 0 to P-1{ sum = sum+DayClose(cnt); } mav = sum / P; dpt = C/mav*100; plot1(dpt); PlotBaseLine1(100); 3 input : 타주기분(30),P(20),Dv(2); var : S1(0,data1),D1(0,data1),TM(0,data1),TF(0,data1); var : cnt(0,data1),SumSqrt(0,data1),Stdv(0,data1); var : sum(0,data1),BBmd1(0,data1),Bbup1(0,data1),BBdn1(0,data1); var : TBBmd(0,data1),TBBup(0,data1),TBBdn(0,data1); var : BBmd2(0,data1),Bbup2(0,data1),BBdn2(0,data1); Array : CC[100](0,data1); bbup1 = data1(BollBandUp(P,dv)); bbdn1 = data1(BollBandDown(P,dv)); bbup2 = data2(BollBandUp(P,dv)); bbdn2 = data2(BollBandDown(P,dv)); if data1(Bdate != Bdate[1]) Then{ S1 = data1(TimeToMinutes(stime)); D1 = data1(sdate); } if D1 > 0 then{ if data1(sdate == D1) Then TM = data1(TimeToMinutes(stime)-S1); Else TM = data1(TimeToMinutes(stime)+1440-S1); TF = TM%타주기분; if data1(Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1])) Then{ for cnt = 1 to 99{ CC[cnt] = CC[cnt-1][1]; } } CC[0] = data1(C); if CC[P] > 0 then{ sum = 0; for cnt = 0 to P-1{ sum = sum + CC[cnt]; } TBBmd = sum/P; SumSqrt = 0; For cnt = 0 To P - 1 { SumSqrt = SumSqrt + (CC[cnt] - TBBmd)^2; } Stdv = SquareRoot(SumSqrt / P); TBBup = TBBmd + (Dv * Stdv); TBBdn = TBBmd - (Dv * Stdv); if data1(C > BBup1) and data1(C > TBBup) and data2(C>BBup2) Then buy(); if MarketPosition == 1 and (data1(C<BBup1) or data1(C<TBBup) or data2(C<BBup2)) Then exitlong(); } } 4-1 분봉에서 타분봉 Input :Atime(10),Period(14); var : TF(0),MFIv(0),cnt(0),sum1(0),sum2(0); Array : HH[100](0),LL[100](0),CC[100](0),Vv[100](0); Array : val1[100](0),val2[100](0),val3[100](0),val4[100](0); TF = TimeToMinutes(stime)%Atime; if dayindex() == 0 or (TF < TF[1] and stime > stime[1]) or stime >= 151500 Then{ HH[0] = H; LL[0] = L; VV[0] = 0; for cnt = 1 to 99{ HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; val1[cnt] = val1[cnt-1][1]; val2[cnt] = val2[cnt-1][1]; val3[cnt] = val3[cnt-1][1]; val4[cnt] = val4[cnt-1][1]; } } CC[0] = C; if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; VV[0] = VV[0]+V; val1[0] = HH[0] + LL[0] + CC[0]; val4[0] = VV[0] * Val1[0]/ 3; if val1[0] > val1[1] then val2[0] = val4[0]; else val2[0] = 0; if val1[0] < val1[1] then val3[0] = val4[0]; else val3[0] = 0; if CC[Period-1] > 0 Then{ sum1 = 0; sum2 = 0; for cnt = 0 to Period-1{ sum1 = sum1+val2[cnt]; sum2 = sum2+val3[cnt]; } MFIv = 100 - 100 / (1 + (sum1/sum2)); plot1(MFIv); PlotBaseLine1(20, "하단기준선"); PlotBaseLine2(80, "상단기준선"); } 4-2 분봉이하에 일봉 input : Period(14); var : cnt(0),sum1(0),sum2(0),MFIv(0); sum1 = 0; sum2 = 0; for cnt = 0 to Period-1{ if (dayhigh(cnt)+daylow(cnt)+DayClose(cnt)) > (dayhigh(cnt+1)+daylow(cnt+1)+DayClose(cnt+1)) Then sum1 = sum1 + DayVolume(cnt)*(dayhigh(cnt)+daylow(cnt)+DayClose(cnt))/3; Else sum1 = sum1+0; if (dayhigh(cnt)+daylow(cnt)+DayClose(cnt)) < (dayhigh(cnt+1)+daylow(cnt+1)+DayClose(cnt+1)) Then sum2 = sum2 + DayVolume(cnt)*(dayhigh(cnt)+daylow(cnt)+DayClose(cnt))/3; Else sum2 = sum2+0; } MFIv = 100 - 100 / (1 + (sum1 / sum2)); plot1(MFIv); PlotBaseLine1(20, "하단기준선"); PlotBaseLine2(80, "상단기준선"); 5 input : n(25); var1 =(C-C[1])/C[1]*100; if countif(var1 >= n,20) >= 1 Then find(1); 즐거운 하루되세요 > 잡다백수 님이 쓴 글입니다. > 제목 : 문의드립니다. > 도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다. 1. 시스템 아래 코딩을 쓰면 컴퓨터에 추세선들이 나와서 리소스를 많이 먹는 것 같더라구요. 여기서 매수 매도에 상관없는 내용들은 다 삭제좀 부탁드립니다. Input:chRate(0.2); //전환율 또는 변동률 Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),TL(0), date11(0),date12(0),time11(0),time12(0),TL1(0), date21(0),date22(0),time21(0),time22(0),TL2(0), date31(0),date32(0),time31(0),time32(0),TL3(0); Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0); //hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점 //hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다. //loVal[0]은 반대 개념 upRate = 1 + (chRate/100); //상승률 dnRate = 1 - (chRate/100); //하락률 for j = 1 to 9 { //전고,전저점을 9개까지 보관 loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리 hiBar[j] = hiBar[j] + 1; //전고점의 위치 } if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점 hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문 hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미 } else { hiBar[0] = hiBar[0] + 1; //현재 고점의 위치 } if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점 loVal[0] = L; loBar[0] = 0; } else { loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치 } if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr; //저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정 //단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다. //그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다. else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr; //고가가 저가 대비 변동률보다 높으면 상승추세로 설정 if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면 for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로 hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다. hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다. } hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입 hiBar[1] = hiBar[0]; hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가 hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다. date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜 time11 = stime[loBar[1]]; //추세선 시작시간 Value11 = loVal[1]; //추세선 시작가격 date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜 time12 = stime[hiBar[1]]; //추세선 종료시간 Value12 = hiVal[1]; //추세선 종료가격 TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); //TL_New는 신규 추세선을 그려주는 함수 } if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데 hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면 hiVal[0] * dnRate > L then { hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다. hiBar[1] = hiBar[0]; hiVal[0] = H; hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다. date12 = date[hiBar[1]]; //추세선 종료일 time12 = stime[hiBar[1]]; Value12 = hiVal[1]; TL_SetEnd(TL1, date12,time12,Value12); //TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다. //TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다. } if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우 for j = 8 downto 1 { //이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여 loVal[j+1] = loVal[j]; loBar[j+1] = loBar[j]; } loVal[1] = loVal[0]; loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date11 = date[hiBar[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다. time11 = stime[hiBar[1]]; Value11 = hiVal[1]; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); } if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데 loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면 loVal[0] * upRate < H then { loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다. loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL_SetEnd(TL1, date12,time12,Value12); } if trnd == upTr and loVal[2] > loVal[1] then TL_SetColor(TL1,BLUE); else if trnd == dnTr and hiVal[2] < hiVal[1] then TL_SetColor(TL1,RED); else TL_SetColor(TL1,BLACK); TL_SetSize(TL1,2); TL_SetColor(TL2,RED); TL_SetColor(TL3,BLUE); if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then{ var1 = 1; value1 = loval[1]; TL1 = Text_New(sdate[lobar[1]],stime[lobar[1]],value1-PriceScale*2,"●"); TL_SetColor(TL,RED); TL_SetSize(TL,2); Text_SetStyle(TL1,2,2); Text_SetColor(TL1,RED);#텍스트 색상 TL= Text_New(sdate[lobar[1]],stime[lobar[1]],L,"상승"); Text_SetColor(TL,RED);#텍스트 색상 } if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then{ var1 = -1; value1 = hival[1]; TL2 = Text_New(sdate[hibar[1]],stime[hibar[1]],value1+PriceScale*2,"●"); TL_SetColor(TL,BLUE); TL_SetSize(TL,2); Text_SetStyle(TL2,2,2);#텍스트 좌우 상하 정렬 Text_SetColor(TL2,BLUE);#텍스트 색상 TL= Text_New(sdate[hibar[1]],stime[hibar[1]],H,"하락"); Text_SetColor(TL,BLUE);#텍스트 색상 } input : P(10); var : MM(0),T(0); MM = (highest(H,P)+lowest(L,P))/2; if T == 0 and C > MM Then T = 1; if T == 0 and C < MM Then T = -1; if T == 1 and CrossDown(C,lowest(L,P)[1]) Then T = 0; if T == -1 and CrossUp(C,highest(H,P)[1]) Then T = 0; if T == 1 and var1 == 1 Then buy(); if T == -1 and var1 == -1 Then sell(); 2. 기타 -타주기 이격도 -분봉에서 일봉 이격도 코딩 부탁드립니다. 3. 시스템 -참조데이터 종가가 볼린저밴드 상단 위에 위치 -본 데이터 종가도 볼린저밴드 상단 위에 위치 -본 데이터 타주기 봉도 볼린저밴드 상단 이에 위치하면 매수 -위 조건 중 하나라도 무너지면 매도 4. 기타 -타주기 MFI -분봉에서 일봉 MFI 5. 종목검색 최근 20거래일간 상승률 n%를 기록했던 종목
프로필 이미지

예스스탁 예스스탁 답변

2017-12-06 11:09:00

안녕하세요 예스스탁입니다. input : Atime1(3),P(20); var : cnt(0),sum1(0),mav1(0),S1(0),D1(0),TM(0),TF1(0); Array : C1[50](0); if Bdate != Bdate[1] Then{ S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then{ if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; TF1 = TM%Atime1; if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF1 < TF1[1]) Then { for cnt = 1 to 49 { C1[cnt] = C1[cnt-1][1]; } } C1[0] = C; if C1[P] > 0 then{ sum1 = 0; for cnt = 0 to P-1{ sum1 = sum1+C1[cnt]; } mav1 = sum1/P; plot1(c/mav1*100); } } 즐거운 하루되세요 > 잡다백수 님이 쓴 글입니다. > 제목 : Re : Re : 문의드립니다. > 코딩 감사합니다. 다만 2번의 타주기 분봉 이격도 이건 없는 것 같아서 재 문의 드립니다. 2. 기타 -타주기 이격도 -분봉에서 일봉 이격도 코딩 부탁드립니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의드립니다. > 안녕하세요 예스스탁입니다. 1. Input:chRate(0.2); //전환율 또는 변동률 Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0); Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0); //hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점 //hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다. //loVal[0]은 반대 개념 upRate = 1 + (chRate/100); //상승률 dnRate = 1 - (chRate/100); //하락률 for j = 1 to 9 { //전고,전저점을 9개까지 보관 loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리 hiBar[j] = hiBar[j] + 1; //전고점의 위치 } if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점 hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문 hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미 } else { hiBar[0] = hiBar[0] + 1; //현재 고점의 위치 } if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점 loVal[0] = L; loBar[0] = 0; } else { loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치 } if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr; //저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정 //단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다. //그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다. else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr; //고가가 저가 대비 변동률보다 높으면 상승추세로 설정 if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면 for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로 hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다. hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다. } hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입 hiBar[1] = hiBar[0]; hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가 hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; } if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데 hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면 hiVal[0] * dnRate > L then { hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다. hiBar[1] = hiBar[0]; hiVal[0] = H; hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; } if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우 for j = 8 downto 1 { //이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여 loVal[j+1] = loVal[j]; loBar[j+1] = loBar[j]; } loVal[1] = loVal[0]; loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; } if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데 loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면 loVal[0] * upRate < H then { loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다. loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; } if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then { var1 = 1; value1 = loval[1]; } if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then { var1 = -1; } input : P(10); var : MM(0),T(0); MM = (highest(H,P)+lowest(L,P))/2; if T == 0 and C > MM Then T = 1; if T == 0 and C < MM Then T = -1; if T == 1 and CrossDown(C,lowest(L,P)[1]) Then T = 0; if T == -1 and CrossUp(C,highest(H,P)[1]) Then T = 0; if T == 1 and var1 == 1 Then buy(); if T == -1 and var1 == -1 Then sell(); 2 input : P(20); var : cnt(0),sum(0),mav(0),dpt(0); sum = 0; for cnt = 0 to P-1{ sum = sum+DayClose(cnt); } mav = sum / P; dpt = C/mav*100; plot1(dpt); PlotBaseLine1(100); 3 input : 타주기분(30),P(20),Dv(2); var : S1(0,data1),D1(0,data1),TM(0,data1),TF(0,data1); var : cnt(0,data1),SumSqrt(0,data1),Stdv(0,data1); var : sum(0,data1),BBmd1(0,data1),Bbup1(0,data1),BBdn1(0,data1); var : TBBmd(0,data1),TBBup(0,data1),TBBdn(0,data1); var : BBmd2(0,data1),Bbup2(0,data1),BBdn2(0,data1); Array : CC[100](0,data1); bbup1 = data1(BollBandUp(P,dv)); bbdn1 = data1(BollBandDown(P,dv)); bbup2 = data2(BollBandUp(P,dv)); bbdn2 = data2(BollBandDown(P,dv)); if data1(Bdate != Bdate[1]) Then{ S1 = data1(TimeToMinutes(stime)); D1 = data1(sdate); } if D1 > 0 then{ if data1(sdate == D1) Then TM = data1(TimeToMinutes(stime)-S1); Else TM = data1(TimeToMinutes(stime)+1440-S1); TF = TM%타주기분; if data1(Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1])) Then{ for cnt = 1 to 99{ CC[cnt] = CC[cnt-1][1]; } } CC[0] = data1(C); if CC[P] > 0 then{ sum = 0; for cnt = 0 to P-1{ sum = sum + CC[cnt]; } TBBmd = sum/P; SumSqrt = 0; For cnt = 0 To P - 1 { SumSqrt = SumSqrt + (CC[cnt] - TBBmd)^2; } Stdv = SquareRoot(SumSqrt / P); TBBup = TBBmd + (Dv * Stdv); TBBdn = TBBmd - (Dv * Stdv); if data1(C > BBup1) and data1(C > TBBup) and data2(C>BBup2) Then buy(); if MarketPosition == 1 and (data1(C<BBup1) or data1(C<TBBup) or data2(C<BBup2)) Then exitlong(); } } 4-1 분봉에서 타분봉 Input :Atime(10),Period(14); var : TF(0),MFIv(0),cnt(0),sum1(0),sum2(0); Array : HH[100](0),LL[100](0),CC[100](0),Vv[100](0); Array : val1[100](0),val2[100](0),val3[100](0),val4[100](0); TF = TimeToMinutes(stime)%Atime; if dayindex() == 0 or (TF < TF[1] and stime > stime[1]) or stime >= 151500 Then{ HH[0] = H; LL[0] = L; VV[0] = 0; for cnt = 1 to 99{ HH[cnt] = HH[cnt-1][1]; LL[cnt] = LL[cnt-1][1]; CC[cnt] = CC[cnt-1][1]; val1[cnt] = val1[cnt-1][1]; val2[cnt] = val2[cnt-1][1]; val3[cnt] = val3[cnt-1][1]; val4[cnt] = val4[cnt-1][1]; } } CC[0] = C; if H > HH[0] Then HH[0] = H; if L < LL[0] Then LL[0] = L; VV[0] = VV[0]+V; val1[0] = HH[0] + LL[0] + CC[0]; val4[0] = VV[0] * Val1[0]/ 3; if val1[0] > val1[1] then val2[0] = val4[0]; else val2[0] = 0; if val1[0] < val1[1] then val3[0] = val4[0]; else val3[0] = 0; if CC[Period-1] > 0 Then{ sum1 = 0; sum2 = 0; for cnt = 0 to Period-1{ sum1 = sum1+val2[cnt]; sum2 = sum2+val3[cnt]; } MFIv = 100 - 100 / (1 + (sum1/sum2)); plot1(MFIv); PlotBaseLine1(20, "하단기준선"); PlotBaseLine2(80, "상단기준선"); } 4-2 분봉이하에 일봉 input : Period(14); var : cnt(0),sum1(0),sum2(0),MFIv(0); sum1 = 0; sum2 = 0; for cnt = 0 to Period-1{ if (dayhigh(cnt)+daylow(cnt)+DayClose(cnt)) > (dayhigh(cnt+1)+daylow(cnt+1)+DayClose(cnt+1)) Then sum1 = sum1 + DayVolume(cnt)*(dayhigh(cnt)+daylow(cnt)+DayClose(cnt))/3; Else sum1 = sum1+0; if (dayhigh(cnt)+daylow(cnt)+DayClose(cnt)) < (dayhigh(cnt+1)+daylow(cnt+1)+DayClose(cnt+1)) Then sum2 = sum2 + DayVolume(cnt)*(dayhigh(cnt)+daylow(cnt)+DayClose(cnt))/3; Else sum2 = sum2+0; } MFIv = 100 - 100 / (1 + (sum1 / sum2)); plot1(MFIv); PlotBaseLine1(20, "하단기준선"); PlotBaseLine2(80, "상단기준선"); 5 input : n(25); var1 =(C-C[1])/C[1]*100; if countif(var1 >= n,20) >= 1 Then find(1); 즐거운 하루되세요 > 잡다백수 님이 쓴 글입니다. > 제목 : 문의드립니다. > 도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다. 1. 시스템 아래 코딩을 쓰면 컴퓨터에 추세선들이 나와서 리소스를 많이 먹는 것 같더라구요. 여기서 매수 매도에 상관없는 내용들은 다 삭제좀 부탁드립니다. Input:chRate(0.2); //전환율 또는 변동률 Var:j(0),upTr(100),dnTr(-100),upRate(0),dnRate(0),trnd(0),TL(0), date11(0),date12(0),time11(0),time12(0),TL1(0), date21(0),date22(0),time21(0),time22(0),TL2(0), date31(0),date32(0),time31(0),time32(0),TL3(0); Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0); //hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점 //hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다. //loVal[0]은 반대 개념 upRate = 1 + (chRate/100); //상승률 dnRate = 1 - (chRate/100); //하락률 for j = 1 to 9 { //전고,전저점을 9개까지 보관 loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리 hiBar[j] = hiBar[j] + 1; //전고점의 위치 } if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점 hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문 hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미 } else { hiBar[0] = hiBar[0] + 1; //현재 고점의 위치 } if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점 loVal[0] = L; loBar[0] = 0; } else { loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치 } if trnd != dnTr && hiVal[0] > H && hiVal[0] * dnRate > L then trnd = dnTr; //저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정 //단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다. //그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다. else if trnd != upTr && loVal[0] < L && loVal[0] * upRate < H then trnd = upTr; //고가가 저가 대비 변동률보다 높으면 상승추세로 설정 if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면 for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로 hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다. hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다. } hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입 hiBar[1] = hiBar[0]; hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가 hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다. date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜 time11 = stime[loBar[1]]; //추세선 시작시간 Value11 = loVal[1]; //추세선 시작가격 date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜 time12 = stime[hiBar[1]]; //추세선 종료시간 Value12 = hiVal[1]; //추세선 종료가격 TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); //TL_New는 신규 추세선을 그려주는 함수 } if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데 hiVal[1] < hiVal[0] and //전고점보다 더 높은 고점이 출현했다면 hiVal[0] * dnRate > L then { hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다. hiBar[1] = hiBar[0]; hiVal[0] = H; hiBar[0] = 0; loVal[0] = L; loBar[0] = 0; //전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다. date12 = date[hiBar[1]]; //추세선 종료일 time12 = stime[hiBar[1]]; Value12 = hiVal[1]; TL_SetEnd(TL1, date12,time12,Value12); //TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다. //TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다. } if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우 for j = 8 downto 1 { //이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여 loVal[j+1] = loVal[j]; loBar[j+1] = loBar[j]; } loVal[1] = loVal[0]; loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date11 = date[hiBar[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다. time11 = stime[hiBar[1]]; Value11 = hiVal[1]; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL1 = TL_New(date11,time11,Value11,date12,time12,Value12); } if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데 loVal[1] > loVal[0] and //전저점보다 낮은 저가가 출현했다면 loVal[0] * upRate < H then { loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다. loBar[1] = loBar[0]; loVal[0] = L; loBar[0] = 0; hiVal[0] = H; hiBar[0] = 0; date12 = date[loBar[1]]; time12 = stime[loBar[1]]; Value12 = loVal[1]; TL_SetEnd(TL1, date12,time12,Value12); } if trnd == upTr and loVal[2] > loVal[1] then TL_SetColor(TL1,BLUE); else if trnd == dnTr and hiVal[2] < hiVal[1] then TL_SetColor(TL1,RED); else TL_SetColor(TL1,BLACK); TL_SetSize(TL1,2); TL_SetColor(TL2,RED); TL_SetColor(TL3,BLUE); if var1 <= 0 and Trnd == uptr and Trnd != Trnd[1] Then{ var1 = 1; value1 = loval[1]; TL1 = Text_New(sdate[lobar[1]],stime[lobar[1]],value1-PriceScale*2,"●"); TL_SetColor(TL,RED); TL_SetSize(TL,2); Text_SetStyle(TL1,2,2); Text_SetColor(TL1,RED);#텍스트 색상 TL= Text_New(sdate[lobar[1]],stime[lobar[1]],L,"상승"); Text_SetColor(TL,RED);#텍스트 색상 } if var1 >= 0 and Trnd == dntr and Trnd != Trnd[1] then{ var1 = -1; value1 = hival[1]; TL2 = Text_New(sdate[hibar[1]],stime[hibar[1]],value1+PriceScale*2,"●"); TL_SetColor(TL,BLUE); TL_SetSize(TL,2); Text_SetStyle(TL2,2,2);#텍스트 좌우 상하 정렬 Text_SetColor(TL2,BLUE);#텍스트 색상 TL= Text_New(sdate[hibar[1]],stime[hibar[1]],H,"하락"); Text_SetColor(TL,BLUE);#텍스트 색상 } input : P(10); var : MM(0),T(0); MM = (highest(H,P)+lowest(L,P))/2; if T == 0 and C > MM Then T = 1; if T == 0 and C < MM Then T = -1; if T == 1 and CrossDown(C,lowest(L,P)[1]) Then T = 0; if T == -1 and CrossUp(C,highest(H,P)[1]) Then T = 0; if T == 1 and var1 == 1 Then buy(); if T == -1 and var1 == -1 Then sell(); 2. 기타 -타주기 이격도 -분봉에서 일봉 이격도 코딩 부탁드립니다. 3. 시스템 -참조데이터 종가가 볼린저밴드 상단 위에 위치 -본 데이터 종가도 볼린저밴드 상단 위에 위치 -본 데이터 타주기 봉도 볼린저밴드 상단 이에 위치하면 매수 -위 조건 중 하나라도 무너지면 매도 4. 기타 -타주기 MFI -분봉에서 일봉 MFI 5. 종목검색 최근 20거래일간 상승률 n%를 기록했던 종목