커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8142
글번호 230811
답변완료
37372 재질문
함수 화일 저장하고 수식 만들어서 검증하니 "외부 입력값을 넣으세요" 라는 오류 메세지가 뜹니다.
2014-07-30
162
글번호 77267
답변완료
문의
시스템식 부탁합니다.
일봉(시뮬레이션용)
매수: 오늘의 종가 > 어제의 종가 , 내일의 시작가에 매수
매도: 매수한평균값이 어제의 종가보다 +1% 이상일때 오늘 시작가에 매도청산
2014-07-30
174
글번호 77265
좋은하루7 님에 의해서 삭제되었습니다.
2014-07-30
11
글번호 77259
답변완료
알람작동
아래와 같이 피봇라인에서 소리를 나게 할려고 하는데, 이상하게 소리가 안나는데 뭔가 잘못되었나요?
Var: Value1(0),Value2(0),Value3(0),Value4(0),Value5(0);
Value1 = (DayHigh(1) + DayClose(1) + DayLow(1))/3; //중심선
Value2 = Value1+DayHigh(1)-DayLow(1); //2차저항
Value3 = 2 * Value1 - DayLow(1); //1차저항
Value4 = 2 * Value1 - DayHigh(1); //1차지지
Value5 = Value1-DayHigh(1)+DayLow(1); //2차지지
If Close == Value1 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value2 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value3 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value4 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value5 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
2014-07-30
173
글번호 77258
답변완료
감사드립니다
모지표를 보고 질의 올립니다...
Input :short(5),Long(20);
Var : T(0),mav1(0),mav2(0),HH(0),LL(0),PreHH(0),PreLL(0),VV(0);
mav1 = ma(c,short);
mav2 = ma(c,long);
if crossup(mav1,mav2) Then{
plot1(L,"ZigZag",BLUE);
T = 1;
VV = (mav1+mav2)/2;
HH = H;
LL = L;
PreHH = HH[1];
PreLL = LL[1];
}
if CrossDown(mav1,mav2) Then{
plot1(H,"ZigZag",RED);
T = -1;
VV = (mav1+mav2)/2;
HH = H;
LL = L;
PreHH = HH[1];
PreLL = LL[1];
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
if PreHH > 0 and PreLL > 0 Then{
if T == 1 Then{
plot2(VV+(PreHH-PreLL)*0,"하락0%");
plot3(VV+(PreHH-PreLL)*0.236,"하락23.6%");
plot4(VV+(PreHH-PreLL)*0.382,"하락38.2%");
plot5(VV+(PreHH-PreLL)*0.500,"하락50%");
plot6(VV+(PreHH-PreLL)*0.618,"하락61.8%");
plot7(VV+(PreHH-PreLL)*0.764,"하락76.4%");
plot8(VV+(PreHH-PreLL)*1.000,"하락100%");
}
if T == -1 Then{
plot2(VV-(PreHH-PreLL)*0,"하락0%");
plot3(VV-(PreHH-PreLL)*0.236,"하락23.6%");
plot4(VV-(PreHH-PreLL)*0.382,"하락38.2%");
plot5(VV-(PreHH-PreLL)*0.500,"하락50%");
plot6(VV-(PreHH-PreLL)*0.618,"하락61.8%");
plot7(VV-(PreHH-PreLL)*0.764,"하락76.4%");
plot8(VV-(PreHH-PreLL)*1.000,"하락100%");
}
}
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 DayIndex == 0 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 Time >= 151500 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"); //지표속성 -> 차트표시 -> 채우기 -> 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");
위의 지표에서
하락0%보다 하락100%가 위에 있고 CC[0]>OO[0]이면
a가 하락0%보다크고 하락100%보다작을때
현재가가 a를 크로스없하면 매수,
하락0%보다 하락100%가 아래에 있고 CC[0]<OO[0]이면
b가 하락0%보다 작고 하락100%보다 클때
현재가가 b를 크로스다운하면 매도
하락100%가 하락0%를 크로스다운하고 현재가가 하락0%보다 작으면 매수청산
하락100%가 하락0%를 크로스업하고 현재가가 하락0%보다 크면 매도청산
만들때 같은내용의 지표가 있다고 수정을 요해서 어려워서 부탁드립니다
부탁드립니다
2014-07-30
242
글번호 77257
회원 님에 의해서 삭제되었습니다.
2014-07-30
7
글번호 77256
답변완료
수식문의
주간매매횟수와 월간매매횟수를 구하는 식을 부탁드립니다.
전주, 전전주 도 확인할 수 있게 어레이로 부탁드립니다.
2014-07-30
183
글번호 77255
옵티머스 님에 의해서 삭제되었습니다.
2014-07-30
0
글번호 77254
답변완료
거래 진입 시간에 대한 수식
수고하십니다
어제 거래진입시간에 대한 수식을 가르켜주셔서 예스랭귀지에 구동시키니
아래의 수식이 아니라
stime >= 070000 and stime < 160000
stime >= 070000 and stime < 160000; 세미콤아가 붙는 것이 였습니다...
그런데 이것을 진입청산식에 붙여 쓰라 했는데요..
첨부한 그림 부분에 넣고 돌려 보니 에러는 안뜨는데 잘 도는건지 의심이 듭니다..
이곳이 맞는지 의견 좀 부탁드립니다.
2014-07-30
195
글번호 77253