커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6198
글번호 230811
답변완료
질문입니다.
지표를 작성하고자 합니다.
X값이 있습니다.
만약 X값을 3이라고 가정해본다면,
1. 종가와 Ma1값을 비교해 종가가 크거나 같으면 1, 아니면 -1
2. 종가와 Ma2값을 비교해 종가가 크거나 같으면 1, 아니면 -1
3. 종가와 Ma3값을 비교해 종가가 크거나 같으면 1, 아니면 -1
4. Ma1값과 Ma2값을 비교해 Ma1값이 크거나 같으면 1, 아니면 -1
5. Ma1값과 Ma3값을 비교해 Ma1값이 크거나 같으면 1, 아니면 -1
6. Ma2값과 Ma3값을 비교해 Ma2값이 크거나 같으면 1, 아니면 -1
7. 1~6값의 합을 표시
위의 순서에 따르는 지표를 만들고 싶습니다.
여기서 X값을 조절할 수 있게 만들고 싶습니다.
수식으로 부탁드립니다.
감사합니다.
2017-10-26
161
글번호 113641
답변완료
트레이딩 시작시간 변경
아래 수식에 트레이딩 시작 시간을 조절하고 싶습니다.
input에서 시간을 입력하면
090000부터 계산은 초기화하고
입력한 시간부터 장시작으로 인식하는 수식으로 변경 바랍니다.
고맙습니다.
**********************
input : HighLine(300.50),LowLine(300.00),n(3);
var : HH(0),LL(0),gap(0),T(0),T1(0),Entry(0);
gap = HighLine-LowLine;
if Bdate != Bdate[1] Then{
T = 0;
T1 = TotalTrades;
if O > highLine Then{
var1 = Ceiling(abs(O-HighLine)/Gap);
HH = HighLine+gap*var1;
LL = HH-gap;
}
else{
var1 = Floor(abs(O-HighLine)/Gap);
HH = HighLine-gap*var1;
LL = HH-gap;
}
}
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if T == 0 and crossup(C,HH) Then{
T = 1;
var2 = HH;
HH = var2+gap;
LL = var2-Gap;
}
if T == 0 and CrossDown(C,LL) Then{
T = -1;
var2= LL;
HH = var2+Gap;
LL = var2-Gap;
}
if T != 0 and crossup(C,HH) Then{
T = 1;
var2 = HH;
LL = var2-Gap;
HH = var2+gap;
if entry < n then
buy();
}
if T != 0 and CrossDown(C,LL) Then{
T = -1;
var2 = LL;
HH = var2+Gap;
LL = var2-Gap;
if entry < n then
sell();
}
2017-10-26
170
글번호 113640
답변완료
지표문의
1.아래는 수식지님이 작성한 수식입니다
지표출력 부분에 가치영역이라는게 있어요
지표소개를보니 가치영역"상"은 70% 로 표시하구 가치영역"하"는30%로 표시했다.
지표에 아무리 찾아두 모르겠네요.
가치영역"상"은 80% 로 표시하구 가치영역"하"은 20% 로 표시하구 싶습니다
좀 수정 해주세요
2.var:arr(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),Start(420),
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);
tick = PriceScale;
if Bdate != Bdate[1] then //매일 첫번째 봉에서 해당 변수들의 값을 0으로 초기화
{
Start = TimeToMinutes(stime);
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;
base = dayopen() + tick * 149; //300개 가격대중 최상단에 해당하는 가격
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;
}
}
if stime >= 0 and stime < 080000 then
ttm = timetominutes(stime)+1440-Start;
else
ttm = timetominutes(stime)-Start;
#ttm = TimeToMinutes(stime); //시간을 30분,15분,10분등으로 나누기 쉽도록 환산
t_val = int((ttm)/interval) + 1; //540은 09:00. 9시를 빼고 나서 원하는 시간단위로 나눈다
for arr = 0 to 99 {
if l <= price_u[arr] and price_u[arr] <= h then
{
if status_u[arr] < t_val then //A가 찍혔는데 또 A를 찍을 필요가 없음. 그걸 확인
{
status_u[arr] = t_val; //중복을 막기 위해 마지막 time value 저장
tpo_u[arr] = tpo_u[arr] + 1; //현재 가격대의 TPO 누적
tot_tpo = tot_tpo + 1; //전체 TPO 누적
if max_tpo < tpo_u[arr] then //TPO 최빈값
{
max_tpo = tpo_u[arr];
sum = 0; //TPO가 동일한 가격대가 여러가격일 경우
acc = 0; //평균값을 구하기 위해 가격 누적변수와 가격대 수 초기화
}
if max_tpo == tpo_u[arr] then //최빈값과 동일하면
{
sum = sum + price_u[arr]; //해당 가격을 누적
acc = acc + 1; //가격대 개수 누적
}
}
}
//3개의 동일 성격을 지닌 배열에 대해 한꺼번에 처리 못하므로 동일 루틴으로 3회 처리
if l <= price_m[arr] and price_m[arr] <= h 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 <= price_d[arr] and price_d[arr] <= h 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); //배열변수의 첨자는 정수이어야 함
//처음부터 int()를 생각해 냈던 것은 아니고 디버그 과정에서 알게 됨
range_u = mdl_arr;
range_d = mdl_arr;
// 전체 TPO의 70%가 될 때까지 상하값을 비교하면서 누적
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를 먼저 누적한다
var2 = 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]));
var3 = 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 var2 > var3 then
{
cal_tpo = cal_tpo + var2;
range_u = range_u - 1;
}
else if var2 < var3 then
{
cal_tpo = cal_tpo + var3;
range_d = range_d + 1;
}
else if var2 == var3 and var2 > 0 and var3 > 0 then
{
cal_tpo = cal_tpo + var2;
range_u = range_u - 1;
}
if cal_tpo >= tot_tpo * 0.7 or var2 + var3 == 0 then
k = 150;
}
up_tpo = 0; //중심가격의 상위 TPO
if tpo_u[0] == 1 then up_tail_u = 0; //윗꼬리 상단 경계선, 0행부터 1이면 윗꼬리 상단은 0행이 됨
else up_tail_u = 299; //윗꼬리를 못 찾을 경우를 대비해서 상단과 하단의 관계를 역으로 만듬
//꼬리 경계값을 찾는 루틴을 성공적으로 마치면 상단값 < 하단값 성립
up_tail_d = 0; //윗꼬리 하단 경계선
//0행부터 중심가격 이전행까지 아래로 내려가면서
for arr = 0 to mdl_arr-1 {
//현재 행의 tpo 값이 0이고 다음 행의 tpo값이 1이면 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; //윗꼬리 상단 경계선 array
//현재 행의 tpo 값이 1이고 다음 행의 tpo값이 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가 0일때만
//즉, 처음에 찾아진 값만 유효한 것로 봄
up_tail_d = arr; //윗꼬리 하단 경계선 array
//TPO가 1보다 큰 상위 TPO 누적
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]));
}
dn_tpo = 0; //중심가격의 하위 TPO
dn_tail_u = 299; //아래꼬리 상단 경계선
if tpo_d[99] == 1 then dn_tail_d = 299;
else dn_tail_d = 0; //아래꼬리 하단 경계선
//299행부터 중심가격 이전행까지 위로 올라가면서
for arr = 299 downto mdl_arr+1 {
//TPO가 1보다 큰 하위 TPO 누적
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]));
//현재 행의 tpo 값이 1이고 윗행의 tpo값이 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
dn_tail_u == 299 then
dn_tail_u = arr; //아래꼬리 상단 경계선 array
//현재 행의 tpo 값이 0이고 윗행의 tpo값이 1이면 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
dn_tail_d = arr - 1; //아래꼬리 하단 경계선 array
}
plot1(mdl_prc,"중심가격");
plot2(base-(range_u*tick),"가치영역(상)"); //0행의 값 base가 가장 큰 값이므로 해당 행(row)에
//단위(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),"아랫꼬리하단");
}
//plot8(up_tpo,"상위TPO");
//plot9(dn_tpo,"하위TPO");
3.그럼 수고하세요
2017-10-26
220
글번호 113639
답변완료
행복; 시스템식 작성 바랍니다
한국의 금융산업 발전을 위해 불철주야 애쓰시는 귀하의 노고를 높이 평가합니다
시스템식 관련입니다
<< 지표식 조건 >>
- 종목; SK하이닉스
- 주기; 일봉
- swinghigh/swinglow/swinghighbar/swinglowbar 관련입니다
- 2016년 1월 1일 이후에
- 첫번째 발생한 SwingHigh(1, H, 25, 25, 51)의 값 var1은 (H == 32,250)
- 첫번째 발생한 SwingHighbar(1, H, 25, 25, 51)의 발생일자 value1는 (sDate == 20160307)
- 두번째 발생한 SwingHigh(1, H, 25, 25, 51)의 값 var2은 (H == 54,900)
- 두번째 발생한 SwingHighbar(1, H, 25, 25, 51)의 발생일자 value2는 (sDate == 20170201)
- 세번째 발생한 SwingHigh(1, H, 25, 25, 51)의 값 var3은 (H == 73,000)
- 세번째 발생한 SwingHighbar(1, H, 25, 25, 51)의 발생일자 value3는 (sDate == 20170725)
입니다
지표식은 << 아래 >>와 같습니다
=========<< 아래 >>===================================
input : Left(25),Right(25);
var : TL1(0),TL2(0),TL3(0),TL4(0);
var : DD(0),Didx(0),hh(0) ;
if sdate != sdate[1] Then
Didx = Didx+1;
if sdate[right] >= 20160101 then{
if SwingHigh(1,H,Left,right,Left+right+1) != -1 Then{
DD = Didx;
HH = H[right];
TL1 = TL_New(sdate[Left+right],stime[left+right],H[right],sdate,stime,H[right]);
TL2 = TL1[1];
TL3 = TL2[1];
TL4 = TL3[1];
TL_Delete(TL4);
TL_SetColor(TL1,BLUE);
TL_SetColor(TL2,RED);
TL_SetColor(TL3,BLACK);
}
}
if Didx >= DD and Didx <= DD+100 Then
TL_SetEnd(TL1,sdate,stime,HH);
=========<< 아래 >>===================================
<< 시스템식 조건 >>
- 첫번째 발생한 SwingHigh(1, H, 25, 25, 51)의 값 var1(H == 32,250)을
첫번째 발생한 SwingHighbar(1, H, 25, 25, 51)의 발생일자 value1(sDate == 20160307)로부터
100일 이내에 종가로 상향돌파한 날이 20160630 입니다
상향돌파한 날 종가로 1차 매수 합니다
- 두번째 발생한 SwingHigh(1, H, 25, 25, 51)의 값 Var2(H == 54,900)을
두번째 발생한 SwingHighbar(1, H, 25, 25, 51)의 발생일자 value2(sDate == 20170201)로부터
100일 이내에 종가로 상향돌파한 날이 20170502 입니다
상향돌파한 날 종가로 2차 매수 합니다
- 세번째 발생한 SwingHigh(1, H, 25, 25, 51)의 값 Var3(H == 73,000)을
세번째 발생한 SwingHighbar(1, H, 25, 25, 51)의 발생일자 value3(sDate == 20170725)로부터
100일 이내에 종가로 상향돌파한 날이 20170911 입니다
상향돌파한 날 종가로 3차 매수 합니다
- 3차 매수한 날인 20170911 일로부터 11일 후인 20170926 일 종가에 전량 매도합니다
시스템식 부탁드립니다
수고하십시요^^
2017-10-26
191
글번호 113638
답변완료
수식질문드립니다.. ㅠㅜ
고생많으십니다~~~ 문의드릴것이 있어 글남깁니다.~
질문이 쉽게 이해가 되셨으면 좋겠는데..
1.상승으로 마감한 캔들만, 현재종가부터 n개 간의 종가 이동평균선(음봉일경우 포함하지 않음)
2. 1번에서 n개의 범위에 국한되는것이 아니라
양봉인 캔들 n개가 나올때까지 이전봉을 참조하여 n개의 양봉의 종가만 더한값을 이동평균선으로 하고싶습니다.
3. 5일선 > 20일선 정배열일때 5일선의 색상을 빨강색,
20일선 < 5일선 역배열일때 5일선의 색상을 파란색 으로 할수있을까요?...
고생많으시겠지만 도움부탁드립니다. ㅠㅜ
감사합니다.
2017-10-26
168
글번호 113637
답변완료
문의드립니다.
안녕하세요
주식관련 시스템수식 문의드립니다.
1분봉 종가기준>
매수 : 9시 5분이후 "매도잔량 < 매수잔량"에서 "매도잔량 > 매수잔량"이 될때 매수
(3시 18분이후에는 매수 금지)
매도 : "매도잔량 > 매수잔량"에서 "매도잔량 < 매수잔량"이 될때, 또는 3시 18분이면 매도.
* 매수는 계좌에 있는 금액으로 살수 있는 최대금액.
* 매수/매도 모두 시장가 거래
감사드립니다.
2017-10-26
166
글번호 113636
답변완료
문의드립니다..
안녕하세요 미리감사드리며 문의드립니다
1.
전일~금일 까지의 고가와 저가가 반영되는 로그피보나치 수식으로 부탁드립니다...
input : Per1(23.6),Per2(38.2),Per3(50.0),Per4(61.8),Per5(76.4);
var1 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per1/100));
var2 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per2/100));
var3 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per3/100));
var4 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per4/100));
var5 = 10^(LOG10(HH)-(LOG10(HH)-LOG10(LL))*(Per5/100));
2. 아래식에서 금일부터나오는 currentdate 를 삭제해주시고
날짜+시간을 입력한시점부터 선이나올수있게 부탁드립니다..
input : HH(35),LL(30),시간(100000);
var : T(0);
if CurrentDate == sdate Then
T = 1;
if T == 1 and stime >= 시간 Then
T = 2;
if T == 2 then{
plot1(HH,"고점");
plot2(LL,"저점");
plot3 (10^(LOG10(LL)+(LOG10(HH)-LOG10(LL))*(76.4/100)),"-23.6%");
plot4 (10^(LOG10(LL)+(LOG10(HH)-LOG10(LL))*(61.8/100)),"-38.2%");
plot5 (10^(LOG10(LL)+(LOG10(HH)-LOG10(LL))*(50/100)),"-50%");
plot6 (10^(LOG10(LL)+(LOG10(HH)-LOG10(LL))*(38.2/100)),"-61.8%");
plot7 (10^(LOG10(LL)+(LOG10(HH)-LOG10(LL))*(23.6/100)),"-76.4%");
plot8 (10^(LOG10(HH)+(LOG10(HH)-LOG10(LL))*(23.6/100)),"23.6%");
Plot9 (10^(LOG10(HH)+(LOG10(HH)-LOG10(LL))*(38.2/100)),"38.2%");
Plot10 (10^(LOG10(HH)+(LOG10(HH)-LOG10(LL))*(50/100)),"50%");
Plot11 (10^(LOG10(HH)+(LOG10(HH)-LOG10(LL))*(61.8/100)),"61.8%");
plot12 (10^(LOG10(HH)+(LOG10(HH)-LOG10(LL))*(76.4/100)),"76.4%");
}
2017-10-26
187
글번호 113635
답변완료
문의드립니다.
지표를 캔들형태로 만들 수 있나요??
30분봉이라고 하면 30분 동안 캔들이 움직일때 지표도 움직이는데 이걸 캔들화 시킬 수 있는지 궁금합니다.
2017-10-25
166
글번호 113634
답변완료
문의드립니다.
1틱차트에 300틱 차트의 5일선을 표시할려면 어떻게 해야하나요???
2017-10-25
170
글번호 113633