커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7226
글번호 230811
답변완료
참조 데이터
제가 뭔가 참조 데이터 쓰는 법을 잘 모르나 봅니다.
다음 수식 수정 부탁드립니다 (작동을 제대로 안 합니다)
이용하는 차트 = 1분봉
참조1 (data2) = 일봉
1. 갭 메우기
오늘 시가가 어제 저가보다 낮으면 090000 매수해서 어제 저가 또는 151900 에 청산
if stime==090000 and data2(O[0]) < data2(L[1]) then buy ("B",atmarket);
if marketposition == 1 and c >= data2(L[1]) then exitlong ("Ex",atmarket);
if marketposition == 1 and stime==151900 then exitlong ("Ex1",atmarket);
2. 가격이 (오늘 시가 + 어제 고가, 저가의 평균값) 에 도달할 경우 그 시점에 매수, 151900에 청산
var : higher(0);
higher = data2(O[0]) + (data2(H[1])+data2(L[1]))/2 ;
if marketposition == 0 and c=higher then buy ("B", atmarket);
if marketposition == 1 and stime == 151900 then exitlong ("Ex", atmarket);
3.
오늘 110000 가격이 오늘 시가보다 높고 AND 130000 가격이 그때까지 오늘 고가,저가의 평균값보다 높으면 130000에 매수, 151900에 청산
if MarketPosition ==0 and (C>DayOpen and stime==110000) and (stime==130000 and C>(H+L)/2 ) then buy ("B",atmarket);
if marketposition == 1 and stime == 151900 then exitlong ("Ex", atmarket);
4. 151900 가격이 일봉 5MA 위면 매수, 090001 청산
if marketposition == 0 and stime ==151900 and data2(C[0]) > data2(MA(C[0],5)) then buy ("B", atmarket);
if marketpostion == 1 and stime ==090001 then exitlong ("Ex", atmarket);
한수 가르침 부탁드립니다^^
2018-10-23
315
글번호 122928
답변완료
문의 합니다
1번 시스템 수식
input : 시작시간(090000),종료시간(152000);
input : Period15(15),Period20(20),Period30(30),Period120(120),Period180(180),Period240(240),Period480(480),Period960(960),Period60(60),Period3(3),Period10(10),Period2(2),Period7(7),Period144(144),Period100(100),익절틱수(10),손절틱수(10);
var : mav15(0),mav20(0),mav30(0),mav120(0),mav180(0),mav240(0),mav480(0),mav960(0),mav60(0),mav1(0),mav3(0),mav10(0),mav2(0),mav7(0),mav144(0),mav100(0),Bxcond(false),Sxcond(false);
var : Tcond(false);
var : T(0);
mav15 = ma(c, Period15);
mav20 = ma(c, Period20);
mav30 = ma(c, Period30);
mav120 = ma(c, Period120);
mav180 = ma(c, Period180);
mav240 = ma(c, Period240);
mav480 = ma(c, Period480);
mav960 = ma(c, Period960);
mav60 = ma(c, Period60);
mav3 = ma(c, Period3);
mav10 = ma(c, Period10);
mav2 = ma(c, Period2);
mav7 = ma(c, Period7);
mav144 = ma(c, Period144);
mav100 = ma(c, Period100);
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and (Stime == 시작시간 or (stime > 시작시간 and stime[1] < 시작시간))) Then
{
Tcond = True;
BXcond = false;
SXcond = false;
}
if stime == 종료시간 or (stime > 종료시간 and stime[1] < 종료시간) Then{
Tcond = false;
if MarketPosition == 1 Then
ExitLong();
if MarketPosition == -1 Then
ExitShort();
}
if TotalTrades > TotalTrades[1] then{
BXcond = false;
SXcond = false;
if (IsExitName("bl",0) == true or IsExitName("bp",0) == true or IsExitName("bx",1) == true or IsExitName("bx",1) == true) Then
BXcond = true;
if (IsExitName("sl1",0) == true or IsExitName("sp1",0) == true or IsExitName("sx",1) == true or IsExitName("sx",1) == true) Then
SXcond = true;
}
if Tcond == true then{
if MarketPosition <= 0 and Bxcond == false and
(mav144[1] < mav144 and mav60[60] > mav60[2] and mav60[2] <= mav60[1] and mav60[1] < mav60 and mav15[1] < mav15) Then{
buy("매수",OnClose,def,1);
}
if MarketPosition == 1 Then{
if mav15[1] < mav15 and mav7 > mav15 and mav15 > mav30 and mav30[1] < mav30 and crossup(mav2, mav3) and CurrentContracts < 10 Then
buy("매수1",OnClose,def,1);
}
if MarketPosition == 1 Then{
if (mav100[2] >= mav100[1] and mav100[1] > mav100) Then
exitlong("수청산",OnClose,def,"매수");
if (mav100[2] >= mav100[1] and mav100[1] > mav100) Then
exitlong("수청산1",OnClose,def,"매수1");
ExitLong("bp",atlimit,AvgEntryPrice+PriceScale*익절틱수);
ExitLong("bl",AtStop,AvgEntryPrice-PriceScale*손절틱수);
}
if MarketPosition >= 0 and Sxcond == false and
(mav144[1] > mav144 and mav60[60] < mav60[2] and mav60[2] >= mav60[1] and mav60[1] > mav60 and mav15[1] > mav15) Then{
sell("매도",OnClose,def,1);
}
if MarketPosition == -1 then{
if mav15[1] > mav15 and mav7 < mav15 and mav15 < mav30 and mav30[1] > mav30 and CrossDown(mav2, mav3) and CurrentContracts < 10 Then
sell("매도1",OnClose,def,1);
}
if MarketPosition == -1 then{
if (mav100[2] <= mav100[1] and mav100[1] < mav100) Then
ExitShort("도청산",OnClose,def,"매도");
if (mav100[2] <= mav100[1] and mav100[1] < mav100) Then
ExitShort("도청산1",OnClose,def,"매도1");
ExitShort("sp",atlimit,AvgEntryPrice-PriceScale*익절틱수);
ExitShort("sl",AtStop,AvgEntryPrice+PriceScale*손절틱수);
}
}
2번 시스템 수식
input : ntime1(20),P(20);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0),sum1(0),mav1(0),mav11(0),mav12(0);
Array : C1[50](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 49
{
C1[cnt] = C1[cnt-1][1];
}
mav11 = mav1[1];
mav12 = mav11[1];
}
C1[0] = C;
if C1[P] > 0 then{
sum1 = 0;
for cnt = 0 to P-1{
sum1 = sum1+C1[cnt];
}
mav1 = sum1/P;
if mav12 < mav11 and mav11 < mav1 and mav12 > 0 Then
buy();
if mav12 > mav11 and mav11 > mav1 and mav12 > 0 Then
sell();
}
}
1번 수식에 2번 수식 함께 적용하여 하나의 수식으로 합쳐주세요 감사합니다
1번 수식에 최초 매수진입할 때 2번 수식 매수진입 수식을 합쳐주세요
(즉 1번 최초 매수진입과 1번 매수진입 만족하면 매수 진입)
mav144[1] < mav144 and mav60[60] > mav60[2] and mav60[2] <= mav60[1] and mav60[1] < mav60 and mav15[1] < mav15 and mav12 < mav11 and mav11 < mav1 and mav12 > 0
1번 수식에 최초 매도진입할 때 2번 수식 매도진입 수식을 합쳐주세요
(즉 1번 최초 매도진입과 1번 매도진입 만족하면 매도 진입)
mav144[1] > mav144 and mav60[60] < mav60[2] and mav60[2] >= mav60[1] and mav60[1] > mav60 and mav15[1] > mav15 and mav12 > mav11 and mav11 > mav1 and mav12 > 0
2018-10-22
258
글번호 122927
답변완료
부탁 드립니다.
도움주심에 깊이 감사 드립니다.
다음 타주기 수식의 일봉 주봉 월봉지표를
분봉에 나타 나도록 부탁 드립니다.
미리 감사 드립니다..
/*
Input:P4(4);
VAR:VARQ1(0);
VARQ1=ATR(P4);
plot1(varq1);
*/
input : 타주기분(60),Period(10);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),HH(0),LL(0),CC(0),C1(0);
var : sumTR(0),ATRV(0);
Array : TH[100](0),TL[100](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%타주기분;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
HH = H;
LL = L;
C1 = CC[1];
for cnt = 1 to 99
{
TH[cnt] = TH[cnt-1][1];
TL[cnt] = TL[cnt-1][1];
}
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
CC = c;
TH[0] = max(C1,HH);
TL[0] = Min(C1,LL);
if TH[Period-1] > 0 and TL[Period-1] > 0 then
{
sumTR = 0;
for cnt = 0 to Period-1
{
sumTR = sumTR + (TH[cnt]-TL[cnt]);
}
ATRV = sumTR/Period;
plot1(ATRV);
}
}
2018-10-23
270
글번호 122926
답변완료
수식 부탁드립니다.
감사합니다. 수식부탁드립니다.
매수 포지션 일때 N개의 봉(캔들)의 시작가와 종가가 20틱 만큼 하락하면 청산
매수 포지션 일때 N개의 봉(캔들)의 최대값과 최소값이 20틱 만큼 하락하면 청산
매도 포시션 반대
2018-10-22
238
글번호 122923
답변완료
부탁 드립니다.
항상 고맙습니다.
타주기 분용으로 사용토록 부탁 드립니다.
input : Period(5);
var1 = Ceiling((Period*2+1) * 0.5);
value1 = ma(ma(C, var1), var1);
2018-10-22
268
글번호 122917
답변완료
해외선물 틱챠트 이용중인데요
1. 틱 봉의 갯수가 틀려집니다.
- 가령 12;00;00 에서 12;10;00 까지 약 10분간 120틱의 봉갯수가
10개로 진행되고 있는 중에 분봉으로 챠트를 달리 보고 넘어오면
데이타가 갱신이 되어서인지 봉갯수가 15개정도로 변해 있습니다.
2. 이에 따라 보조지표들도 기존에 보던것과는 완전히 틀려지고
3. 시스템 신호도 발생했던것이 없어지곤 합니다.
이런 현상이 왜 발생하는것일까요? 사용자가 설정을 잘못한 부분이 있는지요?
위의 상황을 이해하시기가 어렵다면 그림 화잉을 첨부 하도록 하겠습니다.
감사합니다.
**************************************************************************
==> 캡쳐화면 올립니다.
재조회 전 지정한 기간의 120틱의 봉갯수는 167개에서
재조회후 봉갯수는 258개로 늘어나 있습니다.
*************************************************************************
2018-10-22
340
글번호 122916
답변완료
수식좀 부탁합니다.
1, 상승시 틱수 캔들 좌측 상단배열과 적색으로 표시를 원합니다.
하락시 틱수 캔들 캔들 좌측 하단배열과 검정색으로 표시를 원합니다.
그리고 현재는 캔들 중안에 너무 가깝게 표시가 되어서 캔들과 틱수가 겹쳐보입니다.
2, 진입신호에서 매수 또는 매도 하고 목표치 틱수 도달시 청산호가 기호와함께
한글로 표시가 되게끔 가능하신지요.있다면 어떻게~~~~
3, 바탕하면에 상승세 또는 하락세를 배경에 연출하는 시스템을 여쭙니다.
참고로 사진첨부 하오니 도움 주시면 감사하겠습니다.
마지막 사진은 타인의 챠트를 예를 듭니다.
2018-10-22
310
글번호 122903
답변완료
선물 캔들 상품별 틱수 계산 수식0
안녕하세요. ~ 항상 도움을 주셔서 감사합니다.
캔들의 양봉/음봉이 만들어 질때 상승/하락 틱수를 알고 싶어 해당 수식을 작성했는데
국선/해선의 주가단위에 따라 달라 도움을 요청드립니다.
과거 데이터를 기준으로 계산했는데 금일 라이브상태에서 보니 완성된 캔들의 상/하락 틱수가 틀리게 나오네요 ㅠㅠ
#기준안 수식
var1 = Abs((C-O)*1); //틱수 계산
#국선
var1 = Abs((C-O)*100); //국선 양봉/음봉 틱수 계산
#항생
var1 = Abs((C-O)*1); //항생 양봉/음봉 틱수 계산
#나스닥
var1 = Abs((C-O)*10); //나스닥 양봉/음봉 틱수 계산
#골드
var1 = Abs((C-O)*10); //골드 양봉/음봉 틱수 계산
#유로FX
var1 = Abs((C-O)*10000); //유로 양봉/음봉 틱수 계산
표현은 첨부파일의 그림처럼 캔들에 표시하려 합니다.
확인 부탁 드립니다.
2018-10-22
356
글번호 122890
답변완료
다시 한번 봐 주세요..
주봉의 4,9,19일선을 일봉에 표시하는 수식인데
지나간 자리는 맞는데 현위치가 맞지 않습니다
지금 정확한 것은 정규장 일봉뿐입니다
다시 한번만 봐 주세요...
1. 주봉
input : weekP1(5),weekP2(10),weekP3(20);
var : cnt(0),count(0),sum1(0),mav1(0),sum2(0),mav2(0),sum3(0),mav3(0);
array : weekC[100](0);
if dayofweek(date) <= dayofweek(date[1]) and sdate > sdate[1] then{
for cnt = 1 to 99{
weekC[cnt] = weekC[cnt-1][1];
}
}
weekC[0] = C;
sum1 = 0;
sum2 = 0;
sum3 = 0;
if weekC[weekP3] > 0 Then{
for count = 0 to weekP3{
if count < weekP1 Then
sum1 = sum1+weekC[count];
if count < weekP2 Then
sum2 = sum2+weekC[count];
if count < weekP3 Then
sum3 = sum3+weekC[count];
}
mav1 = sum1/weekP1;
mav2 = sum2/weekP2;
mav3 = sum3/weekP3;
}
plot1(mav1);
plot2(mav2);
plot3(mav3);
월봉의 1봉전 4,9,19일선을 주봉에 표시하는 수식인데 오차가 있습니다..
수정 부탁합니다
(주봉을 일봉에 표시하는거는 정확히 맞는데요...)
2, 월봉
input : monthP1(5),monthP2(10),monthP3(20);
var : cnt(0),count(0),sum1(0),mav1(0),sum2(0),mav2(0),sum3(0),mav3(0);
array : monthC[100](0);
if date > date[1]+30 then{
for cnt = 1 to 99{
monthC[cnt] = monthC[cnt-1][1];
}
}
monthC[0] = C;
sum1 = 0;
sum2 = 0;
sum3 = 0;
if monthC[monthP3] > 0 Then{
for count = 0 to monthP3{
if count < monthP1 Then
sum1 = sum1+monthC[count];
if count < monthP2 Then
sum2 = sum2+monthC[count];
if count < monthP3 Then
sum3 = sum3+monthC[count];
}
mav1 = sum1/monthP1;
mav2 = sum2/monthP2;
mav3 = sum3/monthP3;
}
plot1(mav1);
plot2(mav2);
plot3(mav3);
2018-10-23
310
글번호 122889