커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

문의

input:intervals(15); var:arr(0),k(0),tick(0),chk_cnt(0),ttm(0),t_val(0),max_tpo(0),tot_tpo(0), sum(0),acc(0),mdl_prc(0),mdl_arr(0),range_u(0),range_d(0),base(0), cal_tpo(0),up_tpo(0),dn_tpo(0),up_tail_u(0),up_tail_d(0),dn_tail_u(0),dn_tail_d(0); array:price_u[100](0),price_m[100](0),price_d[100](0), status_u[100](0),status_m[100](0),status_d[100](0), tpo_u[100](0),tpo_m[100](0),tpo_d[100](0); if CodeCategoryEX() == 11 then //Kospi 주식 { if C >= 500000 then tick = 1000; else if C >= 100000 then tick = 500; else if C >= 50000 then tick = 100; else if C >= 10000 then tick = 50; else if C >= 5000 then tick = 10; else tick = 5; } if CodeCategoryEX() == 12 then //Kosdaq 주식 { if C >= 50000 then tick = 100; else if C >= 10000 then tick = 50; else if C >= 5000 then tick = 10; else tick = 5; } if CodeCategoryEX() == 21 then //Kospi200 선물 tick = 0.05; if CodeCategoryEX() == 31 or CodeCategoryEX() == 32 then //Kospi200 콜옵션,풋옵션 { if C >= 3.0 then tick = 0.05; else tick = 0.01; } if dayindex()==0 then //매일 첫번째 봉에서 해당 변수들의 값을 0으로 초기화 { for arr = 0 to 99 { price_u[arr] = 0; price_m[arr] = 0; price_d[arr] = 0; status_u[arr] = 0; status_m[arr] = 0; status_d[arr] = 0; tpo_u[arr] = 0; tpo_m[arr] = 0; tpo_d[arr] = 0; } max_tpo = 0; tot_tpo = 0; sum = 0; acc = 0; mdl_prc = 0; mdl_arr = 0; range_u = 0; range_d = 0; base = dayopen() + tick * 149; //300개 가격대중 최상단에 해당하는 가격 price_u[0] = base; //지수 배열 상단 for arr = 1 to 99 { price_u[arr] = price_u[arr-1] - tick; } price_m[0] = price_u[99] - tick; //지수 배열 중단 for arr = 1 to 99 { price_m[arr] = price_m[arr-1] - tick; } price_d[0] = price_m[99] - tick; //지수 배열 하단 for arr = 1 to 99 { price_d[arr] = price_d[arr-1] - tick; } } ttm = TimeToMinutes(stime); //시간을 30분,15분,10분등으로 나누기 쉽도록 환산 t_val = int((ttm-540)/interval) + 1; //540은 09:00. 9시를 빼고 나서 원하는 시간단위로 나눈다 for arr = 0 to 99 { if l <= price_u[arr] and price_u[arr] <= h then { if status_u[arr] < t_val then //A가 찍혔는데 또 A를 찍을 필요가 없음. 그걸 확인 { status_u[arr] = t_val; //중복을 막기 위해 마지막 time value 저장 tpo_u[arr] = tpo_u[arr] + 1; //현재 가격대의 TPO 누적 tot_tpo = tot_tpo + 1; //전체 TPO 누적 if max_tpo < tpo_u[arr] then //TPO 최빈값 { max_tpo = tpo_u[arr]; sum = 0; //TPO가 동일한 가격대가 여러가격일 경우 acc = 0; //평균값을 구하기 위해 가격 누적변수와 가격대 수 초기화 } if max_tpo == tpo_u[arr] then //최빈값과 동일하면 { sum = sum + price_u[arr]; //해당 가격을 누적 acc = acc + 1; //가격대 개수 누적 } } } //3개의 동일 성격을 지닌 배열에 대해 한꺼번에 처리 못하므로 동일 루틴으로 3회 처리 if l <= price_m[arr] and price_m[arr] <= h then { if status_m[arr] < t_val then { status_m[arr] = t_val; tpo_m[arr] = tpo_m[arr] + 1; tot_tpo = tot_tpo + 1; if max_tpo < tpo_m[arr] then { max_tpo = tpo_m[arr]; sum = 0; acc = 0; } if max_tpo == tpo_m[arr] then { sum = sum + price_m[arr]; acc = acc + 1; } } } if l <= price_d[arr] and price_d[arr] <= h then { if status_d[arr] < t_val then { status_d[arr] = t_val; tpo_d[arr] = tpo_d[arr] + 1; tot_tpo = tot_tpo + 1; if max_tpo < tpo_d[arr] then { max_tpo = tpo_d[arr]; sum = 0; acc = 0; } if max_tpo == tpo_d[arr] then { sum = sum + price_d[arr]; acc = acc + 1; } } } } mdl_prc = round(sum/acc/tick,0)*tick; //평균하여 중심가격으로 삼음 mdl_arr = int((base-mdl_prc)/tick); //배열변수의 첨자는 정수이어야 함 range_u = mdl_arr; range_d = mdl_arr; // 전체 TPO의 70%가 될 때까지 상하값을 비교하면서 누적 cal_tpo = iff(mdl_arr<100,tpo_u[mdl_arr],iff(mdl_arr<200,tpo_m[mdl_arr-100],tpo_d[mdl_arr-200])); for k = 0 to 150 { // range_u는 한단위씩 위로(-1), range_d는 한단위씩 아래로(+1) // TPO가 많은 쪽의 TPO를 먼저 누적한다 var2 = iff(range_u-1<100,tpo_u[range_u-1],iff(range_u-1<200,tpo_m[range_u-1-100],tpo_d[range_u-1-200])); var3 = iff(range_d+1<100,tpo_u[range_d+1],iff(range_d+1<200,tpo_m[range_d+1-100],tpo_d[range_d+1-200])); if var2 > var3 then { cal_tpo = cal_tpo + var2; range_u = range_u - 1; } else if var2 < var3 then { cal_tpo = cal_tpo + var3; range_d = range_d + 1; } else if var2 == var3 and var2 > 0 and var3 > 0 then { cal_tpo = cal_tpo + var2; range_u = range_u - 1; } if cal_tpo >= tot_tpo * 0.7 or var2 + var3 == 0 then k = 150; } up_tpo = 0; //중심가격의 상위 TPO if tpo_u[0] == 1 then up_tail_u = 0; //윗꼬리 상단 경계선, 0행부터 1이면 윗꼬리 상단은 0행이 됨 else up_tail_u = 299; //윗꼬리를 못 찾을 경우를 대비해서 상단과 하단의 관계를 역으로 만듬 //꼬리 경계값을 찾는 루틴을 성공적으로 마치면 상단값 < 하단값 성립 up_tail_d = 0; //윗꼬리 하단 경계선 //0행부터 중심가격 이전행까지 아래로 내려가면서 for arr = 0 to mdl_arr-1 { //현재 행의 tpo 값이 0이고 다음 행의 tpo값이 1이면 1의 시작으로 보고 다음 행의 행번호를 윗꼬리 상단으로 봄 if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) == 1 then up_tail_u = arr + 1; //윗꼬리 상단 경계선 array //현재 행의 tpo 값이 1이고 다음 행의 tpo값이 1보다 크면 현재 행의 행번호를 윗꼬리 하단으로 봄 if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) > 1 and up_tail_d == 0 then //조건을 만족하는 경우가 여러번 발생하는데 up_tail_d가 0일때만 //즉, 처음에 찾아진 값만 유효한 것로 봄 up_tail_d = arr; //윗꼬리 하단 경계선 array //TPO가 1보다 큰 상위 TPO 누적 if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) > 1 then up_tpo = up_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])); } dn_tpo = 0; //중심가격의 하위 TPO dn_tail_u = 299; //아래꼬리 상단 경계선 if tpo_d[99] == 1 then dn_tail_d = 299; else dn_tail_d = 0; //아래꼬리 하단 경계선 //299행부터 중심가격 이전행까지 위로 올라가면서 for arr = 299 downto mdl_arr+1 { //TPO가 1보다 큰 하위 TPO 누적 if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_u[arr-100],tpo_d[arr-200])) > 1 then dn_tpo = dn_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])); //현재 행의 tpo 값이 1이고 윗행의 tpo값이 1보다 크면 현재 행의 행번호를 아랫꼬리 상단으로 봄 if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) > 1 and dn_tail_u == 299 then dn_tail_u = arr; //아래꼬리 상단 경계선 array //현재 행의 tpo 값이 0이고 윗행의 tpo값이 1이면 1의 시작으로 보고 윗행의 행번호를 아랫꼬리 하단으로 봄 if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) == 1 then dn_tail_d = arr - 1; //아래꼬리 하단 경계선 array } plot1(mdl_prc,"중심가격"); plot2(base-(range_u*tick),"가치영역(상)"); //0행의 값 base가 가장 큰 값이므로 해당 행(row)에 //단위(tick)을 곱해서 차감 plot3(base-(range_d*tick),"가치영역(하)"); if up_tail_u <= up_tail_d then //꼬리의 경계값이 정상적으로 찾아졌다면 { plot4(base-(up_tail_u*tick),"윗꼬리상단"); //점그래프로 표현 plot5(base-(up_tail_d*tick),"윗꼬리하단"); } if dn_tail_u <= dn_tail_d then { plot6(base-(dn_tail_u*tick),"아랫꼬리상단"); plot7(base-(dn_tail_d*tick),"아랫꼬리하단"); } //plot8(up_tpo,"상위TPO"); //plot9(dn_tpo,"하위TPO"); 당일 오전 8시 45분기준으로 부탁드립니다
프로필 이미지
레전드
2023-11-06
912
글번호 173784
지표
답변완료

수식부탁드립니다

아래수식은 파동수식입니다 Input: Period1(1),Period2(10),Period3(20),length(2),종가사용여부(0),파동선두께(2),파동선두께고저선(1),수치표시(1); Variables: TLen1(0),TRIma1(0),TLen2(0),TRIma2(0),TLen3(0),TRIma3(0),j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""), TL1(0),Text1(0) ,tl2(0),tl3(0),tl4(0),tl5(0),tl6(0),T(0),sumv(0),sumi(0),mav(0); Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime #==========================================# TLen1 = Ceiling((Period1 + 1) * .5); TRIma1 =Ema(Ema(C, TLen1), TLen1); TLen2 = Ceiling((Period2 + 1) * .5); TRIma2 =Ema(Ema(C, TLen2), TLen2); TLen3 = Ceiling((Period3 + 1) * .5); TRIma3 =Ema(Ema(C, TLen3), TLen3); HH = IFF(종가사용여부==1,C,H); LL = IFF(종가사용여부==1,C,L); If Index == 0 Then { 고[1,1] = HH; 저[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 저[1,1] > LL Then 처리구분 = "저점처리"; Else 처리구분 = "고점처리"; } Else If 최종꼭지점 == "고점" Then { If 고[1,1] < HH Then 처리구분 = "고점처리"; Else 처리구분 = "저점처리"; } } Else If Condition1 Then 처리구분 = "고점처리"; Else If Condition2 Then 처리구분 = "저점처리"; #==========================================# If 처리구분 == "고점처리" Then { T = 1; 최종고가 = HH; // 신규고점을 체크하기 위해 저장 If 최종꼭지점 == "저점" Then { For j = 10 DownTo 2 { For jj = 1 To 4 { 고[j,jj] = 고[j-1,jj]; } } 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]); If 수치표시 == 1 Then { Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)); Text_SetStyle(Text1, 0, 1); Text_SetColor(Text1, Red); Text_SetSize(Text1, 16); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,White); TL_SetSize(TL2,파동선두께고저선); TL_SetColor(TL2,Rgb(129,129,129)); } Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현 { 고[1,1] = HH; 고[1,2] = Index; 고[1,3] = sDate; 고[1,4] = sTime; TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]); TL_SetEnd(TL2,고[1,3],고[1,4],고[1,1]); // 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임 If 수치표시 == 1 Then { Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]); Text_SetString(Text1,NumToStr(고[1,1],2)); } } 최종꼭지점 = "고점"; } #==========================================# If 처리구분 == "저점처리" Then { T = -1; 최종저가 = LL; If 최종꼭지점 == "고점" then { For j = 10 DownTo 2 { For jj = 1 To 4 { 저[j,jj] = 저[j-1,jj]; } } 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]); If 수치표시 == 1 Then { Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)); Text_SetStyle(Text1, 1, 0); Text_SetColor(Text1, Blue); Text_SetSize(Text1, 16); } TL_SetSize(TL1,파동선두께); TL_SetColor(TL1,White); TL_SetSize(TL2,파동선두께고저선); TL_SetColor(TL2,Rgb(129,129,129)); } Else If 저[1,1] > LL then { 저[1,1] = LL; 저[1,2] = Index; 저[1,3] = sDate; 저[1,4] = sTime; TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]); TL_SetEnd(TL2,저[1,3],저[1,4],저[1,1]); If 수치표시 == 1 Then { Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]); Text_SetString(Text1,NumToStr(저[1,1],2)); } } 최종꼭지점 = "저점"; } 이 수식을 이용해서 상승파동이 생성된 상태에서 지수가 전저점을 crossdown할때 하삼각표시가 발생되는 수식을 부탁드립니다 여기서 상승파동이 생성된상태는 첨부그림에서 처럼 전저점332.95 가 전전저점 332.65보다 상승한상태이며 이상태에서 전저점을 crossdown한다는 것은 지수가 전저점332.95를 crossdown하는것을 말합니다 부탁드리겠습니다 감사합니다
프로필 이미지
bestkim
2023-11-06
1341
글번호 173783
지표
답변완료

지표 수식 부탁드립니다.

키움 분봉에서의 4등분선 수식인데 예스랭귀지 지표로 부탁드립니다. 거래금액=(O+C+H+L)/4*V ; 누적금액=Sum(거래금액) ; 당일누적=valuewhen(1,date!=date(1),누적금액(1)) ; 당일금액=누적금액-당일누적 ; 누적수량=Sum(V) ; 당일누적수량=valuewhen(1,date!=date(1),누적수량(1)) ; 당일수량=누적수량-당일누적수량 ; D평단=당일금액/당일수량 ; 상=DayHigh() ; 하=DayLow() ; 중=D평단 ; 중상=(상+중)/2 ; 중하=(하+중)/2 ; 감사합니다.
프로필 이미지
사랑민
2023-11-06
1003
글번호 173782
지표
답변완료

부탁드립니다

1. 종가가 당일 시가 및 전일 최고가를 넘어서면 빨강색으로, 당일 시가 및 전일 최저가 아래로 떨어지면 파란색으로 구현해 주세요 2. 전일 최고가, 전일 최저가, 전일 종가, 전일 최고가와 전일 최저가의 중간값, 당일 시가, 그리고 전일 종가에 전일 진동폭(전일 최고가-전일 최저가)을 합한 값, 전일 종가에서 전일 진동폭(전일 최고가-전일 최저가)을 뺀 값을 수평선 지표로 각 구현해 주세요 고맙습니다.
프로필 이미지
서태공
2023-11-06
773
글번호 173781
강조
답변완료

재문의 드립니다.

안녕하세요. 항상 감사 드립니다. 작성해주신 1번, 2번을 아래 종목 검색 if문 안에 넣코자 하는데 문법 에러가나서 도움을 요청 합니다. 수고 하세요 1번 .#고가가 저가대비 20%이상이고 종가는 고가대비 -15%이상인 봉이 2봉 중 1개 이상이면 true Condition1 = CountIf(H>=L*1.20 and C <= H*0.85,2) >= 1; 2. #3연속 음봉이고 첫음봉시가대비 마지막음봉 종가는 -15%이상 Condition2 = CountIf(C<O,3) == 3 and C <= O[2]*0.85; #전봉기준 Condition1이 true이거나 Condition2가 true if Condition1[1] == true or Condition2[1] == true Then find(1); ------------------------------------------------------------------------ 종목검색 if (highest(H,20)[1] >= lowest(L,20)[1]*1.80) and 1번 or 2번 (C >= C[1]) and (V >= V[1]*1.0) and (O <= C[1]*1.0) and (C >= O*1.0) and (CountIf(H >=C[1]*1.25,200) >= 1) and (CountIf(V >=V[1]*10,200) >= 1) Then Find(1);
프로필 이미지
하루삼프로
2023-11-06
866
글번호 173780
종목검색

2685up 님에 의해서 삭제되었습니다.

프로필 이미지
2685up
2023-11-06
13
글번호 173779
시스템
답변완료

문의 드립니다.

주식에서 당일 시가 위에 당일 중심선이 있을 때 아래 식을 적용하고자 합니다. 그리고 금액에 맞게 원하는 주식 수를 입력하기를 원하는데 가능하시면 부탁드립니다. (일반적으로 주식 매매할 때 1계약으로만 진행되어 100만원이라 금액 정도의 수량을 거래하기를 원하는 것입니다) var1 = (DayHigh+DayLow)/2; if CrossUp(C,Var1) Then Buy(); if CrossDown(c,Var1) Then ExitLong();
프로필 이미지
선물대장
2023-11-06
617
글번호 173778
시스템
답변완료

문의 드립니다.

당일 시가 위에 당일 고가 저가 중심선이 있고 주가는 시가 위이면서 중심선 아래서 위로 돌파 시 매수 진입 중심선 아래로 돌파 시 매도 청산 익절은 원하는 가격을 직접 입력할 수 있있도록 하고 추가로 당일 장마감 때 모든 포지션 청산완료 부탁드립니다. 그리고 위에 식으로 주식 매매를 하면 1계약으로 체결되어 진행되는데 주식매매에서 한번에 100만원을 수량에 맞게 매수 할 수 있는 계약 수를 입력할 수 있게 해주시면 감사하겠습니다.
프로필 이미지
선물대장
2023-11-06
675
글번호 173771
시스템
답변완료

수식질문

분봉차트에서 LastBarOnChart ==1 일경우 해당봉의 date 값을 저장해놓고, lastbaronchart !=1 인 상황에서도 해당 Date 값을 지표식으로 표시하고 싶습니다. 결국 지표식상에는 ---------------- 이런식으로 마지막봉까지 값은 값이 나열되게 하고 싶습니다.
프로필 이미지
월척
2023-11-06
963
글번호 173770
지표
답변완료

수식 부탁드립니다.

아래는 스윙하이(SH) 및 스윙로우(SL)에 대한 지표수식입니다 Var : 고점(0), 저점(0), 좌우기간(5); input : PH(H), PL(L); if SwingHigh(1,PH, 좌우기간,좌우기간,좌우기간*2+1) != -1 Then 고점 = H[좌우기간] ; if SwingLow(1, PL, 좌우기간,좌우기간,좌우기간*2+1) != -1 Then 저점 = L[좌우기간]; Plot1(고점,"고점"); //Blue Plot2(저점,"저점"); //Red 1. plot1(고점)과 2(저점)에 표시되는 스윙하이와 스윙로우가 표시되는 봉이 실제로 발생된 고가 또는 저가봉이 아니라 다른봉에 표시가 되고 있는데 이에 대한 수정을 부탁합니다. 2. 1에서 수정된 봉(가격)의 위치를 이용해서 고점끼리 연결한 추세선, 저점끼리 연결한 추세선, 고좀과 저점을 연결하는 지그재그로 선이 표시되도록 수식을 만들어주세요. 3. 스윙로우가 발생된 봉의 위치를 비교하여 매수신호가 발생되게끔 하고 싶은데요 즉 스윙로우(저점)가 낮아 지다가 전저점보다 높아진 저점이 발생하고, 전고점보다 높은 고점이 발생되고 다시 전저점이 높아질때에 매수신호검색수식을 부탁합니다. 추가적으로 발생순서를 설명하면 저점1 -- 고점1----저점2----고점2---저점3으로 발생하는데 저점1보다 저점2가 높고, 저점2보다는 저점3이 높아질때 신호발생되게 요청드립니다
프로필 이미지
해피오
2023-11-06
952
글번호 173763
지표