커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8012
글번호 230811
답변완료
선물신호를 옵션 신호로 부탁드립니다.
안녕하세요.
항상 수고가 많으십니다.
질문드립니다 -----------------------------------------------------------------------
(예제 전략식은 c > 20이평 : 매수, c < 20이평 : 매도)
이해를 돕기위해
선물신호에서 보통 5번의 매수신호와 5번의 매도신호가 발생한다고 가정하겠습니다.
신호발생시 진입수량은 1개씩입니다.
이것을 옵션신호로 바꾸려고합니다.
즉, 매수신호 발생시 -> 콜매수 1개
매도신호 발생시 -> 풋매수 1개
나중에는 결국, 콜매수 5개 풋매수 5개 양매수 상태가 되겠지요.
이 상태에서 장종료 무렵 콜과 풋을 동시에 전부 청산하려합니다.
참조데이타를 이용해서 해보려는데 잘 되지를 않는군요.
도움 부탁드립니다.
-------------------------------------------------------------------------------------
항상 감사드립니다.
좋은 일만 많이 생기시기를 ......
2019-12-09
349
글번호 134216
답변완료
부탁드리겠습니다
다른 분봉의 볼린저를 넣을 수 있게 만들수 있는지요 만들 수 있음 고맙겠습니다
2019-12-08
296
글번호 134215
답변완료
문의 드립니다.
변환좀 부탁드립니다.
(log(sum(c,m)/m)-log(sum(c,m,22*n)/m))*1000/n
지표조건
m 15
n 1
2019-12-08
278
글번호 134214
용인테니스왕자 님에 의해서 삭제되었습니다.
2019-12-07
0
글번호 134213
답변완료
안녕하세요.
안녕하세요.
input : N(1);
Plot1(((dayHigh(N)-dayLow(N))*0.618)+dayHigh(N), "목표1");
Plot2(((dayHigh(N)-dayLow(N))*0.382)+dayHigh(N), "목표2");
Plot3((dayLow(N)-(dayHigh(N)-dayLow(N))*0.618), "-목표1");
Plot4((dayLow(N)-(dayHigh(N)-dayLow(N))*0.382), "-목표2");
지표선 위에 가격수치를 텍스트로 나타내고 싶습니다.
선 윗쪽 중앙에 초록색으로 부탁드립니다.
감사합니다.
2019-12-07
273
글번호 134212
hg950265 님에 의해서 삭제되었습니다.
2019-12-09
8
글번호 134211
답변완료
문의 드립니다!
안녕하세요!
아래수식은 일전에 저의 문의에대하여 답변주신 내용인데요...
수고스럽겠지만 이 수식을 다음과같이 수정 부탁드리겠습니다
1, 아래수식은 1개의 콜행사가와 1개의 풋행사가에 각각 5개의 개별가격을 지정하게되어있는데..
==> 이것을 1개의 특정가격을 지정할때마다 행사가도 같이 각각 따로 지정할수있도록해주세요
즉, 각각의 가격마다 행사가도 같이 따로 지정할수있는 수식이 필요합니다
==> 그리고 이 가격의 개수는 (하나의 수식에다) 콜풋 각각 최대 8개씩 입력이 가능하도록 부탁드립니다
* 예를들어서...
콜 270.00 의 1.0 풋 275.00 의 1.0
콜 272.50 의 1.5 풋 272.50 의 1.5
콜 275.00 의 2.0 풋 270.00 의 2.0
. .
. .
. .
( 총 8개 ) ( 총 8개 )
* 이런식으로 콜풋별로 각각의 가격마다 행사가도 같이 별도로 지정할수있도록 부탁드립니다
2, 국선챠트상에 옵션 콜풋 특정행사가의 특정 이평선을 나타나게할수있을까요?
예를들어 콜 275의 20 이평선을 국선챠트에 나타낸다던가하는...
==> 콜,풋을 각각 별도의 수식으로해주시구요
==> 쿨,풋 각각 1개의 행사가에 3개의 이평선을 입력할수있도록 부탁드리겠습니다
매서운 추위에 건강에 유의하시구요
매번 너무너무 감사드리고있습니다 ^^*
---------------------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
data2는 콜, data3은 풋으로 지정하시고 적용하시면 됩니다.
input : CallPrice1(1.0),CallPrice2(1.5),CallPrice3(2.0),CallPrice4(2.5),CallPrice5(3.0);
input : PutPrice1(1.0),PutPrice2(1.5),PutPrice3(2.0),PutPrice4(2.5),PutPrice5(3.0);
if data2(crossup(c,CallPrice1) or CrossDown(c,CallPrice1)) Then
{
var21 = c;
}
if data2(crossup(c,CallPrice2) or CrossDown(c,CallPrice2)) Then
{
var22 = c;
}
if data2(crossup(c,CallPrice3) or CrossDown(c,CallPrice3)) Then
{
var23 = c;
}
if data2(crossup(c,CallPrice4) or CrossDown(c,CallPrice4)) Then
{
var24 = c;
}
if data2(crossup(c,CallPrice5) or CrossDown(c,CallPrice5)) Then
{
var25 = c;
}
if var21 > 0 then
plot1(var21,"data2 CallPrice1교차");
if var22 > 0 then
plot2(var22,"data2 CallPrice2교차");
if var23 > 0 then
plot3(var23,"data2 CallPrice3교차");
if var24 > 0 then
plot4(var24,"data2 CallPrice4교차");
if var25 > 0 then
plot5(var25,"data2 CallPrice5교차");
if data3(crossup(c,PutPrice1) or CrossDown(c,PutPrice1)) Then
{
var31 = c;
}
if data3(crossup(c,PutPrice2) or CrossDown(c,PutPrice2)) Then
{
var32 = c;
}
if data3(crossup(c,PutPrice3) or CrossDown(c,PutPrice3)) Then
{
var33 = c;
}
if data3(crossup(c,PutPrice4) or CrossDown(c,PutPrice4)) Then
{
var34 = c;
}
if data3(crossup(c,PutPrice5) or CrossDown(c,PutPrice5)) Then
{
var35 = c;
}
if var31 > 0 then
plot6(var31,"data3 PutPrice1교차");
if var32 > 0 then
plot7(var32,"data3 PutPrice2교차");
if var33 > 0 then
plot8(var33,"data3 PutPrice3교차");
if var34 > 0 then
plot9(var34,"data3 PutPrice4교차");
if var35 > 0 then
plot10(var35,"data3 PutPrice5교차");
즐거운 하루되세요
> 유로파54 님이 쓴 글입니다.
> 제목 : 문의 드립니다
> 안녕하세요!
일전에 만들어주신 옵션관련 지표 매우 잘 활용하고있습니다 ^^
아래내용으로 한가지만 더 부탁드리겠습니다
옵션의 특정한 지정가격이 국선차트에서 가로선으로 표시될수있으면 좋겠습니다
이 지정가격은 필요에따라 수시로 바꿀수있고 콜 풋을 별도로 표시했으면 합니다
그리고 콜 풋별로 각각 5개정도의 가로선을 표시할수있으면 좋겠습니다
예를들어 콜 행사가 287.50에서 2.5의 자리,
그리고 풋행사가 285.00에서 2.5의 자리등
각각 최대 5개의 가격선을 국선챠트에 미리 표시를하고자함입니다
감사합니다 ^^
2019-12-07
230
글번호 134210
답변완료
부탁드립니다
수고하십니다
이수식에서 Var1 < Var1[1] 이면 시가에 plot1을 청색선으로
Var1 > Var1[1] 이면 종가에 plot1을 빨간색선으로 부탁드립니다
input : Period(10),Period1(0);
Var : value(0),tx1(0),tx2(0),tx3(0),tx4(0),tx5(0),tx6(0);
value = RSI(Period);
If CrossDown(value, 50) or CrossDown(value, 43) or CrossDown(value, 39) #청
or CrossDown(value, 35) or CrossDown(value, 30) Then
2019-12-07
272
글번호 134209
답변완료
수식 문의
아래는 본 게시판에 수식지왕님이 공개해 주신 지표 입니다.
질문 :
ㄱ.
매일매일 만들어지는 plot 1,2,3을 당일만 뿌리지 말고,
n봉이상으로 쭉 늘려서 뿌려주고 싶습니다.
n봉의 값에 따라, 4일전 만들어진 plot1,2,3도 오늘 차트에 뿌려지고,
3일전 만들어진 polt1,2,3도 오늘 차트에 뿌려지고... 뭐 그런 식으로 되겠죠..
ㄴ.
ㄱ. 지표를 data2 에 적용할 수 있도록 수정하고 싶습니다.
##############################
input:n(1), 인타발(15);
var:arr(0),j(0),k(0),tick(0),chk_cnt(0),ttm(0),t_val(0),max_tpo(0),tot_tpo(0),
sum(0),acc(0),mdl_prc(0),mdl_arr(0),range_u(0),range_d(0),base(0),
cal_tpo(0),up_tpo(0),dn_tpo(0),up_tail_u(0),up_tail_d(0),dn_tail_u(0),dn_tail_d(0);
array:price_u[100](0),price_m[100](0),price_d[100](0),
status_u[100](0),status_m[100](0),status_d[100](0),
tpo_u[100](0),tpo_m[100](0),tpo_d[100](0);
if CodeCategoryEX() == 11 then //Kospi 주식
{
if C >= 500000 then tick = 1000;
else if C >= 100000 then tick = 500;
else if C >= 50000 then tick = 100;
else if C >= 10000 then tick = 50;
else if C >= 5000 then tick = 10;
else tick = 5;
}
if CodeCategoryEX() == 12 then //Kosdaq 주식
{
if C >= 50000 then tick = 100;
else if C >= 10000 then tick = 50;
else if C >= 5000 then tick = 10;
else tick = 5;
}
if CodeCategoryEX() == 21 then //Kospi200 선물
tick = 0.05;
if CodeCategoryEX() == 31 or CodeCategoryEX() == 32 then //Kospi200 콜옵션,풋옵션
{
if C >= 3.0 then tick = 0.05;
else tick = 0.01;
}
var1 = dayindex();
//전일 데이터를 이용하는 로직이므로 과거참조가 들어가는데 dayindex()의 경우
//dayindex()[n]으로 사용할 수 없어 dayindex()값을 일반변수에 move하여 사용하여야 합니다.
//예전에도 이런 경험을 했었는데 기억력이 나쁘다보니 요번에도 여기서 좀 헤맸습니다.
if dayindex()==0 then //당일 첫번째 봉에서만 계산
{
for arr = 0 to 99 {
price_u[arr] = 0;
price_m[arr] = 0;
price_d[arr] = 0;
status_u[arr] = 0;
status_m[arr] = 0;
status_d[arr] = 0;
tpo_u[arr] = 0;
tpo_m[arr] = 0;
tpo_d[arr] = 0;
}
max_tpo = 0;
tot_tpo = 0;
sum = 0;
acc = 0;
mdl_prc = 0;
mdl_arr = 0;
range_u = 0;
range_d = 0;
//n일 동안의 봉의 개수를 계산하여 계산할 첫번째 봉의 위치를 찾음
if n > 0 then
{
var2 = 0;
for j = 1 to index {
if var1[j] == 0 then var2 = var2 + 1; //dayindex()가 0 즉, 09시인 봉을 n번 찾음
if var2 == n then {
var3 = j;
j = index;
}
}
}
base = dayopen(n) + tick * 149; //n일전 시초가를 기준으로 가격대중 가장 상위의 가격 계산
price_u[0] = base; //지수 배열 상단
for arr = 1 to 99 {
price_u[arr] = price_u[arr-1] - tick;
}
price_m[0] = price_u[99] - tick; //지수 배열 중단
for arr = 1 to 99 {
price_m[arr] = price_m[arr-1] - tick;
}
price_d[0] = price_m[99] - tick; //지수 배열 하단
for arr = 1 to 99 {
price_d[arr] = price_d[arr-1] - tick;
}
for j = var3 downto 1 { //n일전 시초봉에서부터 현재봉 1봉 이전 봉까지 순차적으로 계산
//이후 내용은 당일 지표식과 동일하므로 윗글 참조
ttm = TimeToMinutes(stime[j]);
t_val = int((ttm-540)/인타발) + 1;
for arr = 0 to 99 {
if l[j] <= price_u[arr] and price_u[arr] <= h[j] then
{
if status_u[arr] < t_val then
{
status_u[arr] = t_val;
tpo_u[arr] = tpo_u[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_u[arr] then
{
max_tpo = tpo_u[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_u[arr] then
{
sum = sum + price_u[arr];
acc = acc + 1;
}
}
}
if l[j] <= price_m[arr] and price_m[arr] <= h[j] then
{
if status_m[arr] < t_val then
{
status_m[arr] = t_val;
tpo_m[arr] = tpo_m[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_m[arr] then
{
max_tpo = tpo_m[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_m[arr] then
{
sum = sum + price_m[arr];
acc = acc + 1;
}
}
}
if l[j] <= price_d[arr] and price_d[arr] <= h[j] then
{
if status_d[arr] < t_val then
{
status_d[arr] = t_val;
tpo_d[arr] = tpo_d[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_d[arr] then
{
max_tpo = tpo_d[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_d[arr] then
{
sum = sum + price_d[arr];
acc = acc + 1;
}
}
}
}
}
mdl_prc = round(sum/acc/tick,0)*tick;
mdl_arr = int((base-mdl_prc)/tick);
range_u = mdl_arr;
range_d = mdl_arr;
cal_tpo = iff(mdl_arr<100,tpo_u[mdl_arr],iff(mdl_arr<200,tpo_m[mdl_arr-100],tpo_d[mdl_arr-200]));
for k = 0 to 150 {
// range_u는 한단위씩 위로(-1), range_d는 한단위씩 아래로(+1)
// TPO가 많은 쪽의 TPO를 먼저 누적한다
var4 = iff(range_u-1<100,tpo_u[range_u-1],iff(range_u-1<200,tpo_m[range_u-1-100],tpo_d[range_u-1-200]));
var5 = iff(range_d+1<100,tpo_u[range_d+1],iff(range_d+1<200,tpo_m[range_d+1-100],tpo_d[range_d+1-200]));
if var4 > var5 then
{
cal_tpo = cal_tpo + var4;
range_u = range_u - 1;
}
else if var4 < var5 then
{
cal_tpo = cal_tpo + var5;
range_d = range_d + 1;
}
else if var4 == var5 and var4 > 0 and var5 > 0 then
{
cal_tpo = cal_tpo + var4;
range_u = range_u - 1;
}
if cal_tpo >= tot_tpo * 0.7 or var4 + var5 == 0 then
k = 150;
}
up_tpo = 0;
dn_tpo = 0;
if tpo_u[0] == 1 then up_tail_u = 0;
else up_tail_u = 299;
up_tail_d = 0;
dn_tail_u = 299;
if tpo_d[99] == 1 then dn_tail_d = 299;
else dn_tail_d = 0;
for arr = 0 to mdl_arr-1 {
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and
iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) == 1 then
up_tail_u = arr + 1;
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and
iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) > 1 and
up_tail_d == 0 then
up_tail_d = arr;
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) > 1 then
up_tpo = up_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200]));
}
for arr = 299 downto mdl_arr+1 {
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_u[arr-100],tpo_d[arr-200])) > 1 then
dn_tpo = dn_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200]));
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and
iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) > 1 and
dn_tail_u == 299 then
dn_tail_u = arr;
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and
iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) == 1 then
dn_tail_d = arr - 1;
}
}
plot1(mdl_prc,"중심가격");
plot2(base-(range_u*tick),"가치영역(상)");
plot3(base-(range_d*tick),"가치영역(하)");
if up_tail_u <= up_tail_d then
{
plot4(base-(up_tail_u*tick),"윗꼬리상단");
plot5(base-(up_tail_d*tick),"윗꼬리하단");
}
if dn_tail_u <= dn_tail_d then
{
plot6(base-(dn_tail_u*tick),"아랫꼬리상단");
plot7(base-(dn_tail_d*tick),"아랫꼬리하단");
}
2019-12-07
415
글번호 134208