커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1336
글번호 230811
답변완료
문의
이식을 RSi식으로 변환 부탁드립니다
Input : short(12), long(26), signal(9),굵기(3);
Var : MACDV(0) , MACDS(0),T(0);
var : HIV(0),HID(0),HIT(0),HIV1(0),HID1(0),HIT1(0),HI(0),HI1(0);
var : HPV(0),HPD(0),HPT(0),HPV1(0),HPD1(0),HPT1(0);
var : LIV(0),LID(0),LIT(0),LIV1(0),LID1(0),LIT1(0),LI(0),LI1(0);
var : LPV(0),LPD(0),LPT(0),LPV1(0),LPD1(0),LPT1(0);
var : TL1(0),TL2(0),TX1(0),TX2(0);
var : TL3(0),TL4(0),TL5(0),i1(0),i2(0);
MACDV = MACD(short, long);
MACDS = ema(MACDV,signal);
if crossup(MACDV,MACDS) Then
{
T = 1;
HIV = MACDV;
HID = sdate;
HIT = stime;
HI = Index;
HIV1 = HIV[1];
HID1 = HID[1];
HIT1 = HIT[1];
HPV = H;
HPD = sdate;
HPT = stime;
HI1 = HI[1];
HPV1 = HPV[1];
HPD1 = HPD[1];
HPT1 = HPT[1];
Condition1 = false;
}
if CrossDown(MACDV,MACDS) Then
{
T = -1;
LIV = MACDV;
LID = sdate;
LIT = stime;
LI = Index;
LIV1 = LIV[1];
LID1 = LID[1];
LIT1 = LIT[1];
LPV = L;
LPD = sdate;
LPT = stime;
LI1 = LI[1];
LPV1 = LPV[1];
LPD1 = LPD[1];
LPT1 = LPT[1];
Condition2 = false;
}
if T == 1 Then
{
if MACDV > HIV Then
{
HIV = MACDV;
HID = sdate;
HIT = stime;
}
if H > HPV Then
{
HPV = H;
HPD = sdate;
HPT = stime;
}
if Condition1 == false and HPV1 > 0 and HPV > HPV1 and HIV < HIV1 and HI <= HI1+30 Then
{
TL1 = TL_New(HPD1,HPT1,HPV1,HPD,HPT,HPV);
TL2 = TL_New_Self(HID1,HIT1,HIV1,HID,HIT,HIV);
TL_SetColor(TL1,cyan);
TL_SetColor(TL2,cyan);
TL_SetSize(TL1,굵기);
TL_SetSize(TL2,굵기);
tx1 = Text_New(HPD1,HPT1,HPV1,NumToStr(HPV1,2));
tx2 = Text_New(HPD,HPT,HPV,NumToStr(HPV,2));
Text_SetStyle(tx1,2,1);
Text_SetStyle(tx2,2,1);
TL3 = TL_New(HPD1,HPT1,HPV1,sdate,stime,HPV1);
TL4 = TL_New(HPD1,HPT1,HPV,HPD,HPT,HPV);
TL5 = TL_New(HPD1,HPT1,(HPV1+HPV)/2,HPD,HPT,(HPV1+HPV)/2);
Condition1 = true;
}
if Condition1 == true then
{
if HPV > HPV1 and HIV < HIV1 then
{
TL_SetEnd(TL1,HPD,HPT,HPV);
TL_SetEnd(TL2,HID,HIT,HIV);
Text_SetLocation(tx2,HPD,HPT,HPV);
Text_SetString(tx2,NumToStr(HPV,2));
i1 = index;
}
Else
{
TL_Delete(TL1);
TL_Delete(TL2);
TL_Delete(TL3);
TL_Delete(TL4);
TL_Delete(TL5);
Text_Delete(tx1);
Text_Delete(tx2);
}
}
}
if T == -1 Then
{
if MACDV < LIV Then
{
LIV = MACDV;
LID = sdate;
LIT = stime;
}
if L < LPV Then
{
LPV = L;
LPD = sdate;
LPT = stime;
}
if Condition2 == false and LPV1 > 0 and LPV < LPV1 and LIV > LIV1 and LI <= LI1+30 Then
{
TL1 = TL_New(LPD1,LPT1,LPV1,LPD,LPT,LPV);
TL2 = TL_New_Self(LID1,LIT1,LIV1,LID,LIT,LIV);
TL_SetColor(TL1,RED);
TL_SetColor(TL2,RED);
TL_SetSize(TL1,굵기);
TL_SetSize(TL2,굵기);
tx1 = Text_New(LPD1,LPT1,LPV1,NumToStr(LPV1,2));
tx2 = Text_New(LPD,LPT,LPV,NumToStr(LPV,2));
Text_SetStyle(tx1,2,1);
Text_SetStyle(tx2,2,1);
TL3 = TL_New(LPD1,LPT1,LPV1,sdate,stime,LPV1);
TL4 = TL_New(LPD1,LPT1,LPV,LPD,LPT,LPV);
TL5 = TL_New(LPD1,LPT1,(LPV1+LPV)/2,LPD,LPT,(LPV1+LPV)/2);
Condition2 = true;
}
if Condition2 == true then
{
if LPV < LPV1 and LIV > LIV1 then
{
TL_SetEnd(TL1,LPD,LPT,LPV);
TL_SetEnd(TL2,LID,LIT,LIV);
Text_SetLocation(tx2,LPD,LPT,LPV);
Text_SetString(tx2,NumToStr(LPV,2));
i2 = index;
}
Else
{
TL_Delete(TL1);
TL_Delete(TL2);
TL_Delete(TL3);
TL_Delete(TL4);
TL_Delete(TL5);
Text_Delete(tx1);
Text_Delete(tx2);
}
}
}
plot1(MACDV);
plot2(MACDS);
if index > i1 and index <= i1+3 Then
{
TL_SetEnd(tl3,sdate,stime,TL_GetValue(tl3,sdate,stime));
TL_SetEnd(tl4,sdate,stime,TL_GetValue(tl4,sdate,stime));
TL_SetEnd(tl5,sdate,stime,TL_GetValue(tl5,sdate,stime));
}
if index > i2 and index <= i2+3 Then
{
TL_SetEnd(tl3,sdate,stime,TL_GetValue(tl3,sdate,stime));
TL_SetEnd(tl4,sdate,stime,TL_GetValue(tl4,sdate,stime));
TL_SetEnd(tl5,sdate,stime,TL_GetValue(tl5,sdate,stime));
}
Plot3(0,"0");
2025-02-25
505
글번호 188561
답변완료
종목 검색식 부탁드립니다
다음 수식에 대한 종목검색식 부탁드립니다.
L60 = Lowest(L(1), 60) > L;
조건 =
Sum(L60, 20) >= 15 &&
Sum(L60, 10) == 3 && C < O;
조건(1)
2025-02-25
465
글번호 188560
답변완료
종목검색식 요청드립니다.
아래 키움수식을 예스트레이더로 대체해서 사용할 수 있는 함수가 있을까요?
이전에 avgperiod함수가 없다고 하셔셔 가능하다면 대체함수를 사용해서 예스트레이더 종목검색식으로 변환 부탁드립니다. (현재 종가가 아래 수식을 crossup 한 종목검색식)
* 키움수식 (period 20, avgperiod 60)
KEY=LinearRegValue(C, period);
Door=MA(LinearRegValue(C, period), avgperiod)-MA(StdError(C, period),
avgperiod);
감사합니다.
2025-02-25
518
글번호 188557
답변완료
문의드립니다.
선생님~아래의 식을 캔들 차트로 볼 수 있을까요?
input : Len(36);
var : haC1(0),haO1(0),haH1(0),haL1(0);
var : o1(0),h1(0),l1(0),c1(0);
var : haC2(0),haO2(0),haH2(0),haL2(0);
var : o2(0),h2(0),l2(0),c2(0),col(0);
if index == 0 then
{
haC1 = (O+H+L+C)/4;
haO1 = open;
haH1 = MaxList(high, haO1, haC1);
haL1 = MinList(low, haO1,haC1);
}
else
{
haC1 = (O+H+L+C)/4;
haO1 = (haO1[1] + haC1[1])/2 ;
haH1 = MaxList(High, haO1, haC1) ;
haL1 = MinList(Low, haO1, haC1) ;
}
o1=ema(haO1, len);
c1=ema(haC1, len);
h1=ema(haH1, len);
l1=ema(haL1, len);
if IsNan(haO2[1]) == true then
{
haC2 = (o1+h1+l1+c1)/4;
haO2 = o1;
haH2 = MaxList(h1, haO2,haC2);
haL2 = MinList(l1, haO2,haC2);
}
Else
{
haC2 = (o1+h1+l1+c1)/4;
haO2 = (haO2[1] + haC2[1])/2 ;
haH2 = MaxList(haH1, haO2, haC2);
haL2 = MinList(haL1, haO2, haC2);
o2=ema(haO2, len);
c2=ema(haC2, len);
h2=ema(haH2, len);
l2=ema(haL2, len);
col=iff(o2>c2 , red , lime);
PlotPaintBar(h2, l2,o2,c2, "heikin smoothed", col);
}
2025-02-25
487
글번호 188556
답변완료
문의드립니다.
수고많으십니다.
var : 먼저익절(50);
var : BXcond1(False);
if MarketPosition == 1 Then
{
if CurrentContracts < CurrentContracts[1] Then
{
if LatestExitName(0) == "B_익절" Then
BXcond1 = true;
}
if BXcond1 == False Then
ExitLong("B_익절",AtLimit ,EntryPrice+PriceScale*먼저익절,"",1,1);
}
Else
{
BXcond1 = False;
}
if MarketPosition == -1 Then
{
if CurrentContracts < CurrentContracts[1] Then
{
if LatestExitName(0) == "S_익절" Then
BXcond1 = true;
}
if BXcond1 == False Then
ExitShort("S_익절",AtLimit,EntryPrice-PriceScale*먼저익절,"",1,1);
}
Else
{
BXcond1 = False;
}
다계약 시스템에서 1개는 먼저 익절하기위해 위의 청산식입니다만
문제는 단 한번만 적용되야 하는데 연달아 적용되어 오늘 4개가 청산됩니다.
여러 청산식마다 무조건 1번씩만 적용되는 청산 수식 적용이 필요합니다.
무슨 문제가 있는지 확인부탁드립니다.
2025-02-25
491
글번호 188539
답변완료
검색식 전환작성 협조드립니다
수고하십니다.
첨부된 키움 검색식을 예스트레이더 검색식으로 전환 작성하여 주시기를 협조드립니다.
감사합니다.
2025-02-25
491
글번호 188537
사공하늘 님에 의해서 삭제되었습니다.
2025-02-25
115
글번호 188535
사공하늘 님에 의해서 삭제되었습니다.
2025-02-25
100
글번호 188533
답변완료
검색식으로 변환 부탁드립니다 ^^
키움 신호수식인데, 분봉 검색식으로 변환하고 싶습니다. 부탁드리겠습니다.
가=HighestSince(1,date!=date(1),V);
나=Valuewhen(1,가==V && C>O,H);
다=Valuewhen(1,가==V && C>O,L);
라=(나-다)*3/4+다;
마=ma(c,20);
바=ma(c,60);
사=(마-바);
신호=마>바 && 사>사(1) && 라>=L && H(1)>H && L(1)<L && C>마;
cnt=CountSince(date!=date(1),신호);
cnt==1 && cnt(1)==0 && time>=090000 && time<133000
2025-02-25
414
글번호 188529