커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6040
글번호 230811
답변완료
수식부탁드립니다
macd 시그널 기준선으로 시그널 선이 기준선을 올라가면 매수
macd 시그널 기준선으로 시그널 선이 기준선 아래로 내려가면 매도 포지션으로 하고 싶습니다
2023-01-05
1114
글번호 165111
답변완료
수정 부탁합니다
안녕하세요^^
맨 아래입니다
input:length(6);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),TL2(0),TL3(0),TL4(0),TL5(0),TL12(0),TL13(0),TL14(0),TL15(0),T(0),고점변곡(""),저점변곡("");
var : clr1(0),clr2(0),BE(0),SE(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(0==1,data2(C),data2(H));
LL = IFF(0==1,data2(C),data2(L));
If data2(Index) == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = data2(Highest(HH,length)) == HH and 최종고가 <> HH;
Condition2 = data2(Lowest (LL,length)) == LL and 최종저가 <> LL;
처리구분 = "";
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
{
T = 1;
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = data2(Index);
고[1,3] = data2(sDate);
고[1,4] = data2(sTime);
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 1 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 0, 1);
Text_SetColor(Text1,Red);
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,Gray);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = data2(Index);
고[1,3] = data2(sDate);
고[1,4] = data2(sTime);
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 1 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
T = -1;
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = data2(Index);
저[1,3] = data2(sDate);
저[1,4] = data2(sTime);
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 1 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 0, -1);
Text_SetColor(Text1,Blue);
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,Gray);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = data2(Index);
저[1,3] = data2(sDate);
저[1,4] = data2(sTime);
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 1 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
if T == -1 and T[1] != -1 Then
{
TL12 = TL_New(고[2,3],고[2,4],고[2,1],data2(sdate),data2(stime),고[2,1]);
TL_Delete(TL13);
TL13 = TL_New(고[1,3],고[1,4],고[1,1],data2(Sdate),data2(Stime),고[1,1]);
TL_SetExtRight(TL13,true);
TL_SetSize(TL13,2);
TL_SetColor(TL12,clr1);
TL_SetSize(TL12,2);
clr1 = Pink;
TL_SetColor(TL13,Pink);
}
if T == 1 and T[1] != 1 Then
{
TL14= TL_New(저[2,3],저[2,4],저[2,1],data2(sdate),data2(stime),저[2,1]);
TL_Delete(TL15);
TL15= TL_New(저[1,3],저[1,4],저[1,1],data2(sdate),data2(stime),저[1,1]);
TL_SetExtRight(TL15,true);
TL_SetColor(TL14,clr2);
TL_SetSize(TL14,2);
clr2 = LightBlue;
TL_SetColor(TL15,clr2);
TL_SetSize(TL15,2);
}
#================================================================#
VAR:mav5(0),mav10(0),mav20(0),mav40(0),mav60(0),mav120(0);
mav5=ma(c,5);
mav10=ma(c,10);
mav20=ma(c,20);
mav40=ma(c,40);
mav60=ma(c,60);
mav120=ma(c,120);
condition1=CountIf(mav10<mav20,20) >= 10 and t==1 and
저[1,1] <mav20[Index-저[1,2]] and 고[1,1]>mav20[Index-고[1,2]];
var:box1(0);
if condition1 Then
{
Box1 = Box_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
Box_Setcolor(box1,MAGENTA);
Box_Setfill(box1,true,100,true);
}
//박스가 저[1,1]에서 고[1,1]까지 그려지게 수정 부탁드립니다
//countif 조건은 역배열 상태에서 만족 하면 됩니다(저[1,1]확정부터가 아닌)
//박스는 층층히 겹치는 부분을 없애주세요
//condition1 배열변수 가능하면 적용 부탁드립니다
감사합니다~
2023-01-05
1089
글번호 165110
답변완료
변환좀 해주세요
바쁘신데 송구 합니다 .
아래의 트레이딩뷰의 지표를 예스로 변환좀 부탁 드립니다 .
가격캔들에 컬러를 넣도록 되어 있는것은 빼고 Heatmap Volume 만
보조지표로 만들도록 도움을 청합니다 . 감사합니다 .
이메일로 부탁드립니다 .
cybersta11@ naver.com
//@version=4
study(title="Heatmap Volume [xdecow]", shorttitle="HVol [xdecow]", max_bars_back=2000, format=format.volume)
//------------------------------------------------------------------------------
// Inputs
length = input(610, title="MA Length", type=input.integer, minval=2)
slength = input(610, title='Std Length', type=input.integer, minval=2)
cmode = input('Heatmap', 'Color Mode', options=['Heatmap', 'Up/Down'])
zmode = input('Backgrounds', 'Display Heatmap Zones as', options=['None', 'Lines', 'Backgrounds', 'Both'])
bcolor_enabled = input(true, 'Colored bars')
osc = input(false, 'Show as oscillator')
thresholdExtraHigh = input(4, title="Extra High Volume Threshold", type=input.float)
thresholdHigh = input(2.5, title="High Volume Threshold", type=input.float)
thresholdMedium = input(1, title="Medium Volume Threshold", type=input.float)
thresholdNormal = input(-0.5, title="Normal Volume Threshold", type=input.float)
//------------------------------------------------------------------------------
// Colors
// heatmap colors
chm1 = #ff0000 // extra high red
chm2 = #ff7800 // high orange
chm3 = #ffcf03 // medium yellow
chm4 = #a0d6dc // normal
chm5 = #1f9cac // low
// heatmap colors
chmthresholdExtraHigh = input(chm1, 'Heatmap Extra High')
chmthresholdHigh = input(chm2, 'Heatmap High')
chmthresholdMedium = input(chm3, 'Heatmap Medium')
chmthresholdNormal = input(chm4, 'Heatmap Normal')
chmthresholdLow = input(chm5, 'Heatmap Low')
// up colors
cupthresholdExtraHigh = input(#00FF00, 'Up Extra High')
cupthresholdHigh = input(#30FF30, 'Up High')
cupthresholdMedium = input(#60FF60, 'Up Medium')
cupthresholdNormal = input(#8FFF8F, 'Up Normal')
cupthresholdLow = input(#BFFFBF, 'Up Low')
// down colors
cdnthresholdExtraHigh = input(#FF0000, 'Down Extra High')
cdnthresholdHigh = input(#FF3030, 'Down High')
cdnthresholdMedium = input(#FF6060, 'Down Medium')
cdnthresholdNormal = input(#FF8F8F, 'Down Normal')
cdnthresholdLow = input(#FFBFBF, 'Down Low')
// threshold colors
cthresholdExtraHighUp = cmode == 'Heatmap' ? chmthresholdExtraHigh : cupthresholdExtraHigh
cthresholdHighUp = cmode == 'Heatmap' ? chmthresholdHigh : cupthresholdHigh
cthresholdMediumUp = cmode == 'Heatmap' ? chmthresholdMedium : cupthresholdMedium
cthresholdNormalUp = cmode == 'Heatmap' ? chmthresholdNormal : cupthresholdNormal
cthresholdLowUp = cmode == 'Heatmap' ? chmthresholdLow : cupthresholdLow
cthresholdExtraHighDn = cmode == 'Heatmap' ? chmthresholdExtraHigh : cdnthresholdExtraHigh
cthresholdHighDn = cmode == 'Heatmap' ? chmthresholdHigh : cdnthresholdHigh
cthresholdMediumDn = cmode == 'Heatmap' ? chmthresholdMedium : cdnthresholdMedium
cthresholdNormalDn = cmode == 'Heatmap' ? chmthresholdNormal : cdnthresholdNormal
cthresholdLowDn = cmode == 'Heatmap' ? chmthresholdLow : cdnthresholdLow
//------------------------------------------------------------------------------
// Calcs
length := length > bar_index + 1 ? bar_index + 1 : length
slength := slength > bar_index + 1 ? bar_index + 1 : slength
pstdev(Series, Period) =>
mean = sum(Series, Period) / Period
summation = 0.0
for i=0 to Period-1
sampleMinusMean = nz(Series[i]) - mean
summation := summation + sampleMinusMean * sampleMinusMean
return = sqrt(summation / Period)
mean = sma(volume, length)
std = pstdev(volume, slength)
stdbar = (volume - mean) / std
dir = close > open
v = osc ? volume - mean : volume
mosc = osc ? 0 : mean
bcolor = stdbar > thresholdExtraHigh ? dir ? cthresholdExtraHighUp : cthresholdExtraHighDn :
stdbar > thresholdHigh ? dir ? cthresholdHighUp : cthresholdHighDn :
stdbar > thresholdMedium ? dir ? cthresholdMediumUp : cthresholdMediumDn :
stdbar > thresholdNormal ? dir ? cthresholdNormalUp : cthresholdNormalDn :
dir ? cthresholdLowUp : cthresholdLowDn
// heatmap lines
zshow_lines = zmode == 'Lines' or zmode == 'Both'
zshow_backgrounds = zmode == 'Backgrounds' or zmode == 'Both'
tst = highest(v, min(300, bar_index+1)) * 9999
ts0 = osc ? lowest(v, min(300, bar_index+1)) * 9999 : 0
ts1 = std * thresholdExtraHigh + mosc
ts2 = std * thresholdHigh + mosc
ts3 = std * thresholdMedium + mosc
ts4 = std * thresholdNormal + mosc
//------------------------------------------------------------------------------
// Plots
barcolor(bcolor_enabled ? bcolor : na, editable=false)
// hidden heatmap lines to fill
pt = plot(zshow_backgrounds ? tst : na, color=na, display=display.none, editable=false)
p0 = plot(zshow_backgrounds ? ts0 : na, color=na, display=display.none, editable=false)
p1 = plot(zshow_backgrounds ? ts1 : na, color=na, display=display.none, editable=false)
p2 = plot(zshow_backgrounds ? ts2 : na, color=na, display=display.none, editable=false)
p3 = plot(zshow_backgrounds ? ts3 : na, color=na, display=display.none, editable=false)
p4 = plot(zshow_backgrounds ? ts4 : na, color=na, display=display.none, editable=false)
// heatmap fills
tpf = 85
//fill(pt, p1, chm1, transp=tpf, title='Extra High heatmap zone')
fill(p1, p2, chm2, transp=tpf, title='High heatmap zone')
fill(p2, p3, chm3, transp=tpf, title='Medium heatmap zone')
fill(p3, p4, chm4, transp=tpf, title='Normal heatmap zone')
fill(p4, p0, chm5, transp=tpf, title='Low heatmap zone')
// volume
plot(v, color=bcolor, style=plot.style_columns, title='Volume', transp=0, editable=false)
// moving average
plot(osc ? na : mean, color=#000000, linewidth=2, title='Moving Average', style=plot.style_line, transp=0, display=display.none)
// heatmap lines
tpp = 50
plot(zshow_lines ? ts1 : na, color=chm1, title='Extra High heatmap line', transp=tpp)
plot(zshow_lines ? ts2 : na, color=chm2, title='High heatmap line', transp=tpp)
plot(zshow_lines ? ts3 : na, color=chm3, title='Medium heatmap line', transp=tpp)
plot(zshow_lines ? ts4 : na, color=chm4, title='Normal heatmap line', transp=tpp)
2023-01-05
1591
글번호 165109
답변완료
문의 드립니다
.
.
.
.
.
For j = 2 to nn + 2 step 20 {
end_x = j;
end_v = a1 * ((nn - j) ^ 4) + b1 * ((nn - j) ^ 3) + c1 * ((nn - j) ^ 2) + d1 * (nn - j) + e1;
TL = TL_New(sDate[start_x],sTime[start_x],start_v,sDate[end_x],sTime[end_x],end_v);
TL_SetColor(TL,Red);
TL_SetSize(TL,1);
start_x = end_x;
start_v = end_v;
}
예를 들면 15분 봉에서 저 For문 안에 있는 TL 라인이 생성되었다가 다시 지워지고 다시 그려지게 할려면 어떨게 해야 되나요 ?
TL_Delete(TL); 을 앞 뒤로 넣어봐도 안되네요
새해 복 많이 받으시구요.
부탁드립니다.
2023-01-04
983
글번호 165108
답변완료
Bolinger bands 관련입니다.
안녕하세요^^
시스템에서 제어가 잘 않되서요
Bolinger bands의
이평선
상단밴드
하단밴드 표현 다시한번 부탁드립니다
삼사합니다.
2023-01-04
1238
글번호 165107
답변완료
부탁드립니다.
1. 종가가 가장 최근 양봉의 고가 위로 오르면 파란색으로, 종가가 가장 최근 음봉의 저가 밑으로 내리면 빨강색으로 구현해 주세요
2023-01-04
1055
글번호 165106
에구머니 님에 의해서 삭제되었습니다.
2023-01-04
2
글번호 165105
답변완료
지표
네 감사합니다.
또 배웠읍니다.
주신 주식에 텍스트크기/색
지표라인크기/색 추가수식 부탁드립니다.
input : 지정가(292.95),진동폭(3.5);
var1 = 지정가;
value1 = 진동폭/5;
Plot1(var1);
plot10(var1+value1*1);
plot11(var1+value1*2);
plot12(var1+value1*3);
plot13(var1+value1*4);
plot14(var1+value1*5);
plot15(var1+value1*6);
plot16(var1+value1*7);
plot17(var1+value1*8);
plot18(var1+value1*9);
plot19(var1+value1*10);
plot20(var1-value1*1);
plot21(var1-value1*2);
plot22(var1-value1*3);
plot23(var1-value1*4);
plot24(var1-value1*5);
plot25(var1-value1*6);
plot26(var1-value1*7);
plot27(var1-value1*8);
plot28(var1-value1*9);
plot29(var1-value1*10);
var : tx1(0);
var : tx10(0),tx11(0),tx12(0),tx13(0),tx14(0),tx15(0),tx16(0),tx17(0),tx18(0),tx19(0);
var : tx20(0),tx21(0),tx22(0),tx23(0),tx24(0),tx25(0),tx26(0),tx27(0),tx28(0),tx29(0);
Text_Delete(tx1);
Text_Delete(tx10);
Text_Delete(tx11);
Text_Delete(tx12);
Text_Delete(tx13);
Text_Delete(tx14);
Text_Delete(tx15);
Text_Delete(tx16);
Text_Delete(tx17);
Text_Delete(tx18);
Text_Delete(tx19);
Text_Delete(tx20);
Text_Delete(tx21);
Text_Delete(tx22);
Text_Delete(tx23);
Text_Delete(tx24);
Text_Delete(tx25);
Text_Delete(tx26);
Text_Delete(tx27);
Text_Delete(tx28);
Text_Delete(tx29);
tx1 = Text_New(NextBarSdate,NextBarStime,var1," 지정가:"+NumToStr(var1,2));
tx10 = Text_New(NextBarSdate,NextBarStime,var1+value1*1," +1:"+NumToStr(var1+value1*1,2));
tx11 = Text_New(NextBarSdate,NextBarStime,var1+value1*2," +2:"+NumToStr(var1+value1*2,2));
tx12 = Text_New(NextBarSdate,NextBarStime,var1+value1*3," +3:"+NumToStr(var1+value1*3,2));
tx13 = Text_New(NextBarSdate,NextBarStime,var1+value1*4," +4:"+NumToStr(var1+value1*4,2));
tx14 = Text_New(NextBarSdate,NextBarStime,var1+value1*5," +5:"+NumToStr(var1+value1*5,2));
tx15 = Text_New(NextBarSdate,NextBarStime,var1+value1*6," +6:"+NumToStr(var1+value1*6,2));
tx16 = Text_New(NextBarSdate,NextBarStime,var1+value1*7," +7:"+NumToStr(var1+value1*7,2));
tx17 = Text_New(NextBarSdate,NextBarStime,var1+value1*8," +8:"+NumToStr(var1+value1*8,2));
tx18 = Text_New(NextBarSdate,NextBarStime,var1+value1*9," +9:"+NumToStr(var1+value1*9,2));
tx19 = Text_New(NextBarSdate,NextBarStime,var1+value1*10," +10:"+NumToStr(var1+value1*10,2));
tx20 = Text_New(NextBarSdate,NextBarStime,var1-value1*1," -1:"+NumToStr(var1-value1*1,2));
tx21 = Text_New(NextBarSdate,NextBarStime,var1-value1*2," -2:"+NumToStr(var1-value1*2,2));
tx22 = Text_New(NextBarSdate,NextBarStime,var1-value1*3," -3:"+NumToStr(var1-value1*3,2));
tx23 = Text_New(NextBarSdate,NextBarStime,var1-value1*4," -4:"+NumToStr(var1-value1*4,2));
tx24 = Text_New(NextBarSdate,NextBarStime,var1-value1*5," -5:"+NumToStr(var1-value1*5,2));
tx25 = Text_New(NextBarSdate,NextBarStime,var1-value1*6," -6:"+NumToStr(var1-value1*6,2));
tx26 = Text_New(NextBarSdate,NextBarStime,var1-value1*7," -7:"+NumToStr(var1-value1*7,2));
tx27 = Text_New(NextBarSdate,NextBarStime,var1-value1*8," -8:"+NumToStr(var1-value1*8,2));
tx28 = Text_New(NextBarSdate,NextBarStime,var1-value1*9," -9:"+NumToStr(var1-value1*9,2));
tx29 = Text_New(NextBarSdate,NextBarStime,var1-value1*10," -10:"+NumToStr(var1-value1*10,2));
Text_SetStyle(tx1,0,2);
Text_SetStyle(tx10,0,2);
Text_SetStyle(tx11,0,2);
Text_SetStyle(tx12,0,2);
Text_SetStyle(tx13,0,2);
Text_SetStyle(tx14,0,2);
Text_SetStyle(tx15,0,2);
Text_SetStyle(tx16,0,2);
Text_SetStyle(tx17,0,2);
Text_SetStyle(tx18,0,2);
Text_SetStyle(tx19,0,2);
Text_SetStyle(tx20,0,2);
Text_SetStyle(tx21,0,2);
Text_SetStyle(tx22,0,2);
Text_SetStyle(tx23,0,2);
Text_SetStyle(tx24,0,2);
Text_SetStyle(tx25,0,2);
Text_SetStyle(tx26,0,2);
Text_SetStyle(tx27,0,2);
Text_SetStyle(tx28,0,2);
Text_SetStyle(tx29,0,2);
2023-01-04
956
글번호 165104
답변완료
문의드립니다.
피라미딩 설정에서 다른 진입신호만 허용 상태로 시스템을 운영할 때, 분할매도가 발생할 경우
동일한 진입신호로 다시 진입이 되는 경우가 발생합니다.
동일한 진입신호로 딱 한번만 매수하게 하려면 어떻게 해야 하나요?
또는 동일한 진입신호로 매수한 수량을 모두 매도한 후에만 다시 같은 진입신호로 매수가 가능하게 하려면 어떻게 하는지 문의드립니다.
2023-01-04
994
글번호 165102