커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
2644
글번호 230811
답변완료
부탁드립니다
$,언제나 늘 신속명쾌한 답변을 주시는 관리자님께 경의를 표하며 아래조건 로직을 재삼
부탁드립니다.
1,음봉 다음캔들이 캔들 아래꼬리 길이가 몸통 길이 보다 3배이살 클때를 기본 조건으로
합니다
ㅡ,O < C 이고,H = C 또는 C < H(+2틱까지)일때 양봉캔들에 강조색 RED
2,양봉다음 캔들이 캔들 윗꼬리 길이가 몸통 길이 보다 3배이살 클때를 기본 조건으로
합니다
ㅡ,O > C 이고,L = C 또는 C > L(-2틱까지)일때 음봉캔들에 강조색 BLUE
$$,고맙습니다.
2020-10-03
946
글번호 142815
답변완료
문의드립니다~
input : 분주기(30),P(5),분주기1(15),분주기2(5);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0),sum(0),mav(0),tf1(0),TFF(0),entry(false),tf2(0);
Array : CC[100](0),OO[100](0),HH[100](0),LL[100](0),TT[100](0),ii[100](0),O2[100](0);
Array : C1[100](0),T1[100](0);
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) Then{
S1 = TimeToMinutes(100000);
D1 = sdate;
}
if D1 > 0 then{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TFF = TM%60;
TF = TM%분주기;
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) or
(TF < TF[1]) Then{
OO[0] = o;
HH[0] = H;
LL[0] = L;
TT[0] = stime;
ii[0] = 0;
for cnt = 1 to 99{
OO[cnt] = OO[cnt-1][1];
HH[cnt] = HH[cnt-1][1];
LL[cnt] = LL[cnt-1][1];
CC[cnt] = CC[cnt-1][1];
TT[cnt] = TT[cnt-1][1];
ii[cnt] = ii[cnt-1][1];
}
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
ii[0] = ii[0]+1;
TF1 = TM%분주기1;
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) or
(TF1 < TF1[1]) Then{
T1[0] = stime;
for cnt = 1 to 99{
C1[cnt] = C1[cnt-1][1];
T1[cnt] = T1[cnt-1][1];
}
}
C1[0] = C;
TF2 = TM%분주기2;
if (sdate != sdate[1] and stime >= 100000) or
(sdate == sdate[1] and (Stime == 100000 or (stime > 100000 and stime[1] < 100000))) or
(TF2 < TF2[1]) Then{
O2[0] = o;
for cnt = 1 to 99{
O2[cnt] = O2[cnt-1][1];
}
}
}
1.
위식의 oo[0]에서
"매30분마다 oo[0]가 새로 생성되고 나서 10봉이내일때만(30분시초가 이후로 10개캔들 이내일때만) 진입한다"를
식으로 표현하고 싶습니다.
2.
위 식을 기준으로
30분단위로 30분시초가(oo[0])에 매수
30분종가에 청산식도 부탁드립니다.
감사합니다~
2020-10-03
948
글번호 142814
답변완료
트레이딩뷰 PMax 지표를 예스수식으로 변환요청드립니다.
//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//developer: @KivancOzbilgic
//author: @KivancOzbilgic
study("Profit Maximizer","PMax", overlay=true)
src = input(hl2, title="Source")
Periods = input(title="ATR Length", type=input.integer, defval=10)
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
mav = input(title="Moving Average Type", defval="EMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
length =input(10, "Moving Average Length", minval=1)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsupport = input(title="Show Moving Average?", type=input.bool, defval=true)
showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true)
showsignalsc = input(title="Show Price/Pmax Crossing Signals?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
getMA(src, length) =>
ma = 0.0
if mav == "SMA"
ma := sma(src, length)
ma
if mav == "EMA"
ma := ema(src, length)
ma
if mav == "WMA"
ma := wma(src, length)
ma
if mav == "TMA"
ma := sma(sma(src, ceil(length / 2)), 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
ma
MAvg=getMA(src, length)
longStop = MAvg - Multiplier*atr
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + Multiplier*atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? 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
PMax = dir==1 ? longStop: shortStop
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Moving Avg Line")
pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0)
alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")
buySignalk = crossover(MAvg, PMax)
plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallk = crossunder(MAvg, PMax)
plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
buySignalc = crossover(src, PMax)
plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, PMax)
plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)
-----------------------------------------------------------------------------------
1. buy와 sell이 들어가는거 보면 지표수식은 아닌거 같고 시스템수식인지 잘모르겠는데
저는 지표수식으로 요청했는데 지표수식이 아니면 시스템으로 변경요청해주셔요.
그냥 시스템식과 지표식 둘다 가능하면 둘다 만들어주시면 감사하겠습니다.
-----------------------------------------------------------------------------------
input : length(100),mult(1);
var : src(0),a(0),b(0),size(0);
src = close;
size = iff((a[1]-a[2]) > 0 or (b[1]-b[2]) < 0 , atr(length) ,TrueRange);
if a[1] > a[2] Then
{
Condition1 = true;
var1 = 0;
}
Else
{
if Condition1 == true Then
var1 = var1+1;
}
if b[1] < b[2] Then
{
Condition2 = true;
var2 = 0;
}
Else
{
if Condition2 == true Then
var2 = var2+1;
}
a = max(src,a[1]) - size/pow(length,2)*(var1*mult);
b = min(src,b[1]) + size/pow(length,2)*(Var2*mult);
plot1(a);
plot2(b);
------------------------------------------------------------------------
2.채널의 상단과 하단의 중심선을 만들어 표시하고 싶은데요.
중심에 점선으로 표시하고 싶습니다.
상승하락 구분되게끔 상승시 빨강 하락시 파랑으로 표시해주시면 좋겠습니다.
수식을 첨가해서 만들어주시면 감사하겠습니다.
------------------------------------------------------------------------
Input:Period(14),n(0),multi(0.5),Left(3),Right(3);
Var:기울기(0),절편(0),회귀선(0),회귀선tmp(0),채널폭(0),j(0),T(0);
var : 상단1(0),상단2(0),하단1(0),하단2(0),TL1(0),TL2(0);
기울기 = LRS(C, Period)[n];
절편 = _intercept(C,Period)[n];
회귀선 = 기울기 * Index + 절편;
채널폭 = 0;
for j = n to Period + n - 1
{
회귀선tmp = 기울기 * Index[j] + 절편;
채널폭 = max(채널폭,max(abs(H[j] - 회귀선tmp),abs(회귀선tmp - L[j])));
}
if 회귀선 > 회귀선[1] Then
T = 1;
if 회귀선 < 회귀선[1] Then
T = -1;
상단2 = 회귀선 + 채널폭 * multi;
상단1 = 회귀선 + 채널폭;
하단1 = 회귀선 - 채널폭;
하단2 = 회귀선 - 채널폭 * multi;
plot1(회귀선,"회귀선",iff(T==1,RED,BLUE));
plot2(상단1);
plot3(하단1);
plot4(상단2);
plot5(하단2);
if SwingHigh(1,상단2,left,right,left+right+1) != -1 Then
{
var1 = 상단1[right];
TL1 = TL_New(sDate[right],sTime[right],var1,sDate,sTime,var1);
TL_SetColor(TL1,BLUE);
}
Else
TL_SetEnd(TL1,sDate,sTime,var1);
if Swinglow(1,하단2,left,right,left+right+1) != -1 Then
{
var2 = 하단1[right];
TL2 = TL_New(sDate[right],sTime[right],var2,sDate,sTime,var2);
TL_SetColor(TL2,RED);
}
Else
TL_SetEnd(TL2,sDate,sTime,var2);
----------------------------------------------------------------------------------
3. 위 그래프선형채널 수식에 상단하단 빨간선 파란선 나오는 부분에 글자표시 해주시면 감사하겠습니다. 파란선 왼쪽 옆에 "수" 표시가 나오게끔 해주시고 빨간선 오른쪽 옆에 "도" 표시가 나오게끔 해주시면 좋겠습니다.
-----------------------------------------------------------------------------------
var:text1(0);
plot1(I_CurrentContracts);
PlotBaseLine1(0);
If I_CurrentContracts <> 0 and I_CurrentContracts[1] <> I_CurrentContracts Then {
text1 = Text_New_Self(sDate,sTime,I_CurrentContracts,numtostr(I_CurrentContracts,0));
Text_SetBold(text1,1);
Text_SetSize(text1,18);
Text_SetStyle(text1,0,IFF(I_MarketPosition==1,0,1));
}
--------------------------------------------------------------------------------------
4. 포지션현재수량 수식인데요.
제가 원하는게 1분봉에서 추세를 파악하려하는데
1분봉상에서 타주기 5분봉, 10분봉, 30분봉, 60분봉의 포지션현재수량이 보조지표로 표현되게끔 할수 있을까요?
가능하면 부탁드리겠습니다.
2020-10-04
1132
글번호 142812
답변완료
문의드립니다.
이평 1 이 당일시가를 상향돌파 매수.당일시가 하향돌파 매도.
돌파시마다 물량 1개씩 늘어나게 해주세요.
(물량 1개씩 늘릴 때 먼저 진입한 물량을 손절청산 하고 다시 진입하게끔 해주세요.
예를 들어 2개가 진입되었다면 3개째 진입이 발생하게 될 때 먼저 진입한 2개를 먼저 손절청산하고 바로 다시 3개를 진입하면 되는 겁니다.이런식으로 진입이 계속 이루어지면 됩니다.)
(뷰가 바뀔 때 먼저 매입된 것 부터 청산하고 바로 다시 진입하게 해 주세요.)
이렇게 해 돌라고 하는 이유는 물론 아시겠지만,혹시 또 헷갈릴 수 있을거 같아서 몇 자 적어봅니다. 이유인 즉,먼저 진입한 거 먼저 청산하고 다시 바로 물량 진입해 돌라고 하는 건
뷰가 바뀔 때
보통 먼저 매입한 물량하고 재진입되는 물량과 합해서 계산하게 되잖아요.그렇게 되면 만약,제 계좌에 있는 돈이 적으면 먼저 매입한 물량만 청산되고 다음 체결이 안되기 때문에 ....무슨말인가 아시죠.ㅎ)
전체 수익 100틱이면 당일 시스템 완전종료.
(마이너스 난게 있다면 그 마이너스 난 거 다 빼고 수익을 말하는 겁니다.)
시작시간 오전9시 부터 해 주세요.
부탁드립니다. 수고하세요.
2020-10-02
921
글번호 142811
답변완료
문의드립니다.
이평 1 이 이평 2 위에 있고 첫번째 음봉 1차매수.두번째 음봉 2차매수.
이평 1 이 이평 2 아래에 있고 첫번째 양봉 1차매도.두번째 양봉 2차매도.
(뷰가 바뀔 때 먼저 매입된 것 부터 청산하고 바로 다시 진입하게 해 주세요.)
이렇게 해 돌라고 하는 이유는 물론 아시겠지만,혹시 또 헷갈릴 수 있을거 같아서 몇 자 적어봅니다. 이유인 즉,먼저 진입한 거 먼저 청산하고 다시 바로 물량 진입해 돌라고 하는 건
뷰가 바뀔 때
보통 먼저 매입한 물량하고 재진입되는 물량과 합해서 계산하게 되잖아요.그렇게 되면 만약,제 계좌에 있는 돈이 적으면 먼저 매입한 물량만 청산되고 다음 체결이 안되기 때문에 ....무슨말인가 아시죠.ㅎ)
부탁드립니다. 수고하세요.
2020-10-02
1117
글번호 142810
답변완료
강조
그림1과 같이
480틱봉차트에서 5일선은 무시하고 20일선 60일선 120선 240선 꺽임 부분을 숫자로 표기 원합니다
상승이 끝나고 하향할때 또다시 1부터~~순차적으로 표기되게 부탁드려봅니다
사진과 같이
20일선은 주황색
60일선은 노란색
120일선은 초록색
240일선은 파란색으로 부탁드립니다
2020-10-02
1298
글번호 142809
답변완료
지표
다시 변경 부탁드립니다
제가 초보라 말씀을 잘못드렸습니다..현제봉을따라다니면서 선이 나타나는데요
제가 원하는 선은 그림1과 같이 수직선을 나타내고 싶습니다
그리고 그림2와 같이 채우기란이 비활성화 되어 있는데요
채우기 기능은 할수 없는건가요??
2020-10-02
1219
글번호 142808
답변완료
수식 문의 드립니다.
안녕하세요 담당자님
우선 감사 드립니다.
제가 이전 직무재그 50%를 기준으로 매수나 매도 시스템을
만들고 싶은데 아래와 같이 했을때 안되서요
확인 부탁 드립니다.
예로 매수는 이전하락 지그재그의 50%를 돌파시 매수
매도는 이전 상승 지그재그의 50%를 돌파시 매도
이런 식으로 할려고 합니다.
Input:chngRate(0.1);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
Condition1 = Min(valArr[1],valArr[2]) * (1 + (chngRate/100)) < H and lastHiVal < H;
Condition2 = Max(valArr[1],valArr[2]) * (1 - (chngRate/100)) > L and (lastLoVal > L || lastLoVal == 0);
If Condition1 Then { lastHiVal = H; lastLoVal = 0; }
If Condition2 Then { lastLoVal = L; lastHiVal = 0; }
turnPntBit = "";
If Condition1 and Condition2 Then
{
If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H,L);
barArr[1] = 0;
TL_SetEnd(TL1,sDate[barArr[1]+20],sTime[barArr[1]+20],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then
{
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then{
TL1 = TL_New(sDate[barArr[2]+20],sTime[barArr[2]+20],valArr[2],sDate[barArr[1]+20],sTime[barArr[1]+20],valArr[1]);
if crossup (c,(((turnPntArr[2][1] =="Lo")-(turnPntArr[1][0]=="Hi"))/2)) Then{
buy();
}
if crossdown(c,(((turnPntArr[2][1] =="Lo")-(turnPntArr[3][2] =="Hi")/2)) Then{
sell();
}
}
Else
TL_SetEnd(TL1,sDate[barArr[1]+18],sTime[barArr[1]+18],valArr[1]);
}
}
TL_SetSize(TL1,2);
TL_SetColor(TL1,blue);
2020-10-01
1152
글번호 142807
답변완료
봉크기
늘 감사합니다.
아래 수식의 조건에서 data3에 쓸수 있도록 해 주세요.
해외선물용 입니다.
0.8은 가격 틱수로 변환, 50틱 기준
if H >= L+0.8 Then
var1 = (h+L)/2;
plot1(var1);
*선택된 봉의 조건에서 1, 2, 3, 4, 5의 수식을 부탁합니다. 수평선입니다
1. 중간선 (현재 plot1(var1)로 잘 표현됩니다)
2. 고가선 (추가해 주세요)
3. 저가선 (추가해 주세요)
4. 시가선 (추가해 주세요)
5. 종가선 (추가해 주세요)
감사합니다.
2020-10-01
1172
글번호 142806