커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4488
글번호 230811
답변완료
지표식 문의
안녕하세요?
수동으로 지표를 입력하고 싶은데요,
예컨대
1. var1 = 봉이 1월이면 10, 2월이면 20, ...., 12월이면 120 ;
=> 말하자면, 매년 1월이면 1월 내내 10, ... , 12월이면 12월 내내 120 을 나타내는 지표.
2. var2 = 봉이 2017년 1월 9일 이전이면 0,
2017년 1월 10일 ~ 2017년 2월 20일 이면 1,
2017년 2월 21일 ~ 2017년 9월 10일 이면 2,
2017년 9월 11일 ~ 2018년 7월 25일이면 3,
2018년 7월 26일 이후면 4;
=> 말하자면, 임의의 날짜 범위를 지정해서, 제가 주고 싶은 값을 주는 지표.
Plot1(var1);
Plot2(var2);
이런 지표를 일단은 일봉차트에 적용하고 싶은데, 예컨대 1시간봉 차트 등 일봉보다
빠른 주기의 차트에도 적용이 될까요?
그렇게 되었으면 좋겠습니다.
감사합니다.
2019-02-11
215
글번호 126001
답변완료
수식부탁드립니다
#,안녕하세요
#,61185 답변수식 2)번에서 도움 요청입니다
TL라인의 색,형태,굵기 및 색채우기를 지표속성창에서 수정할수 있도록 식을 수정
부탁드립니다.
미리 감사드립니다.
2019-02-09
202
글번호 126000
답변완료
종목검색식 부탁드려요
직전10개봉중에 120봉중 최저가가 있고 stochastics(12,5,5)의k가d보다크고 macd(12,26,9)선이 macd(12,26,9)signal선을 crossup 하는종목 검색식요!!
감사합니다^^
2019-02-09
212
글번호 125999
답변완료
강조 수식 부탁드립니다.
안녕하세요
부탁드릴 수식은,
현재봉과 그 직전봉 두개의 캔들을 박스로 묶고, 두개의 캔들 중 최고가, 중심값 최저가를 가로선으로 표시하고자 합니다.
감사합니다.
2019-02-09
191
글번호 125998
김원식 님에 의해서 삭제되었습니다.
2019-02-09
6
글번호 125997
답변완료
수정요청 드립니다.(수식)
* 항상 많은 도움에 고맙습니다.
* 수식좀 봐 주십시요.
CrossUp,CrossDown 시점에 매매가 안되고 다른 시점에 매매가 되네요?
1.너무 잦은 매매가 일어남(2분사이에 매매가 일어남,CrossUp,CrossDown 상황이 아닌데.. )
2.CrossUp,CrossDown 교차점에서 매매가 안됨니다.
3.CrossUp,CrossDown 교차되면 매매가 되도록 수정 좀 요청 드립니다.
Input : ntime1(5),ntime2(10),ntime3(30),ntime4(40);
input : Period(20);
var : S1(0),D1(0),TM(0),EP(0);
Var : TF1(0),JISU1(0), PreJISU1(0),idx1(0);
Var : TF2(0),JISU2(0), PreJISU2(0),idx2(0);
Var : TF3(0),JISU3(0), PreJISU3(0),idx3(0);
Var : TF4(0),JISU4(0), PreJISU4(0),idx4(0);
Ep = 2/(Period+1);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF1 = TM%ntime1;
TF2 = TM%ntime2;
TF3 = TM%ntime3;
TF4 = TM%ntime4;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF1 < TF1[1]) Then
{
idx1 = idx1+1;
PreJISU1 = JISU1[1];
}
if idx1 <= 1 then
JISU1 = C;
else
JISU1 = C * EP + PreJISU1 * (1-EP);
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF2 < TF2[1]) Then
{
idx2 = idx2+1;
PreJISU2 = JISU2[1];
}
if idx2 <= 1 then
JISU2 = C;
else
JISU2 = C * EP + PreJISU2 * (1-EP);
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF3 < TF3[1]) Then
{
idx3 = idx3+1;
PreJISU3 = JISU3[1];
}
if idx3 <= 1 then
JISU3 = C;
else
JISU3 = C * EP + PreJISU3 * (1-EP);
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF4 < TF4[1]) Then
{
idx4 = idx4+1;
PreJISU4 = JISU4[1];
}
if idx4 <= 1 then
JISU4 = C;
else
JISU4 = C * EP + PreJISU4 * (1-EP);
if CrossUp(JiSu1,JiSu4) Then buy("매수");
if CrossDown(JiSu1,JiSu4) Then sell("매도");
}
*고맙습니다. 좋은 시간 되십시요^^
2019-02-10
149
글번호 125995
답변완료
수식 부탁드립니다
안녕하세요
아래수식을 첨부 그림 내용으로 변형부탁드립니다
Input:length(10),종가사용여부(0),파동선두께(2),수치표시(1);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 2, 1);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,RED);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 0);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,BLUE);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
2019-02-08
249
글번호 125993
답변완료
시스템
안녕하세요 새해복많이받으세요
예스함수로렌코차트을 함수식으로 구현되는걸로 알고있습니다
아래식에서 DMI관련식을 제외한 렌코와 파라만 함수식을 수정부탁드립니디
input:renkoSize(0.2), //렌코 크기
af(0.02), maxAF(0.2),
Period(14);
var:j(0),k(0),renkoCnt(0),gubun(0),
printOK(false), //데이터 출력/미출력(True/False)
filename("renko.txt"), //데이터 출력 생성 위치(C:₩예스트레이더₩YesLang₩)
value(0);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),gubunSave[5](0);
If DayIndex == 0 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];
}
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];
j = 0; //마지막 1봉만 출력
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];
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];
}
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];
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];
}
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];
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 Time >= 151500 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];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
}
j = 0; //마지막 1봉만 출력
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 OO[0] > 0 Then Plot1(OO[0],"OO");
//If CC[0] > 0 Then Plot2(CC[0],"CC");
for j= 4 downTo 1{
gubunSave[j] = gubunSave[j-1];
}
gubunSave[0] = gubun;
value = sar(af,maxAF);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
# 매수/매도청산
If CrossUP(value1, value2) and (C > value) and (/*(gubunSave[2] = -1) and (gubunSave[1] = 1) and*/ (gubun = 1) or ((gubun = -1) and (gubunSave[1] = 1))) Then
{
buy();
}
# 매도/매수청산
If CrossDown(value1, value2) and (C < value) and (/*(gubunSave[2] = 1) and (gubunSave[1] = -1) and*/ (gubun = -1) or ((gubun = 1) and (gubunSave[1] = -1))) Then
{
Sell();
}
감사합니다
2019-02-08
177
글번호 125986
답변완료
문의드립니다
점 그래프가 아닌 수치만 점으로 표현하고 싶은데 이부분은 안되는건가요?
예를 들면 시가에 점으로 표시하는 것입니다.
그리고 3프로 양봉에 강세표시를 하고싶습니다.윗꼬리와 아래꼬리부분에요
2019-02-08
156
글번호 125984