커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4428
글번호 230811
답변완료
안녕하세요?
1.되돌림선 추가 부탁드립니다.(그림1 참고)
0% , 23.6% , 38.2% , 50% , 61.8% , 76.4% ,100%
2. 테스트표시를 아래처럼 변경가능한가요?
ex) 1256.5 -> 565
앞의 두자리는 안나오게하고 뒤에3자리만 표시하고 싶습니다.
그리고 3틱 위,아래에 위치하게 해주세요.
다른상품도 변경할수 있게 간단한 설명 부탁드립니다.
감사합니다.
Input:length(5);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),TL3(0),Text1(0),처리구분(""),
TL_Val1(0),TL_Val2(0);
Var:TL11(0),TL12(0),TL13(0),TL14(0),TL15(0),TL16(0),TL17(0),TL18(0),TL19(0),TL20(0);
Var:TL21(0),TL22(0),TL23(0),TL24(0),TL25(0),TL26(0),TL27(0),TL28(0),TL29(0),TL30(0),mav(0),T(0);
Array:고점[10,2](0),저점[10,2](0);
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{ If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then 처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 고점[3,1][1] < 고점[2,1][1] and 고점[2,1][1] > 고점[1,1][1] and 저점[2,1][1] < 저점[1,1][1] Then
TL_Delete(TL2);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
#TL_SetSize(TL1,1);
TL_SetColor(TL1,YELLOW);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],2)+" +"+NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1,RED);
If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then
{
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
}
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] Then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 저점[2,1][1] < 저점[1,1][1] and 저점[2,1][1] < 저점[3,1][1] and 고점[2,1][1] > 고점[1,1][1] Then
TL_Delete(TL3);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
#TL_SetSize(TL1,1);
TL_SetColor(TL1,YELLOW);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],2)+" -"+NumToStr(abs(저점[1,1]-고점[1,1])/PriceScale,0));
Text_SetStyle(Text1, 2, 0);
Text_SetColor(Text1,BLUE);
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
}
}
}
mav = ma(C,20);
2017-03-06
173
글번호 107476
답변완료
수식수정 부탁 합니다.
아래식의 지표가 봉차트위로 드래그가 안됩니다.......
봉차트위로 지표가 자유롭게 이동 할 수 있도록 수식을 수정하여 주시면 감사 하겠습니다.
Input:상승전환가격(1),하락전환가격(1);
Var:j(0),꺾은선(0),방향(0),상승(100),하락(-100),
기준고(0),기준저(0),기준고Bar(0),기준저Bar(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0);
#==========================================#
# 전고점,전저점 index 증가
#==========================================#
For j = 1 To 19
{
고Bar[j] = 고Bar[j] + 1;
저Bar[j] = 저Bar[j] + 1;
}
#==========================================#
# 최근 고,저 갱신
#==========================================#
If 기준고 <= C || 기준고 == 0 || IsNaN(기준고) == True Then
{
기준고 = C;
기준고Bar = 0;
}
Else
기준고Bar = 기준고Bar + 1;
If 기준저 >= C || 기준저 == 0 || IsNaN(기준저) == True Then
{
기준저 = C;
기준저Bar = 0;
}
Else
기준저Bar = 기준저Bar + 1;
#==========================================#
# 추세방향 결정
#==========================================#
If 기준저[1] + 상승전환가격 > C[1] && 기준저[1] + 상승전환가격 <= C Then 방향 = 상승;
If 기준고[1] - 하락전환가격 < C[1] && 기준고[1] - 하락전환가격 >= C Then 방향 = 하락;
#==========================================#
# 추세변화에 따른 변곡점 처리
#==========================================#
If 방향[1] == 하락 && 방향 == 상승 Then
{
For j = 18 DownTo 1
{
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
저[1] = 기준저;
저Bar[1] = 기준저Bar;
꺾은선 = 기준저;
기준저 = C;
기준저Bar = 0;
기준고 = C;
기준고Bar = 0;
}
Else If 방향[1] == 상승 && 방향 == 하락 Then
{
For j = 18 DownTo 1
{
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
꺾은선 = 기준고;
기준고 = C;
기준고Bar = 0;
기준저 = C;
기준저Bar = 0;
}
Else If 방향[1] == 하락 && 방향 == 하락 Then
{
If 기준고[1] - 하락전환가격 <= C[1] &&
기준고[1] - 하락전환가격 > C &&
고[1] < 기준고 Then
{
고[1] = 기준고;
고Bar[1] = 기준고Bar;
꺾은선 = 기준고;
기준고 = C;
기준고Bar = 0;
}
}
Else If 방향[1] == 상승 && 방향 == 상승 Then
{
If 기준저[1] + 상승전환가격 >= C[1] &&
기준저[1] + 상승전환가격 < C &&
저[1] > 기준저 Then
{
저[1] = 기준저;
저Bar[1] = 기준저Bar;
꺾은선 = 기준저;
기준저 = C;
기준저Bar = 0;
}
}
#==========================================#
# 지표식 출력
#==========================================#
If 꺾은선[1] != 꺾은선 Then Plot1(꺾은선);
Else If LastBarOnChart == 1 Then plot1(Iff(방향 == 상승,기준고,기준저));
2017-03-06
139
글번호 107475
답변완료
영웅문 수식을 예스용으로 변환부탁드립니다
//A=(highest(H,shortPeriod)+lowest(L,shortPeriod))/2;
//B=(highest(H,midPeriod)+lowest(L,midPeriod))/2;
//CrossUp(A,B) ;
//CrossDown(A,B)
​
//[수식1]매수 - 빨강 -막대 - 화면
A=(highest(H,9)+lowest(L,9))/2;
B=(highest(H,26)+lowest(L,26))/2;
매수진입 = A>B AND A(1)<=B(1) AND C>O ;
매도진입 = A<B AND A(1)>=B(1) AND C<O ;
매수 = IF(매수진입,100,0);
매도 = IF(매도진입,-100,0);
매수
//[수식2]매도 - 파랑 -막대 - 화면
매도
참고 파일 첨부합니다! 감사합니다!
2017-03-06
193
글번호 107474
답변완료
재문의드립니다.
52207번 답을 주신 것에 재문의 드렸습니다.
다시한번 살펴주시기 바랍니다. 감사드려요!!!
2017-03-06
110
글번호 107473
답변완료
수식작성
선물, 옵션에서 장 시작 후
시가를 깨고 내려갔다가, 다시 시가를 깨고 오르는 경우 시가에 매수주문 하는 수식
부탁드립니다.
초보라서 죄송합니다..
2017-03-05
115
글번호 107472
답변완료
시스템식 부탁드립니다
항상 도움 주셔서 감사합니다.
아래처럼 코딩을 하였는데 매매가 안됩니다.
매매가 될수 있도록 도움 부탁드립니다.
//========================================================
// 추세선으로 매매하기
//========================================================
input : 추세선시작일1(20170303),추세선시작시간1(070000); //추세선1-저가
input : 추세선종료일1(20170303),추세선종료시간1(190500); //추세선1-저가2
input : 추세선시작일2(20170303),추세선시작시간2(011000); //추세선2-고가
input : 추세선종료일2(20170303),추세선종료시간2(174500); //추세선2-고가2
input : X1(0.65),X11(-0.65),X2(0.6),X22(-0.6) ;// 추세선 이동
input : loss(10),profit(30),Tp(10),Ts(5); // 수익,손절,트레일링스탑
var : TL1(0),TLL1(0),TLLL1(0),T1(0); //추세선1
var : TL2(0),TLL2(0),TLLL2(0),T2(0); //추세선2
##### 추세선 그리기 #####
// 추세선1 - 저가
if sdate == 추세선시작일1 and time == 추세선시작시간1 Then{
T1 = 1;
var1 = L;
}
if T1 == 1 and sdate == 추세선종료일1 and time == 추세선종료시간1 Then{
var2 = L;
TL1 = TL_New(추세선시작일1,추세선시작시간1,var1,추세선종료일1,추세선종료시간1,var2);
TL_SetExtLeft(TL1,true);
TL_SetExtRight(TL1,true);
TL_SetColor(TL1,BLUE) ;
T1 = 2;
TLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x1,추세선종료일1,추세선종료시간1,var2+x1); //추세선 복사
TL_SetExtLeft(TLL1,true);
TL_SetExtRight(TLL1,true);
TL_SetColor(TLL1,BLUE) ;
TLLL1 = TL_New(추세선시작일1,추세선시작시간1,var1+x11,추세선종료일1,추세선종료시간1,var2+x11); //추세선 복사
TL_SetExtLeft(TLLL1,true);
TL_SetExtRight(TLLL1,true);
TL_SetColor(TLLL1,BLUE) ;
}
// 추세선2 - 고가
if sdate == 추세선시작일2 and time == 추세선시작시간2 Then{
T2 = 1;
var3 = H;
}
if T2 == 1 and sdate == 추세선종료일2 and time == 추세선종료시간2 Then{
var4 = H;
TL2 = TL_New(추세선시작일2,추세선시작시간2,var3,추세선종료일2,추세선종료시간2,var4);
TL_SetExtLeft(TL2,true);
TL_SetExtRight(TL2,true);
TL_SetColor(TL2,RED) ;
T2 = 2;
TLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x2,추세선종료일2,추세선종료시간2,var4+x2);
TL_SetExtLeft(TLL2,true);
TL_SetExtRight(TLL2,true);
TL_SetColor(TLL2,RED) ;
TLLL2 = TL_New(추세선시작일2,추세선시작시간2,var3+x22,추세선종료일2,추세선종료시간2,var4+x22);
TL_SetExtLeft(TLLL2,true);
TL_SetExtRight(TLLL2,true);
TL_SetColor(TLLL2,RED) ;
}
##### 시스템매매 #####
// 진입 시스템
// 매매시간 시작(2개의 추세선 중 늦은시간의 추세선이 그려진 이후 매매)
if sdate >= 추세선종료일1 and stime >= 추세선종료시간1 then {
// 저가선 하락돌파
if T1 == 2 and MarketPosition == 0 then{
if C < TL_GetValue(TL1,sdate,stime) and C[1] > TL_GetValue(TL1,sdate[1],stime[1]) Then
sell("S");
}
// 고가선 상승돌파
if T2 == 2 and MarketPosition == 0 then{
if C > TL_GetValue(TL2,sdate,stime) and C[1] < TL_GetValue(TL2,sdate[1],stime[1]) Then
Buy("B");
}
// 청산 시스템
// 매도청산
if T1 == 2 and MarketPosition == -1 then{
if (C <= TL_GetValue(TLLL1,sdate,stime) and C[1] > TL_GetValue(TLLL1,sdate[1],stime[1]))
or (C <= TL_GetValue(TLLL2,sdate,stime) and C[1] > TL_GetValue(TLLL2,sdate[1],stime[1])) Then
ExitShort("SX");
}
// 매수청산
if T2 == 2 and MarketPosition == 1 then{
if (C >= TL_GetValue(TLL1,sdate,stime) and C[1] < TL_GetValue(TLL1,sdate[1],stime[1]))
or (C >= TL_GetValue(TLL2,sdate,stime) and C[1] < TL_GetValue(TLL2,sdate[1],stime[1])) Then
ExitLong("BX");
}
// 매매시간종료
}
##### 스탑로스 #####
//SetStopProfittarget(Profit*PriceScale,PointStop);
SetStopLoss(loss*PriceScale,PointStop);
//SetStopTrailing(TS*PriceScale,TP*PriceScale,PointStop);
SetStopEndofday(065000) ;
- 위 코딩은 오일 4월물로 테스트 부탁드립니다.
그리고 한가지 부탁드립니다.
예스스탁에서 추세선 매매 할수 있는 시스템 개발 좀 부탁드립니다.
추세선 매매가 되면 더 많은 사람들이 예스스탁을 이용할 것이며,
수식작성에 대한 문의도 줄어들것으로 예상됩니다.
추세선 매매만 된다면 정말 훌륭한 시스템매매 툴이 될것으로 생각됩니다.
다시한번 부탁드립니다.
2017-03-06
135
글번호 107471
답변완료
수식추가부탁드림니다
52224관련수식에서 파동의고점(마지막봉)과고점(마지막봉)을 연결하는 윗꼬리선(1종가선+2고가선)과
파동의 저점(마지막봉)과저점(마지막봉)을 연결하는 아랫꼬리선(3종가선+4저가선)4선을 추가해주세요
2017-03-06
150
글번호 107470
답변완료
문의드립니다.
1.
input:p(192),stoch_k(14),stoch_d(5),stoch_s(3),mv(5),kstd(1.618);
var:j(1),sum(0),ip(0),n(0),f(0),qq(0),mm(0),tt(0),ii(0),jj(0),
kk(0),ll(0),nn(0),mi(0),kstd_internal(0.8);
var:sq(0),stdv(0),StoK(0),StoD(0);
array:ai[10,10](0),b[10](0),x[10](0),sx[20](0);
array:fx[500](0),sqh[500](0),sql[500](0),stdh[500](0),stdl[500](0);
//-------------------stochastic-------------------
value1 = lowest(L,stoch_k);
value2 = highest(H,stoch_k);
value3 = (Close - value1) / (value2 - value1) * 100;
StoK = ma(value3, stoch_d);
StoD = ma(StoK,stoch_s);
//-------------------sx---------------------------
sx[1] = p + 1;
nn = mv + 1; //5 + 1 = 6
for mi = 1 to nn * 2 - 2 begin //1 ~ 10
sum = 0;
for n = j to j + p begin //1 ~ 193
sum = sum + pow(n,mi);
end
sx[mi + 1] = sum;
end
//-------------------syx--------------------------
for mi = 1 to nn begin //1 ~ 6
sum = 0;
for n = j to j + p begin //1 ~ 193
if mi == 1 then
sum = sum + StoK[n];
else
sum = sum + StoK[n] * pow(n,mi - 1);
end
b[mi] = sum;
end
//===================Matrix=======================
for jj = 1 to nn begin //1 ~ 6
for ii = 1 to nn begin //1 ~ 6
kk = ii + jj - 1; //1 ~ 11
ai[ii,jj] = sx[kk];
end
end
//===================Gauss========================
for kk = 1 to nn - 1 begin //1 ~ 5
ll = 0; mm = 0;
for ii = kk to nn begin
if abs(ai[ii,kk]) > mm then begin
mm = abs(ai[ii,kk]);
ll = ii;
end
end
if ll == 0 then kk = 10;
else if ll <> kk then begin
for jj = 1 to nn begin //1 ~ 6
tt = ai[kk,jj];
ai[kk,jj] = ai[ll,jj];
ai[ll,jj] = tt;
end
tt = b[kk]; b[kk] = b[ll]; b[ll] = tt;
end
for ii = kk + 1 to nn begin
qq = ai[ii,kk] / ai[kk,kk];
for jj = 1 to nn begin
if jj == kk then begin
ai[ii,jj] = 0;
end else begin
ai[ii,jj] = ai[ii,jj] - qq * ai[kk,jj];
end
end
b[ii] = b[ii] - qq * b[kk];
end
end
x[nn] = b[nn] / ai[nn,nn];
for ii = nn - 1 downto 1 begin
tt =0;
for jj = 1 to nn - ii begin
tt = tt + ai[ii,ii + jj] * x[ii + jj];
x[ii] = (1 / ai[ii,ii]) * (b[ii] - tt);
end
end
//================================================
for n = j to j + p begin
sum = 0;
for kk = 1 to mv begin
sum = sum + x[kk + 1] * Pow(n,kk);
end
fx[n] = x[1] + sum;
end
//-------------------Std--------------------------
sq = 0;
for n = j to j + p begin
sq = sq + pow(StoK[n] - fx[n],2);
end
sq = SqRt(sq / (p + 1)) * kstd;
stdv = STD(StoK,p)[j] * kstd_internal;
for n = j to j + p begin
sqh[n] = fx[n] + sq;
sql[n] = fx[n] - sq;
stdh[n] = fx[n] + stdv;
stdl[n] = fx[n] - stdv;
end
#3
if (crossup(stok,stdl[1]) and stod > stdl[1]) or
(CrossUp(stod,stdl[1]) and stok > stdl[1]) Then
buy();
if (CrossDown(stok,sqh[1]) and stod < sqh[1]) or
(CrossDown(stod,sqh[1]) and stok < sqh[1]) Then
ExitLong();
if (CrossDown(stok,stdh[1]) and stod < stdh[1]) or
(CrossDown(stod,stdh[1]) and stok < stdh[1]) Then
sell();
if (crossup(stok,sql[1]) and stod > sql[1]) or
(CrossUp(stod,sql[1]) and stok > sql[1]) Then
buy();
2.
input : 기간(20);
INPUT: P26(26), PER(1);
var : T(0),a1(0),a2(0),V1(0),V2(0),V3(0);
var1 = Highest(h,기간);
var2 = Lowest(L,기간);
var3 = var1-var2;
value1 = var1-var3*0.382;
value2 = var1-var3*0.500;
value3 = var1-var3*0.618;
if value2 > value2[1] Then
T = 1;
if value2 < value2[1] Then
T = -1;
if T == 1 then{
a1 = value1;
a2 = value2;
}
else{
a1 = value3;
a2 = value2;
}
V1=(Highest(H,P26)+LOWEST(L,P26))/2;
V2=V1*(1+PER/100);
V3=V1*(1-PER/100);
if crossup(a1,v1) Then
buy("매수",OnClose,def,2);
if CrossDown(a1,v1) Then
sell("매도",OnClose,def,2);
if MarketPosition == 1 Then{
ExitLong("매수10틱청",atlimit,EntryPrice+PriceScale*10,"",1,1);
}
if MarketPosition == -1 Then{
ExitShort("매도10틱청",atlimit,EntryPrice-PriceScale*10,"",1,1);
}
위 2가지 수식에 추가를 좀부탁드리는 수식입니다
1.거래시간(예: 저녁 6시부터 밤 12시 까지만 그외 시간에는 신호발생금지)
시간 수정 가능하게 부탁드립니다
2.수익설정(예: 크루드오일 경우 0.01=1틱 수익 수정=설정 가능하게)
수익설정(예: 20틱 을 수익으로 설정할경우 더이상 신호발생 금지)
감사합니다
2017-03-05
165
글번호 107469
답변완료
검증부탁드립니다.
안녕하세요
아래의 식을 한번 봐주시고 잘못된 부분이 있으면 알려주시기 바랍니다.
감사합니다.
-----------------------------------------------------------------------------------
If 조건 then{
EP= C;
if MarketPosition == 0 or (MarketPosition == 1 and IsEntryName("B1") == false) then
sell("S1");
}
if O - C < 0.5 then
if MarketPosition == -1 Then{
if IsEntryName("S1") == true Then
ExitShort("S1손절",AtStop,EP+Pricescale*10);
if IsEntryName("S1") == true Then
ExitShort("S1익절",Atlimit,EP-Pricescale*15);
}
if O - C >= 0.5 then
if MarketPosition == -1 Then{
if IsEntryName("S1") == true Then
ExitShort("S1손절2",AtStop,EP+Pricescale*6);
if IsEntryName("S1") == true Then
ExitShort("S1익절2",Atlimit,EP-Pricescale*15);
}
if MarketPosition == -1 Then{
if IsEntryName("S1") == true Then
if lowest(L,BarsSinceEntry)<= EntryPrice - PriceScale*10
and lowest(L,BarsSinceEntry) > EntryPrice - PriceScale*20 Then
ExitShort("S1본절",AtStop,EntryPrice-PriceScale*3);
}
2017-03-05
123
글번호 107468