커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3635
글번호 230811
잡다백수 님에 의해서 삭제되었습니다.
2019-08-02
0
글번호 130871
답변완료
문의 합니다.
1. 당일 시가 기준으로 +10틱 -10틱 추세선 긋고
2. 주가가 +10틱 추세선 이나 -10틱 추세선을 돌파하거나 무너지면 이 추세선을 기준으로
다시 +10틱 -10 추세선을 그리고 싶습니다.
3. 기준선 하나 +10틱 추세선 -10틱 추세선 3개의 추세선 만 출력하고 나머지 추세선을 지우고 싶습니다.
2019-08-01
242
글번호 130870
답변완료
문의 드립니다
1.
var : ndays(90);
var : sum(0),cnt(0),avgv(0);
if DayClose(ndays) > 0 then{
sum = 0;
for cnt = 1 to ndays{
sum = sum + (dayhigh(cnt)-daylow(cnt));
}
avgv = sum/ndays;
plot1(dayopen+avgv);
plot2(dayopen-avgv);
}
.......................................................
2.
var1 = disparity(5);
Var2 = disparity(10);
Var3 = disparity(20);
var4 = disparity(60);
var5 = disparity(120);
plot1(Var1);
plot2(Var2);
plot3(Var3);
plot4(Var4);
plot5(Var5);
...........................................................................
1번 2번 지표 각각 데이타2용으로 가공해 주세요
감사합니다
2019-08-02
203
글번호 130869
답변완료
수정 부탁 드립니다~
63487번 기존수식에 한가지만 첨가 부탁 드려요
1번항에는....
20일 지수이평선이 50일 지수이평선을 하락이탈시 잔여수량 전부청산
2번항에는....
20일 지수이평선이 50일 지수이평선을 상향이탈시 잔여수량 전부청산
위 2가지만 첨부해서 수식첨가 수정작성 부탁드립니다~
감사합니다^^
안녕하세요
예스스탁입니다.
var1 = ema(C,20);
var2 = ema(C,50);
var3 = ema(C,100);
var4 = ema(C,700);
if MarketPosition <= 0 and c > var4 and crossup(var1,var2) Then
buy("b",OnClose,def,3);
if MarketPosition == 1 then
{
if CrossDown(var1,var3) Then
exitlong("bx");
ExitLong("bp1",atlimit,EntryPrice+PriceScale*25,"",1,1);
ExitLong("bp2",atlimit,EntryPrice+PriceScale*35,"",1,1);
ExitLong("bp3",atlimit,EntryPrice+PriceScale*45,"",1,1);
ExitLong("bl",AtStop,EntryPrice-PriceScale*40);
}
if MarketPosition >= 0 and c < var4 and CrossDown(var1,var2) Then
sell("s",OnClose,def,3);
if MarketPosition == -1 then
{
if CrossDown(var1,var3) Then
ExitShort("sx");
ExitShort("sp1",atlimit,EntryPrice-PriceScale*25,"",1,1);
ExitShort("sp2",atlimit,EntryPrice-PriceScale*35,"",1,1);
ExitShort("sp3",atlimit,EntryPrice-PriceScale*45,"",1,1);
ExitShort("sl",AtStop,EntryPrice+PriceScale*40);
}
즐거운 하루되세요
> 이태리 님이 쓴 글입니다.
> 제목 : 수식 작성 부탁 드립니다~
>
수고 많으십니다!
사용하는 지수이평선은
20일 지수이평선,50일 지수이평선,100일 지수이평선,700일 지수이평선입니다
700일 지수이평선을 기준으로 해서
한쪽 방향으로만 진입하게 부탁드려요
700일 지수이평선 지지 받을때는
상향돌파 신호에만 매집진입(하향돌파 신호에는 미진입)
반대로
700일 지수이평선 저항 받을때는
하향돌파 신호에만 매집진입(상향돌파 신호에는 미진입)
1. 700일 지수이평선 지지 받고 있을때
20일 지수이평선이 50일 지수이평선을 상향돌파시 3계약 매집진입
20일 지수이평선이 50일 지수이평선을 하락이탈시 잔여수량 전부청산
매집진입후 수익 도달시 강제분할청산
(첫 1계약은 25틱 수익도달시청산
또 다른 1계약은 35틱 수익도달시 청산
나머지 1계약은 45틱 수익도달시 청산)
손절은; -40틱 손실 발생시 손절
*** 그전에 100일 지수이평선 하락이탈시 잔여보유분 전부 강제청산 ***
2. 700일 지수이평선 저항 받고 있을때
20일 지수이평선이 50일 지수이평선을 하향돌파시 3계약 매집진입
20일 지수이평선이 50일 지수이평선을 상향이탈시 잔여수량 전부청산
매집진입후 수익 도달시 강제분할청산
(첫 1계약은 25틱 수익도달시청산
또 다른 1계약은 35틱 수익도달시 청산
나머지 1계약은 45틱 수익도달시 청산)
손절은; -40틱 손실 발생시 손절
*** 그전에 100일 지수이평선 상향이탈시 잔여보유분 전부 강제청산 ***
매번 수고해주시니 감사합니다^^
활기찬 하루 되세요~
2019-08-01
206
글번호 130865
답변완료
식문의드립니다.
안녕하세요, 식 작성해주신것중 안되는점이있어 문의드립니다.
아래식에서 진입이나 청산이 될때
진입 앞전 완성봉이 고점이나 저점을 형성한 후 진입이이뤄지는데
그냥 바로 진입점에 봉이 다으면 진입이 되도록 부탁드립니다.
(장시작하여 바로 해당 진입점에서 가격이 시작하거나
시간설정 이후에 바로 진입점에 다을시)
감사합니다.
------------------------------------------------------
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
228
글번호 130862
답변완료
문의 드립니다.
볼린져 20.2
볼린져 상단선 돌파 하면 매수 진입 상단선 아래로 들어 오면 매도 청산
볼린져 하단선 아래로 돌파 하면 매도 진입 하단선 위로 올라 오면 매수 청산
부탁드립니다.
2019-08-01
184
글번호 130859
답변완료
중심선 기준 일정간격 있을때 시스템식
<1>당일 중심선 기준으로 일정 간격(이격률 등..) 벌어져 있을때 캔들이 당일 중심선 위에 있으면 매도, 중심선 아래에 있으면 매수하는 수식 부탁드립니다.
청산은 피보나치 50%에 하는 걸로 하구요...
<2>어느 선을 기준으로 표시하다 보면 선이 수직, 사선, 수평 3가지 형태를 띄는대
수직, 사선, 수평중 어느 하나를 띌때만 캔들로 강조가 가능한지요? 감사합니다.
2019-08-01
262
글번호 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
219
글번호 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
257
글번호 130853