커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4359
글번호 230811
답변완료
종목검색식 문의 드립니다.
먼저 일일이 답변 주심에 감사드립니다.
아래검색식을 제가 작성함에 있어 논리적으로 착각하거나 문제가 있는 것 같습니다.
그림과 같이 18.3.14일 장후에 기준봉을 1로 잡고 검색하면서
기준일 양봉( C > O )이라 설정하였는데 두산엔진 같은 경우 3.13일 음봉임에도 불구하고
검색되었습니다.
제가 생각 하기로 기준봉을 1로 잡으면 3.13일을 기준으로 검색되는 것으로 생각했는데
제가 착각하는지 무엇지 잘못인지 모르겠습니다.
1. 앞에 내용에서 제가 잘 못 생각한점이 있다면 알려 주시기 바라며
2. 식 뒷 부분(if CountIF(Condition1 == true, 검색기간) >= 검색회수 Then)에서 검색기간을 변경해도 검색되는 종목은 변함이 없는 것 같습니다.
3. 그리고 저의 의도되로 식을 수정해 주시면 고맙겠습니다
input : pe(20),per(20),이격1(90),이격2(110),거래량(1.4),몸통저(0.01),몸통대(100),검색기간(60),검색회수(1),N(10),n회(2);
var: Body(0),Highbody(0),Lowbody(0),value(0);
Body = Abs(c-o);
Highbody = MaxList(Open,Close);
Lowbody =MinList(Open,Close);
var1= Disparity(60);
var2=ma(c,5);
var3=ma(c,10);
var4=ma(c,20);
var5=ma(c,33);
var6=ma(c,60);
var7=ma(c,120);
var8=ma(v,60);
value2 = max(var2,var3,var4,var5,var6);
value3 = min(var2,var3,var4,var5,var6);
Value1 =0;
if CrossUp(c, var2) Then
Value1 = Value1 + 1;
if CrossUp(c, var3) Then
Value1 = Value1 + 1;
if CrossUp(c, var4) Then
Value1 = Value1 + 1;
if CrossUp(c, var5) Then
Value1 = Value1 + 1;
if CrossUp(c, var7) Then
Value1 = Value1 + 1;
if var1[1] >= 이격1 and var1[1] <= 이격2 and c > var2 and Value1 >= 1 and
body >= C[1] *몸통저 and body <= C[1]*몸통대 and
H-Highbody >= body *0.0 and H-Highbody <= body * 5 and
Lowbody-L >= body *0.0 and Lowbody-L <= body * 5 and
C > O and
V >= V[1]*거래량 and
var7[1] * (1+pe/100000) > var7[2] and
CountIF(Value2 <= Value3 * (1+ per/100),N) >= N회 Then
Condition1 =true ;
Else
Condition1 =False ;
if CountIF(Condition1 == true, 검색기간) >= 검색회수 Then
find(1);
2018-03-14
198
글번호 117396
답변완료
수식 문의 드립니다.
5일전 기준으로,
30일 평균 거래량의 10배가 넘는 거래량을 가진 종목을 검색해보고자 합니다.
아래와 같이 작성했는데, 종목이 전혀 검색이 되지 않습니다.
Vars : DayAvrg(0);
DayAvrg = ma(V,30)[1];
If V[5] >= DayAvrg*10 Then
Find(DayAvrg);
도움 부탁드립니다.
2018-03-14
156
글번호 117395
st002340 님에 의해서 삭제되었습니다.
2018-03-14
6
글번호 117392
답변완료
수식 부탁드립니다.
* 현재 예수금(D+0) 이 1,000만원 있습니다.
모두 2 종목을 매매하려고 합니다.
1) a 종목을 매수하기 전에 얼마까지 주문을 낼 수 있는지 잔액을 확인하고
오늘 a종목을 매수 & 매도하여 100만원 이익을 냈습니다. (D+2 : 1,100만원)
2) 이후에 오늘 b종목을 다시 매수하려고 하는데 1,100만원을 기준으로 수량을 정하고 싶습니다.
어떻게 처리하면 되는지 부탁드립니다.
늘 도움을 주셔서 고맙습니다.
2018-03-14
154
글번호 117391
답변완료
수식부탁합니다
수고에 매번 깊이 감사드립니다.
아래의 수식을 분봉1분봉에서 검색식으로 전환부탁합니다.
외부입력 변수가 부족하다고 메세지가 나와서 안되네요.
부탁드립니다.
감사합니다.
조건은 DPlus > DMinus 입니다.
input : Length(14);
var : TL(0),TH(0),cnt(0),Dcnt(0),preTRange(0),prePlusDM14(0),DMinus(0),MinusDM14(0),TRange1(0),preMinusDM14(0);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0),Dplus(0),preADX(0);
Var : CummDMI(0), Return(0);
Array : HH[61](0),LL[61](0),CC[61](0),TR[61](0),DMIv[61](0),ADXv[61](0);
if bdate != bdate[1] Then{
Dcnt = Dcnt+1;
HH[0] = H;
LL[0] = L;
CC[0] = C;
preTRange = TRange[1];
prePlusDM14 = PlusDM14[1];
preMinusDM14 = MinusDM14[1];
for cnt = 1 to 60{
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
TR[cnt] = TR[cnt-1][1];
DMIv[cnt] = DMIv[cnt-1][1];
ADXv[cnt] = ADXv[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if CC[1] > 0 Then{
If CC[1] > HH[0] then
TH = CC[1];
else
TH = HH[0];
If CC[1] < LL[0] then
TL = CC[1];
else
TL = LL[0];
TR[0] = TH-TL;
}
If Dcnt == Length+1 Then {
MyRange = Length;
DPlus = 0;
PlusDM14 = 0;
TRange = 0;
DMinus = 0;
MinusDM14 = 0;
TRange1 = 0;
For Counter = 0 To MyRange - 1 {
If HH[Counter] - HH[Counter+1] < 0 Then
PlusDM = 0 ;
Else
PlusDM = HH[Counter] - HH[Counter+1];
If LL[Counter+1] - LL[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[Counter+1] - LL[Counter];
If MinusDM >= PlusDM Then
PlusDM = 0;
If PlusDM >= MinusDM Then
MinusDM = 0;
TRange = TRange + TR[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
DPlus = 100 * PlusDM14 / TRange;
Else
DPlus = 0 ;
If TRange <> 0 Then
DMinus = 100 * MinusDM14 / TRange;
Else
DMinus = 0;
If Dplus + Dminus == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(Dplus - Dminus) / (Dplus + Dminus);
}
Else If Dcnt > Length+1 Then {
If HH[0] - HH[1] < 0 Then
PlusDM = 0;
Else
PlusDM = HH[0] - HH[1];
If LL[1] - LL[0] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[1] - LL[0];
If MinusDM >= PlusDM Then
PlusDM = 0;
If PlusDM >= MinusDM Then
MinusDM = 0 ;
If MyRange > 0 Then {
TRange = preTRange - (preTRange / MyRange) + TR[0];
PlusDM14 = prePlusDM14 - (prePlusDM14 / MyRange) + PlusDM;
MinusDM14 = preMinusDM14 - (preMinusDM14 / MyRange) + MinusDM;
}
If TRange <> 0 Then
DPlus = 100 * PlusDM14 / TRange;
Else
DPlus = 0 ;
If TRange <> 0 Then
DMinus = 100 * MinusDM14 / TRange;
Else
DMinus = 0;
If Dplus + Dminus == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(Dplus - Dminus) / (Dplus + Dminus);
}
If DMIV[Length] == 0 Then{
CummDMI = 0;
for Counter = 0 To Length-1 Begin
if DMiV[counter] > 0 Then
CummDMI = CummDMI + DMIV[Counter];
End;
ADXv[0] = CummDMI / CurrentBar;
}
Else
ADXv[0] = (ADXv[1] * (Length - 1) + DMIv[0]) / Length;
plot1(ADXv[0]);
plot2(DPlus);
plot3(DMinus);
PlotBaseLine1(25,"매수세력선");
PlotBaseLine2(20,"기준선");
PlotBaseLine3(15,"매도세력선");
2018-03-14
202
글번호 117388
답변완료
부탁드립니다
시스템 수식 부탁드립니다
매수조건 ㅡ 1. 지난 60일동안 최고점 돌파시 종가진입(계좌 잔고의 50%만 매수)
2. 지난 90일동안 최고점 돌파시 나머지 50% 종가진입.
매수조건은 순서와 관계없이 진입신호발생시 매수하되(동시 진입신호발생시 동시 진입)
진입후 -10% 발생시 손절할것
매도조건 ㅡ 매수조건 1번 2번 각각 진입후 각각 수익이 30%이상 나기를 기다리다가
그 수익이 최고치대비 절반이상 감소했을때 청산.
2018-03-15
166
글번호 117384
답변완료
문의드립니다.
매번 감사합니다.
1. 코딩 변환 부탁드립니다.
Indicator: DIX
inputs:
Price( Close ),
DIXLength( 20 ),
UpColor( Cyan ), { Color to use for indicator values that are
relatively high, over ColorNormLength bars. }
DnColor( Red ), { Color to use for indicator values that are
relatively low over ColorNormLength bars. }
ColorNormLength( 20 ), { Number of bars over which to
normalize the indicator for gradient coloring. See also: comments in function NormGradientColor. }
GridForegroundColor( Black ), { Color to use for numbers in
RadarScreen cells when gradient coloring is enabled, that
is, when both UpColor and DnColor are set to non-negative
values. }
GridLevel( 10 ) ; { Level at which to plot a horizontal line in
chart. Horizontal lines will be plotted at both positive and
negative values of this number. }
{ Set either UpColor and/or DnColor to -1 to disable gradient
plot coloring. When disabled, Plot1 color is determined by
settings in indicator properties dialog box. Colors of plots 2,
3, and 4 always come from indicator properties dialog box. }
variables:
ApplicationType( 0 ),
DIX( 0 ),
ColorLevel( 0 ) ;
if CurrentBar = 1 then
ApplicationType = GetAppInfo( aiApplicationType ) ;
if Price <> 0 then
DIX = 100 * ( Price - XAverage( Price, DIXLength ) )
/ Price ;
Plot1( DIX, “DIX” ) ;
Plot2( 0, “ZeroLine” ) ;
Plot3( GridLevel, “GridLevel” ) ;
Plot4( -1 * GridLevel, “-GridLevel” ) ;
{ Gradient coloring }
if UpColor >= 0 and DnColor >= 0 then
begin
ColorLevel = NormGradientColor( DIX, true,
ColorNormLength, UpColor, DnColor ) ;
if ApplicationType = 1 then { study is applied to a chart }
SetPlotColor( 1, ColorLevel )
else if ApplicationType > 1 then { study is applied to grid app,
like RadarScreen }
begin
SetPlotColor( 1, GridForegroundColor ) ;
SetPlotBGColor( 1, ColorLevel ) ;
end ;
end ;
{ Alert criteria - alert if DIX is at its highest or lowest value over
DIXLength bars }
if HighestBar( DIX, DIXLength ) = 0 then
Alert( “DIX is high” )
else if LowestBar( DIX, DIXLength ) = 0 then
Alert( “DIX is low” ) ;
2018-03-14
261
글번호 117383
답변완료
안녕하세요
분봉에서 현재봉부터(1봉전이 맞나요) 20봉전의 고가(꼬리제외) 와 저가(꼬리제외)를 수평으로 연속 나타낼수 있도록 부탁 드립니다.
감사합니다.
2018-03-14
161
글번호 117382
답변완료
문의 드립니다.
볼린져 밴드의 상하단 값을 나오게 하겁니다.
전일 지수로 쭉 나오게 하는 식인데요.. 이걸 직전에 형성된 볼린져 밴드의 고점 저점으로 맞추고 싶습니다.
전일 고저점 저점 수식은 아래에 있는건데요.. 이걸 직전에 형성된 볼린져 밴드의 고점 저점이 나오는 수식으로 부탁드립니다.
Input : Period(20), MultiD(2);
var : bbmd(0),BBup(0),BBdn(0);
var : bbmd1(0),BBup1(0),BBdn1(0);
BBmd = ema(C,Period);
BBup = BollBandUp(Period,MultiD);
BBdn = BollBandDown(Period,MultiD);
if Bdate != Bdate[1] Then{
BBmd1 = BBmd[1];
BBup1 = BBup[1];
BBdn1 = BBdn[1];
}
Plot1(bbmd1, "전일마지막중단값"); --------->직전 마지막 중단값으로
Plot2(BBup1, "전일마지막상단값"); --------->직전 마지막 상단값으로
Plot3(BBdn1, "전일마지막하단값"); --------->직전 마지막 하단값으로
2018-03-14
166
글번호 117376