커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1395
글번호 230811
답변완료
시스템 부탁 드립니다.
var : mav1(0),mav2(0),mav3(0),T1(0),T2(0),T3(0);
mav1 = ma(c,5);
mav2 = ma(c,20);
mav3 = ma(c,60);
if mav1 > mav1[1] Then
T1 = 1;
if mav1 < mav1[1] Then
T1 = -1;
if T1 == 1 and T1[1] != 1 Then
var1 = 0;
// if T1 == 1 and C > O and (C+O)/2 >= mav1 and mav2 > mav2[1] and mav3 > mav3[1] Then{ 60이평포함
if T1 == 1 and C > O and (C+O)/2 >= mav1 and mav2 > mav2[1] and mav1 > mav2 Then{
var1 = var1+1;
if var1 == 1 Then
buy("5매수");
}
if T1 == -1 and T1[1] != -1 Then
var2 = 0;
// if T1 == -1 and C < O and (C+O)/2 <= mav1 and mav2 < mav2[1] and mav3 < mav3[1] Then{ 60이평포함
if T1 == -1 and C < O and (C+O)/2 <= mav1 and mav2 < mav2[1] and mav1 < mav2 Then{
var2 = var2+1;
if var2 == 1 Then
sell("5매도");
}
위 수식을 90틱에 적용중입니다.
여기에 5분봉을 불러와서
5분봉의 캔들이 양봉이면서 5분봉의 5선 위에 있을때만 90틱에 매수신호가
5분봉의 캔들이 음봉이면서 5분봉의 5선 아래에 있을때만 90틱에 매도의 신호가 나오게 수정 부탁 드립니다.
2024-06-27
839
글번호 181023
구경꾼그림자 님에 의해서 삭제되었습니다.
2024-06-27
1
글번호 181022
답변완료
문의
input : StartTime(1015000),EndTime(130000);
var : Tcond(false),cnt(0);
Array : DO[20](0),DH[20](0),DL[20](0),DC[20](0);
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
for cnt = 19 downto 1
{
DO[cnt] = DO[cnt-1];
DH[cnt] = DH[cnt-1];
DL[cnt] = DL[cnt-1];
DC[cnt] = DC[cnt-1];
}
DO[0] = O;
DH[0] = H;
DL[0] = L;
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
{
Tcond = False;
}
if Tcond == true Then
{
DC[0] = C;
if H > DH[0] Then
DH[0] = H;
if L < DL[0] Then
DL[0] = L;
}
plot1(DO[1],"1일전시가");
plot2(DH[1],"1일전고가");
plot3(DL[1],"1일전저가");
plot4(DO[2],"2일전시가");
plot5(DH[2],"2일전고가");
plot6(DL[2],"2일전저가");
plot7(DO[3],"3일전시가");
plot8(DH[3],"3일전고가");
plot9(DL[3],"3일전저가");
전에 만들어주신 식 모두0으로 나옵니다.
2024-06-27
826
글번호 181021
답변완료
수식요청
INPUT : shortPeriod(9),midPeriod(26),longPeriod(52),이평(13);
VAR : 선행1(0),선행2(0),고점(0),저점(0),A(0),B(0);
선행1=(highest(high,shortPeriod)+lowest(low,shortPeriod)+highest(high,midPeriod)+lowest(low,midPeriod))/4;
선행2=(highest(high,longPeriod)+lowest(low,longPeriod))/2;
고점 = Highest(선행1,25);
저점 = lowest(선행1,25);
IF 선행1<선행2 TheN
A=저점;
B=EMA(C, 이평);
IF CROSSUP(B, A) && C>O && C>C[1] && B[1]<B && (V>V[1]*2 or V[1]>V[2]*5) TheN
Find(1);
===========================================================================
위는 13지수이평이 선행스팬기준선을 돌파하는 검색수식입니다.
시가가 아래의 선 아래에 위치할 때 발생하는 돌파를 검색코자 합니다.
AA=(H+L+C)/3;
BB=AA*V;
X1=SUM(BB,기간);
X2=SUM(V,기간);
CT=X1/X2;
CT-D2*stdev(AA, 기간)
(기간 200 D2= 2)
2024-06-27
633
글번호 181018
답변완료
진입청산 시간설정 문의
해외선물 시간설정을 다음과 같이 적용하여 시뮬레이션을 돌려 봤더니 시간설정 범위외에서도 진입청산이 이루어진 것을 발견했습니다.
제가 설정이 잘못 된것 같은데 바로 잡아 주시면 고맙겠습니다.
input : StartTime(090310), EndTime(160900);
var : Tcond(False);
var : upper(0),lower(0);
lower = lowest(L,length);
upper = highest(H,length);
var : up(0),down(0),sup(0),sdown(0);
var : k1(0),k2(0),k3(0),k4(0),i1(-1),i2(-1), BollUp(0), BollDown(0), Ma20(0), BWI(0), Magijun(0) ;
IF Endtime > starttime Then
SetStopEndofday(Endtime);
Else
{
if sDate != sDate[1] Then
SetStopEndofday(Endtime);
}
if Bdate != Bdate[1] Then
{
IF Endtime <= starttime Then
{
SetStopEndofday(0);
}
}
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
Tcond = true;
}
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
2024-06-27
677
글번호 181017
답변완료
당일
Input : 전환(0.45);
Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분("");
Array:고[10,4](0),저[10,4](0);
var : box(0),TX(0),TX2(0),TL(0),TL1(0);
HH = H;
LL = L;
If Index == 0 Then
{
고[1,1] = HH;
고[1,2] = 0;
고[1,3] = sDate;
고[1,4] = sTime;
저[1,1] = LL;
저[1,2] = 0;
저[1,3] = sDate;
저[1,4] = sTime;
}
If Index > 0 Then
{
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HH[hiBar] < HH Then hiBar = 0;
If LL[loBar] > LL Then loBar = 0;
Condition1 = 저[1,1]+전환 <= HH and hiBar == 0;
Condition2 = 고[1,1]-전환 >= LL and loBar == 0;
처리구분 = "";
If Condition1 and Condition2 Then
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL = TL_New_Self(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL,1);
TL_SetColor(TL,RED);
TX = Text_New_Self(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetSize(tx,25);
Text_SetColor(tx,Red);
Text_SetStyle(tx,1,1);
Text_SetBold(tx,1);
box = Box_New_Self(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
}
If 고[1,1] < HH[hiBar] Then
{
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL,고[1,3],고[1,4],고[1,1]);
Text_SetString(TX,NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetLocation(TX,고[1,3],고[1,4],고[1,1]);
Box_SetEnd(box,고[1,3],고[1,4],고[1,1]);
}
if 고[1,1] >= 저[1,1]+1.9 Then
{
Box_SetColor(box,Pink);
Box_SetFill(box,true,60);
}
else if 고[1,1] < 저[1,1]+1.9 and 고[1,1] >= 저[1,1]+1.3 Then
{
Box_SetColor(box,Gray);
Box_SetFill(box,true,40);
}
else if 고[1,1] < 저[1,1]+1.3 and 고[1,1] >= 저[1,1]+0.8 Then
{
Box_SetColor(box,Magenta);
Box_SetFill(box,true,30);
}
else if 고[1,1] < 저[1,1]+0.8 and 고[1,1] >= 저[1,1]+0.6 Then
{
Box_SetColor(box,Gray);
Box_SetFill(box,true,50);
}
else
{
Box_SetColor(box,Orange);
Box_SetFill(box,true,70);
}
최종꼭지점 = "고점";
Plot1(고[1,1]);
NoPlot(2);
}
If 처리구분 == "저점처리" Then
{
If 최종꼭지점 == "고점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL = TL_New_Self(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL,1);
TL_SetColor(TL,Green);
TX = Text_New_Self(저[1,3],저[1,4],저[1,1],NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetSize(tx,25);
Text_SetColor(tx,Blue);
Text_SetStyle(tx,1,0);
Text_SetBold(tx,1);
Condition5 = False;
if Condition5 == False and 저[1,1]<= 고[1,1]-0.9 Then
{
Condition5 = true;
}
box = Box_New_Self(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
}
If 저[1,1] > LL[loBar] Then
{
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL,저[1,3],저[1,4],저[1,1]);
Text_SetString(TX,NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetLocation(TX,저[1,3],저[1,4],저[1,1]);
if Condition5 == False and 저[1,1] <= 고[1,1]-0.9 Then
{
Condition5 = true;
tx2 = Text_New_Self(저[1,3],저[1,4],저[1,1]+0.6,"★");
Text_SetStyle(tx2,2,2);
Text_SetColor(tx2,Blue);
Text_SetSize(tx2,70);
}
Box_SetEnd(box,저[1,3],저[1,4],저[1,1]);
}
if 저[1,1] > 고[1,1]-0.6 Then
{
Box_SetColor(box,Cyan);
Box_SetFill(box,true,80);
}
else if 저[1,1] <= 고[1,1]-0.6 and 저[1,1] > 고[1,1]-0.9 Then
{
Box_SetColor(box,Yellow);
Box_SetFill(box,true,120);
}
else if 저[1,1] <= 고[1,1]-0.9 and 저[1,1] > 고[1,1]-1.3 Then
{
Box_SetColor(box,Lime);
Box_SetFill(box,true,70);
}
else if 저[1,1] <= 고[1,1]-1.3 and 저[1,1] > 고[1,1]-1.6 Then
{
Box_SetColor(box,Cyan);
Box_SetFill(box,true,70);
}
else if 저[1,1] <= 고[1,1]-1.6 and 저[1,1] > 고[1,1]-1.9 Then
{
Box_SetColor(box,Blue);
Box_SetFill(box,true,20);
}
else
{
Box_SetColor(box,Yellow);
Box_SetFill(box,true,70);
}
최종꼭지점 = "저점";
Plot2(저[1,1]);
NoPlot(1);
}
모든 지표의 계산을, 전일과 무관하게 당일 시초부터 계산. 표시는 전일도.
수식 추가가 대략 20줄 이상으로 복잡하게 많으면, 아예 당일만 표시.
당일만 표시에도 20줄 이상 추가되면 취소. 감사합니다.
2024-06-27
979
글번호 181016
답변완료
문의
하이캔아시 챠트를 키움 챠트처름 윗꼬리 아래꼬리가 표현되는 캔들 챠트로 표현할 수없나요
2024-06-27
678
글번호 181015
답변완료
검색식 부탁 드려요
Trix 거래량 지표입니다.
거래량이 0선 위에 있는(양봉) 종목 검색식 부탁드려요.
(수식1) TRIX거래량
(eavg(eavg(eavg(v,period),period),period) -
eavg(eavg(eavg(v(1),period),period),period)) /
eavg(eavg(eavg(v(1),period),period),period)*100
- 지표조건설정
period : 20
2024-06-27
682
글번호 181014
답변완료
적용가능하도록 부탁드립니다.
트레이딩 뷰 지표입니다.
적용가능하도록 부탁드립니다.
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
724
글번호 181013