커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

57581 관련 추가 도움 부탁드립니다.

1. 계좌 현재 잔고를 못 갖고 오면 모의투자나 실제 투자 시에 자산의 몇 %만 투입되게 하는 전략은 사용이 불가한거죠? 왜냐하면 시뮬레이션을 했는데, 투입금액이 고정되어 있다보니 늘어나는 자산이 반영이 안되서 백테스트 결과 차이가 크더라구요. 이걸 가능하게 할 수 있는 방법은 없을까요? 2. 갭하락 발생했을 경우(오늘 시가가 전일종가보다 떨어졌을 경우), 09:00 ~ 09:30 사이에 첫 양봉 발생시 다음 봉 시가에 매도. 만일 양봉이 안 생겼을 때 09:30 시가에 매도. if DayOpen(0) < DayClose(1) Then ....? 3. 위 1번 갭하락이 발생 안 했을 때, 바로 오늘 시가에 매도 if DayOpen(0) >= DayClose(1) and NextBarSdate > sdate Then ExitLong("bx3", AtMarket); 4. 갭하락 발생했는지 여부를 장시작하자마자 바로 인지해서 장 시가에 매도되게 할지 09:30까지의 양봉에 매도되게 할지 순간적으로 계산해야 하는데, 실제 가능한가요? 5. 제가 완전 초보라 지식이 부족해서요. 해당 수식으로 실제 투자를 할 때, 봉주기가 어떻게 될까요? 왜냐하면 millisecond 단위로 가격이 달라져서 위의 경우처럼 완전 순간적으로 계산해야 하는 경우가 어떻게 처리되는건지 알고 싶습니다. 봉보다 더 작은 단위가 틱같은데, 틱 단위로 바꿔야 하나 싶어서요. 다시 한번 도움 꼭 좀 부탁드립니다. 감사합니다!
프로필 이미지
된다된다
2018-04-26
301
글번호 118476
시스템
답변완료

문의드립니다

키움 신호 변화해서 부탁드립니다 매수진입 매도청산 Crossup(C,SAR(af,maxaf)) 매도진입 매수청산 CrossDown(C,SAR(af,maxaf)) 지표변수 af 0.009 maxaf 0.03 시스템 신호 예스용으로 부탁드립니다 그리고 진입신호후에 10틱 ~300틱 까지 노란글씨로 틱수 표시되게 부탁드립니다
프로필 이미지
해피슈
2018-04-26
262
글번호 118475
시스템
답변완료

수식재문의

1. 해당월의 최고점 과 최저점을 위그림처럼 빨간선으로 그렸으면합니다.(그림은 하나지만 선행스팬1,2둘다 그려지고 싶습니다. 한번그려지면 신고나 저점이 갱신될때까지 그려지지 않으며 갱신되는순간 이전선들은 삭제하고싶습니다. 총4개의 선이네요) 2. 해당년기준으로도 부탁드립니다.
프로필 이미지
렉쳐
2018-04-26
316
글번호 118474
지표
답변완료

검색식 작성문의드립니다

활용지표 : DMI 지표(지표값 14) 1. 주간차트에서 - D+> D- and, ADX가 30 이상에서 우상향(상승추세) 2. 일간차트에서 - D+> D- and, DMI 30 돌파 조건검색식 : 위 1과 2조건을 동시에 만족하는 종목검색식 부탁합니다
프로필 이미지
파워
2018-04-25
305
글번호 118473
종목검색
답변완료

수식부탁합니다

수고많습니다 60봉내 최고가는 10봉~15봉전사이 발생시 금일고가는 10봉내 2번째고가를돌파 혹은 5봉중 최고종가발생 잘부탁합니다 수고하십시요
프로필 이미지
커피한잔
2018-04-25
305
글번호 118472
종목검색
답변완료

수식부탁드립니다

수고많으십니다. 참조식 스토캐스틱매수신호시 본주매수매도식 참조식 스토캐스택 매도신호시 본주매수매도식 초여름 늘 행복하시기바랍니다.
프로필 이미지
qormswhd
2018-04-25
292
글번호 118471
시스템

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
428
글번호 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
375
글번호 118468
시스템