커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3352
글번호 230811
답변완료
코딩부탁드립니다.
전략은
-----------------------------------
시가 +(전고-전저)*K1 상향돌파시 매수
시가 -(전고-전저)*K2 하향돌파시 매도
-----------------------------------
k1, k2값은 최적화하기 위함입니다.
아래와 같이 작성했는데 시스템이 적용이 안되네요. 수정부탁드립니다!
input : K1(0.5), k2(0.7);
If MarketPosition == 0 and dayhigh > dayopen+(dayhigh(1)-daylow(1))*K1 Then
buy("b",atmarket);
If MarketPosition == 1 and dayhigh < dayopen+(dayhigh(1)-daylow(1))*K2 Then
sell("s",atmarket);
2020-06-15
2125
글번호 139835
답변완료
수고많으십니다 수식 문의 드립니다~
안녕하세요 수고많으십니다.
혹시 특정요일에만 당일 청산 수식이 있는지요?
종목은 해외선물인데요 혹시 특정 요일에만 당일 청산 수식이 있다면,
금요일 장 마감(토요일 오전 05시55분 청산)시 당일 청산 수식 부탁드립니다~
수고하시고 건강하세요!!
2020-06-15
1984
글번호 139834
답변완료
지표 문의 드립니다
안녕하세요, 지표 수식 문의 드립니다.
매달 월봉 첫 캔들 기준으로 매월 초기화 +
((양봉 캔들 + 움직임이 없던캔들)*0.5) / (음봉 캔들 + 움직임이 없던캔들)*0.5)*100
// 움직임이 없던 캔들은 시가와 종가가 같은 캔들
지표문의 드립니다. 한달동안의 캔들을 백분율로 나눠서 지난 고점보다 이번고점의 캔들의 비율이 높은지 낮은지 파악하는 지표를 만들고 싶습니다.
부탁드립니다 감사합니다. 오늘하루도 행복한하루 보내세요
2020-06-15
1987
글번호 139833
답변완료
문의
상단하단에 상하단의 폭이 숫자로 나오게 부탁드립니다.
예를들면 하단이 270이고 상단280이면 상단선위에 10이라는 숫자가 나오게 부탁드립니다.
반대의 경우도 마찬가지입니다.
수식은 아래에 수식으로 참조 부탁드립니다.
input: period(20),봉수(2),상단굵기(2),중단굵기(2),하단굵기(2);
Var:선두께(3),상승색(GREEN), 하락색(WHITE),예비선색상(white),상승세로선색상(red),하락세로선색상(blue),세로선두께(2);
Var:j(0),T(0);
Var: date11(0),date12(0),time11(0),time12(0),TL1(0),TL(0),
date21(0),date22(0),time21(0),time22(0),
date31(0),date32(0),time31(0),time32(0),tx(0),tx1(0),tl4(0),idx(0);
Array:HiVal[20](0),LoVal[20](0),HiBar[20](0),LoBar[20](0)/*,ZZ[20](0)*/;
Array:r[7](0),fr[7](0),TL2[7](0),TL3[7](0),TX2[7](0),TX3[7](0);
r[0] = 0;
r[1] = 2;
r[2] = 3.;
r[3] = -1;
r[4] = -2.;
r[5] = 1;
r[6] = 0.5;
For j = 0 To 19
{
HiBar[j] = HiBar[j] + 1;
LoBar[j] = LoBar[j] + 1;
}
if crossup(c,highest(h,Period)[1]) Then
T = 1;
if CrossDown(c,Lowest(l,Period)[1]) Then
T = -1;
If T == -1 Then
{
If T[1] != -1 Then
{
For j = 18 DownTo 0
{
LoVal[j+1] = LoVal[j];
LoBar[j+1] = LoBar[j];
//ZZ[j+1] = ZZ[j];
}
LoVal[0] = l;
LoBar[0] = 0;
//ZZ[0] = l;
date11 = date[HiBar[0]];
time11 = stime[HiBar[0]];
Value11 = HiVal[0];
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,상승색);
Tx = Text_New(date11,time11,Value11,"▼");
#동그라미 색상, 빨강
Text_SetColor(Tx,blue);
Text_SetStyle(Tx,2,1);
Text_SetSize(tx,12);
tx = Text_New(date11,time11,Value11,NumToStr(value11,2)+NewLine);
Text_SetStyle(tx,2,1);
date21 = date[HiBar[0]];
time21 = stime[HiBar[0]];
date22 = date[0];
time22 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[1] + ((HiVal[0] - LoVal[1]) * r[j]);
}
TL2[0] = TL_New(date21,time21,fr[0],date22,time22,fr[0]);
TL_SetColor(TL2[0],white);
TL_SetSize(TL2[0],하단굵기);
#TL2[1] = TL_New(date21,time21,fr[1],date22,time22,fr[1]);
#TL_SetColor(TL2[1],RED);
#TL_SetStyle(TL2[1], 3);
#TL2[2] = TL_New(date21,time21,fr[2],date22,time22,fr[2]);
#TL_SetColor(TL2[2],red);
#TL_SetSize(TL2[2],1);
#TX2[2] = Text_New(date22,time22,fr[2],NumToStr(fr[2],2));
#Text_SetColor(Tx2[2],BWHITE);
#Text_SetStyle(TX2[2],1,1);
#TL2[3] = TL_New(date21,time21,fr[3],date22,time22,fr[3]);
#TL_SetColor(TL2[3],RED);
#TL_SetStyle(TL2[3], 3);
#TL2[4] = TL_New(date21,time21,fr[4],date22,time22,fr[4]);
#TL_SetColor(TL2[4],red);
#TL_SetSize(TL2[4],1);
#TX2[4] = Text_New(date22,time22,fr[4],NumToStr(fr[4],2));
#Text_SetColor(Tx2[4],BWHITE);
#Text_SetStyle(TX2[4],1,0);
TL2[5] = TL_New(date21,time21,fr[5],date22,time22,fr[5]);
TL_SetColor(TL2[5],white);
TL_SetSize(TL2[5],상단굵기);
TL2[6] = TL_New(date21,time21,fr[6],date22,time22,fr[6]);
TL_SetColor(TL2[6],MAGENTA);
idx = 0;
TL_SetSize(TL2[6],중단굵기);
}
If LoVal[0] > l Then
{
LoVal[0] = l;
LoBar[0] = 0;
//ZZ[0] = l;
date12 = date[LoBar[0]];
time12 = stime[LoBar[0]];
Value12 = LoVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date22 = date[0];
time22 = stime[0];
//Tx = Text_New_Self(date12,time12,Value12,NumToStr(abs(value11-value12)/PriceScale,0)+" ");
#동그라미 색상, 빨강
//Text_SetColor(Tx,BLUE);
//Text_SetStyle(Tx,1,0);
TL_SetEnd(TL2[0],date22,time22,fr[0]);
TL_SetEnd(TL2[1],date22,time22,fr[1]);
TL_SetEnd(TL2[2],date22,time22,fr[2]);
Text_SetLocation(TX2[2],date22,time22,fr[2]);
TL_SetEnd(TL2[3],date22,time22,fr[3]);
TL_SetEnd(TL2[4],date22,time22,fr[4]);
Text_SetLocation(TX2[4],date22,time22,fr[4]);
TL_SetEnd(TL2[5],date22,time22,fr[5]);
TL_SetEnd(TL2[6],date22,time22,fr[6]);
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
idx = 0;
}
}
If T == 1 Then
{
If T[1] != 1 Then
{
For j = 18 DownTo 0
{
HiVal[j+1] = HiVal[j];
HiBar[j+1] = HiBar[j];
//ZZ[j+1] = ZZ[j];
}
HiVal[0] = h;
HiBar[0] = 0;
//ZZ[0] = h;
date11 = date[LoBar[0]];
time11 = stime[LoBar[0]];
Value11 = LoVal[0];
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetColor(TL1,하락색);
Tx1 = Text_New(date11,time11,Value11,"▲");
#동그라미 색상, 파랑
Text_SetColor(Tx1,red);
Text_SetStyle(Tx1,2,5);
Text_SetSize(tx1,12);
tx = Text_New(date11,time11,Value11,NewLine+NumToStr(value11,2));
Text_SetStyle(tx,2,0);
date31 = date[LoBar[0]];
time31 = stime[LoBar[0]];
date32 = date[0];
time32 = stime[0];
for j = 0 to 6
{
fr[j] = LoVal[0] + ((HiVal[1] - LoVal[0]) * r[j]);
}
TL3[0] = TL_New(date31,time31,fr[0],date32,time32,fr[0]);
TL_SetColor(TL3[0],white);
TL_SetSize(TL3[0],하단굵기);
#TL3[1] = TL_New(date31,time31,fr[1],date32,time32,fr[1]);
#TL_SetColor(TL3[1],BLUE);
#TL_SetStyle(TL3[1], 3);
#TL3[2] = TL_New(date31,time31,fr[2],date32,time32,fr[2]);
#TL_SetColor(TL3[2],BLUE);
#TL_SetSize(TL3[2],1);
#TX3[2] = Text_New(date32,time32,fr[2],NumToStr(fr[2],2));
#Text_SetColor(Tx3[2],BWHITE);
#Text_SetStyle(TX3[2],1,1);
#TL3[3] = TL_New(date31,time31,fr[3],date32,time32,fr[3]);
#TL_SetColor(TL3[3],BLUE);
#TL_SetStyle(TL3[3], 3);
#TL3[4] = TL_New(date31,time31,fr[4],date32,time32,fr[4]);
#TL_SetColor(TL3[4],BLUE);
#TL_SetSize(TL3[4],1);
#TX3[4] = Text_New(date32,time32,fr[4],NumToStr(fr[4],2));
#Text_SetColor(Tx3[4],BWHITE);
#Text_SetStyle(TX3[4],1,0);
TL3[5] = TL_New(date31,time31,fr[5],date32,time32,fr[5]);
TL_SetColor(TL3[5],white);
TL_SetSize(TL3[5],상단굵기);
TL3[6] = TL_New(date31,time31,fr[6],date32,time32,fr[6]);
TL_SetColor(TL3[6],cyan);
TL_SetSize(TL3[6],중단굵기);
idx = 0;
}
If HiVal[0] < h Then
{
HiVal[0] = h;
HiBar[0] = 0;
//ZZ[0] = h;
date12 = date[HiBar[0]];
time12 = stime[HiBar[0]];
Value12 = HiVal[0];
TL_SetEnd(TL1, date12,time12,Value12);
date32 = date[0];
time32 = stime[0];
//Tx = Text_New_Self(date12,time12,Value12,NumToStr(abs(value11-value12)/PriceScale,0)+" ");
#동그라미 색상, 빨강
//Text_SetColor(Tx,RED);
//Text_SetStyle(Tx,1,1);
TL_SetEnd(TL3[0],date32,time32,fr[0]);
TL_SetEnd(TL3[1],date32,time32,fr[1]);
TL_SetEnd(TL3[2],date32,time32,fr[2]);
Text_SetLocation(TX3[2],date32,time32,fr[2]);
TL_SetEnd(TL3[3],date32,time32,fr[3]);
TL_SetEnd(TL3[4],date32,time32,fr[4]);
Text_SetLocation(TX3[4],date32,time32,fr[4]);
TL_SetEnd(TL3[5],date32,time32,fr[5]);
TL_SetEnd(TL3[6],date32,time32,fr[6]);
TL_Delete(tl);
TL = TL_New(sdate,stime,Value12,NextBarSdate,NextBarStime,NextBarOpen);
idx = 0;
}
}
idx = idx+1;
TL_SetSize(tL,선두께);
TL_SetSize(tL1,선두께);
TL_SetColor(tL,예비선색상);
var : VTL(0);
if idx == 봉수 Then
{
TL_Delete(VTL);//
VTL = TL_New(sdate,stime,999999999,sDate,stime,0);
TL_SetColor(VTL,iff(T == -1,상승세로선색상,하락세로선색상));
TL_SetSize(VTL,세로선두께);
}
plot1(fr[0]);
plot2(fr[5]);
plot3(fr[6]);
2020-06-14
1928
글번호 139832
답변완료
문의드립니다.
연일 수고에 감사드립니다.
초보질문 드립니다.
--------------------------------------------------------------------------------------
1. 전봉고가 돌파시 진입이라고 할때, 장시작시간부터 매매한다고 가정하면, 장시작 후 첫봉은 전봉이 없기 때문에 첫봉다음 2번째 봉에서부터 진입이 가능한 건가요?
2. 어떤 글에서,매매시간은 캔들 단위로 한다고 본것 같은데요,
예를 들어, 종료 시간을 익일05:50분으로 로직을 만들었는데, 30분봉으로 매매를 했다면 05:30분에 마지막 매매가 끝나고 05:50분에는 시스템이 종료된다는 말인가요? 60분봉이면 05:00에 끝나고, 20분봉이면 05:40분에 끝나고? 시스템상 설정한 종료시간 범위안에서 매매를 실행한 차트 캔들 단위로 종료된다고 이해하면 되나요?
3. 항셍시간에 대해 질문인데요, 항셍은 오전, 오후, 야간 3번에 나눠서 매매가 되는데요,
중간에 두번이 끊어지는 건데요, 이것을 세번에 다 각각 나워서 매매시간을 설정해야 되나요,
아니면 10:15 ~ 04:00 를 시간을 하나로 쭉 이어서 설정해도 되는지요,
(예: 07:00 ~ 03:50, 10:15 ~ 03:55 )
4. 항셍에서 시간이 중간에 두번이 끊어지는데요, 전봉고가 돌파시 진입이라고 할때, 오후장 14:00시와, 야간장 18:10분에 다시 시작할때도 첫봉은 전봉이 없는 것으로 되어, 두번째 봉부터 진입이 되는것인가요?
아니면 그전과 계속 이어서 되는 것인가요?
--------------------------------------------------------------------------------------
많은 도움 받고 있습니다. 감사합니다.
2020-06-14
1865
글번호 139831
답변완료
부탁 드립니다.
도움에 감사 드립니다.
해선용으로 사용하는 수식을
국내 주식용으로 사용코자 합니다.
그대로 사용해도 되는지요?
input : ntime(30),P(10),sig(5);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0),SumSqrt(0),Stdv(0);
var : sum(0),BBmd(0),Bbup(0),BBdn(0),VV(0),V3(0),V5(0),V7(0);
Array : CC[100](0),V1[100](0),V2[100](0),V4[100](0),V6[100](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%ntime;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and ntime > 1 and TM >= TM[1]+ntime) or
(Bdate == Bdate[1] and ntime == 1 and TM > TM[1]) Then
{
for cnt = 1 to 99
{
CC[cnt] = CC[cnt-1][1];
V1[cnt] = V1[cnt-1][1];
V2[cnt] = V2[cnt-1][1];
V4[cnt] = V4[cnt-1][1];
V6[cnt] = V6[cnt-1][1];
}
}
CC[0] = C;
if CC[P-1] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + CC[cnt];
}
V1[0] = sum/P;#var1
}
if V1[P-1] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + V1[cnt];
}
V2[0] = sum/P;#var2
}
if V2[P-1] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + V2[cnt];
}
VV = sum/P;
SumSqrt = 0;
For cnt = 0 To P - 1 {
SumSqrt = SumSqrt + (V2[cnt] - VV)^2;
}
Stdv = SquareRoot(SumSqrt / P);
V3 = 2*stdv;
V4[0] = V2[0]+v3;
}
if V4[sig-1] > 0 then
{
sum = 0;
for cnt = 0 to sig-1
{
sum = sum + V4[cnt];
}
V5 = sum/sig;
V6[0] = C-V5;
}
if V5[sig+sig-1] > 0 then
{
sum = 0;
for cnt = 0 to sig-1
{
sum = sum + V6[cnt];
}
V7 = sum/sig;
plot1(V7);
}
}
2020-06-15
1927
글번호 139830
답변완료
지표문의
안녕하세요
지표문의 드립니다.
검토 부탁드립니니다.
볼린져 밴드를 그물망 챠트 처럼 보고 싶습니다.
5 분봉
15 분봉
30 분봉
60 분봉
120 분봉
400 분봉
상기 6개의 봉챠트의 볼린져 밴드를
15분봉 챠트에 한번에 표현되게 부탁드립니다.
색상은 각 분봉의 볼린져 밴드가 한가지 색상으로
상단 하단 중앙이 표현되며
하기와 같이 부탁드립니다.
5 분봉 - 빨강
15 분봉 - 흰색
30 분봉 - 파랑
60 분봉 - 검정색
120 분봉 - 노랑
400 분봉 - 연두
감사합니다.
2020-06-14
1946
글번호 139829
답변완료
문의드립니다
안녕하세요.
늘 감사드립니다.
무포지션에서 모든 변수는 초기화 하고
매수: 무포지션에서 첫음봉뒤에 양봉이 2연속으로 발생하면
매수준비 조건가 = O; // 현재봉 양봉의 시가
매수준비 T = 1 라고 정의하고
이후에 또 양봉이 발생하면
매수준비 조건가 = O; // 현재봉 양봉의 시가 가 되고
또는 이후에 음봉이 발생하고 음봉의 종가가 위의 매수준비 조건가 를 하방으로 깨면
매수조건 T = 0 ; // 숫자 0 으로 초기화
매수준비 조건가 =0 // 숫자 0 으로 초기화 처럼
모든변수 초기화 합니다.
즉 현재봉 발생음봉의 종가가 가장 최근의 양봉(전봉일 수도 있고 전봉 이전봉들 일수도 있음)의 시가를 하방으로 깨지 않으면
매수 준비 상태는 그대로 유지하고 깨면 초기화합니다.
이 상태에서
가장 최근의 음봉의 시가를 다음 발생하는 양봉의 종가가 상방으로 돌파하면
매수합니다.
매수손절:
매수봉의 시가를 현재가가 하방으로 돌파하면 손절합니다.
매수추적청산 :
매수후 20 틱 이상 ~ 50틱 까지 이익이 나면 최대 이익이 30% 까지 떨어지면
추적이익 청산 합니다.
매수후 50 틱 이상 이익이 나면 최대 이익이 50% 까지 떨어지면
추적이익 청산 합니다.
매도: 매도도 매수와 동일한 논리로 수식을 부탁드립니다.
2020-06-14
2082
글번호 139828
답변완료
삼성전자 매매 수식 부탁드림니다.
data1 삼성전자 일봉 챠트
data2 코스피(업종) 일봉 챠트
진입 수식
data2(코스피차트) 120일 평균 값에 -10% 하락시
1차 진입 data1(삼성전자) 종가 진입 100만원
2차 진입 data1(삼성전자) 1차 종가진입가 보다 -5% 하락시 추가로 100만원 진입
3차 진입 data1(삼성전자) 1차 종가진입가 보다 -10% 하락시 추가로 100만원 진입
4차 진입 data1(삼성전자) 1차 종가진입가 보다 -15% 하락시 추가로 100만원 진입
5차 진입 data1(삼성전자) 1차 종가진입가 보다 -20% 하락시 추가로 100만원 진입
청산 수식
data1(삼성전자) 차트에서 MFI(15) > 85 또는 투자심리도(15) > 85 일때 일괄 청산
2020-06-14
2126
글번호 139827