커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4380
글번호 230811
답변완료
문의드립니다.
주식 종목에서 장대양봉 이후에 움직임에 대해서 공부하고 있는데
현재 몇 가지 조건을 넣어서 특정일에 그 조건을 만족하는 종목들을 뽑아서 그 후의 움직임을 관찰하고 있습니다.
예를 들어 세동이란 종목은 4.03일에 장대양봉이 나왔는데,
그럼 4.03일 장 종료 후에 이 종목을 관종에 넣고
4.04일 시초가에 매수하고 10% 수익 발생시 절반 매도, 그 후에 상황을 봐서 나머지 절반을 매도하려고 합니다.
따라서 4.04일 시초가 이후의 주가 변동을 관찰하고 싶은데,
txt 파일 등에 여러 종목과 특정일을 넣어 놓고,
1.익일 시초가(매수),
2.수익률 10% 돌파 날짜,
3.10% 돌파까지 걸린 날 수(봉 수),
4.수익률 30% 돌파 날짜,
5.30% 돌파까지 걸린 날 수(봉 수),
6.진입이 후 최고 수익발행한 날짜,
7.진입이 후 최고 수익발행한 날까지 걸린 날 수(봉 수),
8.최고금액,
9.진입 이후 최고 10% 돌파하기 전까지 최저 가격,
10.진입 이후 최고 10% 돌파하기 전까지 최저 가격 발생일
11.진입이후 현재까지 최저가,
12. 진입이후 현재까지 최저가 발생일,
13.진입 후 30봉 후(30영업일) 종가
14.진입 후 30봉 후(30영업일) 날짜
=> 만족되지 않는 항목은 공란 표시
이렇게 한 번에 출력(종목은 행, 각 값은 열)해 주는 로직을 짜고 싶습니다.
예) 자연과환경 / 3.02일 선정
1. 1,775 / 3.05일 시초가
2. 3.12 / 당일 최고가 1980
3. 6 영업일
4. 4.18일 / 최고 34.6%
5. 33 영업일
6. 5.02
7. 42 영업일
8. 3,090 / 74.1%
9. 1,585 / -10.7%
10. 3.06
11. 1,585 / -10.7%
12. 3.06
13. 1,940
14. 4.13
내용이 너무 많은 것 같은데 설명이 잘 됐는지 모르겠습니다.
감사합니다.
2018-05-03
146
글번호 118663
답변완료
수정문의
아랫식을 당일기준으로 변경하고자 부탁드립니다.
var : idx(0),cnt(0);
Array : tx[50](0);
if sdate > sdate[1]+30 Then
{
idx = 0;
for cnt = 0 to 49
{
Text_Delete(tx[cnt]);
}
}
idx = idx+1;
if idx == 8 or
idx == 16 or
idx == 25 or
idx == 32 or
idx == 41 or
idx == 51 or
idx == 64 or
idx == 75 or
idx == 128 or
idx == 171 or
idx == 175 or
idx == 225 Then
plot1(L,"검색",GREEN);
if idx == 9 or
idx == 17 or
idx == 26 or
idx == 33 or
idx == 42 or
idx == 52 or
idx == 65 or
idx == 76 or
idx == 129 or
idx == 172 or
idx == 176 or
idx == 226 Then{
cnt = cnt+1;
tx[cnt] = Text_New(sdate,stime,H,NumToStr(idx,0));
}
2018-05-03
172
글번호 118662
답변완료
수식 문의
1번조건 만족 후 일정 봉 개수 내에서 2번조건으로 매수/매도하도록 가능할까요?
또한 해선은 장 마감청산이 가능한가요?
2018-05-03
144
글번호 118661
답변완료
피보나치 수식 수정 부탁드립니다.
아래의 수식을
돌파시나 이탈시가 아닌 해당가격대에 오면
무조건 매수, 매도가 되도록 하는 명령어는 어떻게 되나요??
즉, crossup, crossdown이 아닌 무조건 매수, 매도 입니다.
점검해 주시면 감사드립니다.
- 아 래 -
input : n(240);
input : 지정일(20180426);
var : 매수금액(3000000);
var : hh(0),ll(0),rr(0),cnt(0);
if DayHigh(n) > 0 and DayLow(n) > 0 and sdate >= 지정일 then{
hh = dayhigh(1);
ll = daylow(1);
for cnt = 1 to n{
if dayhigh(cnt) > hh Then
hh = DayHigh(cnt);
if daylow(cnt) < ll Then
ll = daylow(cnt);
}
rr = hh-ll;
var1 = hh;
var2 = hh - rr*0.236;
var3 = hh - rr*0.382;
var4 = hh - rr*0.500;
var5 = hh - rr*0.618;
var6 = hh - rr*0.700;
var7 = ll;
if MarketPosition == 0 and crossup(c,var3) Then
Buy("매수1");
if MarketPosition == 1 Then
{
if MaxEntries == 1 then
{
if CrossDown(c,var4) Then
Buy("매수2");
if crossup(c,var2) Then
ExitLong("수익1");
}
if MaxEntries == 2 Then
{
if CrossDown(c,var5) Then
Buy("매수3");
if crossup(c,var3) Then
ExitLong("수익2");
}
if MaxEntries == 3 Then
{
if crossup(c,var3) Then
ExitLong("수익3");
if CrossDown(c,var4) Then
ExitLong("매도1",OnClose,def,"",floor(MaxContracts*(1/3)),1);
if CrossDown(c,var5) Then
ExitLong("매도2",OnClose,def,"",floor(MaxContracts*(1/3)),1);
if CrossDown(c,var6) Then
ExitLong("매도3");
}
}
}
2018-05-02
184
글번호 118660
답변완료
수식 부탁드립니다.
이 수식은 거래량 터진 과거봉에 시가 고가 저가 종가에 수평 추세선 긋는 수식인대요..
이 수식에서 과거봉의 갯수를 제가 지정할수가 있읍니다.이렇게 갯수를 지정하면
여기에 덧붙여서 거래량 터진 봉의 거래량이 몇주인지 오늘자 거래량 옆 오른쪽 빈공간에
1번거래량 몇주(숫자로표시 예를들어 상위1번 1,500) 2번 거래량 몇주 이렇게 표시되게
개선이 가능한지요...수고스럽지만 부탁드립니다.
input : Price(10000), Per(10),N(5);
var : cnt(0),cnt1(0),cnt2(0),cnt3(0),idx(0),color(0);
var : SameO(0),SameH(0),SameL(0),SameC(0);
Array : VV[50](0),OO[50](0),HH[50](0),LL[50](0),CC[50](0);
Array : OTL[50](0),HTL[50](0),LTL[50](0),CTL[50](0),ii[50](0);
Array : OTx[50](0),HTx[50](0),LTx[50](0),CTx[50](0),TX[50](0);
idx = idx+1;
for cnt = 1 to 49{
VV[cnt] = 0;
OO[cnt] = 0;
HH[cnt] = 0;
LL[cnt] = 0;
CC[cnt] = 0;
ii[cnt] = 0;
}
#N개값 출력
for cnt1 = 1 to N{
TL_Delete(OTL[cnt1]);
TL_Delete(HTL[cnt1]);
TL_Delete(LTL[cnt1]);
TL_Delete(CTL[cnt1]);
Text_Delete(OTx[cnt1]);
Text_Delete(HTx[cnt1]);
Text_Delete(LTx[cnt1]);
Text_Delete(CTx[cnt1]);
Text_Delete(Tx[cnt1]);
if cnt1 == 1 Then
color = black;
if cnt1 == 2 Then
color = red;
if cnt1 == 3 Then
color = blue;
if cnt1 == 4 Then
color = GREEN;
if cnt1 == 5 Then
color = YELLOW;
#차트 과거봉 전체 스캔
for cnt2 = 0 to idx
{
#Price대비 +- Per%안에 종가가 형성된
if !(L[cnt2] > Price*(1+Per/100) or H[cnt2] < Price*(1-Per/100)) and
V[cnt2] > VV[cnt1] and (cnt1 == 1 or (cnt1 >= 2 and V[cnt2] < VV[cnt1-1])) Then
{
VV[cnt1] = V[cnt2];
OO[cnt1] = O[cnt2];
HH[cnt1] = H[cnt2];
LL[cnt1] = L[cnt2];
CC[cnt1] = C[cnt2];
ii[cnt1] = cnt2;
}
}
#동일값 체크
sameO = 0;
sameH = 0;
sameL = 0;
sameC = 0;
for cnt3 = 1 to N
{
if OO[cnt1] == OO[cnt3] or OO[cnt1] == HH[cnt3] or OO[cnt1] == LL[cnt3] or OO[cnt1] == CC[cnt3] Then
SameO = SameO+1;
if HH[cnt1] == OO[cnt3] or HH[cnt1] == HH[cnt3] or HH[cnt1] == LL[cnt3] or HH[cnt1] == CC[cnt3] Then
SameH = SameH+1;
if LL[cnt1] == OO[cnt3] or LL[cnt1] == HH[cnt3] or LL[cnt1] == LL[cnt3] or LL[cnt1] == CC[cnt3] Then
SameL = SameL+1;
if CC[cnt1] == OO[cnt3] or CC[cnt1] == HH[cnt3] or CC[cnt1] == LL[cnt3] or CC[cnt1] == CC[cnt3] Then
SameC = SameC+1;
}
#시가선
if SameO == 1 then
{
if LastBarOnChart == 1 Then
MessageLog("O %.2f",color);
#시가선 추세선 출력
OTL[cnt1] = TL_New(Sdate[1],stime[1],OO[cnt1],sdate,stime,OO[cnt1]);
TL_SetExtLeft(OTL[cnt1],true);
TL_SetExtRight(OTL[cnt1],true);
TL_SetColor(OTL[cnt1],color);
#시가선값 텍스트 출력
OTx[cnt1] = Text_New(sdate,stime,OO[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 시가:"+NumToStr(OO[cnt1],0));
Text_SetStyle(OTx[cnt1],0,0);
Text_SetColor(OTx[cnt1],color);
}
if SameH == 1 then
{
#고가선 추세선 출력
HTL[cnt1] = TL_New(Sdate[1],stime[1],HH[cnt1],sdate,stime,HH[cnt1]);
TL_SetExtLeft(HTL[cnt1],true);
TL_SetExtRight(HTL[cnt1],true);
TL_SetColor(HTL[cnt1],color);
HTx[cnt1] = Text_New(sdate,stime,HH[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 고가:"+NumToStr(HH[cnt1],0));
Text_SetStyle(HTx[cnt1],0,0);
Text_SetColor(HTx[cnt1],color);
}
if SameL == 1 then
{
LTL[cnt1] = TL_New(Sdate[1],stime[1],LL[cnt1],sdate,stime,LL[cnt1]);
TL_SetExtLeft(LTL[cnt1],true);
TL_SetExtRight(LTL[cnt1],true);
TL_SetColor(LTL[cnt1],color);
LTx[cnt1] = Text_New(sdate,stime,LL[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 저가:"+NumToStr(LL[cnt1],0));
Text_SetStyle(LTx[cnt1],0,0);
Text_SetColor(OTx[cnt1],color);
}
if SameC == 1 then
{
CTL[cnt1] = TL_New(Sdate[1],stime[1],CC[cnt1],sdate,stime,CC[cnt1]);
TL_SetExtLeft(CTL[cnt1],true);
TL_SetExtRight(CTL[cnt1],true);
TL_SetColor(CTL[cnt1],color);
CTx[cnt1] = Text_New(sdate,stime,CC[cnt1],"상위"+NumToStr(cnt1,0)+"번째봉 종가:"+NumToStr(CC[cnt1],0));
Text_SetStyle(CTx[cnt1],0,0);
Text_SetColor(CTx[cnt1],color);
}
if CC[cnt1] > 0 then{
Tx[cnt1] = Text_New(sdate[ii[cnt1]],stime[ii[cnt1]],CC[cnt1],"●"+NumToStr(cnt1,0));
Text_SetStyle(Tx[cnt1],2,2);
Text_SetColor(Tx[cnt1],color);
Text_SetColor(Tx[cnt1],white);
}
}
2018-05-03
207
글번호 118659
답변완료
수식작성을 부탁드립니다.
1.전봉의 종가가 20일선 상향돌파 후 다음봉의 종가가 20일선값보다 높고,
rsi값이 전봉보다 높으면 매수
전봉의 종가가 20일선 하향돌파 후 다음봉의 종가가 20일선값보다 낮고,
rsi값이 전봉보다 낮으면 매도
2. 전봉이 시초가대비 5% 상승했을때 다음봉은 전봉의 종가 도달시 1차매수, 종가대비 50% 하락시 2차매수, 종가대비 70%하락시 3차 매수
평단대비 5% 상승시 매도
전봉 종가대비 90% 하락시 매도
감사합니다.
2018-05-02
150
글번호 118658
답변완료
지표식부탁드립니다
안녕하세요
아래수식은 고저파동수식인데 이수식의 30틱차트에서의 움직임이 120틱차트에서 실현되도록 수식으로 수정부탁드립니다
감사합니다
Input:length(2),종가사용여부(0),파동선두께(5),수치표시(1),ADXP1(2),ADXP2(14);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),tl2(0),ADXV1(0),ADXV2(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
ADXV1 = ADX(ADXP1);
ADXV2 = ADX(ADXP2);
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]);
TL2 = TL_New(고[2,3],고[2,4],고[2,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);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,CYAN);
TL_SetSize(TL2,파동선두께);
TL_SetColor(TL2,BLACK);
}
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]);
TL_SetEnd(TL2,고[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]);
TL2 = TL_New(저[2,3],저[2,4],저[2,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);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,CYAN);
TL_SetSize(TL2,파동선두께);
TL_SetColor(TL2,BLACK);
}
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]);
TL_SetEnd(TL2,저[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 ((고[1,1]+ 저[1,1])/2) > ((고[1,1]+ 저[1,1])/2)[1] then
plot1((고[1,1]+ 저[1,1])/2,"중앙",WHITE,def,iff(ADXV1>ADXV1[1],10,2));
if ((고[1,1]+ 저[1,1])/2) < ((고[1,1]+ 저[1,1])/2)[1] then
plot1((고[1,1]+ 저[1,1])/2,"중앙",BLACK,def,iff(ADXV1>ADXV1[1],10,2));
2018-05-02
164
글번호 118657
크래프트 님에 의해서 삭제되었습니다.
2018-05-02
19
글번호 118656
답변완료
수고하십니다
###,다시한번 도전입니다
$,아래수식은 어느회원분 질문에 대한 답변수식입니다,조건만족시 파동추세선의
색상이 변경되는 내용입니다, 여기서 질문입니다,
ㅡ,18시15분을 장시작~ 익일17시30분을 장마감 기준으로보고 전일의 파동추세선중에 가장큰
파동에 피봇등분선 수치를 출력하여 당일현재까지 오른쪽 그리기로 연장 하고싶습니다.
(단,당일에 전일보다 큰파동이 출현시에는 갱신되는)
#,잘 부탁드립니다~"꾸벅"
Input : af(0.02), maxAF(0.2);
var : T(0),HH(0),LL(0),HD(0),HT(0),LD(0),LT(0),TL1(0),TL2(0),cnt(0),count(0);
var : HH1(0),LL1(0),color(0);
var1 = CSar(af,maxAF);
if crossup(c,var1) Then
{
T = 1;
HH = H;
HH1 = HH[1];
HD = sdate;
HT = stime;
if HH > HH1 Then
color = red;
if LL > 0 Then
{
TL1 = TL_new(LD[1],LT[1],LL[1],HD,HT,HH);
TL_SetSize(TL1,3);
TL_SetColor(Tl1,color);
}
}
if CrossDown(c,var1) Then
{
T = -1;
LL = L;
LL1 = LL[1];
LD = sdate;
LT = stime;
if LL < LL1 Then
color = BLUE;
if HH > 0 Then
{
TL2 = TL_new(HD[1],HT[1],HH[1],LD,LT,LL);
TL_SetSize(TL2,3);
TL_SetColor(Tl2,color);
}
}
if T == 1 then
{
if H > HH Then
{
HH = H;
HD = sdate;
HT = stime;
if HH > HH1 Then
color = YELLOW;
TL_SetEnd(TL1,HD,HT,HH);
TL_SetSize(TL1,3);
TL_SetColor(Tl1,color);
}
}
if T == -1 then
{
if L < LL Then{
LL = L;
LD = sdate;
LT = stime;
if LL < LL1 Then
color = CYAN;
TL_SetEnd(TL2,LD,LT,LL);
TL_SetSize(TL2,3);
TL_SetColor(Tl2,color);
}
}
#,매번 감사합니다.
2018-05-03
154
글번호 118655