커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5459
글번호 230811
답변완료
수식변형 부탁드립니다
예스트레어더에서 사용할수 있게 수식 변형좀 해주시면 감사하겠습니다.
//
// @author LonesomeTheBlue
//
//@version=3
study("Higher High Lower Low Strategy", overlay =true)
lb = input(2, title="Left Bars", minval = 1)
rb = input(2, title="Right Bars", minval = 1)
showsupres = input(true, title="Show Support/Resistance")
changebarcol = input(true, title="Change Bar Color")
mb = lb + rb + 1
ph = iff(not na(high[mb]), iff(highestbars(high, mb) == -lb, high[lb], na), na) // Pivot High
pl = iff(not na(low[mb]), iff(lowestbars(low, mb) == -lb, low[lb], na), na) // Pivot Low
hl = na
hl := iff(ph, 1, iff(pl, -1, na)) // Trend direction
zz = na
zz := iff(ph, ph, iff(pl, pl, na)) // similar to zigzag but may have multiple highs/lows
zz :=iff(pl and hl == -1 and valuewhen(hl, hl, 1) == -1 and pl > valuewhen(zz, zz, 1), na, zz)
zz :=iff(ph and hl == 1 and valuewhen(hl, hl, 1) == 1 and ph < valuewhen(zz, zz, 1), na, zz)
hl := iff(hl==-1 and valuewhen(hl, hl, 1)==1 and zz > valuewhen(zz, zz, 1), na, hl)
hl := iff(hl==1 and valuewhen(hl, hl, 1)==-1 and zz < valuewhen(zz, zz, 1), na, hl)
zz := iff(na(hl), na, zz)
findprevious()=> // finds previous three points (b, c, d, e)
ehl = iff(hl==1, -1, 1)
loc1 = 0.0, loc2 = 0.0, loc3 = 0.0, loc4 = 0.0
xx = 0
for x=1 to 1000
if hl[x]==ehl and not na(zz[x])
loc1 := zz[x]
xx := x + 1
break
ehl := hl
for x=xx to 1000
if hl[x]==ehl and not na(zz[x])
loc2 := zz[x]
xx := x + 1
break
ehl := iff(hl==1, -1, 1)
for x=xx to 1000
if hl[x]==ehl and not na(zz[x])
loc3 := zz[x]
xx := x + 1
break
ehl := hl
for x=xx to 1000
if hl[x]==ehl and not na(zz[x])
loc4 := zz[x]
break
[loc1, loc2, loc3, loc4]
a = na, b = na, c = na, d = na, e = na
if not na(hl)
[loc1, loc2, loc3, loc4] = findprevious()
a := zz
b := loc1
c := loc2
d := loc3
e := loc4
_hh = zz and (a > b and a > c and c > b and c > d)
_ll = zz and (a < b and a < c and c < b and c < d)
_hl = zz and ((a >= c and (b > c and b > d and d > c and d > e)) or (a < b and a > c and b < d))
_lh = zz and ((a <= c and (b < c and b < d and d < c and d < e)) or (a > b and a < c and b > d))
plotshape(_hl, text="HL", title="Higher Low", style=shape.labelup, color=lime, textcolor=black, location=location.belowbar, transp=0, offset = -lb)
plotshape(_hh, text="HH", title="Higher High", style=shape.labeldown, color=lime, textcolor=black, location=location.abovebar, transp=0, offset = -lb)
plotshape(_ll, text="LL", title="Lower Low", style=shape.labelup, color=red, textcolor=white, location=location.belowbar, transp=0, offset = -lb)
plotshape(_lh, text="LH", title="Lower High", style=shape.labeldown, color=red, textcolor=white, location=location.abovebar, transp=0, offset = -lb)
res = na, sup = na
res := iff(_lh, zz, res[1])
sup := iff(_hl, zz, sup[1])
trend = na
trend := iff(close > res, 1, iff(close < sup, -1, nz(trend[1])))
res := iff((trend == 1 and _hh) or (trend == -1 and _lh), zz, res)
sup := iff((trend == 1 and _hl) or (trend == -1 and _ll), zz, sup)
plot(showsupres ? res : na, title="Resistance", color= na(res) ? na : red, linewidth=2, style=circles, offset = -lb)
plot(showsupres ? sup : na, title="Support", color= na(sup) ? na : blue, linewidth=2, style=circles, offset = -lb)
barcolor(color = iff(changebarcol, iff(trend == 1, blue, black), na))
2020-03-09
519
글번호 136688
답변완료
부탁좀 드리겠습니다.
1. 아래수식 변환 부탁드립니다.
강세 PVI(c) >= eavg(PVI(c),period)
약세 PVI(c) < eavg(PVI(c),period)
period : 10
2. 아래수식 변환부탁드립니다
2-1 지표식
2-2 시스템
수식1
HighestSince(1, CrossUp(Trix(period),0),HIGH)
수식2
LowestSince(1, CrossDown(Trix(period),0),LOW)
period : 10
3. 아래수식 변환부탁드립니다
3-1 지표식
3-2 시스템
수식1
a=avg(c,20);
valuewhen(1,a>=a(1),a)
수식2
valuewhen(1,a<a(1),a)
2020-03-09
438
글번호 136687
답변완료
부탁드립니다.
-분봉차트에서 특정시간(예: @17:00:00)을 기준하여 이틀전 특정시간(예: d-2 @16:59:00)까지 즉 48시간내의 최고가와 최저가를 구하는 지표를 부탁드립니다.
2020-03-08
422
글번호 136686
답변완료
확인 부탁드리겠습니다.
아래 내용은 제가 답변을 받은 내용입니다.
Data1 / Data2 / Data3 를 사용하는데
Data1과 Data2에 같은 지표(?)를 사용하지만
Data1과 Data2에 적용을 시키면 지표가 다르게 나옵니다.
Data2에 적용되는 지표도 Data1의 지표를 기준으로 적용되어 진입이 되는거 같습니다만,
이 부분을 수정해 주실 수 있을까요?
부탁드리겠습니다. 감사합니다.
Input:변동률(0.2),레벨(4),선두께(3),P(20),익절틱수(20),손절틱수(20);
Var:행(0,data1),열(0,data1),고점(1,data1),저점(-1,data1),신규(1,data1),연장(2,data1),연속(3,data1),삼선(4,data1),cnt(0,data1),
고라인기울기(0,data1),고라인시작(0,data1),고라인끝(0,data1),
저라인기울기(0,data1),저라인시작(0,data1),저라인끝(0,data1),
시작일(0,data1),시작시각(0,data1),V1(0,data1),val1(0,data1),val2(0,data1);
Array:고[10,44](0,data1),저[10,44](0,data1), // 열번호 : 1=가격,2=Index,3=sDate,4=sTime,11=가격,12=Index,13=sDate,14=sTime
최종상태[5](0,data1),처리구분[5](0,data1),TL[3](0,data1),TL1[2](0,data1),고0[10,4](0,data1),저0[10,4](0,data1),결과리턴[8](0,data1);
//=========================================================//
If 레벨 <= 4 Then
{
v1 = 레벨 * 10;
val1 = data1(ChgRateZigZag301(H,L,변동률,고,저,최종상태,처리구분));
If 최종상태[레벨] == 고점 Then {
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then {
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then {
TL[0] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1]);
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
}
If 최종상태[레벨] == 저점 Then {
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then {
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then {
TL[0] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1]);
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
}
} Else {
Alert("4레벨까지만 가능합니다!!");
}
//=========================================================//
cnt = cnt + 1;
If (처리구분[레벨] == 신규 or 처리구분[레벨] == 연속) Then {
For 행 = 1 To 10 {
For 열 = 1 To 4 { // 추세채널을 판단할 레벨만 사용자함수에 전달
고0[행,열] = 고[행,v1 + 열];
저0[행,열] = 저[행,v1 + 열];
}
}
val2 = data1(YHS_Channel(고0,저0,결과리턴));
If val2 == 1 Then { // 추세대가 형성되었다면
시작일 = 결과리턴[0];
시작시각 = 결과리턴[1];
고라인기울기 = 결과리턴[2];
고라인시작 = 결과리턴[3];
고라인끝 = 결과리턴[4];
저라인기울기 = 결과리턴[5];
저라인시작 = 결과리턴[6];
저라인끝 = 결과리턴[7];
If 고라인시작[1] == 고라인시작 and 고라인기울기[1] == 고라인기울기 Then { // 겹쳐 그리지 않도록
TL_SetEnd(TL1[0],sDate,sTime,고라인끝);
} Else {
TL1[0] = TL_New(시작일,시작시각,고라인시작,sDate,sTime,고라인끝);
TL_SetColor(TL1[0],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[0],선두께);
}
If 저라인시작[1] == 저라인시작 and 저라인기울기[1] == 저라인기울기 Then {
TL_SetEnd(TL1[1],sDate,sTime,저라인끝);
} Else {
TL1[1] = TL_New(시작일,시작시각,저라인시작,sDate,sTime,저라인끝);
TL_SetColor(TL1[1],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[1],선두께);
}
cnt = 0;
#Plot1(고라인끝,"고점추세선",IFF(고라인기울기<0,RED,BLUE));
#Plot2(저라인끝,"저점추세선",IFF(고라인기울기<0,RED,BLUE));
if max(고라인끝,저라인끝) >= data1(c) and data1(c) >= min(고라인끝,저라인끝) and
max(고라인끝,저라인끝) >= data2(c) and data2(c) >= min(고라인끝,저라인끝) and
data2(c> ma(C,P)) and
data3(C>C[1]) Then
buy();
}
}
If cnt > 0 and cnt < (레벨 + 1) * 20 Then {
고라인끝 = 고라인끝 + 고라인기울기;
저라인끝 = 저라인끝 + 저라인기울기;
#If 고라인끝 > 0 Then Plot1(고라인끝,"고점추세선",IFF(고라인기울기<0,RED,BLUE));
#If 저라인끝 > 0 Then Plot2(저라인끝,"저점추세선",IFF(고라인기울기<0,RED,BLUE));
if max(고라인끝,저라인끝) >= data1(c) and data1(c) >= min(고라인끝,저라인끝) and
max(고라인끝,저라인끝) >= data2(c) and data2(c) >= min(고라인끝,저라인끝) and
data2(c< ma(C,P)) and
data3(C<C[1]) Then
sell();
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
2020-03-08
454
글번호 136685
수색대대 님에 의해서 삭제되었습니다.
2020-03-08
2
글번호 136684
답변완료
수고많으십니다~ 공부중인대 너무 어려워서 도움 좀 청합니다..
수고많으십니다. 코딩 연습하고있는대요. 궁금점이 있습니다.
첨부된 파일보면 60분 봉인대요..차트상에 0시 이후로만 신호가 나오고 0시 이전으로는 신
호가 안나오는대 이유가 무엇인지 궁금합니다.
특정시간대에만 하루에 딱한번만 진입하기 위해 stime 함수도 이용해봤는대 검증이 완료됐
다고 나오지만 불러오면 아무 신호도 안나오는대 이 이유는 무엇인지요?
마지막으로 수식 부탁드립니다.
1일 1진입으로 제한하고 15시에 진입하는 조건으로, 14:00~15:00시에 완성되는 봉이 양봉
이면 매수, 음봉이면 매도 하는 수식 좀 부탁드립니다~
수고하세요~
2020-03-08
443
글번호 136683
답변완료
수식문의 드립니다.
종가가 최근 20봉중 5회이상 볼린저밴드 하단보다 작고 5일 이평선이 20일 이평선을 첫번째로 상향 돌파할때만 매수하고
종가가 최근 20봉중 5회이상 볼린저밴드 상단보다 크고 5일 이평선이 20일 이평선을 첫번째로 하향 돌파할때만 매도 하려고 합니다.
if countif(c > bbup,20)==5 이게 잘못된것 같은데.. 어떻게 바꿔야 할지 모르겠네요
수정 좀 부탁드립니다.
Input : Period(20), MultiD(2),P1(5),P2(20);
var : BBmd(0),BBup(0),BBdn(0),mav1(0),mav2(0);
BBmd = ma(C,Period);
BBup = BollBandUp(Period,MultiD);
BBdn = BollBandDown(Period,MultiD);
mav1 = ma(C,P1);
mav2 = ma(C,P2);
if crossup(c,bbup) Then
var1 = 0;
if countif(c > bbup,20)==5 and CrossDown(mav1,mav2) Then
{
var1 = var1+1;
if var1 == 1 Then
sell();
}
if CrossDown(c,bbdn) Then
var2 = 0;
if countif(c < bbdn,20)==5 and CrossUp(mav1,mav2) Then
{
var2 = var2+1;
if var2 == 1 Then
buy();
}
2020-03-08
458
글번호 136682
답변완료
문의드립니다.
안녕하세요.
시스템 문의드립니다.
5분봉차트에서 실행예정입니다.
1. ADR > 100(9시 25분)이고, 어제 종가보다 오늘 시가가 높으면 매도호가에 9시 30분에 예수금의 50% 매수, 3시에 매수호가에 청산하는 시스템 부탁드립니다.
2. 시장의 상승종목수 > 하락종목수 x 1.2 이고, 어제 종가보다 오늘 시가가 높으면 매도호가에 9시 30분에 예수금의 50% 매수, 3시에 매수호가에 청산하는 시스템 부탁드립니다.
2020-03-08
402
글번호 136681
답변완료
문의드립니다
안녕하세요?
아래수식을 선그래프로표현했을경우 2가지의(plot1,plot2) 수평선이 각각
꺽임이발생할시 완성후 소리출력이 한번만 되는경우와 꺽임이시작부터 완성될때까지
발생하는 2가지경우를 원합니다 감사합니다.
Input : af(0.02), maxAF(0.2);
var1 = SAR(af,maxAF);
if crossup(c,var1) Then
value1 = var1;
if CrossDown(c,var1) Then
value2 = var1;
plot1(value1);
plot2(value2);
2020-03-08
519
글번호 136680