커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
5516
글번호 230811
답변완료
식문의드립니다.
안녕하세요, 식 작성해주신것중 안되는점이있어 문의드립니다.
아래식에서 진입이나 청산이 될때
진입 앞전 완성봉이 고점이나 저점을 형성한 후 진입이이뤄지는데
그냥 바로 진입점에 봉이 다으면 진입이 되도록 부탁드립니다.
(장시작하여 바로 해당 진입점에서 가격이 시작하거나
시간설정 이후에 바로 진입점에 다을시)
감사합니다.
------------------------------------------------------
input : 저점날짜(20190619),저점가격(3275);
input : 고점날짜(20190620),고점가격(3380);
input : 시작일(20190620),시작시간(101000);
input : 진입비율1(65.2),수량1(100),청산비율1(40.0);
input : 진입비율2(70.0),수량2(50),청산비율2(45.0);
input : 진입비율3(80.0),수량3(30),청산비율3(60.0);
input : 손절비율(90);
var : HH(0),LL(0),newHigh(false),Tcond(false),Trade(false);
if sdate == 저점날짜 and sdate != sdate[1] Then
LL = 저점가격;
if sdate == 고점날짜 and sdate != sdate[1] Then
{
HH = 고점가격;
newHigh = true;
}
if sdate == 시작일 and stime > 시작시간 Then
Trade = true;
if sdate >= 고점날짜 and sdate >= 저점날짜 and HH > 0 and LL > 0 Then
Tcond = true;
if tcond == true then
{
if C <= HH*0.85 Then
newhigh = false;
if newhigh == true and H > HH Then
HH = H;
if Trade == true then
{
#첫진입(65.2%위에서 아래로 터치하면 즉시 매수)
if TotalTrades == 0 and MarketPosition == 0 then
{
if L > HH-(HH-LL)*(진입비율1/100) Then
buy("b1",atlimit,HH-(HH-LL)*(진입비율1/100),수량1);
if H < HH-(HH-LL)*(진입비율1/100) Then
buy("b1.",AtStop,HH-(HH-LL)*(진입비율1/100),수량1);
}
#매수 후
if MarketPosition == 1 then
{
#두번째진입(70.0% 위에서 아래로 터치하면 즉시 추가매수)
if MaxEntries == 1 then
{
if L > HH-(HH-LL)*(진입비율2/100) Then
buy("b2",atlimit,HH-(HH-LL)*(진입비율2/100),수량2);
if H < HH-(HH-LL)*(진입비율2/100) Then
buy("b2.",AtStop,HH-(HH-LL)*(진입비율2/100),수량2);
}
#세번째진입(80.0% 위에서 아래로 터치하면 즉시 추가매수)
if MaxEntries == 2 then
{
if L > HH-(HH-LL)*(진입비율3/100) Then
buy("b3",atlimit,HH-(HH-LL)*(진입비율3/100),수량3);
if H < HH-(HH-LL)*(진입비율3/100) Then
buy("b3.",AtStop,HH-(HH-LL)*(진입비율3/100),수량3);
}
#첫 진입후 40%를 상회하면 즉시 전량청산
if MaxEntries == 1 Then
ExitLong("bx1",Atlimit,HH-(HH-LL)*(청산비율1/100));
#두번 진입후 45%를 상회하면 즉시 전량청산
if MaxEntries == 2 Then
ExitLong("bx2",Atlimit,HH-(HH-LL)*(청산비율2/100));
#세번 진입후 60%를 상회하면 즉시 전량청산
if MaxEntries == 3 Then
ExitLong("bx3",Atlimit,HH-(HH-LL)*(청산비율3/100));
#손절비율 이하로 하락시 즉시 전량청산
ExitLong("bx",AtStop,HH-(HH-LL)*(손절비율/100));
}
}
}
2019-08-01
262
글번호 130862
답변완료
문의 드립니다.
볼린져 20.2
볼린져 상단선 돌파 하면 매수 진입 상단선 아래로 들어 오면 매도 청산
볼린져 하단선 아래로 돌파 하면 매도 진입 하단선 위로 올라 오면 매수 청산
부탁드립니다.
2019-08-01
213
글번호 130859
답변완료
중심선 기준 일정간격 있을때 시스템식
<1>당일 중심선 기준으로 일정 간격(이격률 등..) 벌어져 있을때 캔들이 당일 중심선 위에 있으면 매도, 중심선 아래에 있으면 매수하는 수식 부탁드립니다.
청산은 피보나치 50%에 하는 걸로 하구요...
<2>어느 선을 기준으로 표시하다 보면 선이 수직, 사선, 수평 3가지 형태를 띄는대
수직, 사선, 수평중 어느 하나를 띌때만 캔들로 강조가 가능한지요? 감사합니다.
2019-08-01
291
글번호 130858
답변완료
문의 드립니다
input : ntime1(20),P1(20),P2(100),P3(20),P4(1),P5(128),P6(256);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : sum1(0),sum11(0),sum12(0),sum13(0),sum14(0),mav1(0),mav11(0),mav12(0),mav13(0),mav14(0);
var : sum2(0),sum21(0),sum22(0),sum23(0),sum24(0),mav2(0),mav21(0),mav22(0),mav23(0),mav24(0);
var : sum3(0),sum31(0),sum32(0),sum33(0),sum34(0),mav3(0),mav31(0),mav32(0),mav33(0),mav34(0);
var : sum4(0),sum41(0),sum42(0),sum43(0),sum44(0),mav4(0),mav41(0),mav42(0),mav43(0),mav44(0);
var : sum5(0),sum51(0),sum52(0),sum53(0),sum54(0),mav5(0),mav51(0),mav52(0),mav53(0),mav54(0);
var : sum6(0),sum61(0),sum62(0),sum63(0),sum64(0),mav6(0),mav61(0),mav62(0),mav63(0),mav64(0);
Array : C1[500](0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%ntime1;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
for cnt = 1 to 499
{
C1[cnt] = C1[cnt-1][1];
}
}
C1[0] = C;
if C1[P6+4] > 0 then
{
sum1 = 0;
sum11 = 0;
sum12 = 0;
sum13 = 0;
sum14 = 0;
sum2 = 0;
sum21 = 0;
sum22 = 0;
sum23 = 0;
sum24 = 0;
sum3 = 0;
sum31 = 0;
sum32 = 0;
sum33 = 0;
sum34 = 0;
sum4 = 0;
sum41 = 0;
sum42 = 0;
sum43 = 0;
sum44 = 0;
sum5 = 0;
sum51 = 0;
sum52 = 0;
sum53 = 0;
sum54 = 0;
sum6 = 0;
sum61 = 0;
sum62 = 0;
sum63 = 0;
sum64 = 0;
for cnt = 0 to P6-1
{
if cnt < P1 then
{
sum1 = sum1+C1[cnt];
sum11 = sum11+C1[cnt+1];
sum12 = sum12+C1[cnt+2];
sum13 = sum13+C1[cnt+3];
sum14 = sum14+C1[cnt+4];
}
if cnt < P2 then
{
sum2 = sum2+C1[cnt];
sum21 = sum21+C1[cnt+1];
sum22 = sum22+C1[cnt+2];
sum23 = sum23+C1[cnt+3];
sum24 = sum24+C1[cnt+4];
}
if cnt < P3 then
{
sum3 = sum3+C1[cnt];
sum31 = sum31+C1[cnt+1];
sum32 = sum32+C1[cnt+2];
sum33 = sum33+C1[cnt+3];
sum34 = sum34+C1[cnt+4];
}
if cnt < P4 then
{
sum4 = sum4+C1[cnt];
sum41 = sum41+C1[cnt+1];
sum42 = sum42+C1[cnt+2];
sum43 = sum43+C1[cnt+3];
sum44 = sum44+C1[cnt+4];
}
if cnt < P5 then
{
sum5 = sum5+C1[cnt];
sum51 = sum51+C1[cnt+1];
sum52 = sum52+C1[cnt+2];
sum53 = sum53+C1[cnt+3];
sum54 = sum54+C1[cnt+4];
}
if cnt < P6 then
{
sum6 = sum6+C1[cnt];
sum61 = sum61+C1[cnt+1];
sum62 = sum62+C1[cnt+2];
sum63 = sum63+C1[cnt+3];
sum64 = sum64+C1[cnt+4];
}
}
mav1 = sum1/P1;
mav11 = sum11/P1;
mav12 = sum12/P1;
mav13 = sum13/P1;
mav14 = sum14/P1;
mav2 = sum2/P2;
mav21 = sum21/P2;
mav22 = sum22/P2;
mav23 = sum23/P2;
mav24 = sum24/P2;
mav3 = sum3/P3;
mav31 = sum31/P3;
mav32 = sum32/P3;
mav33 = sum33/P3;
mav34 = sum34/P3;
mav4 = sum4/P4;
mav41 = sum41/P4;
mav42 = sum42/P4;
mav43 = sum43/P4;
mav44 = sum44/P4;
mav5 = sum5/P5;
mav51 = sum51/P5;
mav52 = sum52/P5;
mav53 = sum53/P5;
mav54 = sum54/P5;
mav6 = sum6/P6;
mav61 = sum61/P6;
mav62 = sum62/P6;
mav63 = sum63/P6;
mav64 = sum64/P6;
if sum13 > sum12 and sum12 < sum11 and sum11 < sum1 Then
buy();
if sum13 < sum12 and sum12 > sum11 and sum11 > sum1 Then
sell();
}
}
위 시스템 식에서
p1이평선20일선이 p2이평선 100일선 크로스업일 때 매수
p1이평선20일선이 p2이평선 100일선 크로스다운일 때 매도
시스템식으로 변경하여 주시기 바랍니다
감사합니다
2019-08-01
254
글번호 130855
답변완료
대기조건 수식 문의 드립니다.
안녕하세요.
항상 수고가 많으십니다.
대기조건 수식 문의 드리겠습니다.
조건1 과 조건2가 있는데요.
각각의 조건에서는 잘 구동이 됩니다.
원하는것은 조건1이 만족하면 대기했다가 조건2까지 나왔을때 진입하고 싶은데요.
찾아보다가
예를 들어 If 조건1 and 조건2 then
이렇게 작성하면 대기하지 않고 조건1과 조건2가 동시에 만족되는 수식이 되어 원하는 실행이 되질 않네요.
또 찾아보다가
조건 두개를 아래와 같이 묶고
Condition1 = value1 > value2 and value3 > value4;
if Condition1 == true and Condition1[1] == false Then
if문을 이렇게 구현해 보았는데도 결과는 마찬가지네요.
조건1이 만족되면 기다렸다가 조건2까지 만족하면 진입하고 싶은건데
다른 방법이 있을까요?
2019-08-01
286
글번호 130853
답변완료
수식작성 부탁드립니다.
안녕하세요? 더운데 수고많으십니다.
간단한 수식작성 부탁드리겠습니다.
***진입
1)매수
음봉 바로다음 양봉일때 매수진입. (아래요건 모두 충족시에만 진입하여야 함)
단, 바로앞 음봉의 종가보다 진입하는 양봉의 시가가 아래에서 시작하고
바로앞 음봉의 종가보다 진입하는 양봉의 종가가 위에서 끝나는 경우에만 진입.
2)매도
양봉 바로다음 음봉일때 매도진입. (아래요건 모두 충족시에만 진입하여야 함)
단, 바로앞 양봉의 종가보다 진입하는 음봉의 시가가 위에서 시작하고
바로앞 양봉의 종가보다 진입하는 음봉의 종가가 아래에서 끝나는 경우에만 진입.
***청산
아래 두가지 방법중 먼저 도달하는것에 청산. 그후 새로운 신호 발생시 진입.
1)교차매매가 되게 부탁드립니다.
(신호가나오고 반대신호가 나올경우 청산후, 반대신호에 재진입)
예를들어, 매수신호가 나와서 진입후, 매도신호가 나오면 그자리에서 매수포지션 청산과 동시에 매도로 진입
2)익절(외부변수)틱, 손절(외부변수)틱
***추가질문
혹시 위의 진입조건에서 앞봉과 진입봉 사이에 도지가 끼어있을때에도 인식하고 들어갈수있게끔 가능한지요? 만약 가능하다면, 도지 개수도 외부변수로 조정가능한가요?
혹시 그렇게도 된다면 도지가 끼어있어도(도지갯수는 외부변수로) 신호로 인정할수있게 만들어주시면 감사하겠습니다.
항상 도와주셔서 고맙습니다.
수고하세요.
2019-08-01
228
글번호 130847
답변완료
문의 드립니다.
예스랭귀지 로 작성된 예스트레이더에서
틱봉에서
무포지션이면 무조건 매수하고
예스스팟에서 어떤 조건을 만족하면 청산하는 로직입니다.
청산되자 마자 포지션이 잔고가 무포지션이 되면
바로 매수가 되도록 하고 싶습니다.
예스스팟은 정확히 청산이 들어가는데요.
예스랭귀지의 예스트레이더에서 예스스팟에서 잔고 청산시 즉 무포지션시
예스트레이더에서 매수가 되다가 안돠다가 중구 난방입니다.
아래 수식에서 수정를 부탁드립니다.
var: q2(0);
var : 매수가격(0);
q2=GetpositionQuantity("CLU19","40005298");
if q2==0 Then {
BUY("매수",AtMarket);
}
2019-08-01
303
글번호 130843
답변완료
수정 부탁드립니다
수정해주셔서 감사합니다
전에 말씀드린 수정사항중 한가지가 안되어 있어 다시 올립니다
글자와 숫자가 화면 오른쪽에 떠있습니다
글자와 숫자를 화면 맨 왼쪽에 나올수있게 부탁드립니다.
input : 소숫점자리(2);
plot1(DayClose(1),"전일종가");
plot2((DayHigh(1)+daylow(1))/2,"전일중간");
plot3(DayOpen(1),"전일시가");
plot4(DayHigh(1),"전일고가");
plot5(DayLow(1),"전일저가");
plot6(DayOpen(0),"당일시가");
plot7(DayHigh(0),"당일고가");
plot8((DayHigh(0)+DayLow(0))/2,"당일중간");
plot9(DayLow(0),"당일저가");
Text_Delete(var1);
Text_Delete(var2);
Text_Delete(var3);
Text_Delete(var4);
Text_Delete(var5);
Text_Delete(var6);
Text_Delete(var7);
Text_Delete(var8);
Text_Delete(var9);
var1 = Text_New(sdate,stime,DayClose(1),"전일종가:"+NumToStr(DayClose(1),소숫점자리));
var2 = Text_New(sdate,stime,(DayHigh(1)+daylow(1))/2,"전일중간:"+NumToStr((DayHigh(1)+daylow(1))/2,소숫점자리));
var3 = Text_New(sdate,stime,DayOpen(1),"전일시가:"+NumToStr(DayOpen(1),소숫점자리));
var4 = Text_New(sdate,stime,DayHigh(1),"전일고가:"+NumToStr(DayHigh(1),소숫점자리));
var5 = Text_New(sdate,stime,DayLow(1),"전일저가:"+NumToStr(DayLow(1),소숫점자리));
var6 = Text_New(sdate,stime,DayOpen(0),"당일시가:"+NumToStr(DayOpen(0),소숫점자리));
var7 = Text_New(sdate,stime,DayHigh(0),"당일고가:"+NumToStr(DayHigh(0),소숫점자리));
var8 = Text_New(sdate,stime,(DayHigh(0)+DayLow(0))/2,"당일중간:"+NumToStr((DayHigh(0)+DayLow(0))/2,소숫점자리));
var9 = Text_New(sdate,stime,DayLow(0),"당일저가:"+NumToStr(DayLow(0),소숫점자리));
Text_SetStyle(var1,2,1);
Text_SetStyle(var2,2,1);
Text_SetStyle(var3,2,1);
Text_SetStyle(var4,2,1);
Text_SetStyle(var5,2,1);
Text_SetStyle(var6,2,1);
Text_SetStyle(var7,2,1);
Text_SetStyle(var8,2,1);
Text_SetStyle(var9,2,1);
2019-08-01
246
글번호 130840
답변완료
수평선 연장
아래식에서 선과 숫자를 오른쪽 끝까지 연장하고 싶습니다.
잘 안되네요.. ^^
감사합니다.
===================================================
input : Price(0);
var : tx(0);
plot1(Price,"price");
Text_Delete(tx);
tx = Text_New(sdate,stime,Price,NumToStr(price,2));
2019-08-01
290
글번호 130838