커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

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

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

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

프로필 이미지
노아
2021-01-28
21
글번호 145919
시스템
답변완료

수식 작성좀 부탁드립니다.

10개 정도의 지지와 저항이 되는 주가를 특정하고 이것을 지지저항선이라고 할 때 캔들의 고가가 지지저항선 기준 상하 10틱의 범위내에 있을 때 매도 진입 캔들의 저가가 지지저항선 기준 상하 10틱의 범위내에 있을 때 매수 진입 하는 수식좀 부탁합니다. 지지저항선은 우선 아래 가격으로 특정해주세요. 매일 다르게 형성되기 때문에 매일매일 수기로 입력하려고 합니다. 지지저항선 12900, 12970, 13120, 13230, 13300, 13360, 14120, 14250, 14370, 14410
프로필 이미지
천왕봉
2021-01-28
949
글번호 145918
시스템
답변완료

수식 좀 부탁드립니다.

엑셀에서 데이타 5개를 받아서 쓰는데, 사진상에서 sell no1 , buy no1 하나씩만 발생하는데 첫번째 sellno1 , sellno2 , sellno3 가 동시에 발생하고 두번째 buyno1 , buyno2 , buyno3 도 동시에 발생하게 가능할까요? var : C2(0,Data2); var : C3(0,Data3); var : C4(0,Data4); var : C5(0,Data5); var : C6(0,Data6); C2 = Data2(c); C3 = Data3(c); C4 = Data4(c); C5 = Data5(c); C6 = Data6(c); if crossup(C2,0) then Buy(); if crossdown(C2,0) then Sell(); if crossup(C3,0) then Buy(); if crossdown(C3,0) then Sell(); if crossup(C4,0) then Buy(); if crossdown(C4,0) then Sell(); if crossup(C5,0) then Buy(); if crossdown(C5,0) then Sell(); if crossup(C6,0) then Buy(); if crossdown(C6,0) then Sell();
프로필 이미지
캣피쉬
2021-01-28
1009
글번호 145917
시스템
답변완료

수식 여쭙니다.

수고 많으십니다.. 다음을 수식으로 어떻게 작성하는지 여쭙니다. 5일이평이 30일이평을 크로스 한 뒤 ...macd 가 0 을 돌파할 때 매수 ... 청산식은 필요 없고요.. 수고 하세요
프로필 이미지
사사이사
2021-01-28
1049
글번호 145913
시스템
답변완료

참조데이터를 고려한 함수 작성?

참조데이터를 고려한 함수를 작성하면 기존함수가 작동을 하지 않습니다. #여기서 기본데이터는 일봉이고, 참조데이터는 60분봉입니다.# 아래는 그림1의 수식입니다. var : line(0),i(1),cnt(1),break(False); i = 1; cnt = 1; break = False; If Index == 1 Then line = TL_New(sDate[1],sTime[1],L[1]-1,sDate,sTime,L[1]); Else if Index != 0 Then { While break == False { If IsNaN(line[i]) == True Then { cnt = cnt + 1; i = i + 1; } Else break = True; } If H[cnt]<H[0] and L[cnt]<=L[0] Then line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]); Else If H[cnt]>=H[0] and L[cnt]>L[0] Then line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]); Else line = NaN(); } 아래는 그림2의 수식입니다. var : line(0),i(1),cnt(1),break(False); var : HT2(0,Data2),LT2(0,Data2); i = 1; cnt = 1; break = False; If Index == 1 Then line = TL_New(sDate[1],sTime[1],L[1]-1,sDate,sTime,L[1]); Else if Index != 0 Then { While break == False { If IsNaN(line[i]) == True Then { cnt = cnt + 1; i = i + 1; } Else break = True; } If H[cnt]<H[0] and L[cnt]<=L[0] Then line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]); Else If H[cnt]>=H[0] and L[cnt]>L[0] Then line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]); Else If H[cnt]<H[0] and L[cnt]>L[0] Then { If Data2(H == HighD(0)) Then HT2 = Data2(sTime); If Data2(L == LowD(0)) Then LT2 = Data2(sTime); If HT2<LT2 Then { line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]); line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,L[0]); } If LT2<HT2 Then { line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]); line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,H[0]); } } Else line = NaN(); } 그림1의 수식과 그림2의 수식의 차이는 분봉데이터를 고려하지 않음(그림1) 분봉데이터를 고려함(그림2) 입니다. 그림1이 제 함수의 기본 골격인데, 여기에 Else If H[cnt]<H[0] and L[cnt]>L[0] Then { If Data2(H == HighD(0)) Then HT2 = Data2(sTime); If Data2(L == LowD(0)) Then LT2 = Data2(sTime); If HT2<LT2 Then { line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,H[0]); line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,L[0]); } If LT2<HT2 Then { line = TL_New(sDate[cnt],sTime[cnt],TL_GetEndVal(line[cnt]),sDate,sTime,L[0]); line = TL_New(sDate,sTime,TL_GetEndVal(line),sDate,sTime,H[0]); } } 이 부분을 추가한 것이 그림 2입니다. 위 수식의 의미는 무엇이냐면, 현재 일봉으로부터 비교되는 특정 시점의 과거 봉의 저점과 고점이 현재 봉에 포함된다면, 일봉을 관통하는 수직선을 고점부터 저점 또는 저점부터 고점으로 즉, 궤적을 그려라 뭐 이런 것인데요. 근데 일봉의 고점부터 저점, 저점부터 고점을 결정하는 방식으로 "분봉데이터"에서 일봉 고점 형성시간이 저점보다 시간상으로 앞서면 고점에서 저점으로 그리고 일봉 저점 형성시간이 고점보다 시간상으로 앞서면 저점에서 고점으로 그리는 것입니다. 즉, 분봉데이터를 고려하도록 설계를 했는데, 그 때부터 원래 함수조차 작동을 하지 않습니다. 질문 기존함수(그림1)에 분봉데이터를 참조하는 조건식하나를 추가했는데(그림2), 기존 추세선이 모조리 안나타납니다. 해결방법이 있을까요? 질문참고(1번 내용을 해결하려고 디버그를 돌리다가 알게된 사실이나 추측을 도움되실까하여 적어놓습니다) 1) 분봉데이터를 참조하면서부터 계산횟수가 기존의 8배로 증가했습니다. 60분봉 7개와 일봉1개 총 8번인 듯 합니다. 2) 동일 코드의 추세선 생성 명령이 2번이상 실행되는 경우 추세선 표현이 안되는 듯 합니다. 2)에서 언급된 하루당 8번의 계산이 실행되는 것과 영향이 있을 듯 합니다. 3) 2)내용이 사실이라면 하루 중 마지막 봉을 계산할 때만 추세선 생성 명령이 작동되야할텐데요.. barindex값을 무작정 8로나눈 나머지가 7일 때가 하루 중 마지막 봉의 계산이라고 하면 수능이나 새해날 때문에 뒤로 1칸 또는 2칸이 밀려서 꼬이네요...이 방법은 너무 수식이 좀 더 복잡해질 것 같아 다른 좋은 방법이 있으면 좋겠네요.. 항상 친절히 답변해주셔서 감사합니다. 답변 잘 부탁드려요
프로필 이미지
ravit
2021-01-29
1108
글번호 145905
지표
답변완료

종가 배팅

종가 배팅 시스템을 생각하고 있는데요. 선물지수 기준입니다. 당일 양봉 마감이면서 and 미결제 약정수량이 시가때 물량보다 종가물량이 높을시 "매수" 당일 음봉 마감이면서 and 미결제 약정수량이 시가때 물량보다 종가물량이 높을시 "매도" 익일 시가에 보유분 청산!! 입니다.!!
프로필 이미지
백야
2021-01-28
1246
글번호 145903
시스템

러블리 님에 의해서 삭제되었습니다.

프로필 이미지
러블리
2021-01-28
0
글번호 145901
지표
답변완료

현재가 문의

안녕하세요~ 1. if문에서는 현재가를 봉완성시의 종가로 인식하는데, 그러면 1분봉에서는 쵀대 1분의 시간차가 5분봉에서는 최대 5분의 시간차이가 발생하는건간요? 2. 그렇다면 1분봉을 사용해야 하나요? 3. 현재가를 즉시 판단해서 사용하는 다른 함수가 있나요? 안녕하세요 예스스탁입니다. plot1(c); 위 내용을 지표식으로 작성하시고 차트에 적용해 보시면 C가 체결시세가 수신될때마다 변경되어 현재가를 그려주고 있는 것을 확인하실 수 있습니다. C는 실시간에서 계속 실시간체결시세를 받게 되지만 랭귀지에서 if문이 봉완성시에만 조건체크를 하게 됩니다. 봉완성시에만 조건만족여부를 판단해서 신호를 발생하기 때문에 C를 현재가로 지칭하기도 하고 종가로 지칭하기도 합니다. 즐거운 하루되세요 > 백합 님이 쓴 글입니다. > 제목 : 그런데 C 는 종가 아닌가요? 왜 현재가로 사용하죠? > 고맙습니다~~ 그런데 C 는 종가 아닌가요? 왜 현재가로 사용하죠?
프로필 이미지
백합
2021-01-28
964
글번호 145900
사용자 함수
답변완료

수식문의합니다~~

1. <<<신호타입 중 atlimit은 Buy에 사용되면 if조건이 만족하면 특정값(var1-매수포인트)을 셋팅하고 다음봉에서 현재가가 특정값(Buy에 사용되면) 이하이면 즉시 진입>>> onclose가 더 빠른데 왜 atlimit를 사용하죠? 2. -buy()- 는 어떤 신호타잎인지요? 3. <<<시간은 십만단위 숫자일 뿐입니다. HH:MM:SS와 같은 시간값이 아닙니다 시간값이 70000으로 리턴되지만 7:00:00과 같은 시간이 아닙니다>>> 그러면 아래 시작시간과 종료시간을 9시와 15시30분으로 보내 안되나요? 아니면 입력 값은 시간인데 변수로 리턴되는 값은 시간이 아니라는 것인지요? input : ntime(090000),Xtime(153000) 4. <<< L < var1-매수포인트 위와 같이 작성되면 이미 봉이 var1-매수포인트보다 아래인 상태에서 다음봉에서 다시 해당 가격이하이면 진입하게 됩니다.>>> 어차피 하루 1번 진입으로 카운팅되기때문에 필요 없지 않나요? 5. 나스닥에서 상식적인 손절 범위를 벗어나게 십만포인트를 설정햬는데도 손절이 발생하는데 공식에 어떤문제가 있는지요? if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then Buy("b",AtLimit,DayOpen-10); SetStopLoss(100000,PointStop); ExitLong("bp",AtLimit,DayOpen+10); 아래는 정상으로 나옵니다 if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then Buy("b",AtLimit,DayOpen-10); SetStopLoss(100000,PointStop); SetStopProfittarget(20,PointStop); 6. 아래 수식에서 저가가 DayOpen-10 보다 커야 buy가 수행되는 전제조건인데 buy는 DayOpen-10 이하가 되어야 수행이 되니 어케 체결이 되는지요? if MarketPosition == 0 and entry < 1 and L > DayOpen-10 Then Buy("b",AtLimit,DayOpen-10); > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 다시 확인 요청드립니다 > 안녕하세요 예스스탁입니다. 1.2 var1~var99, value1~value99 위 변수는 선언없이 사용가능한 내부저장변수입니다. 내부적으로 미리 0으로 모두 선언이 된 상태입니다. 해당 수식에서는 ntime봉의 시가를 저장하게 작성이 되어 있습니다. if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { Tcond = true; var1 = O; } 4 if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then Buy("b",AtLimit,var1-매수포인트); 신호타입 중 atlimit은 Buy에 사용되면 if조건이 만족하면 특정값(var1-매수포인트)을 셋팅하고 다음봉에서 현재가가 특정값(Buy에 사용되면) 이하이면 즉시 진입입니다. 봉이 지정한 가격보다 위에 형성되어 있다가 하락해서 var1-매수포인트를 처음 터치할때 진입하게 작성된 내용입니다. L > var1-매수포인트가 없으면 손절등 청산뒤에 계속 해당 가격아래 있으면 바로 또 매수가 발생하게 됩니다. 5 L < var1-매수포인트 위와 같이 작성되면 이미 봉이 var1-매수포인트보다 아래인 상태에서 다음봉에서 다시 해당 가격이하이면 진입하게 됩니다. 6 시간은 십만단위 숫자일 뿐입니다. HH:MM:SS와 같은 시간값이 아닙니다 시간값이 70000으로 리턴되지만 7:00:00과 같은 시간이 아닙니다. 시간을 최적화해 보고자 하시면 아래와 같이 시간을 특별한 단위로 변경해서 사용하셔야 합니다. TimeToMinutes은 시간을 0시이후 경과된 분으로 리턴해 주는 함수입니다. 7시면 420분으로 리턴됩니다. 최적화에서 36단위로 최적화 하시면 됩니다. input : ntime(420),Xtime(0),매수포인트(10),손절포인트(30),익절포인트(30); var : Tcond(False),entry(0); var : T1(0),TM(0); TM = TimeToMinutes(stime); T1 = TimeToMinutes(ntime); if (sdate != sdate[1] and stime >= Xtime) or (sdate == sdate[1] and stime >= Xtime and stime[1] < Xtime) Then { Tcond = false; } if Bdate != Bdate[1] Then { Tcond = False; entry = 0; if Xtime < ntime Then SetStopEndofday(0); } if (sdate != sdate[1] and TM >= T1) or (sdate == sdate[1] and TM >= T1 and TM[1] < T1) Then { Tcond = true; var1 = O; } if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or (MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then entry = entry+1; if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then Buy("b",AtLimit,var1-매수포인트); 즐거운 하루되세요 > 코퍼 님이 쓴 글입니다. > 제목 : 다시 확인 요청드립니다 > 안녕하세요~~ 전에 만들어주신 식중 일부입니다 (시초가가 매수포인트(변수) 만큼 하락시 매수하라) input : ntime(70000),Xtime(0),매수포인트(10),손절포인트(30),익절포인트(30); var : Tcond(False),entry(0); if (sdate != sdate[1] and stime >= Xtime) or (sdate == sdate[1] and stime >= Xtime and stime[1] < Xtime) Then { Tcond = false; } if Bdate != Bdate[1] Then { Tcond = False; entry = 0; if Xtime < ntime Then SetStopEndofday(0); } if (sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime) Then { Tcond = true; var1 = O; } if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or (MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then entry = entry+1; if Tcond == true and MarketPosition == 0 and entry < 1 AND L > var1-매수포인트 Then Buy("b",AtLimit,var1-매수포인트); 1. 내부(겸 내장)변수 var1은 초기값이 0 인데 내부변수 선언은 왜 없는지요? 2. 상기식에서-messagelog("%.f",var1)-하면 var1 값이 초기값 0으로 나오고 실행은 시초가로 작동하는것 같은데 어떻게 할당이 된건지요? 4. 어차피 시초가 대비 무조건 진입인데 상기식중 -AND L > var1-매수포인트- 가 왜 필요한지요? 5. -L < var1-매수포인트- 로 변경하면 어케 다른지요? 6. ntime을 070000~090000 (증가단위 3600 최적화) 돌리면 77200 이나 88000 같은 값이 나오는데 몇시로 봐야하는지요?
프로필 이미지
코퍼
2021-01-28
1014
글번호 145895
지표