커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6124
글번호 230811
답변완료
쌍바닥 plot 색상
Input : af(0.02), maxAF(0.2),상(1),하(1);
Var : Sarv(0),tl(0),T(0);
Sarv = sar(af,maxAF);
Plot1(0);
If crossup(c,Sarv) Then
{
T = 1;
var1 = Sarv;
Var2 = var1[1];
Condition1 = False;
if var1 <= var2+PriceScale*상 and var1 >= var2-PriceScale*하 and var2 > 0 Then
{
Condition1 = true;
Plot1(1);
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
}
}
if CrossDown(C,sarv) Then
T = -1;
Else
{
if T == 1 Then
{
if sarv < var1 Then
{
var1 = sarv;
if Condition1 == False and var1 <= var2+PriceScale*상 and var1 >= var2-PriceScale*하 and var2 > 0 Then
{
Condition1 = true;
Plot1(1);
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
}
}
}
}
"직전 저점"보다 낮아진 쌍바닥은 파랑,같은 쌍바닥은 그린,높아진 쌍바닥은 빨강,
이런식으로 각기 다른 세가지 색으로 출력.알람은 있어도 되고 없어도 무관. 감사합니다.
2022-09-07
1539
글번호 162044
답변완료
분봉에서 일봉이평값을 만들어 사용하고자 합니다. 도움 부탁드립니다.
안녕하세요. 늘 도움 주셔서 항상 감사드립니다.
첨부한 그림과 같이 분봉에서 일봉의 5일선 값을 만들어 사용하고자 합니다.
그런데, 일봉에서는 4/26일의 값을 4/25일의 종가를 사용하여 분봉을 만들고 있는데,
분봉에서는 4/26일의 데이터가 없어서, 4/27일부터 분봉의 일봉이평값과 일봉의 5일선 값이 서로 다른 결과가 나와서 애를 먹고 있습니다.
이러한 문제를 어떻게 해결할 수 있을까요?
도움 부탁드립니다.
고맙습니다.
2022-09-06
1785
글번호 162043
답변완료
문의합니다
안녕하세요
if marketposition == 0 then
if 매수조건1 then
buy("매수1")
if marketposition == 0 then
if 매수조건2 then
buy("매수2")
이렇게 매수1과 매수2가 있을 때, 조건당 1계약 진입조건이라고 할때
똑같은 봉에서 매수1과 매수2가 동시에 조건을 만족하면
중복으로 매수1과 매수2가 동시에 들어가서 총 2계약이 매수에 들어가나요?
아님 두 개 중 한 계약만 매수가 들어가나요? 1계약만 진입하면 우선순위가 어떻게 되나요?
2022-09-07
1352
글번호 162042
답변완료
수식문의
늘 친절하신 답변에 감사드리며 관리자님께 아래 두가지 요청드립니다.
1. 종목검색 수식 검증 및 5일전 검색수식으로 변환
2. 수식을 시스템 신호수식으로 변환 부탁드립니다.
Input: P1(240);
var:A(0);
A=MAX(H[1],H[2]);
if H>highest(H,5)[1] Then
{ var1=(A+L)/2; Var2=L; }
if L<highest(L,5)[1] Then
var3=A;
if var1>0 Then
if L<lowest(L,5)[1] Then
var4=A;
Var5=ma(C,P1);
if var4>0 Then
if ((CrossUp(c,var2)) or (var2>=o and var2<c)) and
var4>=o and var4<c and var5>=L and c>o Then
find(1);
2022-09-06
1356
글번호 162041
답변완료
수식 부탁드립니다.
안녕하세요.
아래의 키움증권 신호 수식을
예스트레이더 종목검색으로 수식으로 변환 요청드립니다.
max( avg(C,short), avg(C,mid), avg(C,long)) < min( avg(C,short), avg(C,mid), avg(C,long)) * (1+Percent/100) &&
C > highest(H(1),5) &&
C(1) <= highest(H(2),5) &&
CrossUp(h,BBandsUp(Period,D1))
short 5
mid 20
long 60
Period 20
percent 5
D1 2
이상입니다.
2022-09-06
1949
글번호 162040
답변완료
지표수정부탁합니다
안녕하세요
항상 지면으로 정말 감사하게 생각합니다 고맙습니다
디마크 지표 이름도 같이 표시할수 있도록 부탁드립니다
수고하세요
If DayClose(1) > DayOpen(1) Then
{
value1 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayHigh(1))/2-DayLow(1);
value2 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayHigh(1))/2-DayHigh(1);
}
Else If DayClose(1) < DayOpen(1) Then
{
value1 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayLow(1))/2-DayLow(1);
value2 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayLow(1))/2-DayHigh(1);
}
Else
{
value1 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayClose(1))/2-DayLow(1);
value2 = (DayHigh(1)+DayLow(1)+DayClose(1)+DayClose(1))/2-DayHigh(1);
}
Plot1(value1, "Demark분봉상한");
Plot2(value2, "Demark분봉하한");
Plot3((value1+value2)/2, "Demark중심");
var : tx1(0),tx2(0);
if Bdate != Bdate[1] Then
{
tx1 = Text_New(sdate,sTime,value1,NumToStr(Value1,2));
tx2 = Text_New(sdate,sTime,value2,NumToStr(Value2,2));
Text_SetStyle(tx1,0,1);
Text_SetStyle(tx2,0,0);
}
Else
{
Text_SetLocation(tx1,sDate,sTime,value1);
Text_SetLocation(tx2,sDate,sTime,value2);
}
2022-09-06
1908
글번호 162039
답변완료
문의드립니다
1)Input:chngRate(0.3),굵기(1);
input : Per1(0),Per2(23.6),Per3(38.2),Per4(50.0),Per5(61.8),Per6(76.4),Per7(100),Per8(123.6),Per9(161.8);
Var : j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
var : TL11(0),TL12(0),TL13(0),TL14(0),TL15(0),TL16(0),TL17(0),TL18(0),TL19(0);
var : Tx11(0),Tx12(0),Tx13(0),Tx14(0),Tx15(0),Tx16(0),Tx17(0),Tx18(0),Tx19(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
Condition1 = Min(valArr[1],valArr[2]) * (1 + (chngRate/100)) < H and lastHiVal < H;
Condition2 = Max(valArr[1],valArr[2]) * (1 - (chngRate/100)) > L and (lastLoVal > L || lastLoVal == 0);
If Condition1 Then { lastHiVal = H; lastLoVal = 0; }
If Condition2 Then { lastLoVal = L; lastHiVal = 0; }
turnPntBit = "";
If Condition1 and Condition2 Then
{
If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H,L);
barArr[1] = 0;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then
{
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
{
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
value1 = valArr[1]-valArr[2];
TL_Delete(TL11);
TL_Delete(TL12);
TL_Delete(TL13);
TL_Delete(TL14);
TL_Delete(TL15);
TL_Delete(TL16);
TL_Delete(TL17);
TL_Delete(TL18);
TL_Delete(TL19);
TL_SetExtRight(TL11,False);
TL_SetExtRight(TL12,False);
TL_SetExtRight(TL13,False);
TL_SetExtRight(TL14,False);
TL_SetExtRight(TL15,False);
TL_SetExtRight(TL16,False);
TL_SetExtRight(TL17,False);
TL_SetExtRight(TL18,False);
TL_SetExtRight(TL19,False);
TL11 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per1/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per1/100));
TL12 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per2/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per2/100));
TL13 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per3/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per3/100));
TL14 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per4/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per4/100));
TL15 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per5/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per5/100));
TL16 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per6/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per6/100));
TL17 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per7/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per7/100));
TL18 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per8/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per8/100));
TL19 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[1]+value1*(per9/100),sDate[barArr[1]],sTime[barArr[1]],valArr[1]-value1*(per9/100));
TL_SetExtRight(TL11,true);
TL_SetExtRight(TL12,true);
TL_SetExtRight(TL13,true);
TL_SetExtRight(TL14,true);
TL_SetExtRight(TL15,true);
TL_SetExtRight(TL16,true);
TL_SetExtRight(TL17,true);
TL_SetExtRight(TL18,true);
TL_SetExtRight(TL19,true);
TL_SetColor(TL11,Gray);
TL_SetColor(TL12,White);
TL_SetColor(TL13,Gray);
TL_SetColor(TL14,YELLOW);
TL_SetColor(TL15,Gray);
TL_SetColor(TL16,White);
TL_SetColor(TL17,Gray);
TL_SetColor(TL18,Gray);
TL_SetColor(TL19,Gray);
TL_SetSize(TL11,굵기);
TL_SetSize(TL12,굵기);
TL_SetSize(TL13,굵기);
TL_SetSize(TL14,굵기);
TL_SetSize(TL15,굵기);
TL_SetSize(TL16,굵기);
TL_SetSize(TL17,굵기);
TL_SetSize(TL18,굵기);
TL_SetSize(TL19,굵기);
Text_Delete(Tx11);
Text_Delete(Tx12);
Text_Delete(Tx13);
Text_Delete(Tx14);
Text_Delete(Tx15);
Text_Delete(Tx16);
Text_Delete(Tx17);
Text_Delete(Tx18);
Text_Delete(Tx19);
tx11 = Text_New(sdate,stime,TL_GetValue(TL11,sdate,stime),NumToStr(Per1,2)+"%("+NumToStr(TL_GetValue(TL11,sdate,stime),2)+")");
tx12 = Text_New(sdate,stime,TL_GetValue(TL12,sdate,stime),NumToStr(Per2,2)+"%("+NumToStr(TL_GetValue(TL12,sdate,stime),2)+")");
tx13 = Text_New(sdate,stime,TL_GetValue(TL13,sdate,stime),NumToStr(Per3,2)+"%("+NumToStr(TL_GetValue(TL13,sdate,stime),2)+")");
tx14 = Text_New(sdate,stime,TL_GetValue(TL14,sdate,stime),NumToStr(Per4,2)+"%("+NumToStr(TL_GetValue(TL14,sdate,stime),2)+")");
tx15 = Text_New(sdate,stime,TL_GetValue(TL15,sdate,stime),NumToStr(Per5,2)+"%("+NumToStr(TL_GetValue(TL15,sdate,stime),2)+")");
tx16 = Text_New(sdate,stime,TL_GetValue(TL16,sdate,stime),NumToStr(Per6,2)+"%("+NumToStr(TL_GetValue(TL16,sdate,stime),2)+")");
tx17 = Text_New(sdate,stime,TL_GetValue(TL17,sdate,stime),NumToStr(Per7,2)+"%("+NumToStr(TL_GetValue(TL17,sdate,stime),2)+")");
tx18 = Text_New(sdate,stime,TL_GetValue(TL18,sdate,stime),NumToStr(Per8,2)+"%("+NumToStr(TL_GetValue(TL18,sdate,stime),2)+")");
tx19 = Text_New(sdate,stime,TL_GetValue(TL19,sdate,stime),NumToStr(Per9,2)+"%("+NumToStr(TL_GetValue(TL19,sdate,stime),2)+")");
Text_SetStyle(tx11,2,1);
Text_SetStyle(tx12,2,1);
Text_SetStyle(tx13,2,1);
Text_SetStyle(tx14,2,1);
Text_SetStyle(tx15,2,1);
Text_SetStyle(tx16,2,1);
Text_SetStyle(tx17,2,1);
Text_SetStyle(tx18,2,1);
Text_SetStyle(tx19,2,1);
}
}
value1 = valArr[1]-valArr[2];
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
TL_SetBegin(TL11,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per1/100));
TL_SetEnd(TL11,sDate,sTime,valArr[1]-value1*(per1/100));
TL_SetBegin(TL12,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per2/100));
TL_SetEnd(TL12,sDate,sTime,valArr[1]-value1*(per2/100));
TL_SetBegin(TL13,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per3/100));
TL_SetEnd(TL13,sDate,sTime,valArr[1]-value1*(per3/100));
TL_SetBegin(TL14,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per4/100));
TL_SetEnd(TL14,sDate,sTime,valArr[1]-value1*(per4/100));
TL_SetBegin(TL15,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per5/100));
TL_SetEnd(TL15,sDate,sTime,valArr[1]-value1*(per5/100));
TL_SetBegin(TL16,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per6/100));
TL_SetEnd(TL16,sDate,sTime,valArr[1]-value1*(per6/100));
TL_SetBegin(TL17,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per7/100));
TL_SetEnd(TL17,sDate,sTime,valArr[1]-value1*(per7/100));
TL_SetBegin(TL18,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per8/100));
TL_SetEnd(TL18,sDate,sTime,valArr[1]-value1*(per8/100));
TL_SetBegin(TL19,sDate[barArr[2]],sTime[barArr[2]],valArr[1]-value1*(per9/100));
TL_SetEnd(TL19,sDate,sTime,valArr[1]-value1*(per9/100));
Text_SetLocation(Tx11,sdate,stime,TL_GetValue(TL11,sdate,stime));
Text_SetLocation(Tx12,sdate,stime,TL_GetValue(TL12,sdate,stime));
Text_SetLocation(Tx13,sdate,stime,TL_GetValue(TL13,sdate,stime));
Text_SetLocation(Tx14,sdate,stime,TL_GetValue(TL14,sdate,stime));
Text_SetLocation(Tx15,sdate,stime,TL_GetValue(TL15,sdate,stime));
Text_SetLocation(Tx16,sdate,stime,TL_GetValue(TL16,sdate,stime));
Text_SetLocation(Tx17,sdate,stime,TL_GetValue(TL17,sdate,stime));
Text_SetLocation(Tx18,sdate,stime,TL_GetValue(TL18,sdate,stime));
Text_SetLocation(Tx19,sdate,stime,TL_GetValue(TL19,sdate,stime));
Text_SetString(Tx11,NumToStr(Per1,2)+"%("+NumToStr(TL_GetValue(TL11,sdate,stime),2)+")");
Text_SetString(Tx12,NumToStr(Per2,2)+"%("+NumToStr(TL_GetValue(TL12,sdate,stime),2)+")");
Text_SetString(Tx13,NumToStr(Per3,2)+"%("+NumToStr(TL_GetValue(TL13,sdate,stime),2)+")");
Text_SetString(Tx14,NumToStr(Per4,2)+"%("+NumToStr(TL_GetValue(TL14,sdate,stime),2)+")");
Text_SetString(Tx15,NumToStr(Per5,2)+"%("+NumToStr(TL_GetValue(TL15,sdate,stime),2)+")");
Text_SetString(Tx16,NumToStr(Per6,2)+"%("+NumToStr(TL_GetValue(TL16,sdate,stime),2)+")");
Text_SetString(Tx17,NumToStr(Per7,2)+"%("+NumToStr(TL_GetValue(TL17,sdate,stime),2)+")");
Text_SetString(Tx18,NumToStr(Per8,2)+"%("+NumToStr(TL_GetValue(TL18,sdate,stime),2)+")");
Text_SetString(Tx19,NumToStr(Per9,2)+"%("+NumToStr(TL_GetValue(TL19,sdate,stime),2)+")");
}
TL_SetSize(TL1,굵기);
TL_SetColor(TL1,black);
2)
INPUTS: LENGTH1(5);
INPUTS: 색1(YELLOW),색2(RED), 굵기(1);
VARS : DEMA1(0),TL(0);
var1= EMA(C,LENGTH1);
value1= EMA(EMa(C,LENGTH1),LENGTH1);
DEMA1 = var1 * 2 - value1;
if C >DEMA1 Then
PLOT1(DEMA1, "DEMA1",GRAY);
Else
PLOT1(DEMA1, "DEMA1",GRAY);
if CrossUp(DEMA1,v1) or CrossUp(DEMA1,v3) Then
{
TL_Delete(tl);
tl = TL_New(sDate,sTime,DEMA1+PriceScale*10,NextBarSdate,NextBarStime,DEMA1+PriceScale*10);
TL_SetColor(tl,RED);
TL_SetSize(tl,4);
TL_SetExtRight(TL,true);
}
if CrossDown(DEMA1,v1) or CrossDown(DEMA1,v3) Then
{
TL_Delete(tl);
tl = TL_New(sDate,sTime,DEMA1+PriceScale*10,NextBarSdate,NextBarStime,DEMA1+PriceScale*10);
TL_SetColor(tl,lGREEn);
TL_SetSize(tl,4);
TL_SetExtRight(TL,true);
}
1번수식에서2번수식(dema)5이평이76.4프로상승크로스레드색수평선
(dema) 5이평이76.4프로하락크로스그린색 수평선
(dema) 5이평이23.6프로상승크로스레드색수평선
(dema) 5이평이23.6프로하락크로스그린색수평선으로나오게수정부탁드립니다~
텍스트가격수치는 삭제 프로테이지만나오게 수정해주세요~
항상노고에 감사드립니다~~
2022-09-06
1862
글번호 162038
답변완료
수식 부탁드립니다.
국내 선물에서
특정 조건이 되면 매수 또는 매도로 30개 진입 후
진입가격으로부터
매수집입 대비 5, 10, 15 pt 상승시 각 10개씩 분할 매도
매도진입 대비 -5, -10, 15 하락시 각 10개씩 분할 매수 하며,
(각 조건별 중복 청산 없음)
조건 미달성으로 남은 잔액은 당일 종가 청산하는 식 부탁드립니다.
감사합니다.
2022-09-06
1958
글번호 162037
답변완료
Highest를 생각없이 쓰다가 궁금해졌습니다.
var1 = Highest(H,N) ; 최근 N개봉 중 최고가
#매수진입
if marketposition == 0 Then{
Buy("B",AtStop,Var1+PriceScale);
}
아무런 생각없이 Highest를 위의 코드처럼 쓰고있었는데요.
이렇게하면 현재 봉이 미완성시 고가와 종가 구분을 어떻게 하고 매수를 하는걸까요...?
지금까지 매수/매도가 잘 되어서 잘 되는줄 알았는데 기본적인 의문이 들었습니다.
제가 원래 의도한바는
현재가격(현재 봉의 종가)가 N개봉 고가 돌파시 +1틱에 매수하는 거였는데요.
현재가격(현재 봉의 종가)이 N개봉 고가 돌파시 종가 = Highest(H,N)이 되어버리는거 같아서요.
2022-09-06
1718
글번호 162036