커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3760
글번호 230811
답변완료
수식 부탁드립니다.
수고 많으십니다.
지표 수식을 작성하려고 하는데 막히는게 많아서 도움을 부탁드립니다.
1. 분봉에서 upvol값과 downvol값을 누적하여 macd 히스토그램처럼 막대그래프로 표시하고 싶습니다.
틱이 발생할 때마다 각각의 값을 계산하여 실시간으로 표시하고 싶습니다.
거래량이 급증할 때는 지표창의 Y축의 스케일이 자동으로 조절되어 적절한 비율로 보일 수 있으면 좋겠습니다.(거래량 지표창에서 거래량이 폭증할 때 지표창 Y축 스케일이 자동으로 조절되는 것처럼요)
2. upvol값 누적은 붉은색으로 기준선 0에서 위로 표시하고 downvol 누적량은 파랑색으로 기준선 0에서 아래로 표시하고 싶습니다.
3. 틱이 발생할 때마다 vol, upvol, downvol 값을 데이터로 저장할 수 있는 방법이 있을까요?
* 과거 데이터를 보면 vol값만 나오는데 기존 데이터에 대한 upvol값과 downvol값을 구할 수 있는지 궁금합니다.
즐거운 일이 가득한 한 주 되시기 바랍니다.
감사합니다.
2019-05-12
182
글번호 128611
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
앞의 재질문 답변 부탁드립니다.
2. 시스템
예전에 띠봉선생님 글 보고 생각해본 건데요. 이렇게도 되나요?
-진입할 지 말지 랜덤으로 정함.
-매수 매도도 랜덤으로 정함.
-진입은 장개시후 즉시진입
-트레일링스탑을 할 지 말지도 랜덤으로 정함.
3. 지표
당일 종가(Dayclose)와 당일시가(dayopen)로 만든 역사적 변동성 지표 부탁드립니다.
원래는 당일종가와 전일종가로 구하는 걸로 알고 있는데요.
4. 기타
셋업
-일봉 5이평 이격이 120 이상일 때 고가 셋업
진입
-a: 셋업봉 + 50 틱에서 즉시 매도
추가진입
-b: 진입가에서 50틱이 더 올랐으면 추가매도 (물타기)
-c: 또 50틱 오르면 추가매도
-d: 또 50틱 오르면 추가매도(총 3회 물타기)
청산
-5일선 하향 돌파시 Atstop 청산(분봉상 한개 전 봉 5일선 값 터치하면 청산해주시면 될 것 같습니다.)
*a,b,c,d 중 어느 한 때라도 5일선 도달했으면 포지션 모두 청산함.
*포지션의 손실이 시뮬상 수익금액의 n%(외부변수)가 되면 모두 청산.
5. 기타
4번과 모든 조건은 같고
*포지션의 손실이 시뮬상 수익금액의 n%(외부변수)가 되면 모두 청산.←
이 부분을 시뮬상 일 최대수익의 n%로
2019-05-13
191
글번호 128610
답변완료
함수식 부탁드립니다.
항상 도움주셔서 감사합니다.
1) 현재 예스랭귀지의 ATR 함수 수식을 보면 아래와 같습니다.
*--------------------------
* Truehigh
*--------------------------
If C[1] > H then
TrueHigh = C[1];
else
TrueHigh = H;
*--------------------------
* Truelow
*--------------------------
If C[1] < L then
TrueLow = C[1];
else
TrueLow = L;
*--------------------------
* TrueRange
*--------------------------
TrueRange = TrueHigh - TrueLow;
*--------------------------
* ATR
*--------------------------
Inputs: Period(NumericSimple);
ATR = Ma(TrueRange, Period);
*-----------------------------
다른 증권사 ATR 함수식과 다릅니다.
*-----------------------------
*-----------------------------
* 요청 ATR 함수식
*-----------------------------
금일 고가와 저가 : (h-l)
어제 종가와 고가 : abs(c(1)-h)
어제 종가와 저가 : abs(c(1)-l)
이 3가지 중 최대값의 일정기간(14일) 동안의 평균을 함수식으로 만들고 싶습니다.
다른 증권사 ATR 함수식입니다.
참고 부탁드립니다.
ex) avg(max(max(h-l,abs(c(1)-h)),abs(c(1)-l)),Period)
2) 분봉에서 사용할수 있는
일봉의 (고가 - 시가)의 20일 평균 함수식을 만들고 싶습니다.
분봉에서 사용할수 있는
일봉의 (시가 - 저가)의 20일 평균 함수식을 만들고 싶습니다.
분봉에서 사용할수 있는
일봉의 (고가 - 저가)의 20일 평균 함수식을 만들고 싶습니다.
감사합니다.
2019-05-13
248
글번호 128609
답변완료
시스템식 부탁드립니다.
항상 도움 주셔서 감사합니다.
시스템식을 만들어 보고자합니다.
매매차트 : 오일 5분봉
1. 매수진입
현재가가 5분봉 70봉 최고가 갱신
and C > (당일시작가 + 일봉의 20일 평균(고가 - 시작가) * 0.25)
and (당일고가 - 당일저가) < 일봉 20일 평균(고가 - 저가) * 0.75
매수가 = 당일시작가 + 일봉의 20일 평균(고가 - 시작가) * 0.25
2. 매수청산
5분봉 20봉 최저가 갱신 //청산
Or C < 당일시작가 - 일봉의 20일 평균(고가 - 시작가) * 0.1 //손절
Or C < (매수가 - 2.0 * 5분봉 70봉 평균(고가 - 시작가)) //손절
Or C > (당일시작가 + 일봉의 20일 평균(고가 - 시작가) * 0.5) //익절
3. 매도진입
현재가가 5분봉 70봉 최저가 갱신
and C < (당일시작가 - 일봉의 20일 평균(시작가 - 저가) * 0.25)
and (당일고가 - 당일저가) < 일봉 20일 평균(고가 - 저가) * 0.75
매도가 = 당일시작가 - 일봉의 20일 평균(시작가 - 저가) * 0.25
4. 매도청산
5분봉 20봉 최고가 갱신 //청산
Or C > 당일시작가 + 일봉의 20일 평균(시작가 - 저가) * 0.1 //손절
Or C > (매도가 + 2.0 * 5분봉 70봉 평균(시작가 - 저가)) //손절
Or C < (당일시작가 - 일봉의 20일 평균(시작가 - 저가) * 0.5) //익절
감사합니다.
2019-05-13
162
글번호 128608
답변완료
62458 수식 중 오류가 있는듯 합니다..
분활 청산 되어야 하는데 "bx1"와 "sx1"만 청산됩니다..
2, 3, 4 계약일때 "bx1"와 "sx1"만 청산됩니다..분활청산이 안됩니다.
수식은 아래와 같습니다..
var : vol(0),cross(0);
input : 진입시작(90000),진입종료(040000),강제청산시간(050000);
var : Tcond(false);
if (sdate != sdate[1] and stime >= 진입시작) or
(sdate == sdate[1] and stime >= 진입시작 and stime[1] < 진입시작) then
{
Tcond = true;
vol = 1;
cross = 0;
}
if (sdate != sdate[1] and stime >= 진입종료) or
(sdate == sdate[1] and stime >= 진입종료 and stime[1] < 진입종료) then
{
Tcond = false;
}
if (sdate != sdate[1] and stime >= 강제청산시간) or
(sdate == sdate[1] and stime >= 강제청산시간 and stime[1] < 강제청산시간) then
{
if MarketPosition == 1 Then
ExitLong("bx");
if MarketPosition == -1 Then
ExitShort("sx");
}
if Tcond == true then
{
if MarketPosition <= 0 and tcond == true and crossup(C,dayopen) Then
{
if MarketPosition == -1 Then
{
cross = cross+1;
if cross == 2 Then
{
cross = 0;
vol = vol+1;
}
}
Else
{
cross = 0;
vol = 1;
}
buy("b",OnClose,def,min(4,vol));
}
if MarketPosition >= 0 and tcond == true and CrossDown(c,dayopen) Then
{
if MarketPosition == 1 Then
{
cross = cross+1;
if cross == 2 Then
{
cross = 0;
vol = vol+1;
}
}
Else
{
cross = 0;
vol = 1;
}
sell("s",OnClose,def,min(4,vol));
}
if MarketPosition == 1 then
{
if MaxEntries == 1 Then
ExitLong("bx1",atlimit,EntryPrice+PriceScale*20);
if MaxEntries == 2 Then
{
ExitLong("bx21",atlimit,EntryPrice+PriceScale*10,"",1,1);
ExitLong("bx22",atlimit,EntryPrice+PriceScale*30,"",1,1);
}
if MaxEntries == 3 Then
{
ExitLong("bx31",atlimit,EntryPrice+PriceScale*10,"",1,1);
ExitLong("bx32",atlimit,EntryPrice+PriceScale*20,"",1,1);
ExitLong("bx33",atlimit,EntryPrice+PriceScale*30,"",1,1);
}
if MaxEntries == 4 Then
{
ExitLong("bx41",atlimit,EntryPrice+PriceScale*10,"",1,1);
ExitLong("bx42",atlimit,EntryPrice+PriceScale*20,"",1,1);
ExitLong("bx43",atlimit,EntryPrice+PriceScale*30,"",1,1);
ExitLong("bx44",atlimit,EntryPrice+PriceScale*40,"",1,1);
}
}
if MarketPosition == -1 then
{
if MaxEntries == 1 Then
ExitShort("sx1",atlimit,EntryPrice-PriceScale*20);
if MaxEntries == 2 Then
{
ExitShort("sx21",atlimit,EntryPrice-PriceScale*10,"",1,1);
ExitShort("sx22",atlimit,EntryPrice-PriceScale*30,"",1,1);
}
if MaxEntries == 3 Then
{
ExitShort("sx31",atlimit,EntryPrice-PriceScale*10,"",1,1);
ExitShort("sx32",atlimit,EntryPrice-PriceScale*20,"",1,1);
ExitShort("sx33",atlimit,EntryPrice-PriceScale*30,"",1,1);
}
if MaxEntries == 4 Then
{
ExitShort("sx41",atlimit,EntryPrice-PriceScale*10,"",1,1);
ExitShort("sx42",atlimit,EntryPrice-PriceScale*20,"",1,1);
ExitShort("sx43",atlimit,EntryPrice-PriceScale*30,"",1,1);
ExitShort("sx44",atlimit,EntryPrice-PriceScale*40,"",1,1);
}
}
}
2019-05-11
166
글번호 128607
답변완료
추세선 수식 수정
Input:length(10);
Var:j(0),k(0),q(0),TL1(0),TL2(0),TL3(0),
TL_NewBit(0); // 1:NewLine 2:SetEndLine
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
Value1 = HiLoLineZigZag(length,0,고,저,TL_NewBit);
If Value1 == 1 Then { // 고점
If TL_NewBit == 1 Then { // 신규 고점
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,1);
k = 0;
For j = 2 To 10 {
If 저[1,1] > 저[j,1] and 저[j,1] > 0 Then { // 전저점보다 낮은 이전 전저점 찾는다
k = j;
j = 10; // exit loop
}
}
If k > 1 Then { // 낮은 전저점이 찾아졌다면
TL2 = TL_New(저[k,3],저[k,4],저[k,1],sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]);
TL_SetColor(TL2,BLUE);
}
q = q + 1; // 고점이 새로 추가되었으므로 1 증가
If q > 2 and q <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열 크기가 10이므로 10 이내
TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]);
}
} Else { // 신규 고점이 아니면 기존 추세선만 연장
If k > 1 Then {
TL_SetEnd(TL2,sDate,sTime,(저[1,1]-저[k,1])/(저[1,2]-저[k,2])*(Index-저[k,2])+저[k,1]);
}
If q > 2 and q <= 10 Then {
TL_SetEnd(TL3,sDate,sTime,(고[2,1]-고[q,1])/(고[2,2]-고[q,2])*(Index-고[q,2])+고[q,1]);
}
}
If TL_NewBit == 2 Then {
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
}
} Else If Value1 == -1 Then { // 저점
If TL_NewBit == 1 Then { // 신규 저점
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,1);
k = k + 1; // 저점이 새로 추가되었으므로 1 증가
If k > 2 and k <= 10 Then { // 1 증가했으니 2보다 커야 하고 배열의 크기가 10이므로 10 이내
TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]);
}
q = 0;
For j = 2 To 10 {
If 고[1,1] < 고[j,1] Then { // 전고점보다 높은 이전 전고점을 찾는다
q = j;
j = 10; // exit loop
}
}
If q > 1 Then { // 높은 전고점이 찾아졌다면
TL3 = TL_New(고[q,3],고[q,4],고[q,1],sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]);
TL_SetColor(TL3,RED);
}
} Else { // 신규 저점이 아니면 기존 추세선만 연장
If k > 2 and k <= 10 Then {
TL_SetEnd(TL2,sDate,sTime,(저[2,1]-저[k,1])/(저[2,2]-저[k,2])*(Index-저[k,2])+저[k,1]);
}
If q > 1 Then {
TL_SetEnd(TL3,sDate,sTime,(고[1,1]-고[q,1])/(고[1,2]-고[q,2])*(Index-고[q,2])+고[q,1]);
}
}
If TL_NewBit == 2 Then {
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
}
추세선 수식인데 여기서 추세선 두께랑 색상을 다른색으로 변경하려면 어떻게 해야 하나요?
지표수식 중 선 두께와 색상은 어떤 부분인지 알고싶습니다.
지표적용했을시 검은선과 빨강선 파랑선이 나오는데 빨강선을 파랑색으로 파랑선을 빨강색으로 바꾸고 싶구요. 두께는 빨강 파랑 모두 4로 하고싶습니다. 그리 변경 좀 해주시면 좋겠구요.그리고 검은선과 빨강선과 파랑선 색상과 두께를 바꾸는 수식이 어디인지 좀 알고싶습니다.
그리고 개인적으로 한말씀 드리고싶은데 전화하려다 그냥 글로 남깁니다. 예스스탁에 제가 전화를 몇번 했는데 수식이나 기능담당하시는 부서 연결을 해서 목소리가 젊은 남자직원분하고 몇번 통화했는데 제가 여자인데 말투가 매번 무미건조한 말투로 불친절하고 상대방이 듣기 기분이 불쾌한 적이 한두번이 아닙니다. 전화 끊고나면 기분이 계속 나빠지네요. 여자라고 무시한거라면 더욱 안되는거고 아님 모두에게 불친절한지는 모르겠지만 남자직원분이 담당부서에 한분이라면 친절하게 응대 좀 해주시죠. 뭘 물어보면 좋게 답하는게 아닌 전화할때마다 기분나쁘게 만든다는건 서비스부분에서 별로네요. 앞으로 불쾌해서 전화를 자주 하진 않겠지만 친절하게 답변하는 부분 좀 서비스했으면 하는 바램입니다.
2019-05-11
266
글번호 128606
답변완료
검색식 부탁드립니다.
검색조건
1. n봉전부터 현재봉까지
2. 양봉일때(시가<종가)
3. 거래대금의 합 > 1억
수고 부탁드립니다.
2019-05-11
191
글번호 128605
답변완료
지표
아래지표를 지난 과거도 선들이 보이게 가능한지요
if dayindex == 0 Then{
var1 = H;
var2 = L;
var3 = (var1+var2)/2;
var4 = (var1-var3);
var5 = var1+var4;
var6 = var2-var4;
}
if dayindex > 0 Then{
if crossup(C,var1) Then{
var1 = var1[1]+var4;
var2 = var2[1]+var4;
var3 = (var1+var2)/2;
var5 = var1+var4;
var6 = var2-var4;
}
if crossdown(C,var1) Then{
var1 = var1[1]-var4[1];
var2 = var2[1]-var4[1];
var3 = (var1+var2)/2;
var5 = var1+var4;
var6 = var2-var4;
}
}
if sdate ==CurrentDate then{
plot1(var1);
plot2(var2);
plot3(var3);
plot4(var5);
plot5(var6);
}
2019-05-11
170
글번호 128604
답변완료
작성식좀 부탁드립니다.
항상 감사드립니다.
2개 질문 드리겠습니다.
저는 분봉을 사용하는데
1. n분봉 기준 (거래대금/거래량) 지표
2. n분봉 기준 (하락거래량의 총합/상승거래량의 총합) 지표
지표를 알고싶습니다.
정확히 말하면 '수치'를 알고싶습니다
예를 들어 차트를 보면
n분봉 가격지표과 거래량지표가 기본적으로 보여지는데
1,2 지표도 차트에서 볼수있게금....부탁좀드리겠습니다.
(만약에 안된다면 최대한 쉽게 보거나 알수있는 방법이라도좀....알려주세요)
2019-05-11
185
글번호 128603