커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6345
글번호 230811
답변완료
적용가능하도록 부탁드립니다.
트레이딩 뷰 지표입니다.
적용가능하도록 부탁드립니다.
indicator('Optimized Trend Tracker Oscillator', 'OTTO', overlay=false)
length = input.int(2, 'OTT Period', minval=1)
percent = input.float(0.6, 'OTT Optimization Coeff', step=0.1, minval=0)
flength = input.int(10, 'FAST VIDYA Length', minval=1)
slength = input.int(25, 'SLOW VIDYA Length', minval=1)
coco = input.int(100000, 'Correcting Constant', minval=1)
src1 = input(close, title='Source')
showsignalsc = input(title='OTTO Crossing Signals?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
mav = input.string(title='Moving Average Type', defval='VAR', options=['SMA', 'EMA', 'WMA', 'DEMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF', 'HULL'])
Var_Func1(src1, length) =>
valpha1 = 2 / (length + 1)
vud11 = src1 > src1[1] ? src1 - src1[1] : 0
vdd11 = src1 < src1[1] ? src1[1] - src1 : 0
vUD1 = math.sum(vud11, 9)
vDD1 = math.sum(vdd11, 9)
vCMO1 = nz((vUD1 - vDD1) / (vUD1 + vDD1))
VAR1 = 0.0
VAR1 := nz(valpha1 * math.abs(vCMO1) * src1) + (1 - valpha1 * math.abs(vCMO1)) * nz(VAR1[1])
VAR1
VAR1 = Var_Func1(src1, length)
mov1 = Var_Func1(src1, slength / 2)
mov2 = Var_Func1(src1, slength)
mov3 = Var_Func1(src1, slength * flength)
src = mov1 / (mov2 - mov3 + coco)
Var_Func(src, length) =>
valpha = 2 / (length + 1)
vud1 = src > src[1] ? src - src[1] : 0
vdd1 = src < src[1] ? src[1] - src : 0
vUD = math.sum(vud1, 9)
vDD = math.sum(vdd1, 9)
vCMO = nz((vUD - vDD) / (vUD + vDD))
VAR = 0.0
VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
VAR
VAR = Var_Func(src, length)
DEMA = 2 * ta.ema(src, length) - ta.ema(ta.ema(src, length), length)
Wwma_Func(src, length) =>
wwalpha = 1 / length
WWMA = 0.0
WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
WWMA
WWMA = Wwma_Func(src, length)
Zlema_Func(src, length) =>
zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
zxEMAData = src + src - src[zxLag]
ZLEMA = ta.ema(zxEMAData, length)
ZLEMA
ZLEMA = Zlema_Func(src, length)
Tsf_Func(src, length) =>
lrc = ta.linreg(src, length, 0)
lrc1 = ta.linreg(src, length, 1)
lrs = lrc - lrc1
TSF = ta.linreg(src, length, 0) + lrs
TSF
TSF = Tsf_Func(src, length)
HMA = ta.wma(2 * ta.wma(src, length / 2) - ta.wma(src, length), math.round(math.sqrt(length)))
Var_Funcl(srcl, length) =>
valphal = 2 / (length + 1)
vud1l = srcl > srcl[1] ? srcl - srcl[1] : 0
vdd1l = srcl < srcl[1] ? srcl[1] - srcl : 0
vUDl = math.sum(vud1l, 9)
vDDl = math.sum(vdd1l, 9)
vCMOl = nz((vUDl - vDDl) / (vUDl + vDDl))
VARl = 0.0
VARl := nz(valphal * math.abs(vCMOl) * srcl) + (1 - valphal * math.abs(vCMOl)) * nz(VARl[1])
VARl
getMA(src, length) =>
ma = 0.0
if mav == 'SMA'
ma := ta.sma(src, length)
ma
if mav == 'EMA'
ma := ta.ema(src, length)
ma
if mav == 'WMA'
ma := ta.wma(src, length)
ma
if mav == 'DEMA'
ma := DEMA
ma
if mav == 'TMA'
ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
ma
if mav == 'VAR'
ma := VAR
ma
if mav == 'WWMA'
ma := WWMA
ma
if mav == 'ZLEMA'
ma := ZLEMA
ma
if mav == 'TSF'
ma := TSF
ma
if mav == 'HULL'
ma := HMA
ma
ma
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir == 1 ? longStop : shortStop
HOTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200
HOTTC = color.new(color.red, 0)
LOTT = src
LOTTC = color.new(color.blue, 0)
HOTTLine = plot(nz(HOTT[2]), title='HOTT', color=HOTTC, linewidth=2, style=plot.style_line)
LOTTLine = plot(nz(LOTT), title='LOTT', color=LOTTC, linewidth=2, style=plot.style_line)
FillColor = highlighting and LOTT < HOTT[2] ? color.new(color.red, 20) : color.new(color.green, 20)
fill(HOTTLine, LOTTLine, title='Highligter', color=FillColor)
alertcondition(ta.crossunder(HOTT[2], LOTT), title='Crossover Alarm', message='OTTO - BUY SIGNAL!')
alertcondition(ta.crossover(HOTT[2], LOTT), title='Crossunder Alarm', message='OTTO - SELL SIGNAL!')
buySignalc = ta.crossunder(HOTT[2], LOTT)
plotshape(buySignalc and showsignalsc ? HOTT[2] * 0.9995 : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
sellSignallc = ta.crossover(HOTT[2], LOTT)
plotshape(sellSignallc and showsignalsc ? LOTT * 1.0005 : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
2024-06-26
848
글번호 181013
구경꾼그림자 님에 의해서 삭제되었습니다.
2024-06-26
17
글번호 181011
답변완료
문의드립니다
LT=LOWEST(L,P1);
HT=HIGHEST(C, P1);
NewH=VALUEWHEN(1,C>HT(1),C);
BOX1=HIGHEST(C, P1-2)<HIGHEST(C, P1-1);
TOP=VALUEWHEN(1,BarsSince(C>HT(1))==(P1-2)AND BOX1,NewH);
BTM=VALUEWHEN(1,BarsSince(C>HT(1))==(P1-2)AND BOX1,LT);
top
p1 15
이선을 돌파하는 종목검색으로 부탁드립니다
2024-06-26
689
글번호 181010
답변완료
새로운날의 시간대 데이타 저장하기
//sTime : 봉의 시작시간, sDate :봉의 시작날짜
var : cnt(0),opmax(0),opmin(0),opmid(0);
Array : DO[10](0),DH[10](0),DL[10](0),DC[10](0);
//sTime : 봉의 시작시간, sDate :봉의 시작날짜
if (sDate != sDate[1] and sTime >= 84500) Or
(sDate == sDate[1] and sTime >= 84500 and sTime[1] < 154500) Then
{
DO[0] = O;
DH[0] = H;
DL[0] = L;
DC[0] = C;
for cnt = 1 to 9
{
DO[cnt] = DO[cnt-1][1];
DH[cnt] = DH[cnt-1][1];
DL[cnt] = DL[cnt-1][1];
DC[cnt] = DC[cnt-1][1];
}
}
if sTime >= 84500 and sTime <= 91500 then
{
DC[0] = C;
if DH[0] > O and H > DH[0] Then
DH[0] = H;
if DL[0] < O and L < DL[0] Then
DL[0] = L;
opmax = DH[0];//85000 ~ 91500 까지의 최고값(앞에 첫봉은 버린다)
opmin = DL[0];//85000 ~ 91500 까지의 최저값(앞에 첫봉은 버린다)
opmid = (opmax + opmin)/2;
}
plot4(opmax,"opmax");
plot5(opmid,"opmid");
plot6(opmin,"opmin");
///85000 ~ 91500 까지의 최고저값(앞에 첫봉은 버린다)을 출력하는식 입니다
데이타가 잘못 추력되고 있어서 문의 합니다 . 수고 부탁드리겠 습니다.
2024-06-26
814
글번호 181005
산수유 님에 의해서 삭제되었습니다.
2024-06-26
0
글번호 181004
답변완료
검색식 부탁 드립니다
2
input : L기간(15),R기간(12);
input : N(14),K(8),간격(5);
if Highest(H,L기간+R기간+1)==H[R기간] Then
{
var1 = H[R기간];
}
if lowest(L,L기간+R기간+1)==L[R기간] Then
{
var2 = L[R기간];
}
Var3 = (var1+Var2)/2;
Var4 = Ema(c,n);
value1 = Var4[k];
value2 = Var4[k+간격];
value3 = Var4[k+간격*2];
value4 = Var4[k+간격*3];
value5 = Var4[k+간격*4];
if var1[1] > 0 and Var2[1] > 0 and
var3[1] >= max(value1,Value2,Value3,Value4,Value5) and min(value1,Value2,Value3,Value4,Value5) >= Var2[1] and
CrossUp(c,Var3[1]) Then
Find(1);
이 검색식은 중심선을 돌파한 종목을 잡아 주는데
아직 중심선을 돌파 하지 않은 종목 검색식도 가능한가요
가능하시면 부탁 드립니다
2024-06-26
948
글번호 181001
답변완료
청산논리
2개의 청산을 조건에 따라 연결하려고 합니다
es01,es02청산식을 합치는게 아니라
분리된 상태에서 조건으로 간접연결하는겁니다
if 조건1 then
exitshort("es01")
if 조건2 then
exitshort("es02")
위의 산식을
진입후,
1)첫봉~3봉사이에서 조건1을 만족할때
조건3을 만족시 es02로 청산
조건3을 불만족시 es01로 청산
2)4봉이후에는 es01로 청산 하려합니다
부탁드립니다
2024-06-26
778
글번호 180986
답변완료
종목검색부탁드립니다.
안녕하세요?
1. 15%이상 상승종목
2. 15%이상 상승 후 5봉이후부터 최저거래량 발생
3.종가는 20일선이 크고 60일선이 작은 그 사이에
예시) 20일선 > C >60일선
이런 종목을 검색하고 싶습니다.
감사합니다.
2024-06-26
702
글번호 180985
불스아이 님에 의해서 삭제되었습니다.
2024-06-26
1
글번호 180984