커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4355
글번호 230811
답변완료
문의드립니다.
지난번에 이어 수식을 수정하다보니 다시 문의드립니다.
세로로 색채우기는 지난번 문의와 동일합니다.
조건은 삼각가중평균 20선이 <삼각가중평균 100선과 티론레벨스 중간선80선>을 모두 골든크로스할때와 데드크로스 할때를 색채우기 하고 싶습니다.
기간값은 변경 가능하게 부탁드립니다.
큰 도움을 주셔서 매번 감사드립니다. 수고하세요!!!
2017-07-10
120
글번호 111188
답변완료
문의드립니다.
2시 30분에서 50분까지의 최저값이 단순이평선 50(5분봉)보다 높고 10분 봉의 거래량지표에 양
봉이 3번째 생긴 후에 매수하되 하루에 1번만 거래한다는 수식을 전에 작성해주셨는데 여기서
일부 조건을 빼고 싶은데 제가 임의로 수식을 건드리니 오류가 생겨서 질문드립니다.
아래가 전에 작성해 주신 수식인데 여기서 2시 30분에서 50분까지의 최저값이 단순이평선보다
높은 경우라는 조건만 빼고 싶습니다.
답변 부탁드립니다.
----------------------------------------------------------------------------------------
input : ST(143000),ET(145000);
var : T1(0,data1),entry(0,data1);
var : V1(0,data1),V2(0,data1),V3(0,data2);
if data1(Bdate != Bdate[1]) Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
v1 = data1(MidValue(ST,ET));
v2 = data1(ma(C,50));
if data1(Bdate != Bdate[1]) Then
V3 = 0;
if data2(Stime >= ET and V > V[1]) Then
V3 = V3+1;
if stime > ET and v1 > v2 and V3 >= 3 and entry < 1 Then
buy();
----------------------------------------------------------------------------------------
2017-07-10
95
글번호 111187
답변완료
재 문의입니다.
NO. 54023 과 연결 입니다.
의사 전달이 잘 안된것같아 다시 문의 합니다.
그러니까 1번 지표식에 2번 지표식의 꺾은선지표를 var99 위치에 올 수 있도록 1번 지표식을 변경하여 주시면 감사 하겠습니다.
< 1번 지표식 >
input : A(3),MU(2);
var : upv(0),dnv(0),Ov(0);
var99 = 꺾은선 # <<<===== 요기를 2번지표식의 꺾은선으로 대체하여 주십시요 #
Ov = DayClose(1);
if Bdate!=Bdate[1] Then
{
upv = Ov+atr(A)*MU;
dnv = Ov-atr(A)*MU;
}
if Bdate == Bdate[1] Then
{
if CrossUp(var99,upv) Then
{
upv = upv[1]+atr(A)*MU;
dnv = upv[1];
}
if CrossDown(var99,dnv) Then
{
upv = dnv[1];
dnv = dnv[1]-atr(A)*MU;
}
}
plot1(var99);
plot2(upv);
plot3(dnv);
#==================================================================#
#==================================================================#
< 2번 지표식 >
Input:전환가격(1),종가사용여부(1),파동선두께(1),수치표시(1);
Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(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,2] = 0;
고[1,3] = sDate;
고[1,4] = sTime;
저[1,1] = LL;
저[1,2] = 0;
저[1,3] = sDate;
저[1,4] = sTime;
}
If Index > 0 Then // Index가 0일때는 이전 봉이 없으므로 Index가 1일때부터 1씩 증가
{
hiBar = hiBar + 1; // 최고점을 찍은 고[저]가의 위치를 저장 해놓기 위해 봉번호를 카운트한다.
loBar = loBar + 1;
}
If HH[hiBar] < HH Then hiBar = 0; // 현재 봉이 최고가이면 봉번호를 0으로 초기화
If LL[loBar] > LL Then loBar = 0;
Condition1 = 저[1,1] + 전환가격 < HH and hiBar == 0;
// 전저점에서 전환가격만큼 더한 값보다 고가가 크다면 추세가 변한 것으로 보고 신규 고점으로 인식
Condition2 = 고[1,1] - 전환가격 > LL and loBar == 0;
// 전고점에서 전환가격만큼 뺀 값보다 저가가 작다면 추세가 변한 것으로 보고 신규 저점으로 인식
처리구분 = "";
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
{
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
// 다음 봉의 고가가 기준 고가로 인식되려면 hiBar 값이 0이 되어야 한다.
// 봉이 바뀔 때마다 hiBar의 값을 1씩 증가시키므로 다음 봉의 hiBar 값은 0이 된다.
loBar = -1;
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,BLACK);
}
Else If 고[1,1] < HH[hiBar] Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
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
{
If 최종꼭지점 == "고점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
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,BLACK);
}
Else If 저[1,1] > LL[loBar] Then
{
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
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));
}
}
최종꼭지점 = "저점";
}
var1 = iff(최종꼭지점 == "고점",1,iff(최종꼭지점 == "저점",-1,0));
if var1 = -1 Then{
PLOT1(저[2,1]);
PLOT2(고[1,1]);
}
Else{
PLOT1(저[1,1]);
PLOT2(고[2,1]);
}
2017-07-10
130
글번호 111183
요타 님에 의해서 삭제되었습니다.
2017-07-11
24
글번호 111182
답변완료
수정을 부탁드림니다.
매수;장기파동(length)이 상방(최저점이 꺽인이후)단기파동(length1)이 단기파동의전저점을 갱신하거나 같을때 이후 상방으로 파동이 꺽인지점
청산;장기파동이 하방으로 꺽인지점
매도:장기파동이 하방(최고점이 꺽인이후)단기파동이 단기파동의전고점을갱신하거나 같을때 이후 하방으로 파동이 꺽엿을때
청산;장기파동이 하방에서 상방으로 꺽엿슬때
수식;
Input:length(20);
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0);
var : UpTL_chk(false),DnTL_chk(false);
Array:valArr[20](0),barArr[20](0),turnPntArr[20]("");
Input:length1(10);
var:lastHiVal1(0),lastLoVal1(0),turnPntBit1(""),TL11(0);
Array:valArr1[20](0),barArr1[20](0),turnPntArr1[20]("");
For j = 0 To 19 {
barArr[j] = barArr[j] + 1;
}
Condition1 = Highest(H,length) == H and lastHiVal <> H;
Condition2 = Lowest(L,length) == L and lastLoVal <> L;
If Condition1 Then lastHiVal = H;
If Condition2 Then lastLoVal = L;
turnPntBit = "";
If Condition1 and Condition2 Then {
If turnPntArr[1] == "Hi" Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
If turnPntBit == "Hi" or turnPntBit == "Lo" Then {
If turnPntBit <> turnPntArr[1] Then {
for j = 18 downto 1 {
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then {
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
# 진입 체크
TL_SetSize(TL1,4);
TL_SetColor(TL1,GREEN);
For j = 0 To 19 {
barArr1[j] = barArr1[j] + 1;
}
Condition11 = Highest(H,length1) == H and lastHiVal1 <> H;
Condition12 = Lowest(L,length1) == L and lastLoVal1 <> L;
If Condition11 Then lastHiVal1 = H;
If Condition12 Then lastLoVal1 = L;
turnPntBit1 = "";
If Condition11 and Condition12 Then {
If turnPntArr1[1] == "Hi" Then turnPntBit1 = "Lo";
Else If turnPntArr1[1] == "Lo" Then turnPntBit1 = "Hi";
}
Else If Condition11 Then turnPntBit1 = "Hi";
Else If Condition12 Then turnPntBit1 = "Lo";
If turnPntBit1 == "Hi" or turnPntBit1 == "Lo" Then {
If turnPntBit1 <> turnPntArr1[1] Then {
for j = 18 downto 1 {
valArr1[j+1] = valArr1[j];
barArr1[j+1] = barArr1[j];
turnPntArr1[j+1] = turnPntArr1[j];
}
}
If turnPntBit1 <> turnPntArr1[1] or
(turnPntBit1 == turnPntArr1[1] and
((turnPntBit1 == "Hi" and valArr1[1] < H) or
(turnPntBit1 == "Lo" and valArr1[1] > L))) Then {
valArr1[1] = IFF(turnPntBit1 == "Hi",H,L);
barArr1[1] = 0;
turnPntArr1[1] = turnPntBit1;
If turnPntArr1[1][1] <> turnPntArr1[1][0] Then
TL11 = TL_New(sDate[barArr1[2]],sTime[barArr1[2]],valArr1[2],sDate[barArr1[1]],sTime[barArr1[1]],valArr1[1]);
Else
TL_SetEnd(TL11,sDate[barArr1[1]],sTime[barArr1[1]],valArr1[1]);
}
}
TL_SetSize(TL11,4);
TL_SetColor(TL11,GREEN);
If turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Lo" Then
var1 = valArr[2];
if turnPntArr[1][1] <> turnPntArr[1][0] and turnPntArr[1][0] == "Hi" Then
var2 = valArr[2];
If turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Lo" Then
var11 = valArr1[2];
if turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Hi" Then
var22 = valArr1[2];
# 매수진입
IF var1 == var11 and var1[1] != var11[1] then
buy("buy") ;
# 매도진입
IF var2 == var22 and var2[1] != var22[1] then
sell("sell") ;
# 매수청산
IF Marketposition == 1 and turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Lo" Then {
ExitLong("BX11");
}
# 매도청산
IF Marketposition == -1 and turnPntArr1[1][1] <> turnPntArr1[1][0] and turnPntArr1[1][0] == "Hi" Then {
ExitShort("SX11");
}
##### 당일청산 #####
if stime == 050000 or (stime > 055000 and stime[1] < 050000) then { # 포지션 청산
exitlong("BDF1");
exitshort("SDF1");
}
2017-07-10
126
글번호 111167
답변완료
문의드립니다.
문의드립니다.
1. 시스템(자동) 상태로 인하여 매수 진입을 하였는데 잔량문제로 인하여 실제 상으로는 체결이 되지 않았습니다. 그런데 바로 청산이 자동이로 이루어져 의도치 않게 실제로 매도 진입만 이루어져 손실이 발생하게 된 경우 대비책은 없을까요?
2. 5분봉을 사용할 경우 같은 봉에서 매매와 청산이 바로 가능하게 할 수 있을까요?
2017-07-10
82
글번호 111166
답변완료
문의드립니다.
키움수식 변환 부탁드립니다.
수식1, 수식2가 하나의 지표입니다.
-수식1-
B = sum(if(C >= O*(1+1/100) or (C(1)*1.02<=H and C>=O) or (C(2)>O(2)*1.01 and C(1)>O(1)*1.01 and C>=O)
, V, if(C <= O*(1-1/100) or (C < O and C(1)*1.03 <= H) or (C(1)*0.99>=C and C < O)
or (C(1)*0.97>=L and C < O) or (H(1)*0.97 > C and O>C) , -V, 0)));
D = valuewhen(1, date == 날짜 and date(1) != 날짜, B(1));
B - D
-수식2-
E = B -D;
F = highestsince(1, date == 날짜 and date(1) != 날짜, E);
F/2
감사합니다~
2017-07-10
114
글번호 111165
답변완료
틱을 이용한 지표 부탁드립니다.
틱을 이용해서 지표를 만들어고자 하는데요..
plot1(ticks);
기본 틱인데.. 궁금한 부분은 여기에서 MACD오실레이터 처럼 막대 그래프를 그렸으면 합니다.
제한은 예를 들어 250 캔들에서 10틱이상 매수거래 개수는 양(+) 쪽으로 10틱이상 매도거래는 음(-)쪽으로 그래프가 그려졌으면 합니다.
2017-07-10
112
글번호 111160
답변완료
문의드립니다
Inputs: TurnLen(9), StdLen(26), PrdLen(52);
Variables: 기준선(0), 전환선(0), 후행스팬(0), 선행스팬1(0), 선행스팬2(0);
전환선 = (Highest(High, TurnLen) + Lowest(Low, TurnLen)) / 2;
기준선 = (Highest(High, StdLen) + Lowest(Low, StdLen)) / 2;
후행스팬 = Close ;
선행스팬1 = (전환선 + 기준선) / 2 ;
선행스팬2 = (Highest(High, PrdLen) + Lowest(Low, PrdLen)) / 2;
Plot1(전환선, "전환선");
Plot2(기준선, "기준선");
Plot3(후행스팬, "후행스팬");
Plot4(선행스팬1,"선행스팬1");
Plot5(선행스팬2, "선행스팬2");
(전환선<=기준선 and 전환선<=선행스팬1 and 전환선<=선행스팬2)
or
(전환선>=기준선 and 전환선>=선행스팬1 and 전환선>=선행스팬2)
일 때 매수하지 않음
2017-07-10
94
글번호 111158