커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1692
글번호 230811
답변완료
수식 부탁드립니다
수식 부탁드립니다
10시에 2계약 매수,
10시 30분 기준으로 손실이면 즉시 전량매도청산,
수익이면 11시 1계약 청산, 12시 1계약 청산
2022-01-28
1074
글번호 155876
답변완료
수식작성 부탁드립니다
안녕하십니까?
종종 귀찮게 해서 죄송합니다
아래의 조건 신호 꼭 부탁드립니다
1
5이평선이 20이평선 아래서 상승중이고
조건1 : 양봉의 몸통 2/3가 20이평선을 돌파하여 걸쳐있거나,
조건2 : 20이평 위에서 시작하는 첫 양봉이 만들어질 때
위의 2조건 중 먼저 발생하는 봉에서 매수신호 발생
2
5이평선이 20이평선 위에서 하락중이고
조건1 : 음봉의 몸통 2/3가 20이평선을 이탈하여 걸쳐있거나,
조건2 : 20이평 아래서 시작하는 첫 음봉이 만들어질 때
위의 2조건 중 먼저 발생하는 봉에서 매도신호 발생
감사합니다
2022-01-27
1272
글번호 155875
답변완료
지표 부탁드립니다.
안녕하세요?
분봉 선물챠트에 참조데이터 3에 KP200을 넣고
양봉일 때 거래량 - 음봉일 때 거래량으로 순 거래량 변수를 구해서 그래프로 표현하고자 합니다.
부탁드립니다.
설 연휴 즐겁고 행복한 시간 보내시기 바랍니다.
감사합니다.
2022-01-27
1081
글번호 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
946
글번호 155872
답변완료
문의 드립니다.
안녕하세요. 수고 많으십니다.
수식 부탁 좀 드리겠습니다.
자동주문 시작하고 최초에는 매매 신호 나오는대로 매수든 매도든 하고
그 이후 부터는
청산과 반대방향 포지션을 사는 수식 부탁드립니다.
항상 잔고를 가지고 있을수 있도록 말입니다.
2022-01-27
991
글번호 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
1612
글번호 155865
답변완료
75717 재문의 부탁 드립니다. (내용무)
.
2022-01-27
1124
글번호 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
972
글번호 155862
답변완료
문의드립니다
장시작후 30분 간격으로 알람이 울리게 할수 있을까요?
첫번째 알람은 9시30분.. 그후 10시.. 10시 30분... 마지막 알람은 3시
9시30분 ~ 오후 3시 동안 30분 간격으로 알람이 나오게..
감사합니다
2022-01-27
1163
글번호 155861