커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7547
글번호 230811
답변완료
수식 문의 드립니다.
답변 정말 감사드립니다.
많이 배우고 있습니다.
아래 식 관련,
일봉 차트에서 주봉 MACD 오실레이터를 나타내는 지표 수식도 문의 드립니다.
수고하십시오.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식 문의 드립니다.
> 안녕하세요
예스스탁입니다.
Input : shortPeriod(12), longPeriod(26), Period(9); # 일봉 기준
var : osc(0);
var : Osc_Max(0),C_Max(0),Osc_Max1(0),C_Max1(0),Osc_Max2(0),C_Max2(0),maxidx(0);
var : Osc_Min(0),C_Min(0),Osc_Min1(0),C_Min1(0),Osc_min2(0),C_min2(0),minidx(0);
Var : Ep1(0), EP2(0), EP3(0), JISU1(0), JISU2(0), PreJISU1(0), PreJISU2(0);
Var : macdVal(0), PreMacdSig(0), macdSig(0),macdOsc(0),PreMacdOsc1(0),PreMacdOsc2(0);
value1 = MACD(shortPeriod, longPeriod);
value2 = ema(value1, Period);
Osc = value1-value2;
if dayofweek(date) < DayOfWeek(date[1]) then {
PreJISU1 = JISU1[1];
PreJISU2 = JISU2[1];
PreMacdSig = macdSig[1];
PreMacdOsc1 = macdOsc[1];
PreMacdOsc2 = PreMacdOsc1[1];
}
Ep1 = 2/(shortPeriod+1);
EP2 = 2/(longPeriod+1);
EP3 = 2/(Period+1);
JISU1 = C * Ep1 + PreJISU1 * (1-Ep1); //단기지수이동평균
JISU2 = C * Ep2 + PreJISU2 * (1-Ep2); //장기지수이동평균
macdVal = JISU1 - JISU2; //macd
macdSig = macdVal * Ep3 + PreMacdSig * (1-Ep3); //macd signal
macdOsc = macdval-macdsig;
if crossup(Osc,0) Then{
Osc_Max = Osc;
maxidx = 0;
Osc_Max1 = Osc_Max[1];
Osc_Max2 = Osc_Max1[1];
C_Max1 = C_Max[1];
C_Max2 = C_Max1[1];
}
if Osc > 0 and Osc > Osc_Max Then{
Osc_Max = Osc;
maxidx = 0;
}
maxidx = maxidx+1;
if maxidx == 1 Then
C_Max = max(c,c[1],c[2]);
if CrossDown(Osc,0) Then{
Osc_Min = Osc;
minidx = 0;
Osc_min1 = Osc_min[1];
Osc_min2 = Osc_min1[1];
C_min1 = C_min[1];
C_min2 = C_min1[1];
}
if Osc < 0 and Osc < Osc_Min Then{
Osc_min = Osc;
minidx = 0;
}
minidx = minidx+1;
if minidx == 1 Then
C_min = min(c,c[1],c[2]);
if C_min2 > 0 and C_max2 > 0 and
Osc_min > Osc_min2 and C_min < C_Min2 and
Osc > Osc_min and macdOsc > premacdOsc1 Then
buy();
if MarketPosition == 1 and macdOsc < premacdOsc1 and premacdOsc1 > premacdOsc2 Then
ExitLong();
if C_min2 > 0 and C_max2 > 0 and
Osc_max < Osc_max2 and C_max > C_Max2 and
Osc < Osc_max and macdOsc < premacdOsc1 Then
Sell();
if MarketPosition == -1 and macdOsc > premacdOsc1 and premacdOsc1 < premacdOsc2 Then
ExitShort();
즐거운 하루되세요
> 밝은아침 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
>
항상 빠른 답변 감사드립니다.
아래 시스템 수식 문의 드립니다.
Input : shortPeriod(12), longPeriod(26), Period(9); # 일봉 기준
value1 = MACD(shortPeriod, longPeriod);
value2 = ema(value1, Period);
Osc =value1-value2;
CrossUp(Osc,0)인 경우,
- Osc_Max = Osc Max값 및 C_Max = Max(그 Osc의 주가 종가,C[1],다음봉 주가 종가)값을 저장
CrossDown(Osc,0)인 경우,
- Osc_Min= Osc Min값 및 C_Min = Min(그 Osc의 주가 종가,C[1],다음봉 주가 종가)값을 저장
#매수 - 강세 다이버젼스
CrossUp(Osc,0)[2] 한뒤 CrossDown(Osc,0)[1] 했으며
CrossUp(Osc,0)[2] 하기전 Osc_Min[2]과 CrossDown(Osc,0)[1]하기전 Osc_Max[1]가 존재하며,
현재 Osc_Min > Osc_Min[2] and C_Min < C_Min[2] 이고,
Osc > Osc_Min and 주봉 Osc > 주봉 Osc[1] 이면 "Buy"
#매수청산
주봉 Osc < 주봉 Osc[1] and 주봉 Osc[1] > 주봉 Osc[2] 이면 "ExitLong"
#매도- 약세 다이버젼스
CrossDown(Osc,0)[2] 한뒤 CrossUp(Osc,0)[1] 했으며
CrossDown(Osc,0)[2] 하기전 Osc_Max[2]과 CrossUp(Osc,0)[1]하기전 Osc_Min[1]가 존재하며,
현재 Osc_Max < Osc_Max[2] and C_Max > C_Max[2] 이고,
Osc < Osc_Max and 주봉 Osc < 주봉 Osc[1] 이면 "Sell"
#매도청산
주봉 Osc > 주봉 Osc[1] and 주봉 Osc[1] < 주봉 Osc[2] 이면 "ExitShort"
감사 드립니다.
2013-08-06
171
글번호 66148
이글루 님에 의해서 삭제되었습니다.
2013-08-06
8
글번호 66144
답변완료
지표식질문입니다
60분봉차트에서
stime 150000 되는 봉을 기준으로
stime 150000 0봉전 이라고 한다면
카운트를 아래와 같이 나타나게 하고 싶습니다
1봉전 시가가
0봉전 저가 보다
작으면 조건만족(카운트 1)
2봉전 시가가
1봉전 저가 그리고
0봉전 저가 보다
작으면 조건만족(카운트 2)
3봉전 시가가
2봉전 저가 그리고
1봉전 저가 그리고
0봉전 저가 보다
작으면 조건만족(카운트 3)
이런식으로
조건이 최대한 만족된 카운트를 나타나게 하고
이것을
한달 차트를 펼쳤을때
카운트를 누적시키고 싶습니다
2013-08-06
151
글번호 66143
답변완료
수식좀 부탁합니다
하나 더 부탁을 해야겠네요
늘 미안하고 죄송합니다
10분차트에서 주가가 5일이평선을 돌파하면 또는 주가가 5일 이평선을 하락하면
하위차트 5분 3분 1분 틱 차트에 봉색깔이 변화가 만들고 싶군요
상방과 하방의 색깔은 틀리게 해야겠죠
부탁합니다
2013-08-06
231
글번호 66142
답변완료
수식좀 부탁합니다
수고하십니다
오늘은 강조식좀 부탁합니다
주가가 20일선 단순 저가 이평선 아래있다가
20일선 단순 고가 이평선 위로 올라오면 "단기 상승전화"
이렇게 화살표 그리고 위 글씨처럼 화면을 띠우고 싶습니다
단 연속1봉전과 현제봉이 고가 위에 있을경우만요
"단기 하락전화" 반대의 경우좀 부탁합니다
2013-08-06
230
글번호 66141
답변완료
수식 부탁드립니다 ^^;;
간단한 시스템 수식을 작성하려고 하는데, 막상 작성해보니 신호가 나오지 않습니다...ㅠㅠ
우선 틀을 짜주시면 공부해봐야 될 것 같습니다...
조건1. macd 오실레이터가 현재봉에서 양봉인 상태
조건2. macd 선이 현재봉에서 상승 (전봉의 수치보다 높은 상태)
조건3. 전봉의 고가를 돌파시 즉시 매수
가능한지 검토부탁드립니다 (_._((
2013-08-06
148
글번호 66138
답변완료
[한번더 도움 요청] TL_New() 함수의 bug인가요? {31661관련문의)
안녕하세요
친절한 답변 감사합니다.
한번 더 부탁 드림니다
아래 차트느 2013년 8월 2일 마감 유로 일봉 차트 입니다.
적색 수평선이 현재 종가 Close[0] 따라서 실시간 연동으로 수평선을 그리고 있습니다.
차트마지막봉은 미완성 봉이므로 추세선이나 텍스트가 차트에 많은 로드문제로 출력되지
않는다고 하였느데 제가 알기로는 요즘 컴퓨터의 CPU의 연산속도가 많이 빨라져서 커다란 문제가 되지 안는다고 생각됩니다.
또한 마지막 미완성 봉에서도 가격이 변화할때
제반 지표의 값을 재계산하여 차트를 Drawing 함으로 미완성봉이나 전 완성봉을 기준으로
차트를 Drawing 함에 있어서 차이가 없다고 샤료 되오니 한번도 재검토를 부탁 드림니다.
아래 차트는 모두 마지막 현재 값을 준하여 연산 Drawing 하고 있습니다.(동시에 여러 차트와 다른 지표를 함게 사용하고 있어도 무리가 없습니다.)
[추서] 완성봉기준과 현재봉기준으로 지표 작성시 그 결과값은 많이 차이가 발생하고 현재 값의 반영 되지 못하므로서 미래 추세를 파악하기에 시간지체 굉장히 큽니다. 만일 현재의
TL_New() 함수의 수정이 어려우면 현재봉 기준 다른 함수를 만드어 주시기 간절히 부탁드림니다...
귀하의 무궁한 발전을 기원 하는...
일산의 촌 노인으로 부터...
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : [긴급도움 요청] TL_New() 함수의 bug인가요?
> 안녕하세요
예스스탁입니다.
추세선함수,텍스트출력함수등은 모두 완성봉에서만 수행이 됩니다.
차트마지막봉은 미완성 봉이므로 추세선이나 텍스트가 출력되지 않습니다.
해당 함수들이 미완성봉에서 동작되면 차트에 많은 로드를 주게 되어
완성봉에서만 동작되게 되어 있습니다.
즐거운 하루되세요
> winstock 님이 쓴 글입니다.
> 제목 : [긴급도움 요청] TL_New() 함수의 bug인가요?
> 일전에 수평선 작도 관련(#31610) 아래와 같이 작성하여 검증한 결과
현재가에 기준하여 수평선을 작도지 않코 전일가 CLose[1]을 기준으로 작도하고 있습니다.
TL_New()의 함수의 버그인가요? 아니면 아래식에 문제가 있는지요 검토 부탁합니다.
2013-08-06
213
글번호 66137
답변완료
확인 부탁드립니다
감사합니다
그대로 했는데 주문이 나지 않습니다
확인좀 부탁드립니다~
2013-08-06
168
글번호 66135
답변완료
수식문의
아래식에서 현재만들어지는 봉에서 틱수를 도출할수도있나요 그리고 틱말고호가차이로표현수식부탁합니다
Input:등락(0.5);
Var:j(0),상승(100),하락(-100),양방향(2),색깔(0),파랑(-1),빨강(1),
기준고(0),기준저(0),기준고Bar(0),기준저Bar(0),추세(0),이중파동(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0);
#==========================================#
# 전고점,전저점 index 증가
#==========================================#
For j = 1 To 19
{
저Bar[j] = 저Bar[j] + 1;
고Bar[j] = 고Bar[j] + 1;
}
#==========================================#
# 이중파동 처리
#==========================================#
If 이중파동 > 0 Then
{
Plot1(이중파동,"Zigzag",Iff(색깔==빨강,RED,BLUE));
이중파동 = 0;
}
#==========================================#
# 최근 고,저 갱신
#==========================================#
If 기준고 <= H || 기준고 == 0 || IsNaN(기준고) == True Then
{
기준고 = H;
기준고Bar = 0;
}
Else
기준고Bar = 기준고Bar + 1;
If 기준저 >= L || 기준저 == 0 || IsNaN(기준저) == True Then
{
기준저 = L;
기준저Bar = 0;
}
Else
기준저Bar = 기준저Bar + 1;
#==========================================#
# 추세방향 결정
#==========================================#
If 기준고 - 등락 > H && 기준저 + 등락 < L Then
{
추세 = Iff(기준고Bar==기준저Bar,양방향,Iff(기준고Bar>기준저Bar,상승,하락));
}
Else If 기준고 - 등락 > H Then 추세 = 하락;
Else If 기준저 + 등락 < L Then 추세 = 상승;
#==========================================#
# 추세변화에 따른 변곡점 처리
#==========================================#
If 추세[1] == 상승 && 추세 == 하락 Then
{
For j = 18 DownTo 1 {
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
기준고 = H;
기준고Bar = 0;
기준저 = L;
기준저Bar = 0;
If 고[2] < 고[1] Then 색깔 = 빨강;
If 이중파동[1] > 0 Then 이중파동 = 고[1];
Else plot1(고[1],"Zigzag",Iff(색깔==빨강,RED,BLUE));
}
If 추세[1] == 하락 && 추세 == 하락 &&
고[1] < 기준고 &&
기준고 - 등락 > H Then
{
For j = 18 DownTo 1
{
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준고 = H;
기준고Bar = 0;
기준저 = L;
기준저Bar = 0;
If 저[2] > 저[1] Then 색깔 = 파랑;
plot1(저[1],"Zigzag",Iff(색깔==빨강,RED,BLUE));
If 고[2] < 고[1] Then 색깔 = 빨강;
이중파동 = 고[1];
}
If 추세[1] == 하락 && 추세 == 상승 Then
{
For j = 18 DownTo 1
{
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준저 = L;
기준저Bar = 0;
기준고 = H;
기준고Bar = 0;
If 저[2] > 저[1] Then 색깔 = 파랑;
If 이중파동[1] > 0 Then 이중파동 = 저[1];
Else plot1(저[1],"Zigzag",Iff(색깔==빨강,RED,BLUE));
}
If 추세[1] == 상승 && 추세 == 상승 &&
저[1] > 기준저 &&
기준저 + 등락 < L Then
{
For j = 18 DownTo 1
{
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준저 = L;
기준저Bar = 0;
기준고 = H;
기준고Bar = 0;
If 고[2] < 고[1] Then 색깔 = 빨강;
plot1(고[1],"Zigzag",Iff(색깔==빨강,RED,BLUE));
If 저[2] > 저[1] Then 색깔 = 파랑;
이중파동 = 저[1];
}
If 추세 == 양방향 Then
{
For j = 18 DownTo 1
{
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
고[1] = 기준고;
고Bar[1] = 기준고Bar;
저[1] = 기준저;
저Bar[1] = 기준저Bar;
기준고 = H;
기준고Bar = 0;
기준저 = L;
기준저Bar = 0;
추세 = 추세[1];
If 추세[1] == 상승 Then
{
If 고[2] < 고[1] Then 색깔 = 빨강;
Plot1(고[1],"Zigzag",Iff(색깔==빨강,RED,BLUE));
If 저[2] > 저[1] Then 색깔 = 파랑;
이중파동 = 저[1];
}
Else
{
If 저[2] > 저[1] Then 색깔 = 파랑;
Plot1(저[1],"Zigzag",Iff(색깔==빨강,RED,BLUE));
If 고[2] < 고[1] Then 색깔 = 빨강;
이중파동 = 고[1];
}
}
if 추세 != 추세[1] and 추세 == -100 Then{
var1 = Text_New(sdate,stime,고[1]+PriceScale,
"고"+NumToStr(abs(고[1]-저[1])/PriceScale,0)+"틱");
Text_SetStyle(var1,2,2);
}
if 추세 != 추세[1] and 추세 == 100 Then{
var2 = Text_New(sdate,stime,저[1]-PriceScale,
"저"+NumToStr(abs(고[1]-저[1])/PriceScale,0)+"틱");
Text_SetStyle(var2,2,2);
}
2013-08-06
200
글번호 66132