커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1374
글번호 230811
답변완료
지표 질문입니다
최근 20캔들 최고가 천정에서 18캔들 하락한 바닥(A)까지 형성한 음봉 캔들수(N)를 계산하고
최근 20캔들 바닥(A)에서 N캔들 상승한 캔들 고가를 표시한다
20캔들 18캔들 등 수치 부분은 편집기 외부에서 독립적으로 입력 가능하도록 부탁합니다
감사합니다
2024-09-30
709
글번호 183869
답변완료
문의드립니다
m1=ma(c,20,지수);
조건= if(c>=o && c>=m1&&m1>m1(1)&& m1(1)<=m1(2),1,0);
Valuewhen(1, 조건,O)
지수 20선 입니다
종목검색 부탁드립니다
2024-09-30
952
글번호 183864
답변완료
검색이 왜 안될까요?
코드 1:
// 입력 변수 선언
var: 볼밴하단(0), 볼밴상단(0), 밴드비율(0), 스토캐스틱_긴주기(0), 스토캐스틱_짧은주기(0), 스토캐스틱_긴주기_이평(0);
var: 최고점_화살표(0), 최저점_화살표(0), 거래량_스토캐스틱(0);
var: 스토_긴주기_Z(0), 스토_짧은주기_Z(0); // Z-Score 변환된 값
// 볼린저 밴드 상단 계산 (기간 20, 표준편차 1)
볼밴상단 = BollBandUp(20, 1);
// 볼린저 밴드 상단의 스토캐스틱 변환 (300 기간과 30 기간)
스토캐스틱_긴주기 = (볼밴상단 - Lowest(볼밴상단, 300)) / (Highest(볼밴상단, 300) - Lowest(볼밴상단, 300)) * 100;
스토캐스틱_짧은주기 = (볼밴상단 - Lowest(볼밴상단, 30)) / (Highest(볼밴상단, 30) - Lowest(볼밴상단, 30)) * 100;
// 스토캐스틱 지표 계산 (저가 기준, 40 기간)
거래량_스토캐스틱 = (l - Lowest(l, 40)) / (Highest(l, 40) - Lowest(l, 40)) * 100;
// 스토캐스틱의 이동 평균 (기간 10)
스토캐스틱_긴주기_이평 = Ema(스토캐스틱_긴주기, 10);
// Z-Score 변환 (스토캐스틱 긴주기)
스토_긴주기_Z = (스토캐스틱_긴주기 - Average(스토캐스틱_긴주기, 300)) / Std(스토캐스틱_긴주기, 300);
// Z-Score 변환 (스토캐스틱 짧은주기)
스토_짧은주기_Z = (스토캐스틱_짧은주기 - Average(스토캐스틱_짧은주기, 30)) / Std(스토캐스틱_짧은주기, 30);
// 그래프 출력 (Z-Score 변환된 값)
//plot3(스토_긴주기_Z, "스토-긴주기-Z");
//plot4(스토_짧은주기_Z, "스토-짧은주기-Z");
// 텍스트 화살표 표시 조건: 볼밴 상단이 0에서 특정 패턴 발견
/*
var: 화살표1(0), 화살표2(0);
if countif(스토캐스틱_긴주기 == 0, 5) > 1 && Highest(c, 20)[1] < c then
{
화살표1 = Text_New_Self(sDate, stime, 0, "▲");
Text_SetStyle(화살표1, 2, 2);
Text_SetColor(화살표1, Green);
}
*/
if CrossUp (스토캐스틱_긴주기,0) then Find(1);
코드 2:
// 입력 변수 선언
var: 스토캐스틱_긴주기(0),볼밴상단(0); // 스토캐스틱 긴주기
// 볼린저 밴드 상단 계산 (기간 20, 표준편차 1)
볼밴상단 = BollBandUp(20, 1);
// 볼린저 밴드 상단의 스토캐스틱 변환 (300 기간)
스토캐스틱_긴주기 = (볼밴상단 - Lowest(볼밴상단, 300)) / (Highest(볼밴상단, 300) - Lowest(볼밴상단, 300)) * 100;
// 검색용 조건: 스토캐스틱 긴주기가 0을 상향 돌파할 때
if CrossUp(스토캐스틱_긴주기, 0) then
Find(1);
코드1은 코드2에서 필요한 부분만 남기고 삭제한 버전 입니다.
하지만 검색을 실행시키면 코드1은 검색이 되나 코드2는 검색이 되지 않습니다.
코드2에서 그래프를 출력시키면 그래프는 분명 0선 이하에서 0선 이상으로 움직입니다.
하지만 코드2는 검색이 안되요.. 왜 그런가요?
2024-09-30
815
글번호 183863
답변완료
타주기의 관계
안녕하세요
타주기간의 관계를 나타내는 수식을 만들고 싶은데요
예를들어서
300 틱 차트에서의 120선이
120분봉상에서 20선을 크로스 하는 수식을 작성하고 싶습니다
만약 검토시 결과가 나오지 않는다면 예시에 나온 수치는 단순예시로 지정한거라 바꾸셔도 됩니다
단 틱 차트와 분봉 차트 간의 크로스를 나타내보고 싶습니다
그리고 이 둘의 관계를 보려면 현재 보는 차트 주기는 둘중 하나여야하나요? 다른 주기에서도 볼 수 있을까요 예를 들면 일봉차트에서 위의 조건을 보는게 가능한가요?~ 가능하다면 그런 경우에서의 수식도 부탁드립니다.
그리고 서로 다른 주기에서도 추세선간의 크로스를 구현 할 수 있나요??
감사합니다
2024-09-30
837
글번호 183862
답변완료
부탁드립니다
안녕하세요
아래 트레이딩뷰 수식변환 부탁드립니다.
미리 감사말씀드립니다.
Bull=close>open?1:0
Doji=close==open?0:0
Bear=close<open?-1:0
CC=Bull+Doji+Bear
Counting=cum(CC)
plot(Counting,"Counter",fuchsia,2,line,false,0)
2024-09-30
868
글번호 183861
답변완료
문의 드립니다!
안녕하세요!
아래수식에서 발생되는 가로선을 당일의 선이 아닌 전일에 발생된 선이 당일챠트 화면에 나타나도록 수정 부탁드립니다
* 참고로 이 선의 두께를 좀더 두껍게한다거나 다른 형태의 선으로 표시되게 할수는 없을까요?
감사합니다!!
--------------------------------------------------------
input : N(30),색1(black),색2(black),굵기1(5),굵기2(5),형태1(1),형태2(1);
input : 수직선색상(Black),수직선굵기(2);
var : cnt(0),HH(0),LL(0),HTL1(0),LTL1(0),H1(0),L1(0),TL(0),vtl(0);
Array : HTL[100](0),LTL[100](0),HV[100](0),LV[100](0);
if Sdate != sDate[1] Then
{
value1 = sDate;
Value2 = value1[1];
Value3 = sTime;
Value4 = Value3[1];
For cnt = 1 to N
{
HV[cnt] = 0;
LV[cnt] = 0;
TL_Delete(HTL[cnt]);
TL_Delete(LTL[cnt]);
var1 = max(DayOpen(cnt),DayClose(cnt));
var2 = min(DayOpen(cnt),DayClose(cnt));
if cnt == 1 Then
{
HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1);
HV[cnt] = var1;
TL_SetColor(HTL[cnt],색1);
TL_SetSize(HTL[cnt],굵기1);
TL_SetStyle(HTL[cnt],형태1);
TL_SetExtRight(HTL[cnt],true);
TL_SetDrawMode(HTL[cnt],0);
HH = var1;
LTL[cnt] = TL_New(sDate,sTime,var2,NextBarSdate,NextBarStime,var2);
LV[cnt] = var2;
TL_SetColor(LTL[cnt],색2);
TL_SetSize(LTL[cnt],굵기2);
TL_SetStyle(LTL[cnt],형태2);
TL_SetExtRight(LTL[cnt],true);
TL_SetDrawMode(LTL[cnt],0);
LL = var2;
}
Else
{
if abs(var1-DayOpen(0)) < 10 and (var1 > HH or var1 < LL) Then
{
HTL[cnt] = TL_New(sDate,sTime,var1,NextBarSdate,NextBarStime,var1);
HV[cnt] = var1;
TL_SetColor(HTL[cnt],색1);
TL_SetSize(HTL[cnt],굵기1);
TL_SetStyle(HTL[cnt],형태1);
TL_SetExtRight(HTL[cnt],true);
TL_SetDrawMode(HTL[cnt],0);
}
if abs(Var2-DayOpen(0)) < 10 and (Var2 > HH or Var2 < LL) Then
{
LTL[cnt] = TL_New(sDate,sTime,Var2,NextBarSdate,NextBarStime,Var2);
LV[cnt] = var2;
TL_SetColor(LTL[cnt],색2);
TL_SetSize(LTL[cnt],굵기2);
TL_SetStyle(LTL[cnt],형태2);
TL_SetExtRight(LTL[cnt],true);
TL_SetDrawMode(LTL[cnt],0);
}
if var1 > HH and abs(var1-DayOpen(0)) < 10 Then
HH = DayHigh(cnt);
if Var2 < LL and abs(Var2-DayOpen(0)) < 10 Then
LL = DayLow(cnt);
}
var3 = max(DayOpen(cnt+1),DayClose(cnt+1));
var4 = min(DayOpen(cnt+1),DayClose(cnt+1));
if cnt == 1 Then
{
HTL1 = TL_New(Value2,value4,var3,sDate[1],sTime[1],var3);
TL_SetColor(HTL1,색1);
TL_SetSize(HTL1,굵기1);
TL_SetStyle(HTL1,형태1);
TL_SetDrawMode(HTL1,0);
H1 = var3;
LTL1 = TL_New(Value2,Value3,var4,sDate[1],sTime[1],var4);
TL_SetColor(LTL1,색2);
TL_SetSize(LTL1,굵기2);
TL_SetStyle(LTL1,형태2);
TL_SetDrawMode(LTL1,0);
L1 = var4;
}
Else
{
if abs(var3-DayOpen(1)) < 10 and (var3 > H1 or var3 < L1) Then
{
HTL1 = TL_New(Value2,value4,var3,sDate[1],sTime[1],var3);
TL_SetColor(HTL1,색1);
TL_SetSize(HTL1,굵기1);
TL_SetStyle(HTL1,형태1);
TL_SetDrawMode(HTL1,0);
}
if abs(Var4-DayOpen(1)) < 10 and (Var4 > H1 or Var4 < L1) Then
{
LTL1 = TL_New(Value2,Value3,var4,sDate[1],sTime[1],var4);
TL_SetColor(LTL1,색2);
TL_SetSize(LTL1,굵기2);
TL_SetStyle(LTL1,형태2);
TL_SetDrawMode(LTL1,0);
}
if var3 > H1 and abs(var3-DayOpen(1)) < 10 Then
H1 = Var3;
if Var2 < L1 and abs(Var2-DayOpen(0)) < 10 Then
L1 = Var4;
}
}
}
For cnt = 1 to N
{
if HV[cnt] > 0 and
((H[0] >= HV[cnt]-PriceScale*3 and H[1] < HV[cnt]-PriceScale*3) or
(L[0] <= HV[cnt]+PriceScale*3 and L[1] > HV[cnt]+PriceScale*3) or
(H[0] >= LV[cnt]-PriceScale*3 and H[1] < LV[cnt]-PriceScale*3) or
(L[0] <= LV[cnt]+PriceScale*3 and L[1] > LV[cnt]+PriceScale*3)) Then
{
vtl = TL_New(sDate,sTime,0,sDate,sTime,999999999);
TL_SetColor(vtl,수직선색상);
TL_SetSize(vTL,수직선굵기);
TL_SetDrawMode(VTL,0);
PlaySound("C:₩예스트레이더(X64)₩data₩Sound₩.wav");
}
}
2024-09-30
865
글번호 183858
답변완료
수식문의
볼린저밴드 200.1 상한선과
볼린저밴드 200.2 중심선 사이에
캔들이 30봉 이상 있는 수식 부탁드립니다.
(종가기준으로 이탈하지 않으면 상관없습니다)
---------------------------------------- 200.1
ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ
---------------------------------------- 200.2
이런식으로 있으면 됩니다.
2024-09-30
931
글번호 183852
답변완료
틱차트에서 데이터로 있는 분봉 관련하여 문의드립니다.
안녕하세요 항상 도움 감사드립니다.
아래 코드를 사용하고 있는데요. 주차트(data1)를 틱 300으로 설정하고 밑에 데이터(data2~20)들을 분봉(30초)로 설정하였는데 프린트문으로 데이터를 뽑아보면 첨부된 파일
왼쪽처럼 틱차트가 30초전에 여러개 완성되는 경우가 있어 data2~20들이 빈경우가 있고
오른쪽처럼 틱차트가 1분단위이상이여서 data2~20들이 여러개에 봉이 발생하는데 하나만 찍히는 경우가 발생합니다. 이럴경우에 처리하는 방법이 있는지 문의드립니다.
아래코드는 IF문부분이 반복되어 생략하였습니다. 꼭 확인 부탁드립니다. 감사합니다.
var : var11(0),var12(0),var13(0),var14(0),var15(0),var1(0),var2(0);
var : var21(0),var22(0),var23(0),var24(0),var25(0);
var : var31(0),var32(0),var33(0),var34(0),var35(0),var36(0);
var : var41(0),var42(0),var43(0),var44(0),var45(0),var46(0);
var : var59(0),var52(0),var56(0),var57(0),var51(0);
var : var69(0),var62(0),var66(0),var67(0),var61(0),var63(0),var64(0),var65(0);
input : StartDate(20240102),EndDate(20240823);
input : StartTime(090000),EndTime(150000);
var : Tcond(false);
var : lastPrintTime(0);
if sDate >= StartDate and sDate <= EndDate Then
{
var11 = Data2(c);
var21 = Data6(c);
var34 = var33[1] - var33;
if (abs(Var21[1]-Var21)) > 100000 THEN
var15 =0;
ELSE IF var21[1] < 0 AND var21 > 0 THEN
var15 = var21 - var21[1];
ELSE IF var21[1] < 0 AND var21 < 0 THEN
var15 = var21 - var21[1];
ELSE IF var21[1] > 0 AND var21 < 0 THEN
var15 = var21[1] - var21;
ELSE IF var21[1] > 0 AND var21 > 0 THEN
var15 = var21[1] - var21;
ELSE
var15 = var21[1] - var21;
IF var59[1] < 0 AND var59 > 0 THEN
var69 = var59 - var59[1];
ELSE IF var59[1] < 0 AND var59 < 0 THEN
var69 = var59 - var59[1];
ELSE IF var59[1] > 0 AND var59 < 0 THEN
var69 = var59[1] - var59;
ELSE IF var59[1] > 0 AND var59 > 0 THEN
var69 = var59[1] - var59;
ELSE
var69 = var59[1] - var59;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
{
Tcond = False;
}
if sDate >= StartDate and sDate <= EndDate and Tcond == true Then
{
# 현재봉이 마무리되고 다음 봉이 시작되는 시점에 print 실행
if (NextBarOpen > 0 and stime != lastPrintTime) Then
{
print("c:\win\data1.csv",",거래량,%.f,폭,%.2f,5이격,%.2f,10이격,%.2f,20이격,%.2f,미결제,%.f,비차익,%.f,매수수량,%.f,매수건수,%.f,매도수량,%.f,매도건수,%.f,매도총건수,%.f,매수총건수,%.f,매도총수량,%.f,매수총건수,%.f,상승체결,%.f,하락체결,%.f,상승건수,%.f,하락건수,%.f,체결건수,%.f,상승제외,%.f,하락제외,%.f,외선현,%.f,기현외현,%.f,기옵콜,%.f,기옵풋,%.f,차익,%.f,코10,%.2f,",V,var61,var63,var64,var65,var34,var15,var11,var12,var13,var14,var22,var23,var24,var25,var31,var32,Upticks,Downticks,Ticks,Var1,Var2,Var41,Var42,Var43,Var44,Var45,Var46);
lastPrintTime = stime;
}
Plot1(var34, "미결제약정");
Plot2(var11,"매수5호가수량");
Plot3(var12,"매수5호가건수");
Plot4(var13,"매도호5호가수량");
Plot5(var14,"매도5호가건수");
Plot6(var15,"비차익");
Plot7(var22,"매도총건수");
Plot8(var23,"매수총건수");
Plot9(var24,"매도총수량");
Plot10(var25,"매수총건수");
Plot11(var31,"상승체결");
Plot12(var32,"하락체결");
#Plot13(var15, "비차익2");
}
2024-09-30
941
글번호 183851
답변완료
수고하십니다
항상 좋은 일만 있으시기 바랍니다
pivot과 demark지표를 한시간 단위로
나오게 요청 합니다
2024-09-30
837
글번호 183843