커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
2498
글번호 230811
답변완료
지표 부탁드립니다.
안녕하세요?
분봉 선물챠트에 참조데이터 3에 KP200을 넣고
양봉일 때 거래량 - 음봉일 때 거래량으로 순 거래량 변수를 구해서 그래프로 표현하고자 합니다.
부탁드립니다.
설 연휴 즐겁고 행복한 시간 보내시기 바랍니다.
감사합니다.
2022-01-27
1082
글번호 155874
답변완료
문의 드립니다.
아래 렌코차트는 선물에서는 제대로 작동하는데, 일반 주식에서는 종가선 비슷하게 나옵니다.
그 이유가 뭘까요...
선물처럼 주식차트에서도 나오게 할 방법은 없을까요?
답변 감사합니다.
input:renkoSize(0.5),length(10),NumATRs(1.5);
var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0),filename("renko3.txt"),printOK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),
TR[50](0), //True Range
upperLine[50](0), //상단채널
lowerLine[50](0), //하단채널
maV[50](0); //이평선
If index == 0 or bdate != bdate[1] Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1; //하락 방향
CC[0] = OO[0] - renkoSize; //음봉
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조
//macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리
If sum > 0 Then {
sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌
trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산
maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산
atrV = trSum / length; //ATR 계산식 참조
upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산
lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산
}
j = 0;
if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1; //상승 방향
CC[0] = OO[0] + renkoSize; //양봉
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
If sum > 0 Then { //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나
sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0;
if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If NextBarSdate > sdate Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
If sum > 0 Then {
sum = sum + CC[0] - CC[length];
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0; //채널 값을 새로이 계산
if printOK then print(filename,"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if sum == 0 and CC[length] > 0 then {
for j = 0 to length - 1 {
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO",iff(OO[0] > CC[0],BLACK,MAGENTA)); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 100 then plot3(upperLine[0],"UpperBand");
if lowerLine[0] > 100 then plot4(lowerLine[0],"LowerBand");
if maV[0] > 100 then plot5(maV[0],"MidLine");
2022-01-27
949
글번호 155872
답변완료
문의 드립니다.
안녕하세요. 수고 많으십니다.
수식 부탁 좀 드리겠습니다.
자동주문 시작하고 최초에는 매매 신호 나오는대로 매수든 매도든 하고
그 이후 부터는
청산과 반대방향 포지션을 사는 수식 부탁드립니다.
항상 잔고를 가지고 있을수 있도록 말입니다.
2022-01-27
993
글번호 155871
답변완료
지표 수식(보조 지표1 및 지표2)의 작성을 부탁드립니다.
담당자님, 안녕하세요.
작성해주신 지표 수식을 잘 활용하고 있습니다.
매우 감사드립니다.
보조지표1과 보조지표2의 수식 작성을 부탁드립니다.
작성에 참고하시기 바랍니다.
(KOSPI200 주가지수 선물) 분봉 차트에서, 예를 들면 3분봉 차트에서
적용하는 지표라고 가정하고 다음과 같은 지표 수식의 작성을 부탁드립니다.
------------------------------------------------------------------------------------
<지표 1>
직전 3번째 봉의 미결제약정 대비 현재 봉의 미결제약정의 증감율을 표시하는 선(그래프)과
수평 기준선 상하라인(예 : 상단 기준선 라인 +0.08%, 하단 기준선 라인 -0.08%)을 표시
예시] 직전 3번째 봉 (09:00~09:03)에 해당하는 미결제약정 : 284,000
현재봉 (09:09~09:12)에 해당하는 미결제약정 : 287,000
-> 현재봉에 해당하는 증감율 1.06%(=287,000/284,000 -1)의 수치를 선으로 표시하고
상단 기준선 수평라인 +0.08%, 하단 기준선 수평라인 -0.08%도 표시
<지표 2>
직전 3개봉의 미결제약정 이동평균 수치 대비 현재 봉의 미결제약정의 증감율을 표시하는 선(그래프)과
수평 기준선 상하라인(예 : 상단 기준선 라인 +0.08%, 하단 기준선 라인 -0.08%)을 표시
예시] 직전 3번째 봉 (09:00~09:03)에 해당하는 미결제약정 : 284,000
직전 2번째 봉 (09:03~09:06)에 해당하는 미결제약정 : 285,000
직전 1번째 봉 (09:06~09:09)에 해당하는 미결제약정 : 286,000
현재봉 (09:09~09:12)에 해당하는 미결제약정 : 287,000
-> 직전 3개봉 미결제약정 평균 : 285,000 [= (284,000+285,000+286,000)/3 ]
현재봉에 해당하는 증감율 0.07%(=287,000/285,000 -1)의 수치를 선으로 표시하고
상단 기준선 수평라인 +0.08%, 하단 기준선 수평라인 -0.08%도 표시
<지표1, 2 공통 요건정의>
1) 미결제약정의 증감율과 수평 기준선 상단라인, 하단라인(2개 각각)의 수치는 모두 외부변수로 설정하여
각 수치의 변경 입력이 가능 하도록 구현 (cf. 매우 희망하는 기능입니다)
2) 증감율 수치의 상황에 따라 Y축의 스케일이 탄력적으로 조정되도록 구현
(그래프의 상하폭은 지표 화면 크기의 90% 수준으로 유지)
3) 증감율 선(그래프)과 수평 기준선 상하단 사이의 공간은 음영 색으로 채움
(예 : 증감율 선 0.09%와 상단 기준선 +0.08% 사이의 공간은 붉은색 음영으로 채움)
* 지표1과 지표2에서 증감율 선(그래프)과 수평 기준선 상하라인이 표현되는 방식은
그림 파일로 첨부한 Stochastic Slow 지표의 구현 방식(포맷)과 동일합니다.
(지표1과 지표2의 화면 그림 예시를 첨부 하였습니다.)
--------------------------------------------------------------------------------------
위와 같이 지표1, 지표2의 수식 작성을 부탁드립니다.
담당자님 노고와 답변에 미리
감사드립니다.
설 연휴를 앞두고 요청드려서 죄송합니다.
설 명절 잘 보내시기 바랍니다.
2022-01-27
1615
글번호 155865
답변완료
75717 재문의 부탁 드립니다. (내용무)
.
2022-01-27
1126
글번호 155864
답변완료
당일손익
안녕하세요~
아래 문장해석 부탁드립니다.
1. (sdate != sdate[1] and stime >= EndTime) 문장에서 날자가 바뀐직후면 0시인데 봉의 시간이 엔드타임보다 큰경우가 있나요?
2.(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) 문장은 개장직후 인가요?
3. 엔드타임에 청산은 어케하죠?
아 래
안녕하세요
예스스탁입니다.
1
아래 식구조 참고하시기 바랍니다.
Input : 당일수익틱수(150),당일손실틱수(100);
input : StartTime(90000),EndTime(045000);
Var : N1(0),dayPl(0),당일수익(0),당일손실(0),Xcond(false);
var : Tcond(false);
if sdate != sDate[1] Then
SetStopEndofday(Endtime);
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
{
SetStopEndofday(0);
Tcond = true;
}
당일수익 = PriceScale*당일수익틱수;
당일손실 = PriceScale*당일손실틱수;
if Bdate != Bdate[1] Then
{
Xcond = false;
N1 = NetProfit;
}
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] then
{
if daypl >= 당일수익 or daypl <= -당일손실 Then
Xcond = true;
if (IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or
IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
}
if Xcond == false and Tcond == true then
{
진입청산수식
}
if MarketPosition == 1 then{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
2
#이나 //는 표시시점부터 뒤로 한줄이 주석처리가 됩니다.
여러줄 주석처리하실 경우에는 /*, */를 이용하시면 됩니다.
Input : af(0.02), maxAF(0.2);
Var : Sarv(0);
Sarv = sar(af,maxAF);
/*
If crossup(c,Sarv) Then
{
Buy();
}
*/
If CrossDown(c,Sarv) Then
{
Sell();
}
즐거운 하루되세요
> 오케마컴 님이 쓴 글입니다.
> 제목 : 당일 누적손익 부탁드립니다
> 해외선물 나스닥이구요
매매시간은 오전 9시부터 다음날 새벽 04시 50분까지로 정하구요
당일의 누적수익(목표수익이 아님) 또는 누적손실이 정해진 목표에 도달하면 곧 청산이 되고 청산이후 재진입(매수 매도)이 금지되는 식을 알려주시면 감사하겠습니다.
누적수익은 150틱 누적손실은 100틱으로 하구요
이값에 도달하면 포지션 청산하고 재진입 금지되게 하고 싶습니다
도달하지 못하면 끝나는 시간 04시50분에 모든 포지션 청산이구요
아 그리고 한가지 더.. 이거는 위에하고는 상관없는건데요..
수식맨앞줄에 // 슬래시 두개하면 그줄은 비활성되는건 아는데 이러면 그줄 한줄만 비활성되는거죠? 한 문단 전체를 하려면 어찌해야 하는지 방법 알고 싶습니다~~
2022-01-27
975
글번호 155862
답변완료
문의드립니다
장시작후 30분 간격으로 알람이 울리게 할수 있을까요?
첫번째 알람은 9시30분.. 그후 10시.. 10시 30분... 마지막 알람은 3시
9시30분 ~ 오후 3시 동안 30분 간격으로 알람이 나오게..
감사합니다
2022-01-27
1165
글번호 155861
답변완료
수식작성 부탁드립니다
안녕하세요?
수고가 많으십니다
아래의 조건을 만족하는 수식 작성 부탁 드립니다
MACD(12.26.9)에서 MACD값이 -0.1~+0.1사이에서 시그날과 Dead Cross시 매도신호
MACD(12.26.9)에서 MACD값이 -0.1이하에서 시그날과 Golden Cross시 매수신호 발생하는
조건입니다
잘 부탁드립니다
감사합니다
2022-01-27
1044
글번호 155849
답변완료
종목검색식 문의드려요
수고하십니다
지난에 종목검색 문의드려서 아래 수식을 받았는데요
생각했던 검색종목이 안나오더라구요
제가 수식질문을 잘못드린건가해서 다시 한번 문의드리고 다시 문의드려요
일봉에서 5이평선이 20이평선을 데드 크로스 한후에 첫번째로 20이평을 종가로 돌파마감하는 종목(당일)을 검색하고 싶습니다 확인부탁드립니다
<지난번 문의내용>
일봉에서 5일,20일 이평선을 데드크로스한후 첫번째로 20일 이평선을 종가 돌파 마감한 종목검색(당일)문의드립니다~
var1 = ma(C,5);
Var2 = ma(C,20);
if CrossUp(var1,Var2) Then
Condition1 = true;
if Condition1 == true and CrossUp(C,Var2) Then
{
Find(1);
Condition1 = False;
}
2022-01-27
1055
글번호 155841