커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4351
글번호 230811
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
장 시작 시간과 관련해서 헷갈리는 게 많아 질문드립니다. 검색을 여럿 해봤지만 이해가 잘 안되네요.
항셍지수를 예로 들면
홍콩시간으로
9:15-12:00 & 13:00-16:30 & 17:15-23:45
이 거래시간입니다.
홍콩과 서울은 시차가 1시간이라고 하는데요.
1. 장개장시간문제
그럼 장 개장시간은 시장시간 9시15분인가요? 답변글들을 보면 설정에서 차트 시간을 변경할 수 있는 것으로 나옵니다. 그럼 시장 시간으로 9시15분으로 설정하거나 홍콩시간으로 9시 15분으로 설정하는 거나 한국시간으로 10시 15분으로 설정하는 것은 같다고 보면 되는 건가요?
수식으로 작성 할 때 stime == 91500(시장시간) , stime == 101500(한국시간)은 각각 같나요?
2. 선물에서 현물 개장시작봉 셋업 문제
개장시간이 같은 국내주간선물은 그냥 bdate != bdate[1] then 이렇게 하면 첫 개장봉 셋업이 되는데요.
그럼 현물지수가 있는 해선은 어떤식으로 해야 현물개장 첫봉시간을 선물에서 지정할 수 있나요? 특히 헷갈리는 게 S&P인데요. 여기는 현물이 서머타임도 적용되는데 첫봉을 셋업으로 지정 하려면 날짜를 지정해서 나누어 줘야 하는 건가요? 첫봉 종가가 시가+10틱 선 위에 있을 때 종가를 셋업봉으로 저장하는 예로 설명 부탁드립니다.
3. setstopendofday문제.
전에 만들어주신 수식인데요. 그럼 stime == 이건 시장시간(차트에서 시장시간으로 설정해놨을
때의 시간)으로 장종료시간인가요?
if stime == 053000 or (stime > 053000 and stime[1] < 053000) Then{
exitlong("bx");
ExitShort("sx");
}
2018-02-12
177
글번호 116519
답변완료
수정부탁드립니다=================
// 첨부파일의 아래 그림 과 같이 당일 처음 교차라인만 추가로 수평으로 표시하고 싶슴니다 수정부탁드립니다 항상 감사합니다
//=======================================================================
Input:델타조정(0),downn(0.98),LENGTH1(50),LENGTH2(10),비교봉(5),비교봉1(5),양합상승(1.008),양합하락(0.985),표시2(0);
Input:소리2(0),소리22(0),표시위치(0.7),최고저기준(30),교차간격(0);
var : sum2(0,data1),sum4(0,data1),sum6(0,data1),TEMA1atm2(0),TEMA1atm4(0),TEMA1atm6(0),ss(0);
var : HH(0,data2),LL(0,data2),hl(0,data2),ii(0,data2);;
var : crup(0),crdn(0),sum22(0),ccurnt(0),cgap(0),callgap(0),putgap(0),plemeumgap(0),chanline(0);
var :linegi(0),data2yc(0),data3yc(0),hapyc(0),hapycrt(0),TEMA1hapycrt(0),crup96(0);
sum2 = (data2(c)+data3(c));
sum22 =(data2(c)+data3(c))/2*250000;
if data2(bdate != bdate[1]) Then{
ii = 0;
HH = sum22;
LL = sum22;
}
else
{
ii = ii+1;
if ii < 최고저기준 Then
{
if sum22 > HH Then
HH = sum22;
if sum22 < LL Then
LL = sum22;
}
else{
HH = data2(highest(sum22,최고저기준));
LL = data2(lowest(sum22,최고저기준));
hl = (hh + ll)/2;
}
}
//plot1(sum2,"양합");
PLOT3(sum22,"수정양합");
plot21(HH,"Data2 H" );
plot22(LL,"Data2 L");
plot23(hL,"hl",iff((hL )>(hL[1])+00,RED,iff((hL )<(hL[1] )-00,BLUE,BLACK)));
if hl > hl[1] then {
PLOT24(hl,"상승");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩up01.wav");
}
if hl < hl[1] then {
PLOT25(hl,"하락");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩dow.wav");
}
TEMA1atm2 = (3 * Ema(sum22,LENGTH1)) - (3 * Ema(Ema(sum22,LENGTH1),LENGTH1)) +
(Ema(Ema(Ema(sum22,LENGTH1),LENGTH1),LENGTH1));
plot5(TEMA1atm2,"태마2",iff((TEMA1atm2 )>(TEMA1atm2[1])+00,RED,iff((TEMA1atm2 )<(TEMA1atm2[1] )-00,BLUE,BLACK)));
/*
if 표시2 == 1 then
{
if sum22[비교봉]*양합상승< sum22 Then
{
PLOT11((sum22 ),"매수2");
if 소리2 == 1 then {
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩alert.wav");
}
}
if sum22[비교봉1]*양합하락> sum22 Then {
PLOT12((sum22 ),"매도2");
if 소리22 == 1 then {
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩reject.wav");
}
}
if sum22[비교봉1]*양합하락 == sum22 Then {
PLOT13((sum22 ),"매3");
}
}
*/
//plot6(Data2(c),"콜");
//plot7(Data3(c),"풋");
if ( Data2(c) > Data3(c)) and ( Data2(c) - Data3(c)) < 교차간격 Then{
// if CrossUp ( Data2(c),Data3(c)) Then{
// PLOT8(Data2(c),"상승교차");
crup = (Data2(c)+Data3(c))/2*250000;
ccurnt = c;
// PlaySound("C:₩Users₩Administrator₩Desktop₩효과₩Bandi.wav");
}
if ( Data3(c) > Data2(c)) and ( Data3(c) - Data2(c)) < 교차간격 Then{
// if CrossDown ( Data2(c) ,Data3(c)) Then{
// PLOT9(Data2(c),"하락교차");
crup = (Data2(c)+Data3(c))/2*250000;
ccurnt = c;
// PlaySound("C:₩Users₩Administrator₩Desktop₩효과₩click08.wav");
}
PLOT31(crup,"교차라인");
/*
cgap = (c - ccurnt)*250000 ;
plot41(cgap,"선물손익",iff((cgap )>00,RED,iff((cgap )<00,BLUE,BLACK)));
callgap = (Data2(c) - crup) * 250000;
plot42(callgap,"콜손익",iff((callgap )>00,RED,iff((callgap )<00,BLUE,BLACK)));
putgap = (Data3(c) - crup) * 250000;
plot43(putgap,"풋손익",iff((putgap )>00,RED,iff((putgap )<00,BLUE,BLACK)));
plemeumgap = (sum22 - crup)/sum22*100;
plot44(plemeumgap,"합손익",iff((plemeumgap )>00,RED,iff((plemeumgap )<00,BLUE,BLACK)));
*/
/* plotbaseline1(0);
plot45(linegi,"라인지정");
if sum22 < linegi * (100-downn)/100 then{
PLOT46(sum22 ,"양수찬스");
// PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩reject.wav");
}
chanline = linegi * (100-downn)/100;
PLOT47(chanline ,"찬스라인");
data2yc = data2(closeD(1));
data3yc = data3(closeD(1));
PLOT48(data2yc ,"전데이타2");
PLOT49(data3yc ,"전데이타3");
hapyc = ( data2yc + data3yc ) / 2;
linegi = hapyc;
PLOT50(hapyc ,"전일양합평균");
hapycrt = (sum22 - crup) * 500000;
PLOT51(hapycrt ,"전일양합대비",iff((hapycrt )>00,BLACK,iff((hapycrt )<00,BLACK,BLACK)));
*/
if ( Data2(c) > Data3(c)) and ( Data2(c) - Data3(c)) < 교차간격 Then{
PLOT52(crup,"상승교차");
// PLOT54(hapycrt,"상승교차가격");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩up01.wav");
}
if ( Data3(c) > Data2(c)) and ( Data3(c) - Data2(c)) < 교차간격 Then{
PLOT53(crup,"하락교차");
// PLOT55(hapycrt,"하락교차가격");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩dn2.wav");
}
/*
TEMA1hapycrt = (3 * Ema(hapycrt,LENGTH2)) - (3 * Ema(Ema(hapycrt,LENGTH2),LENGTH2)) +
(Ema(Ema(Ema(hapycrt,LENGTH2),LENGTH2),LENGTH2));
PLOT56(TEMA1hapycrt,"양합대비테마");
if TEMA1hapycrt > TEMA1hapycrt[1] then {
PLOT57(TEMA1hapycrt,"상승");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩up01.wav");
}
if TEMA1hapycrt < TEMA1hapycrt[1] then {
PLOT58(TEMA1hapycrt,"하락");
PlaySound("C:₩Users₩Administrator₩Desktop₩sound₩dow.wav");
}
*/
if sTime == 090000 Then {
plot99( crup,"장시작" );
}
crup96 = crup * 델타조정;
plot98( crup96,"델타조정" );
2018-02-11
357
글번호 116518
답변완료
지표식
선물장중 매수매도 차이를 누적으로 순매수인지 순매도인지 수치를 틱이나분으로 차트로 구현 부탁드립니다
2018-02-10
171
글번호 116517
이공주7 님에 의해서 삭제되었습니다.
2018-02-10
1
글번호 116516
답변완료
매수매도수식부탁드립니다
안녕하세요 아래 고저점파동식으로 매수매도수식부탁드립니다
1. 매수신호
그림1에서 1번 출발 후 2번저점 형성 후 1번의 전 고점보다 높은 3번고점 형성 후 다음 저점에서 매수신호 발생
2.매도신호
그림2에서 1번 출발 후 2번고점 형성 후 1번의 전 저점보다 낮은 3번저점 형성 후 다음 고점에서 매도신호 발생
3. 그리고 그림3에서처럼 종가가 전고점(A점)돌파할때 수식이 if crossup(C,최종고가[2]) 가 맞는지 조언부탁드립니다
Input:length(4),종가사용여부(0),파동선두께(5),수치표시(1);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),tl2(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL2 = TL_New(고[2,3],고[2,4],고[2,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,red);
TL_SetSize(TL2,파동선두께);
TL_SetColor(TL2,red);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
TL_SetEnd(TL2,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL2 = TL_New(저[2,3],저[2,4],저[2,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 0);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,blue);
TL_SetSize(TL2,파동선두께);
TL_SetColor(TL2,blue);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
TL_SetEnd(TL2,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
감사합니다
2018-02-12
279
글번호 116515
렉쳐 님에 의해서 삭제되었습니다.
2018-02-10
0
글번호 116514
답변완료
문의드립니다..(RSI)
매수진입 : RSI 지수가 70을 크로스업 통과할때 매수 진입
진입청산 : 청산1조건. RSI의 값이 70통과 후에 최고점을 만든후 하락하다가
재상승하고나서(이때 바로 앞 이전봉을 저점으로 인식) 직전 최고점을 돌파하면 다음으로 넘어가는데,
만약 직전 최고점을 돌파하지 못하고 하락해서 직전 저점을 하향 돌파하는 때에 청산.
또는 청산 2건. RSI지수가 70을 크로스다운 통과할 때 청산
매도 진입 : RSI 지수가 30을 크로스다운 통과할때 매도 진입
진입청산 : 청산1조건. RSI의 값이 30하향 통과후에 최저점을 만든후 상승하다가
재하락해서(이때 바로 앞 이전봉을 고점으로 기억) 직전 최저점을 돌파하면 다음으로 넘어가는데,
만약 직전 최저점을 돌파하지 못하고 상승해서 직전 고점을 상향 돌파하는 때에 청산.
또는 청산2조건. RSI지수가 30을 크로스업 통과할때 청산
2018-02-11
172
글번호 116513
답변완료
질문있습니다.
문법이 궁금해서 질문드립니다.
data2 나 data1 을 묶어줄때요
수식에서
예를들어 c , h, l ,o dayhigh 등의 문자가 포함되어있을때만 data1( 이나 data2 이런식으로 묶어주고
var : i(0,data2) ;
와같이 사용자가 지정하는 변수만 으로 수식이 이루어진경우는 data1 을 포함안해도되는지 궁금합니다
아니면 무조건 모든 수식마다 다 포함 해줘야하는지궁금합니다.
실제 저는
바이 명령어가
Buy("b_41",atlimit,p[3],ms7((msPrice+priceM)*mt_buyfactor,buycnt,p[3]));
와 같이 이루어져있는데요
여기서
p[ ] 은 data2 값으로 계산된 값이 저정되고(하지만 data2 의 c h l o 로 계산된 값 )
mt_buyfactor 은 data2 값으로 계산된 값 (data2의 c h l o 를 이용하여 계산해서 저장되는 값)
buycnt 은 data1 의 값이지만 (data1 의 c h l o 로 계산된 값이 아닌 매수 횟수에 의한 값)
입니다
이럴때는
Buy("b_41",atlimit,p[3],ms7((msPrice+priceM)*mt_buyfactor,buycnt,p[3])); 식을 어떻게
표현해줘야하나요 ?
data1 , data2 로 어떻게 묶어줘야하나요 아님 안묶어도되나요?
궁금합니다
감사합니다
2018-02-10
138
글번호 116512
답변완료
이평
맨끝에 있는 이평을
상승시 빨강 하락시 파랑으로 표현 부탁드립니다.
Input:n(60);
Var:j(0),고가기울기(0),고가절편(0),고가예상치(0),고가표준오차(0),
저가기울기(0),저가절편(0),저가예상치(0),저가표준오차(0),trend(0),
sumOH(0),sumOL(0),sumO(0),sumH(0),sumL(0),sumO²(0),sumH²(0),sumL²(0);
if bDate[1] < bDate then {
sumOH = 0; sumOL = 0; sumO = 0; sumH = 0; sumL = 0; sumO² = 0; sumH² = 0; sumL² = 0;
for j = 1 to n {
sumOH = sumOH + DayOpen(j)*DayHigh(j);
sumOL = sumOL + DayOpen(j)*DayLow(j);
sumO = sumO + DayOpen(j);
sumH = sumH + DayHigh(j);
sumL = sumL + DayLow(j);
sumO² = sumO² + DayOpen(j)^2;
sumH² = sumH² + DayHigh(j)^2;
sumL² = sumL² + DayLow(j)^2;
}
#==========================================================================#
# 선형회귀방정식 #
#==========================================================================#
# nΣxy - (Σx)(Σy) #
# 기울기 a = --------------------- #
# nΣx²- (Σx)² #
# #
# = (n*sum(xy) - sum(x)*sum(y)) / (n*sum(x^2) - sum(x)^2) #
# #
# (Σy)(Σx²)-(Σx)(Σxy) #
# 절편 b = --------------------------- #
# nΣx²- (Σx)² #
# #
# = (sum(y)*sum(x^2) - sum(x)*sum(xy)) / (n*sum(x^2) - sum(x)^2) #
#==========================================================================#
고가기울기 = (n*sumOH - sumO*sumH) / (n*sumO²- sumO^2);
고가절편 = (sumH*sumO² - sumO*sumOH) / (n*sumO² - sumO^2);
저가기울기 = (n*sumOL - sumO*sumL) / (n*sumO² - sumO^2);
저가절편 = (sumL*sumO² - sumO*sumOL) / (n*sumO² - sumO^2);
고가예상치 = 고가기울기 * DayOpen() + 고가절편;
저가예상치 = 저가기울기 * DayOpen() + 저가절편;
#==========================================================================#
# 표준오차 공식 #
#==========================================================================#
# _______________________________________________________ #
# / 1 [nΣxy - (Σx)(Σy)]² #
# Sxy = / [ ------- ][nΣy²- (Σy)²- ----------------------- ] #
# √ n(n-2) nΣx²- (Σx)² #
# #
# = sqrt((1/(n*(n-2))) * (n*sum(y^2) - sum(y)^2 - #
# ((n*sum(x*y) - sum(x)*sum(y))^2 / (n*sum(x^2) - sum(x)^2)))) #
#==========================================================================#
고가표준오차 = sqrt((1/(n*(n-2))) * (n*sumH² - sumH^2 -
((n*sumOH - sumO*sumH)^2 / (n*sumO² - sumO^2))));
저가표준오차 = sqrt((1/(n*(n-2))) * (n*sumL² - sumL^2 -
((n*sumOL - sumO*sumL)^2 / (n*sumO² - sumO^2))));
}
var1 = ema(h,20);
var2= ema(l,20);
var7=var1+(var1-ema(var1,20));
var8=var2+(var2-ema(var2,20));
if var7[2] > var7[1] and var7[1] < var7 then trend=1;
if var7[2] < var7[1] and var7[1] > var7 then trend=0;
plot2(round(고가예상치 + 0.5 * 고가표준오차,1),"2차 저항선");
plot3(round(고가예상치 - 0.5 * 고가표준오차,1),"1차 저항선");
plot6(round(저가예상치 + 0.5 * 저가표준오차,1),"1차 지지선");
plot7(round(저가예상치 - 0.5 * 저가표준오차,1),"2차 지지선");
plot8(dayopen,"시가");
Plot13(var7,"이평",iff(trend == 1,RED, rgb(0,84,225)));
Plot14(var8,"이평",iff(trend == 1,RED, rgb(0,84,225)));
2018-02-10
176
글번호 116511