커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6968
글번호 230811
답변완료
종목 검색식 부탁 드립니다.
안녕 하십니까
조목검색식 부탁 드립니다.
m1=ma(c, 기간1, 종류);
m2=ma(c, 기간2, 종류);
m3=ma(c, 기간3, 종류);
m4=ma(c, 기간4, 종류);
이격1=m1-m2;
이격2=m1-m3;
이격3=m1-m4;
조건=이격1<이격2 && 이격2<이격3 && 이격1>0;
조건 &&!조건(1)
기간1 5
기간2 20
기간3 60
기간4 120
조건검색식 부탁 드립니다.
감사합니다.
2023-04-17
1335
글번호 168244
답변완료
배열 질문
답변 감사드립니다!!
근데 저는 어떤 원리에서 저게 되는지 궁금합니다
즉
원래 다른 파이썬이나 c에서는
저렇게 for 루프에서
그 다음 인덱스에 대입하면 그 전의 데이터가
지워지잖아요? 근데 예스트레이더는 어떤 원리기에
안 지워지고 저런 식으로 대입되는지요?
예로들면 파이썬에서는
For i in xx:
식으로 하고 저 배열 예제 처럼 하면
그 전의 인덱스 값으로, 즉 예로 a[cnt-1][1]이
1이었고 a[cnt]에 대입한다면 모든 그 후의 인덱스가
다 같은 값이 되잖아요? 예스트레이더는 어떻게
저게 그렇지 않고 되는지요? 애초에
저 스크립트가 한 시점에서만 돌고 나머지 봉 데이터가
불변이라 그런걸까요? 제가 놓친 디테일이 있는건지요?
메커니즘이 궁금합니다
언제나 상세한 답변 감사드립니다!!
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 메뉴얼의 배열 예제 설명
>
안녕하세요
예스스탁입니다.
1
예스랭귀지는 차트기반의 언어입니다.
수식이 차트에 적용되면 차트 첫봉부터 현재봉으로 오면서 값을 계산하고 저장하며
현재시점에서 과거봉의 데이터나 변수값을 가져와서 사용할 수 있게 되어 있습니다.
이전봉의 값을 가져올때는 []안에 봉수를 지정합니다.
모든 데이터, 함수, 변수뒤에 마지막[]은 이전봉 참조를 지칭하게 됩니다.
현재봉인 [0]은 생략이 가능합니다.
2
var : AA(0);
AA = ma(C,20);
일반변수가 위와 같은 경우 AA에는 매봉 20이평의 값을 저장이 되며
이전봉의 값을 가져올때 뒤에 []을 붙이고 봉수를 지정합니다.
AA나 AA[0]은 현재봉 값, AA[1]은 1봉전의 20이평, AA[2]는 2봉전의 20이평값과 같이 가져와 사용 할수 있습니다.
3
배열변수도 마찬가지입니다.
Array : Hval[10](0);
Hval[0][0]은 0번방 현재봉값
Hval[1][0]은 1번방 현재봉값
Hval[2][0]는 2번방 현재봉값입니다.
Hval[0][1]은 0번방 1봉전값
Hval[1][1]은 1번방 1봉전값
Hval[2][1]는 2번방 1봉전값입니다.
위와 같이 각 배열방 뒤에 []를 붙이고 이전봉의 값을 가져와 사용할 수 있습니다.
Hval[0] = h;
for count = 1 to 9
{
Hval[count] = Hval[count][1];//[1]은 한봉전을 의미합니다.
}
위 내용은
우선 0번방에 현재봉 고가를 저장하고
Hval[1]에는 Hval[0]의 1봉전값을 가져와 저장
Hval[2]에는 Hval[1]의 1봉전값을 가져와 저장
.....
Hval[9]에는 Hval[8]의 1봉전값을 가져와 저장한 식입니다.
for문에 앞서[0]번방에 값을 먼저 저장했으므로
[1]~[9]번방은 이전봉에 작성된 값을 가져와 저장한 것입니다.
물론 위식을 아래와 같이 작성될수도 있습니다.
먼저 옮기고 나중에 0번방에 값을 저장하게 하셔도 됩니다.
for count = 9 downto 1
{
Hval[count] = Hval[count-1];
}
Hval[0] = h;
즐거운 하루되세요
> nirvana 님이 쓴 글입니다.
> 제목 : 메뉴얼의 배열 예제 설명
> 안녕하세요! 메뉴얼에 나온 것에 대해 이해가 안 가서 질문 드립니다.
배열에 대한 설명 부분인데요,
Hval이라는 배열에 for 루프로 하는 예시가 있는데
이해가 안 가는 두가지 포인트가 있습니다.
1. 메뉴얼에는
Hval[0] =H을 한 후에
For 루프 안에서
Hval[cnt+1] = Hval[cnt][1]였나요?
그런식으로 하는데
예스트레이더를 처음 봤지만 그냥 일반 코더인 사람을
가정하면
예로 Hval[0]에는 H라는, 1분봉이 메뉴얼의 가정이니
현재 1분봉의 고가값, 값 즉 그냥 "숫자"가 있을 거라고
생각하는데
저 위의 식에서는
cnt가 1인 경우 가정을 해보면
Hval[0][1]을 다시 Hval[1]에 대입합니다.
근데 우리같은 범용 프로그래밍 랭귀지에 익숙한 사고에서는
Hval[0]은 "데이터 타입"은 숫자인데 다시 [0]뒤에 [1]을 붙였습니다.이에 대해 예스트레이더 메뉴얼에
설명이 필요한데 없네요..
추론을 하면 저 H라는 것의 특성이 사실은 그럼 배열이기도 하고 어떤 때는 그냥 숫자값이 대입되기도 한다 를
우리는 추론이 가능한데 정확한 설명이 메뉴얼에 없으니
상당히 혼란스럽습니다...
즉 Hval[0]에 다시 [1]을 붙이는 것으로 보아 애초에 Hval에 대입한 H라는 놈의 정체는
어떤 때는 숫자값, 다시 저렇게 assign 즉 대입연산 시에는 다시 배열처럼 다룰수도 있다는 건데요..
설명을 자세히 해주실수 있는지요? 그리고
관계자분들께 이를 메뉴얼에 반영해주셨으면 합니다.
사실 다른 분들도 이는 헷갈릴만하다고 생각이 드네요.
이는 데이터 타입에 대한 궁금증이고 또한
[1]을 붙인 것도 이유가 헷갈립니다.
이렇기 되면 60분이 지난 시점에 현재 설정 분봉을 1분봉으로 가정한다면 1분이 지났을 때 현재 1분 전 고가봉인데
Hval에는 60분이라는 시간 단위의 최고가를 저장하는 게 용도로 쓰려고 만든 것인데 정작 저장되는 것은 1분 전의 고가이니 1시간 전의 60분 최고가가 저장되는게 아닌 1분 전 고가가 저장되는게 아닌가요? 헷갈려서 제가 논리적으로 건너 뛰어 생각못한 것이 있는 듯한데 설명 도움주시면 감사하겠습니다 ^^
2. 또한 궁금한 것은
저 예제에서 한칸씩 밀리기 한다는 말에 for loop로직이
상식적으로 납득이 안되는 점입니다.
그런 모양의 for loop는
당연히 맨 처음 넣은 값이 x라면
N+1번째 인덱스의 요소에 N번째 값 x를 넣으면
그냥 모든 값이 그 x값으로 되는 로직이고
예스트레이더는 어떤 다른 메커니즘이있어 이걸 막는듯한데
그런 설명이 없네요..
상식적으로 c언어나 파이썬등의 array나 list를 생각하면.예시의 for loop은 좀 이해가 더 안갑니다.
예시의 for 루프는 단지 한칸씩 새로운 고가 갱신때마다
한칸씩만 밀리게 하는게 목적 아닌지요?(제가 잘 맞게 판단한 건지요?)
그렇다면 하나씩 그 전 데이터를 한칸씩 뒤로 미는
알고리즘일텐데
저 for 루프를 돌리면
일반 프로그래밍 상식상으로는 인덱스 1부터 9까지
순서로 하면
1부터 9가 다 같은 값이 되지 않나요?
근데 예스트레이더가 인덱스 숫자가 작은 순서가 맨 마지막이니 for loop의 인덱스를 반대로 한 셈이 되어
맞는 건지요 ㅠㅠ?
예스트레이더의 인덱스가 역순(인덱스가 숫자가 크면 더 그 전 봉값인)이기에 많이 헷갈립니다
언제나 예스트레이더 잘 쓰고 있으며 더욱 잘 쓰고 싶어
미뤄온 질문 심화해서 드립니다:)
긴 글 읽어주셔서 감사드립니다.
예스트레이더 초보 코더에게 도움 잘 부탁드립니다
2023-04-17
1549
글번호 168243
답변완료
수식 부탁드려요
CME mini-NASDAQ100 운용할 계획입니다.
원하는 전략식입니다.
1. 해당 종목의 장 시간(썸머타임 자동 적용)을 기준으로 장 시작시 전략 시행되고, 장종료 5분전 보유 계약있을경우 당일청산처리되는 수식.
2. 당일 최대손실 500틱
3. 진입시마다 최대손실 100틱
4. 진입시마다 목표익절 200틱
그리고
진입 수식은
매수 : 5일이동평균선이 20일 이동평균선을 골든크로스시 매수 또는 120일 이동평균선 골든크로스
매도 : 5일이동평균선이 20일 이동평균선을 데드크로스시 매도 또는 120일 이동평균선 데드크로스
그외 궁금점
나스닥을 백테스팅할계획인데 현시점기준으로 틱봉에서 나스닥 상품을 테스트할 경우 기간이 4/12일까지 밖에 안되던데.. 월물연결을 하여도 동일하던데 기간을 더 길게 테스트할 수는 없는건가요?
2023-04-17
1435
글번호 168242
답변완료
수식 부탁드립니다.
안녕하세요. 수식작성 요청드립니다.
centerline = (H+L)/2
ma60 = ma(C,60)
2개의 라인으로 매매하는 시스템을 만들려고 합니다.
2개의 line이 교차될 때 바로 진입하는 것이 아니고 다음과 같은 조건이 성립될 때 매매하고자 합니다.
1. 교차된 가격에서 위로 50틱 올라가면 매수하고 50틱 아래로 내려가면 매도 (상방교차든 하방교차든 상관없음)
2. 매수와 매도 진입후 100틱 익절, -50틱 손절. 50틱 수익 이후에는 50틱으로 trailing stop하여 100틱 익절까지 끌고감. trailing stop은 on/off할 수 있으면 좋겠습니다.
감사합니다.
2023-04-17
1432
글번호 168241
답변완료
질문드립니다.
하이투자증권 사용하고 있습니다.
예스트레이더는 얼마간 주문이 없으면 접속이 끊기나요?
수년간 사용해왔는데..
예전에는 안그랬는거 같은데..
요즘에 장 시작하고 얼마 안있으면 끊기는 것 같아서 글 남깁니다.
해결 방법은 작위적으로 주문을 몇시간마다 한번씩 해야 되는건가요?
그건 너무 무리한 방법이고,
현실적인 해결방안 알려주시면 감사하겠습니다.
2023-04-17
1418
글번호 168238
답변완료
추가문의 드립니다
아침에 작성하여주신 아래수식 정말 감사드립니다!
현재 10봉이후, 선에서 색상의 변화가 생기는데...
이것을 화면상에 색상이 전부 칠해질수는 없을까요?
즉, 선을 하방 돌파시 10봉 이후에 선기준 하방쪽 화면에 전부 색깔이 칠해지는 경우를 말합니다
------------------------------------------------------------------------------------------
input : Periods(10),Multiplier(3.0),changeATR(true),showsignals(true),highlighting(true),N(10);
var : src(0),ATR2(0),ATrv(0),upv(0),dnv(0),trend(1),color(0),ii(0);
src = (h+l)/2;
atr2 = ma(TrueRange, Periods);
atrv = iff(changeATR, atr(Periods), atr2);
upv = src-(Multiplier*atrv);
upv = iff(close[1] > upv[1],max(upv,upv[1]), upv);
dnv = src+(Multiplier*atrv);
dnv = iff(close[1] < dnv[1],min(dnv, dnv[1]), dnv);
trend = iff(trend == -1 and close > dnv[1] , 1 ,IFf(trend == 1 and close < upv[1] , -1 , trend));
if Trend == 1 Then
{
if trend != trend[1] Then
{
color = Magenta;
ii = 0;
}
Else
{
ii = ii+1;
if ii >= N Then
{
color = Red;
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
}
}
}
if Trend == -1 Then
{
if trend != trend[1] Then
{
color = Cyan;
ii = 0;
}
Else
{
ii = ii+1;
if ii >= N Then
{
color = Blue;
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
}
}
}
if trend == 1 Then
plot1(upv,"Trend",color);
Else
plot1(dnv,"Trend",color);
2023-04-17
1189
글번호 168235
답변완료
수식 문의드립니다.
1.일봉차트에서 전일종가대비 15프로 이상 상승한 날이 있으면 그날의 시가를 저장하고
이후에 그날의 시가에 도달하면 1차매수, 그날의 시가에서 -5프로 하락하면 2차 추가매수.
매수신호가 안나오거나 1차매수상태에서 도중에 15프로 이상상승한 봉이 다시 나오면
최근 나온봉을 기준으로
그날의 시가를 다시 갱신하여 그가격에 도달하면 1차 매수
그날의 시가에 -5프로 가격에서 2차 매수하는 수식 부탁드립니다.
중복신호 안나오게 하려니깐 어렵네요...
2023-04-17
872
글번호 168234
답변완료
피라미딩진입차수청산
연속봉으로 청산하는 수식에 수정을 요청합니다.
아래수식은 별첨파일처럼 피라미딩 수에 상관없이 연속봉 청산이 작동됩니다.
연속봉1은 피라미딩 10개부터 exitlong 작동하고
연속봉2는 피라미딩 7개부터 exitlong 작동되도록 요청합니다.
****************************************************************************************
input : 시작시간(093300),끝시간(093900);
var : h1(0);
input : 고가갱신수(6);
input : uppyra검증1(0),상승pyra1(0),상승N1(440);
input : uppyra검증2(10),상승pyra2(0),상승N2(660);
input : up연속봉1(10),up연속small1(120),up연속large1(220);
input : up연속봉2(10),up연속small2(110),up연속large2(180);
var : T1(0),entry(0);
if Bdate != Bdate[1] Then
T1 = TotalTrades;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간) Then
{
H1 = H;
}
if stime >= 시작시간 and sTime <= 끝시간 Then
{
if h > h1 Then
h1 = h;
}
if sTime > 끝시간 and CrossUp(c,h1) and entry==0 Then
Buy("b1");
if MarketPosition == 0 and #현재 무포지션이고
EntryDate(1) == sdate and #직전거래가 오늘 발생한 거래이고
MarketPosition(1) == 1 and #직전거래가 매수거래이고
countif(DayHigh(0) != DayHigh(0)[1],BarsSinceExit(1)) >= 고가갱신수 Then #청산이후 당일고가 갱신이 n회이상 있었으면
{
buy("b2");
}
if MarketPosition == 1 and IsEntryName("b1") == true Then
{
if C >= EntryPrice+uppyra검증1 and MaxContracts < 상승N1 Then
buy("bb1",AtStop,LatestEntryPrice(0)+상승Pyra1);
}
if MarketPosition == 1 and IsEntryName("b2") == true then
{
if C >= EntryPrice+uppyra검증2 and MaxContracts < 상승N2 Then
buy("bb2",AtStop,LatestEntryPrice(0)+상승Pyra2);
}
#피라미딩 10개 이상부터 작동
if accumN(iff(C<O,1,0),up연속봉1) == up연속봉1 and ExitDate(1) != sdate and AccumN(abs(C-O), up연속봉1) >= up연속small1 and AccumN(abs(C-O), up연속봉1) < up연속large1 then
ExitLong("연1");
#피라미딩 7개 이상부터 작동
if accumN(iff(C<O,1,0),up연속봉2) == up연속봉2 and ExitDate(1) != sdate and AccumN(abs(C-O), up연속봉2) >= up연속small2 and AccumN(abs(C-O), up연속봉2) < up연속large2 then
ExitLong("연2");
2023-04-24
933
글번호 168233
답변완료
81698의 지표식을 적용하여 보았으나 이격도의 이평선(mav)이 표현되지 아니합니다
안녕하세요
81698의 지표식을
nput : 이격도(100),Period(10);
var : DParity(0),mav(0);
DParity = Disparity(이격도);
mav = ma(DParity,Period);
Plot1(mav, "이격도이평");
PlotBaseLine1(100,"기준선");
적용하여 보았으나
이격도의 이평선(mav)이
표현되지 아니합니다
다시 한번
검증을 부탁드립니다
감사합니다
(((예스트레이더의
시세조회창에서는 적용되지 아니하는가요?)))
2023-04-17
789
글번호 168227