커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8124
글번호 230811
답변완료
지표변환부탁드립니다
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
//@version = 4
//Copyright LuxAlgo
study("Volume Profile [LUX]","Volume Profile [LuxAlgo]",true,max_bars_back=1000,max_lines_count=500)
length = input(500,'Lookback',minval=1,maxval=1000,group='Basic'
,tooltip='Number of most recent bars to use for the calculation of the volume profile')
row = input(200,'Row Size',minval=1,maxval=500,group='Basic'
,tooltip='Determines the number of rows used for the calculation of the volume profile')
show_rpoc = input(false,'Show Rolling POC',group='Basic'
,tooltip='Determines whether to display the rolling POC of the volume profile')
width = input(50,'Width (% of the box)',minval=1,maxval=100,group='Style'
,tooltip='Determines the length of the bars relative to the Lookback value')
bar_width = input(2,'Bar Width',group='Style'
,tooltip='Width of each bar')
flip = input(false,'Flip Histogram',group='Style'
,tooltip='Flip the histogram, when enabled, the histogram base will be located at the most recent candle')
grad = input(true,'Gradient',group='Style'
,tooltip='Allows to color the volume profile bars with a gradient, with a color intensity determined by the length of each bar')
solid = input(#2157f3,'Rows Solid Color',group='Style'
,tooltip='Color of each bar when "Gradient" is disabled')
poc_color = input(#ff5d00,'POC Solid Color',group='Style'
,tooltip='Color of the POC when "Gradient" is disabled')
//-----------------------------------------------------------------------------------------
var vol_css = array.new_color(na)
var a = array.new_line()
var b = array.new_line()
if barstate.isfirst
array.push(vol_css,#1E152A), array.push(vol_css,#1E162B), array.push(vol_css,#1F182C), array.push(vol_css,#1F192E), array.push(vol_css,#201B2F), array.push(vol_css,#211C31), array.push(vol_css,#211E32), array.push(vol_css,#222034), array.push(vol_css,#222135), array.push(vol_css,#232337), array.push(vol_css,#242438), array.push(vol_css,#24263A), array.push(vol_css,#25273B), array.push(vol_css,#25293D), array.push(vol_css,#262B3E), array.push(vol_css,#272C3F), array.push(vol_css,#272E41), array.push(vol_css,#282F42), array.push(vol_css,#283144), array.push(vol_css,#293245), array.push(vol_css,#2A3447), array.push(vol_css,#2A3648), array.push(vol_css,#2B374A), array.push(vol_css,#2B394B), array.push(vol_css,#2C3A4D), array.push(vol_css,#2D3C4E), array.push(vol_css,#2D3D50), array.push(vol_css,#2E3F51), array.push(vol_css,#2E4153), array.push(vol_css,#2F4254), array.push(vol_css,#304455), array.push(vol_css,#304557), array.push(vol_css,#314758), array.push(vol_css,#32495A), array.push(vol_css,#324A5B), array.push(vol_css,#334C5D), array.push(vol_css,#334D5E), array.push(vol_css,#344F60), array.push(vol_css,#355061), array.push(vol_css,#355263), array.push(vol_css,#365464), array.push(vol_css,#365566), array.push(vol_css,#375767), array.push(vol_css,#385868), array.push(vol_css,#385A6A), array.push(vol_css,#395B6B), array.push(vol_css,#395D6D), array.push(vol_css,#3A5F6E), array.push(vol_css,#3B6070), array.push(vol_css,#3B6271), array.push(vol_css,#3C6373), array.push(vol_css,#3C6574), array.push(vol_css,#3D6676), array.push(vol_css,#3E6877), array.push(vol_css,#3E6A79), array.push(vol_css,#3F6B7A), array.push(vol_css,#3F6D7C), array.push(vol_css,#406E7D), array.push(vol_css,#41707E), array.push(vol_css,#417180), array.push(vol_css,#427381), array.push(vol_css,#427583), array.push(vol_css,#437684), array.push(vol_css,#447886), array.push(vol_css,#447987), array.push(vol_css,#457B89), array.push(vol_css,#467D8A), array.push(vol_css,#467E8C), array.push(vol_css,#47808D), array.push(vol_css,#47818F), array.push(vol_css,#488390), array.push(vol_css,#498491), array.push(vol_css,#498693), array.push(vol_css,#4A8894), array.push(vol_css,#4A8996), array.push(vol_css,#4B8B97), array.push(vol_css,#4C8C99), array.push(vol_css,#4C8E9A), array.push(vol_css,#4D8F9C), array.push(vol_css,#4D919D), array.push(vol_css,#4E939F), array.push(vol_css,#4F94A0), array.push(vol_css,#4F96A2), array.push(vol_css,#5097A3), array.push(vol_css,#5099A5), array.push(vol_css,#519AA6), array.push(vol_css,#529CA7), array.push(vol_css,#529EA9), array.push(vol_css,#539FAA), array.push(vol_css,#53A1AC), array.push(vol_css,#54A2AD), array.push(vol_css,#55A4AF), array.push(vol_css,#55A5B0), array.push(vol_css,#56A7B2), array.push(vol_css,#56A9B3), array.push(vol_css,#57AAB5), array.push(vol_css,#58ACB6), array.push(vol_css,#58ADB8), array.push(vol_css,#59AFB9), array.push(vol_css,#5AB1BB)
for i = 0 to row-1
array.push(a,line.new(na,na,na,na,width=2))
array.push(b,line.new(na,na,na,na,width=2))
//-----------------------------------------------------------------------------------------
n = bar_index
src = close
v = volume
//-----------------------------------------------------------------------------------------
var Alvl = 0.
var Blvl = 0.
var current_num_conf = 0
var current_num_cont = 0
highest = highest(length)
lowest = lowest(length)
//----
line l = na
line poc = na
levels = array.new_float(0)
sumv = array.new_float(0)
//----
condition = show_rpoc ? true : barstate.islast
if condition
for i = 0 to row
array.push(levels,lowest + i/row*(highest-lowest))
for j = 0 to row-1
sum = 0.
for k = 0 to length-1
sum := high[k] > array.get(levels,j) and low[k] < array.get(levels,j+1) ?
sum + v[k] : sum
array.push(sumv,sum)
for j = 0 to row-1
mult = array.get(sumv,j)/array.max(sumv)
l := array.get(a,j)
get = array.get(levels,j)
if flip
line.set_xy1(l,n,get)
line.set_xy2(l,n-round(length*width/100*mult),array.get(levels,j))
else
line.set_xy1(l,n-length+1,get)
line.set_xy2(l,n-length+round(length*width/100*mult),array.get(levels,j))
line.set_color(l,grad ? array.get(vol_css,round(mult*99)) : solid)
line.set_width(l,bar_width)
if mult == 1
poc := array.get(b,0)
avg = avg(get,array.get(levels,j+1))
if flip
line.set_xy1(poc,n,avg)
line.set_xy2(poc,n-length+1,avg)
else
line.set_xy1(poc,n-length+1,avg)
line.set_xy2(poc,n,avg)
line.set_color(poc,grad ? #5AB1BB : poc_color)
line.set_style(poc,line.style_dotted)
line.set_width(poc,bar_width)
if show_rpoc
Alvl := array.get(levels,array.indexof(sumv,array.max(sumv)))
Blvl := array.get(levels,array.indexof(sumv,array.max(sumv))+1)
plot(show_rpoc ? avg(Alvl,Blvl) : na,'Rolling POC',color=#ff1100)
//----------------------------------------------------------------------------------------]
2023-04-24
1429
글번호 168423
답변완료
문의
data2 차트에 적용할 수식으로 변경바랍니다.
***********************************************************************
안녕하세요
예스스탁입니다.
input : ma1(7),ma2(3),ma3(4);
var : sumc(0),sumi(0);
if Bdate != Bdate[1] Then
{
sumc = 0;
sumi = 0;
}
sumc = sumc+c;
sumi = sumi+c;
if sumi < ma1 Then
var1 = sumc/sumi;
Else
Var1=ma(c,ma1);
if sumi < ma2 Then
var2 = sumc/sumi;
else
Var2=ma(c,ma2);
if sumi < ma3 Then
var3 = sumc/sumi;
else
Var3=ma(c,ma3);
if CrossUp(var1,Var2) and CrossUp(var2,Var3) Then
Buy();
즐거운 하루되세요
2023-04-24
1030
글번호 168422
답변완료
국내선물, 진입 후 진입시간 기점 5분이 지나야 다른 진입신호를 허용(익절은 제외)
국내선물
운용 중입니다.
진입 후 진입시간을 기점으로(x초 단위) 5분이 지나야
다른 진입신호를 허용하게 하고 싶습니다.
(단 각 진입명의 정해진 익절은 제외)
아래 예제에서 첫번째 진입(macross2-sell)은 5분 이내지만 익절에 도달
했기에 허용.
두번째 진입(sell-stocro-01)은 익절에 도달 안했는데
다른 진입신호(macross2-buy)가 발생하여 절체됨.
-----> 모든 진입은 익절신호는 제외하고,
5분 경과한 후에 발생한 신호만 허용하게 하는 방법을 알려주세요. 감사합니다.
2023-04-24
1157
글번호 168421
답변완료
이런 지표 구현이 가능할까요 ?
다음과 같은 지표 구현이 가능할까요 ?
L이 n기간 이동평균선 * a, 라고 했을 때
지난 n일간 L 위에 있는 면적이 n일간의 면적(n일간의 고저가 합계) 대비 일정 %가 되게 하는 a값을 구하고 싶습니다.
예를 들어
지난 20 이평선에 얼마를 곱했을 때 20일간의 주가 중 L선 위에 있는 영역이 전체 주가 영역의 5% 이하가 될 수 있는가?
(그 중 0.1 단위기준으로 가장 작은 a값: 1.2는 5%가 넘고 1.3부터 5% 이하면 1.3)
for, while을 이용해서 다음처럼 코드를 만들어봤는데 먹통이네요
input: len(20);
var: line(0), sum(0), aboveArea(0), lastPercent(0), k(0), breakWhile(0);
var1 = 10;
breakWhile = 0;
While breakWhile < 1 {
line = ema(c, len) * ( 1 + var1 / 100);
sum = 0;
aboveArea = 0;
lastPercent = 0;
For Var2 = 0 to len-1 {
sum = sum + h[Var2] - l[Var2];
aboveArea = aboveArea + max(0, h[Var2] - line[Var2]);
}
Var3 = aboveArea / Sum;
if lastPercent >= 0.025 and Var3 <= 0.025 Then breakWhile = 1;
Else lastPercent = Var3;
var1 = var1 + 10;
}
if lastPercent - 0.025 <= 0.025 - Var3 Then k = var1 - 10;
Else k = var1;
Plot1(ema(c, len) * (1 + k / 100), "U", Red, 4);
2023-04-23
1133
글번호 168420
답변완료
수식 도움 부탁드립니다
안녕하세요~~ 도움청합니다~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
제의도는 아래와 같은데 ("매수2청")은 매수1진입가보다 손실이-20틱 이상일때만을
나름 지정했음에도 그것이 반영안되고~ ("매수2청")후 곧바로 ("매수1진") 또 곧바로
("매수2청")이 2~3번 반복되고(2청산은 나올수없는곳!!) 모두(1진입가나 2청산가가 똑같은 동일가) 가격으로 신호 출현해서 도움 청합니다
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1번식~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if 단기 < 단기[100] and C / 단기 * 100 > 100 Then buy("매수1진");
if MarketPosition == 1 Then{
if 단기 > 단기[100] Then exitlong("매수1청");
if PositionProfit(0) <= -20 and 단기 > 단기[50] Then exitlong("매수2청손");
}
~~~~~~~~~~~~~~~~~~~~~~~~~아래(2번)식으로 해봐도 동일~~~~~~~~~~~~~~~~~~~~
if MarketPosition == 1 and
IsEntryName("매수1진",0) == true and
C <= EntryPrice(1)-PriceScale*20 and 단기 > 단기[50]
Then exitlong("매수2청손");
/////////////////////////////////////////////////////////////
if MarketPosition == -1 and
IsEntryName("매도1진",0) == true and
C >= EntryPrice(1)+PriceScale*10 and 단기 < 단기[50]
Then ExitShort("매도2청손");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
////////////////////새로 정석수식 부탁드림니다/////////////////
주문설정에서 비용이 제로이므로 (2청산수식을 가능한//1번씩이/편하고 수고쓰럽지만
2청산만은(매수매도) 똑같은 조건으로 1번식과 2번식 해주시면 많은도움 되겠읍니다
(매수1진)~~단기 > 단기[100] and C / 단기 * 100 > 100 매수1청 매수2청 청산후에!!
~~~~~~~~~( 필요하니 청산이 없는 첫신호도 나오게부탁드림)~~~
(매수2진)~~단기 > 중기[100] 매수1청 매수2청 청산후에
(매수1청)~~ 단기 < 단기[100]
("매수2청손")~~직전 매수1-2진입가보다 20틱이상 손실이났을때~~단기 < 단기[50]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(매도1진)~~단기 < 단기[100] and C / 단기 * 100 < 100 매도1청 매도2청 청산후에!!
~~~~~( 필요하니 청산이 없는 첫신호도 나오게부탁드림)~~~
(매도2진)~~단기 < 중기[100] 매도1청 매도2청 청산후에
(매도1청)~~단기 > 단기[100]
("매도2청손")~~직전 매도1~2진입가보다 20틱이상 손실이났을때~~단기 > 단기[50]
감사드립니다~~
2023-04-23
1254
글번호 168419
답변완료
타주기분 지표식 부탁드립니다.
수고하십니다.
아래지표식을 타주기분(N배) 로 변환부탁드립니다.
//===============
var : xClose(0),xOpen(0),xHigh(0),xLow(0);
if index == 0 then
{
xOpen = open;
xClose = (O+H+L+C)/4;
xHigh = MaxList( high, xOpen, xClose);
xLow = MinList( low, xOpen,xClose);
}
else
{
xClose = (O+H+L+C)/4;
xOpen = (xOpen [1] + xClose [1])/2 ;
xHigh = MaxList(High, xOpen, xClose) ;
xLow = MinList(Low, xOpen, xClose) ;
}
##
input : Length(14),Period(20);
var : TR(0),DMPlus(0),DMMinus(0);
var : STR(0),SDMPlus(0),SDMMinus(0);
var : DIP(0),DIM(0),DX(0),ADXv(0);
var : DIPMA(0), DIMMA(0);
TR = max(max(xhigh-xlow, abs(xhigh-xclose[1])), abs(xlow-xclose[1]));
DMPlus = iff(xhigh-xhigh[1] > xlow[1]-xlow , max(xhigh-xhigh[1], 0) , 0);
DMMinus = iff(xlow[1]-xlow > xhigh-xhigh[1] , max(xlow[1]-xlow, 0) , 0);
STR = STR - (STR/Length) + TR;
SDMPlus = SDMPlus - (SDMPlus/Length) + DMPlus;
SDMMinus = SDMMinus - (SDMMinus/Length) + DMMinus;
DIP = SDMPlus / STR * 100;
DIM = SDMMinus / STR * 100;
DX = abs(DIP - DIM) / (DIP + DIM)*100;
ADXv = ma(DX, Length);
DIPMA = WMa(DIP,Period);
DIMMA = WMa(DIM,Period);
###
plot1(ADXv,"ADX",White);
plot2(DIP,"+DI",magenta);
plot3(DIM,"-DI",Lime);
plot4(DIPMA,"DIPMA",Cyan);
plot5(DIMMA,"DIMMA",Red);
PlotBaseLine1(30,"30",Gold);
PlotBaseLine2(20,"20",Gold);
PlotBaseLine3(10,"10",Gold);
//===========
감사합니다
2023-04-23
1105
글번호 168418
답변완료
해외선물 (나스닥)지표수식 부탁드립니다.
안녕하세요.키움을예스로변경수식부탁드립니다.
수식1:LL=Lowest(L,기간);
HH=Highest(H,기간);
NH=Valuewhen(1,H>HH(1),H);
BOX1=Highest(H,기간-2)<Highest(H,기간-1);
TOP=Valuewhen(1,BarsSince(H>HH(1))==(기간-2) AND,BOX1,NH);
BTM=Valuewhen(1,BarsSince(H>HH(1))==(기간-2) AND,BOX1,LL);
shift(BTM,이동)
조건설정:기간(5)
이동(-16)
선색상기본색으로 하시고 변경 가능토록 부탁드립니다.
기간값,이동값,선굵기도 변경가능하도록 부탁드립니다.
2023-04-23
1415
글번호 168417
답변완료
수식 부탁드립니다.
안녕하세요. 항상 감사합니다.
지난주에 수식 요청드렸었는데 기대했던대로 작동이 안되어 다시한번 요청드립니다.
제가 설명을 잘못 드린 것 같아 보다 자세히 설명드리겠습니다.
line1과 line2의 교차 매매인데 교차시에 바로진입을 하는 것이 아니고 위든 아래든 추세가 뚫릴 때 매매하는 것이 핵심입니다.
종목은 나스닥. 매매시간은 21:30~05:50 입니다.
line1 = 단기 이평
line2 = 장기 이평
input : 익절틱수(100),손절틱수(50), 진입틱수(50);
input : tr_onoff(1),최소수익(50),감소수익(50);#트레일링스탑 사용1, 미사용 0
var : line1(0),line2(0);
var : entry1(False) entry2(False; //두 라인이 crossup 또는 crossdown 될 때 entry1 true, 청산시 false. 진입중이면 entry2 true, 청산시 false
if entry1 == False and (CrossUp(line1, line2) or CrossDown(line1, line2)) Then
{ var1 = line1;
entry1= True;
} // 두 라인이 교차되면 crossup 이든 crossdown이든 일단 진입대기 상태가 된다.
if entry1 == True and entry2 == False and 현재가 > var1 + 진입틱수 Then
{
Buy("b");
entry2 = True;
}
if entry1 == True and entry2 == False and 현재가 < var1 - 진입틱수 Then
{
Sell("s");
entry2 = True;
// 진입대기 상태에서 두선의 교차가보다 진입틱수가 높으면 매수진입, 낮으면 매도 진입
// 이 상태에서는 아직 entry1을 False 만들면 안 될 듯. entry1이 False면 첫 번째 조건인 entry1 == False에 다시 진입하기 때문.
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
if tr_onoff == 1 Then
SetStopTrailing(PriceScale*감소수익,PriceScale*최소수익,PointStop);
//예전에 만들어주신건데 이대로 하면 되겠죠?
청산되면 entry1 == False, entry2 == False
이런 수식이면 제가 원하는대로 될 것 같기는 한데. 일단 만들어주시면 확인해봐야겠네요.
가동시간도 확인부탁드립니다. 변수로 조절할 수 있게 만들어 주시면 더 좋을 것 같습니다.
잘부탁드리겠습니다.
2023-04-23
1322
글번호 168416
강장군 님에 의해서 삭제되었습니다.
2023-04-23
0
글번호 168415