커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내

안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
프로필 이미지
예스스탁
2026-02-27
4374
글번호 230811
지표

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

프로필 이미지
qormswhd
2018-04-25
0
글번호 118470
기타
답변완료

지표문의

1.아래는 수식지님이 작성한 수식입니다 참조 종목(data2)으로 사용 할수있게 좀 수정 해주세요 2.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),Start(420), 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); tick = PriceScale; if Bdate != Bdate[1] then //매일 첫번째 봉에서 해당 변수들의 값을 0으로 초기화 { Start = TimeToMinutes(stime); 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; } } if stime >= 0 and stime < 080000 then ttm = timetominutes(stime)+1440-Start; else ttm = timetominutes(stime)-Start; #ttm = TimeToMinutes(stime); //시간을 30분,15분,10분등으로 나누기 쉽도록 환산 t_val = int((ttm)/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); //배열변수의 첨자는 정수이어야 함 //처음부터 int()를 생각해 냈던 것은 아니고 디버그 과정에서 알게 됨 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"); 3.그럼 수고하세요
프로필 이미지
성공예견
2018-04-25
296
글번호 118469
지표
답변완료

피보나치 조정대 수식 점검 부탁드립니다.

아래의 수식을 챠트에 적용해 보니 생각과 맞지 않는 부분이 있어서 문의 드립니다. 1. 일봉상의 피보나치 조정대의 가격을 기준으로 분봉에서 매매되는 수식이 맞는지요?? 2. 0.500에서 매수하여 0.382에서 수익매도 0.618에서 손절이 되길를 원하는데요. 어떻게 수정을 하면 될런지요?? - 아 래 - input : n(100); input : 지정일(20180405); var : 매수금액(3000000); var : hh(0),ll(0),rr(0),cnt(0); if DayHigh(n) > 0 and DayLow(n) > 0 then{ hh = dayhigh(1); ll = daylow(1); for cnt = 1 to n{ if dayhigh(cnt) > hh Then hh = DayHigh(cnt); if daylow(cnt) < ll Then ll = daylow(cnt); } rr = hh-ll; var1 = hh; var2 = hh - rr*0.382; var3 = hh - rr*0.500; var4 = hh - rr*0.618; var5 = ll; if crossup(c,var3) Then Buy("매수"); if (CrossDown(c,var1) or CrossDown(c,var2) or CrossDown(c,var4)) Then ExitLong("매도"); }
프로필 이미지
승부사1
2018-04-25
264
글번호 118468
시스템
답변완료

종목검색 수식 부탁드립니다.

1. 일봉상 최근 100봉 이내에 최저점대비 100%이상 상승한 종목 2. 당일 개래대금 100억 이상
프로필 이미지
승부사1
2018-04-25
220
글번호 118467
종목검색
답변완료

키움영웅문 표현방식의 강세약세 수식 부탁드립니다.

input : k(60); var:HH(0),LL(0); HH = highest(h,k); LL = lowest(l,k); 그림에서 고점을 갱신하면 바탕강세 저점을 갱신하면 바탕약세 를 키움영웅문식 강세약세 표현하는 예스 수식을 부탁드립니다.
프로필 이미지
당일선물
2018-04-25
411
글번호 118466
지표
답변완료

재문의 부탁드립니다~^^

재문의드립니다~^^ 국내선물 틱차트에서~실시간~ *매수조건이 만족(참이면)할때만~매수신호~*//매도조건이 만족(참이면)할때만 매도신호~ *5 이평선이 20 이평선뚫으면 ~{이때,(조건,5 이평>=일목,기준선 and 5 >= 20 이평)조건이 참이면}~ 매수신호. ** 실시간현재가 > 일목기준선 and,5 이평 >= 일목,기준선 and 5 이평>=20 이평)조건이참이면 실시간 현재가가눌릴때~실시간현재가가 일목기준선값(지지선)에 닿으면 매수신호. *** (5 이평 > 20 이평 > 일목기준선) 참이고~ 실시간 현재가가 일목,기준선(값) 보다 14틱이상가면(상승) ~~실시간현재가가~눌릴때~20 이평선(값)에~닿으면 매수신호. **** 실시간 현재가가~60 이평선 뚫고~6틱이상가면~(이때조건=5 이평 >= 40 이평)조건이참이면~ 눌릴때~60 이평선에 닿으면(지지선) 매수신호(하루 2회이내만). **** 실시간 현재가가`120 이평선 뚤고~120 이평선값보다~6틱이상더가면(조건,5 이평 >= 90 이평)조건이참이면~눌림목~120 이평(선)값에닿으면~매수신호(하루2회이내만). * * * 위모든 매수신호자리에서~조건이 참이여만 매수신호나타나게 해주시면됩니다~^^ 매도신호는~~ 위와 반대로~부탁드립니다~^^
프로필 이미지
thdgus1s
2018-04-25
219
글번호 118464
시스템

베롱나무 님에 의해서 삭제되었습니다.

프로필 이미지
베롱나무
2018-04-25
4
글번호 118458
시스템
답변완료

문의드립니다.

도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다. input: 진입시간(153400); if 조건 and stime == 진입시간 then buy("b",OnClose); 선물에 적용해봤는데요. 신호는 차트에 나오는데 매수는 되지 않았습니다. 35분 딱 동시호가 들어가기전 매수되는 줄 알았으나 리포트에만 그렇게 나오고 실매매에는 안되는가 봅니다. 동시호가전 마지막봉 매수는 다른 방법을 써야만 되는건가요? 전에 한번 일러주신 것 같은데 잊어 먹었습니다. 또 한번 가르침 부탁드립니다.
프로필 이미지
잡다백수
2018-04-25
209
글번호 118457
시스템
답변완료

수식문의드립니다.

아래식으로 스위칭시스템을 만들고 싶은데요 몇가지 내용을 추가 하고 싶습니다. 부탁드립니다. 1. 직전 진입이 매수 였으면 다음진입은 매도진입으로 2. 직전 진입이 매도 였으면 다음진입은 매수진입으로 3. 3계약들어가서 아래 청산식으로 청산하되 반대신호가 나오면 직전포지션을 모두 청산하고 스위칭하게 하고 싶습니다. If C > top Then Buy("매수", AtStop, C,3); If C < bot Then Sell("매도", AtStop, C,3); if MarketPosition == 1 Then{ exitlong("bx1",Atlimit,EntryPrice+PriceScale*10,"",1,1); exitlong("bx2",Atlimit,EntryPrice+PriceScale*20,"",1,1); exitlong("bx3",Atlimit,EntryPrice+PriceScale*30,"",1,1); } if MarketPosition == -1 Then{ ExitShort("sx1",Atlimit,EntryPrice-PriceScale*10,"",1,1); ExitShort("sx2",Atlimit,EntryPrice-PriceScale*20,"",1,1); ExitShort("sx3",Atlimit,EntryPrice-PriceScale*30,"",1,1); }
프로필 이미지
수다리
2018-04-25
213
글번호 118455
시스템