커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8133
글번호 230811
답변완료
문의드립니다
if date != date[1] Then{
var1 = 0;
var2 = 0;
}
If (C > O) or (C == O and C >= C[1]) Then
var1 = var1+(V-V[1]);
If !(C > O) or (C == O and C >= C[1]) Then
var2 = var2+(V-V[1]);
Plot1(var1, "상승거래량");
Plot2(var2, "하락거래량"); 당일상승거래량합계,하락거래량합계 누적합계수치를 지표상에(오른쪽에)나타나게 하고싶습니다 우리나라시간으로오전9시부터 다음날오전5시까지 적용 부탁드립니다 ~~미리감사드립니다
2016-03-25
186
글번호 96570
답변완료
문의드립니다
안녕하세요
두가지입니다.
1.아래지표식(RENKO_MACD)에서 MACD 대신에
RENKO_RSI
지표식을 부탁드립니다.
input:renkoSize(0.5),p1(12),p2(26),p3(9);
input : 마지막봉시간(065900);
var:j(0),k(0),renkoCnt(0),gubun(0),filename("renko2.txt"),printOK(False),
sum(0),ema1_OK(false),ema2_OK(false),sig_OK(False),idx(0);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),ma1[50](0),ma2[50](0),
ema1[50](0),ema2[50](0),macdVal[50](0),macdSig[50](0);
if Bdate != Bdate[1] Then
idx = 0;
idx = idx+1;
If idx == 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];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[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];
//지수이평을 계산할 수 있을 만큼 렌코가 만들어진 이후 계산 시작
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
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];
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
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];
if ema1_OK then ema1[j] = ema1[j-renkoCnt];
if ema2_OK then ema2[j] = ema2[j-renkoCnt];
if ema2_OK then macdVal[j] = macdVal[j-renkoCnt];
if sig_OK then macdSig[j] = macdSig[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];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
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];
ema1[j] = ema1[j-renkoCnt];
ema2[j] = ema2[j-renkoCnt];
macdVal[j] = macdVal[j-renkoCnt];
macdSig[j] = macdSig[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];
if ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
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 stime >= 마지막봉시간 and stime[1] < 마지막봉시간 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];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
}
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0; //마지막 1봉만 출력
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 ema1_OK == False and CC[p1] > 0 then { //지수이평 계산 가능할 때까지 대기
sum = 0;
for j = 0 to p1 - 1 {
sum = sum + CC[j];
}
ema1[0] = sum/p1; //처음 값은 단순이평값으로
ema1_OK = True; //다음 봉부터 지수이평 계산되도록 설정
}
if ema2_OK == False and CC[p2] > 0 then {
sum = 0;
for j = 0 to p2 - 1 {
sum = sum + CC[j];
}
ema2[0] = sum/p2;
ema2_OK = True;
}
if sig_OK == False and CC[P2+p3] > 0 then {
sum = 0;
for j = 0 to p3 - 1 {
sum = sum + macdVal[j];
}
macdSig[0] = sum/p3;
sig_OK = True;
}
Plot1(macdVal[0],"macd");
Plot2(macdSig[0],"macd signal");
PlotBaseLine1(0);
2.아래지표식 Range Bar MACD 에서 MACD 대신에
Range Bar Stochastics(단순이평적용) 부탁드립니다.
Input:tick(20);
Input:shortPeriod(12), longPeriod(26), Period(9);
Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0);
Var:epS(0),epL(0),ep(0),JISU1(0),JISU2(0),SigV(0),PreJISU1(0),preJISU2(0),PreSigV(0);
// macdV(0),macdS(0),macdO(0);
Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0);
Array:MacdVal[1000](0),MacdSig[1000](0),MacdOsc[1000](0);
#==============================================================================#
# Range Bar Chart 계산
#==============================================================================#
If Index == 0 Then
{
tickVal = tick * PriceScale;
oneTick = PriceScale;
OO[0] = O;
HH[0] = O;
LL[0] = O;
CC[0] = O;
}
count = 0;
val[0] = O;
val[3] = C;
If O > C Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If O < C Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] > O Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] < O Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == 1 Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == -1 Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
For k = 0 To 3
{
If HH[0] > 0 && HH[0] < val[k] Then
{
While val[k] - LL[0] > tickVal
{
HH[0] = LL[0] + tickVal;
CC[0] = HH[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = HH[1] + oneTick;
LL[0] = OO[0];
}
If val[k] - LL[0] <= tickVal Then
{
HH[0] = val[k];
CC[0] = val[k];
}
}
Else If LL[0] > val[k] Then
{
While HH[0] - val[k] > tickVal
{
LL[0] = HH[0] - tickVal;
CC[0] = LL[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = LL[1] - oneTick;
HH[0] = OO[0];
}
If HH[0] - val[k] <= tickVal Then
{
LL[0] = val[k];
CC[0] = val[k];
}
}
Else
{
CC[0] = val[k];
}
}
#==============================================================================#
# Range Bar Chart MACD 값 계산
#==============================================================================#
If Index == 0 Then
{
epS = 2/(shortPeriod+1);
epL = 2/(longPeriod+1);
ep = 2/(Period+1);
}
If count > 0 Then
{
For n = count DownTo 1
{
For j = 998 DownTo 1
{
MacdVal[j+1] = MacdVal[j];
MacdSig[j+1] = MacdSig[j];
MacdOsc[j+1] = MacdOsc[j];
}
PreJISU1 = JISU1;
PreJISU2 = JISU2;
PreSigV = SigV;
JISU1 = CC[n] * epS + PreJISU1 * (1-epS);
JISU2 = CC[n] * epL + PreJISU2 * (1-epL);
MacdVal[1] = JISU1 - JISU2;
SigV = MacdVal[1] * ep + PreSigV * (1-ep);
MacdSig[1] = SigV;
MacdOsc[1] = MacdVal[1] - MacdSig[1];
}
}
Else
{
Value1 = CC[0] * epS + PreJISU1 * (1-epS);
Value2 = CC[0] * epL + PreJISU2 * (1-epL);
MacdVal[0] = Value1 - Value2;
Value3 = MacdVal[0] * ep + PreSigV * (1-ep);
MacdSig[0] = Value3;
MacdOsc[0] = MacdVal[0] - MacdSig[0];
}
If DayIndex == 0 Then remain = 0;
remain = remain + count;
n = remain;
Plot1(MacdVal[n]);
Plot2(MacdSig[n]);
If remain > 0 Then remain = remain - 1;
PlotBaseLine1(0, "기준선1");
2016-03-25
254
글번호 96569
답변완료
안녕하세요
제가 잘 몰라서요
1번질문:
var1 = ma(c,3);
var2 = ma(C,5);
var3 = ma(c,20);
if MarketPosition <= 0 and crossup(var2,var3) Then
buy("매수");
if MarketPosition == 0 and MarketPosition(1) == 1 and CrossDown(var1,var2) and var1 > var3 Then
buy("재매수");
if MarketPosition <= 0 and CrossDown(var2,var3) Then
sell("매도");
if MarketPosition == 0 and MarketPosition(1) == 1 and CrossUp(var1,var2) and var1 < var3 Then
sell("재매도");
SetStopLoss(PriceScale*5,PointStop);
SetStopProfittarget(PriceScale*5,PointStop);
앞전에 부탁해서 만들어주셨는데요 익절하고 손절 없애주시면 감사하겠습니다
2번질문
Input: SPeriod(12), LPeriod(29);
Var: ma1(0), ma2(0), MACDv(0);
ma1 = (dayOpen()-ema(C, SPeriod))+dayOpen();
ma2 = (dayOpen()-ema(C, LPeriod))+dayOpen();
MACDv = ma1-ma2;
plot1(MACDV); //역
plot2(MACD(SPeriod,LPeriod));//정
차트상 지표속성에서 변수값이 안나오게 해주시면 감사하겠습니다
3번질문
Input: SPeriod(12), LPeriod(29);
Var: ma1(0), ma2(0), MACDv(0);
ma1 = (dayOpen()-ema(C, SPeriod))+dayOpen();
ma2 = (dayOpen()-ema(C, LPeriod))+dayOpen();
MACDv = ma1-ma2;
plot1(MACDV); //역
plot2(MACD(SPeriod,LPeriod));//정
매수 매도 신호로 바꿔주시면 감사하겠습니다
1번부터-3번까지 질문해놓았습니다 잘 몰라서 이렇게 부탁드립니다 수고하세요
2016-03-25
200
글번호 96568
답변완료
수식문의
수고하십니다.
첨부파일처럼
양이나 음오실 신규 발생시 해당하는 봉의 시가~종가까지 색깔을 입혀서
현재까지 나타나게 할수있나요?
3개까지 입니다. 즉, 다음에 새로 나타나면 그전전것은 사라집니다.
감사합니다.
2016-03-24
187
글번호 96567
회원 님에 의해서 삭제되었습니다.
2016-03-25
31
글번호 96566
답변완료
문위드립니다
당일에 고저가가 자동으로 표시돼게해주세요
홍콩항생의경우 시가가 저녁18시에 시작돼서 피보나치가 그려지는데요...
요것을 시가가 아침장시작시간 10시 15분분터 시가시작으로.... 24시 까지를 하루로보고
그려지게할수있나요.
그냥 피보나치하니 시가가 18시부터 시작하는것을---아침 10시15분부터 시작 하는걸루요
감사합니다
2016-03-24
246
글번호 96565
답변완료
부탁드려요
아래의 식이 장중에만 그려지도록 부탁드립니다.
주간장(9시~15시15분),야간장 (18시~다음날 5시)에만 그려지고
지나간 장에는 표시가 안되도록 말입니다,,,,
input : P1(250),P2(251),P3(250),P4(251),P5(250),P6(251),P7(250),P8(251),P9(250),P10(251),P11(250);
plot1(p1);
plot2(p2);
plot3(p3);
plot4(p4);
plot5(p5);
plot6(p6);
plot7(p7);
plot8(p8);
plot9(p9);
plot10(p10);
plot11(p11);
2016-03-24
204
글번호 96564
답변완료
지표관련 수식질문 입니다.
안녕하세요.
예스트레이더를 사용하다보니 변동성지표중 RVI와 RVI의 회귀곡선지표인 Intertia(관성지수)의
지표의 수식이 궁금해 질문드려봅니다.
적용할떄는 예스랭귀지에서 등록하면 되나요?
그리고 마지막으로 실례가 되지않는다면 키움증권의 영웅문4의 수식으로 위의 보조지표인 Intertia의 수식도 가르쳐 주실수 있을까요?
2016-03-24
289
글번호 96563
답변완료
수식문의
주가가 20일선돌파 매수 20일선이 30일선돌파하면 추가매수또 20선이 60돌파하면 추가매수 그리고 매도식도 표현해주세요
2016-03-24
214
글번호 96562