커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1691
글번호 230811
답변완료
문의드립니다
분봉 차트 상에서
종목의 일일 등락률(전일 종가와 오늘의 종가로 계산되는)의
평균과 표준편차를 표현하고자 합니다.
ma(일일 등락률,20);
std(일일 등락률,20);
말하자면 이렇게 수식을 이용하고자 할때 분봉차트 상에서 일일등락률에 해당되는 부분을 어떻게 표현할지 문의 드립니다.
항상 감사드립니다.
2022-01-31
1346
글번호 155943
답변완료
옵션 매도 진입 및 청산 함수를 알려주세요
옵션 풋매도 가격이
만약 0.35이면
진입하는 함수를
어떻게 구현 해야 되나요?
2022-01-31
1365
글번호 155942
답변완료
수식변경
늘 감사합니다.
아래의 수식은 data2만 있는데 이 수식에
data3부터 data11 까지 수식을 추가해 주세요.
즉, 3번부터 11번 까지 추가입니다.
지금도 잘 쓰고 있습니다.
거듭 감사합니다.
var : month(0,data2),nday(0,data2),week(0,data2),X(false,data2),T(0,data2);
var : D1(0,data2),L1(0,data2),MH(0,data2),ML(0,data2);
month = data2(int(date/100)-int(date/10000)*100);
nday = data2(date - int(date/100)*100);
week = data2(DayOfWeek(date));
if nday >= 8 and nday <= 14 and week == 4 then
X = true;
Else
X = false;
if data2(bdate != bdate[1] and X == false and X[1] == true) Then
{
D1 = data2(sdate);
MH = data2(H);
ML = data2(L);
}
if D1 > 0 then
{
if data2(Sdate == D1) Then
L1 = data2(lowD(0));
if data2(H) > MH Then
MH = data2(H);
if data2(L) < ML Then
ML = data2(L);
plot1(L1);
plot2(MH, "2고");
plot3(ML, "2저");
}
2022-01-31
1115
글번호 155941
답변완료
선부탁 드립니다.
* 항상 많은 도움에 고맙습니다.
* 아래 기준 수평선 요청 드립니다.
1. 당일 시작봉을 기준 으로 시작 하여
2. 1 ~ 100봉 까지 최고가와 최저가 수평선
101 ~ 200봉 까지 최고가 수평선 한줄 최저가 수평선 한줄
201 ~ 300봉 까지 최고가 수평선 한줄 최저가 수평선 한줄
계속 100봉단위로 수평선 표시
* 고맙습니다. 수고하십시요
2022-01-31
994
글번호 155940
답변완료
나스닥100 선물 60분봉으로 아래와 같이 했는데 수식이 반영이 안되서요
나스닥100 선물 60분봉으로 아래와 같이 했는데 수식이 반영이 안되서요
무슨 오류인지 알려주시면 감사하겠습니다.
# 100분봉이내에서 최고점에서 -5% 이하로 떨어질때 조건이 반영되려고 하는것인데
Y를 변수로 하였는데 모든 변수가 같은 값이 나옴니다.( 결국 해당 조건이 반영이 안되는 것으로 결과가 나옴니다.)
무슨 오류가 있는건가요?
input : MFI기간(25),MFI값(20),추가매수하락퍼센트(3),급락매수하락퍼센트(7);
input : MFI청산기간(8),MFI청산값(82);
input : 청산요일(5);
input : 추가매수횟수(4),X(100),Y(-5); #X는 적용봉수 Y는 적용봉수 내에 최고점에서 하락폭(%)
var : MoneyFlow(0),MoneyFlow1(0);
MoneyFlow = MFI(MFI기간);
MoneyFlow1 = MFI(MFI청산기간);
if MarketPosition == 0 and MoneyFlow <= MFI값 and C <= Highest(H,X)+(1+Y/100) Then
Buy("b",OnClose,DEf,1);
if MarketPosition == 1 and MaxEntries < 추가매수횟수 Then
Buy("-3% 하락추가매수",AtLimit,LatestEntryPrice(0)*(1-추가매수하락퍼센트/100));
if MarketPosition == 1 Then
Buy("-7%하락 추가매수",AtLimit,LatestEntryPrice(0)*(1-급락매수하락퍼센트/100));
if MarketPosition == 1 and MoneyFlow1 > MFI청산값 Then
ExitLong("MFI청산",atlimit,AvgEntryPrice*1.003);
2022-01-31
1257
글번호 155939
답변완료
변동성 지수 vkospi 문의
변동성 지수 vkospi 를 보려고 하는데 어디서 보나요?
(예스트레이더를 사용하고 있습니다.)
시스템식에서 어떻게 사용해야 되나요?
2022-01-30
1198
글번호 155938
답변완료
함수문의 드립니다
안녕하세요~~
설날은 잘 쉬셨는지요~
1. cme 나스닥자료를 datamanager로 입력시 미국시간으로 시뮬레이션해도 섬머타임을 고려해야 하는지요?
2. highest와 lowest의 봉시간을 알수 있나요?
3. 아래 식중 if D1 > 0 then 의 용도를 알려주세요.
감사합니다~
//썸머타임체크
if bdate != bdate[1] Then
{
Year = Floor(sdate/10000);
V1 = (10000 * Year) + (100 * 3) + 1;
V2 = 15 - dayofweek(v1); // 3월 두번째 일요일 날짜
v3 = (10000 * Year) + (100 * 11) + 1;
v4 = 8 - dayofweek(v3); // 11월 첫번째 일요일 날짜
Summer = bdate > (10000 * Year) + (100 * 3) + v2 And bdate < (10000 * Year) + (100 * 11) + v4;
if summer == true Then
{
ST = 223500;
ET = 050000;
}
Else
{
ST = 233500;
ET = 060000;
}
S1 = TimeToMinutes(stime); #섬머타임시 07시=420, 평시 8시=480 입력
D1 = Sdate;//0시직후 변경된 첫봉의 날자를 입력, 다음영업일 변경 직전봉까지 유지
}
}
if D1 > 0 then
{
if sdate == D1 Then //시작시간 23시35분을 0시 기준으로 변경
TM = TimeToMinutes(stime)-S1; //해당시간(23시35분~24)-1415
Else
TM = TimeToMinutes(stime)+1440-S1; //해당시간(0~07시)+1445(24시간)-1415
if (sdate != sdate[1] and stime >= ST) or
(sdate == sdate[1] and stime >= ST and stime[1] < ST) Then
{
Tcond = true;
T1 = TM;
}
#진입청산식
2022-02-01
1493
글번호 155937
답변완료
문의 드립니다.~~~~
새해 복 많이 받으세요~
해외선물 모든 종목 모든 시간대에서 또는 국선 모든 시간대에서
1 매수진입 : 1분봉(변수처리) 3연속(변수처리) 양봉이고 3개 양봉의 첫 양봉 저점과 3번째
양봉 고점의 틱합이 50틱(변수처리)일 때 매수
2 매도진입 : 1분봉(변수처리)3연속(변수처리) 음봉이고 3개 음봉의 첫 음봉 고점과 3번째
음봉 저점의 틱합이 50틱(변수처리)일 때 매도
위의 진입과 청산이 영업일 내내 반복되는 수식을 부탁 드립니다
수고하세요~
2022-01-31
1220
글번호 155936
답변완료
문의 드립니다.
삼성전자 등 종목들 30분 차트, 일 차트에도 사이즈를 늘려서 해보면, 이 지표가 안 나옵니다.
나오는 경우라도, 지수 차트처럼 나오는게 아니라, 알 수 없는 선으로 나옵니다.
다시 한번 검토 부탁드립니다.
감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의 드립니다.
>
안녕하세요
예스스탁입니다.
renkoSize를 조절하셔야 합니다.
현재 renkoSize의 기본값이 0.5로 선물에서 0.5포인트 변경을 기준으로 되어 있습니다.
지정한 값이상의 가격변화를 기준으로 하므로
종목에 맞게 해당값을 지정하셔야 합니다.
즐거운 명절 되시길 바랍니다.
> alltoone 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> 아래 렌코차트는 선물에서는 제대로 작동하는데, 일반 주식에서는 종가선 비슷하게 나옵니다.
그 이유가 뭘까요...
선물처럼 주식차트에서도 나오게 할 방법은 없을까요?
답변 감사합니다.
input:renkoSize(0.5),length(10),NumATRs(1.5);
var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0),filename("renko3.txt"),printOK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),
TR[50](0), //True Range
upperLine[50](0), //상단채널
lowerLine[50](0), //하단채널
maV[50](0); //이평선
If index == 0 or bdate != bdate[1] Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1; //하락 방향
CC[0] = OO[0] - renkoSize; //음봉
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조
//macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리
If sum > 0 Then {
sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌
trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산
maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산
atrV = trSum / length; //ATR 계산식 참조
upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산
lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산
}
j = 0;
if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1; //상승 방향
CC[0] = OO[0] + renkoSize; //양봉
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
If sum > 0 Then { //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나
sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0;
if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If NextBarSdate > sdate Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
If sum > 0 Then {
sum = sum + CC[0] - CC[length];
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0; //채널 값을 새로이 계산
if printOK then print(filename,"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if sum == 0 and CC[length] > 0 then {
for j = 0 to length - 1 {
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO",iff(OO[0] > CC[0],BLACK,MAGENTA)); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 100 then plot3(upperLine[0],"UpperBand");
if lowerLine[0] > 100 then plot4(lowerLine[0],"LowerBand");
if maV[0] > 100 then plot5(maV[0],"MidLine");
2022-01-30
1083
글번호 155935