커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8208
글번호 230811
답변완료
수식 문의 드립니다.
input:renkoSize(0.5),p1(12),p2(26),p3(9);
var:j(0),k(0),renkoCnt(0),gubun(0),filename("renko2.txt"),printOK(False),
sum(0),ema1_OK(false),ema2_OK(false),sig_OK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),ma1[50](0),ma2[50](0),
ema1[50](0),ema2[50](0),macdVal[50](0),macdSig[50](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];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[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];
//지수이평을 계산할 수 있을 만큼 렌코가 만들어진 이후 계산 시작
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
j = 0;
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];
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
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];
if ema1_OK then ema1[j] = ema1[j-renkoCnt];
if ema2_OK then ema2[j] = ema2[j-renkoCnt];
if ema2_OK then macdVal[j] = macdVal[j-renkoCnt];
if sig_OK then macdSig[j] = macdSig[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 ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
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];
ema1[j] = ema1[j-renkoCnt];
ema2[j] = ema2[j-renkoCnt];
macdVal[j] = macdVal[j-renkoCnt];
macdSig[j] = macdSig[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 ema1_OK then ema1[j] = (CC[j]-ema1[j+1])*(2/(p1+1))+ema1[j+1];
if ema2_OK then ema2[j] = (CC[j]-ema2[j+1])*(2/(p2+1))+ema2[j+1];
if ema2_OK then macdVal[j] = ema1[j] - ema2[j];
if sig_OK then macdSig[j] = (macdVal[j] - macdSig[j+1])*(2/(P3+1))+macdSig[j+1];
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];
ema1[j] = ema1[j-1];
ema2[j] = ema2[j-1];
macdVal[j] = macdVal[j-1];
macdSig[j] = macdSig[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;
}
if ema1_OK then ema1[0] = (CC[0]-ema1[1])*(2/(p1+1))+ema1[1];
if ema2_OK then ema2[0] = (CC[0]-ema2[1])*(2/(p2+1))+ema2[1];
if ema2_OK then macdVal[0] = ema1[0] - ema2[0];
if sig_OK then macdSig[0] = (macdVal[0] - macdSig[1])*(2/(P3+1))+macdSig[1];
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 ema1_OK == False and CC[p1] > 0 then { //지수이평 계산 가능할 때까지 대기
sum = 0;
for j = 0 to p1 - 1 {
sum = sum + CC[j];
}
ema1[0] = sum/p1; //처음 값은 단순이평값으로
ema1_OK = True; //다음 봉부터 지수이평 계산되도록 설정
}
if ema2_OK == False and CC[p2] > 0 then {
sum = 0;
for j = 0 to p2 - 1 {
sum = sum + CC[j];
}
ema2[0] = sum/p2;
ema2_OK = True;
}
if sig_OK == False and CC[P2+p3] > 0 then {
sum = 0;
for j = 0 to p3 - 1 {
sum = sum + macdVal[j];
}
macdSig[0] = sum/p3;
sig_OK = True;
}
Plot1(macdVal[0],"macd");
Plot2(macdSig[0],"macd signal");
_____________________________________________________________________________________
위 수식은 수식지왕이라는 분이 만드신 렌코차트와 MACD를 더한 지표라고 합니다.
크로스업 또는 크로스다운되면 진입되는 수식 좀 부탁드립니다...자꾸 오류가 되더군요.
2013-12-01
227
글번호 69995
답변완료
익절컷 추가 질문
익절 청산된후 반대신호가 나올때 까지는 진입을 안했으면 합니다.^^;
> 안녕하세요
예스스탁입니다.
Input : Period(20);
var : value1(0);
value1 = ma(C, Period);
If sTime > 090000 and sTime <= 150000 Then {
If crossup(C,Value1) Then
Buy();
If CrossDown(C,Value1) Then
Sell();
}
If sTime == 150300 Then
{
ExitLong();
ExitShort();
}
SetStopProfittarget(PriceScale*20,PointStop);
SetStoploss(PriceScale*20,PointStop);
즐거운 하루되세요
> 기심필득 님이 쓴 글입니다.
> 제목 : 간단한 익절컷 문의
> 고생이 많으십니다.
아주 쉬운식인데 기 작성된 글을 보고 넣어 보아도 잘 이해가 되지않아 다시 질문 드립니다.
아래식에서 수익이 20틱 손실이 20틱 나면 조건 만족시 청산되도록 하고 싶습니다.
청산된 후 다음 신호시 까지는 진입이 되지 않아야 합니다.
감사합니다.
Input : Period(20);
var : value1(0);
value1 = ma(C, Period);
If sTime > 090000 and sTime <= 150000 Then {
If C > Value1 Then
Buy();
If C < Value1 Then
Sell();
}
If sTime == 150300 Then
{
ExitLong();
ExitShort();
}
2013-12-01
206
글번호 69994
답변완료
문의드립니다...
아래식을 검증하는데 오류가 떠서 작동이 안됩니다...
선언되지 않은 EntriesToday가 사용되어서 그렇다는데...잘 모르겠습니다
---------------------------------------------
Input: ProfitPt(5), TrailBar(30), entryCount(1), P1(40), P2(160), P3(110);
Vars: Pivot(0), Support1(0), Support2(0), Support3(0), Resistance1(0), Resistance2(0), Resistance3(0),
BearMarket(false) , BullMarket(false);
// Calculation of Pivot, support and resistance points
Pivot = ( dayLow(1) + dayHIgh(1) + dayClose(1) ) / 3;
Resistance1 = ( Pivot * 2 ) - dayLow(1);
Resistance2 = Pivot + (dayhigh(1)-dayLow(1));
Resistance3 = Resistance1 + (dayhigh(1)-dayLow(1));
Support1 = ( Pivot * 2 ) - dayHIgh(1);
Support2 = Pivot - (dayhigh(1)-dayLow(1));
Support3 = Support1 - (dayhigh(1)-dayLow(1));
// Determination of market character
BullMarket = ma( Close , P1 ) > ma( Close , P2 ) AND ma( Close , P2 ) > ma( Close , P3 );
BearMarket = ma( Close , P1 ) < ma( Close , P2 ) AND ma( Close , P2 ) < ma( Close , P3 );
// Placement of long orders
if EntriesToday(date) < entryCount then begin
If BullMarket then Begin
Buy ("Bull R2", atstop,Resistance2 ) ;
Buy ("Bull R3", atstop, Resistance3) ;
end;
// Placement of short orders
If bearmarket then begin
Sell ("Bear S2", atstop, Support2) ;
Sell ("Bear S3", atstop, Support3) ;
end;
end;
// Exit at first Profitable Open
If MarketPosition == 1 and NextBarOpen > EntryPrice + ProfitPt then
ExitLong ("Long Profit", AtMarket);
If MarketPosition == -1 and NextBarOpen < EntryPrice - ProfitPt then
ExitShort ("Short Profit", AtMarket) ;
// Exit with trailing stops
ExitLong("EL", atstop,Lowest( Low , TrailBar )) ;
ExitShort("ES", atstop, Highest( High , TrailBar )) ;
SetStopEndofday(150000);
2013-11-30
303
글번호 69993
답변완료
수식문의
안녕하세요~
예스 트레이더 초보 사용자입니다.
검색을 해보아도..적당한게 없기에 문의드립니다.
1. 10분 이내에.. 2프로 이상의 급락이 있었고..
2. 큰 매수 물량이 들어왔고.. (1만주 등등 설정 가능)
3. 매도호가 10 이내에.. 큰 매도 물량(3만주 이상등 설정 가능)이 있는 경우 (이건 예스스팟에 있는거 같습니다만.. 예스랭귀지로도 가능한지 모르겠습니다. )
매수
와 같이 해보고 싶습니다.
수식 가능한지?
가능하면..예제 부탁드립니다.
감사합니다.
2013-11-30
204
글번호 69992
답변완료
종목코드표좀 부탁드립니다.
종목코드표를 목록으로라도 올려 주시면 좋겠습니다
또한 수식에서 input : 이름('종목코드')를 넣으면 차트에 라인과 가격변화가 표시될 수 있었으면 참 좋겠습니다
2013-11-30
221
글번호 69991
답변완료
수식문의
안녕하세요 친절한답변에 감사드립니다 아래식에서 당일거래중 0.8포인트 수익나거나 또는 1포인트 손실일때 바로거래중지 되게해주시고 , 또다른식은 당일50만원 수익이거나 60만원 손실일때 바로 거래정지 되게부탁드립니다 감사합니다
If stime < 150000 Then{
if stime >= 090000 then{
If MarketPosition==0 then{
buy("매수",Atstop,DayOpen+0.8);
sell("매도",Atstop,DayOpen-0.8);
}
if MarketPosition == -1 Then
buy("역매수",Atstop,lowest(low,BarsSinceEntry+1)+0.9);
if MarketPosition == 1 Then
sell("역매도",Atstop,highest(high,BarsSinceEntry+1)-0.9);
}
}
2013-11-30
181
글번호 69990
답변완료
시스템식
시스템식 부탁합니다.
1.
매수:오픈닝 시장가 매수
매도:클로징 시장가 매도
2.
매수: 오픈닝 시가에서 0.15% 가격이 오르면 매수
매도: 클로징 시장가 매도
2013-12-01
200
글번호 69989
회원 님에 의해서 삭제되었습니다.
2013-11-30
1
글번호 69988
답변완료
아래 식의 차이점이 무엇인지 궁금합니다.
두 식의 결과가 다르게 나옵니다. 어떤 차이가 있는지 궁금합니다.
감사합니다. ^^
식1)---------------------------------------
If MarketPosition == 0 Then Begin
If CrossUp(Close,DayOpen+0.5) Then Buy("매수",AtStop,DayOpen+0.5);
End;
식2)----------------------------------------
If MarketPosition == 0 Then Buy("매수",AtStop,DayOpen+0.5);
2013-11-30
208
글번호 69987