커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1819
글번호 230811
아트정 님에 의해서 삭제되었습니다.
2022-03-09
38
글번호 157045
초보트레이더 님에 의해서 삭제되었습니다.
2022-03-09
1
글번호 157043
답변완료
문의드립니다!
안녕하세요!
아래수식의 "타주기분(30)"으로 설정되어있는 부분과 관련해서...
이 30을 다른 수치로도 바꾸어서 한수식에서 동시에 여러개의 선이 표현되도록 추가하고싶습니다
예를들어 현재 설정된 30과 함께 40, 50, 60 등의 조건을 추가하여 <*한개의 수식>에서 각각의 조건에 맞는 선이
모두 나타나도록하고싶습니다
현재수식을 각각 다르게 설정하여 따로따로 적용하려니 너무많은 지표가 필요하게되네요
(* 제가 사용하는 챠트가 좀 많은편이라서 더욱더 그런거같습니다)
* 위 예시대로 4개(30,40,50,60)의 조건을 적용할수있도록만 작성 부탁드립니다
매번 친절히 도와주심에 진심으로 감사드립니다!!!
-----------------------------------------------------------------------------------
input : 타주기분(30),n(10),nth(5);
var : S1(0),D1(0),TM(0),TF(0),cnt(0),OO(0),HH(0),LL(0),CC(0);
var : ii(0),i1(0),i2(0),tempmax(0),tempi(0);
Array : RR[200](0),MM[200](0),DI[50](0);
Array : tempRR[200](0),tempMM[200](0),NTHVALUE[200](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 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
ii = ii+1;
if Bdate != Bdate[1] Then
{
DI[0] = ii;
for cnt = 1 to 49
{
Di[cnt] = Di[cnt-1][1];
}
}
OO = O;
HH = H;
LL = L;
RR[0] = 0;
MM[0] = 0;
for cnt = 1 to 199
{
RR[cnt] = RR[cnt-1][1];
MM[cnt] = MM[cnt-1][1];
tempRR[cnt] = RR[cnt];
tempMM[cnt] = MM[cnt];
}
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
CC = C;
RR[0] = abs(OO-CC);
MM[0] = (OO+CC)/2;
tempRR[0] = RR[0];
tempMM[0] = MM[0];
if D1[n] > 0 Then
{
if Bdate != Bdate[1] Then
{
For i1 = 1 to nth
{
tempmax = -1;
For i2 = 1 to ii-DI[n]
{
if (tempRR[i2] >= tempmax ) then
{
tempmax = tempRR[i2];
tempi = i2;
}
}
NTHVALUE[i1] = tempMM[tempi];
tempRR[tempi] = -1;
}
}
Plot1(NTHVALUE[1]);
Plot2(NTHVALUE[2]);
Plot3(NTHVALUE[3]);
Plot4(NTHVALUE[4]);
Plot5(NTHVALUE[5]);
}
}
2022-03-09
853
글번호 157042
답변완료
함수만드는거 하다 안되는부분 질문이요
range는 왜 ( 를 입력하면 ()가 저절로 생기나요? Volume 이나 Close같은것들은 그렇지 않은데,
2. data2를 참고해서 나오는 신호 말인데요, 모든 신호는 봉 완성 기준이기 때문에 메인차트를 시간단위가 작은 것으로 쓰라는 것인가요?
메인차트를 1시간봉이고 data2가 5분 봉이어도 1시간봉이 형성되는 중간에 data2로 인해 매수신호가 발생해도 메인차트에서는 받아들이지 않는다는거죠 ?
2022-03-09
1034
글번호 157041
답변완료
시스템식 문의 드립니다.
주식현물 시스템식 작성중에 궁금한게 있어 글을 남깁니다.
1. if Bdate != Bdate[1] Then
Condition1 = False;
위 식에서는 날짜가 하루 지나가게 되면 condition1 = false 로 바뀌게 되는걸로
알고 있는데
if NextBarSdate == sDate and (MarketPosition == 0 or
(MarketPosition == 1 and sDate == EntryDate)) Then
매수전에 사용되었던 조건식인데 해석이 잘 안됩니다. ㅜ.ㅜ 해석좀 부탁드립니다.
메뉴얼에는 nextbarsdate가 다음봉시작날짜라고 써 있는데
진입날짜 (ex)3/6일) 가 sdate에 저장되고 1분봉차트에서 다음봉이 나올때마다
sdate(3/6)일 날짜와 비교해서 맞으면 조건이 성립되는게 맞는건가요??
그럼 sdate와 bdate의 차이점이 몬지도 궁금합니다..
메뉴얼보니 sdate는 봉의 시작날짜이고 bdate는 영업일이라고 나오는데?
2. 3시에 매수해서 그 다음날 일봉상 3일선을 터치하면 추매하는 전략을 사용하려고
아래와 같은 시스템식을 작성하였는데 다음날 매수가 안됩니다.ㅜ.ㅜ
확인좀 부탁드리겠습니다.
왜 안되는걸까요??
매수포지션을 들고 있으면서 진입날짜로 부터 하루가 지나고, 3일선 아래로 돌파했을
때 매수해라 .. 제대로 작성한것 같은데..ㅜ.ㅜ
3. '손절' 같은 latestexitname 으로 가장 마지막 청산명으로 다시 매수가 안되게 진행하려고 하는데
시뮬레이션을 돌려보면 '손절' 이후에도 계속 매수 되도록 되어있네요
어떤부분이 안되는지 확인이 안되네요...
4. 3%, 4% 매수 청산하는 부분에서 최근진입명이 아래와같은 진입명인 경우를 빼고(제외하고) 나머지를 생각하면서 만든식인데
적용이 안되는것 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
추매했을경우 (0.3%, 1%) 해당 진입명은 아래와 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
결론적으로 추매했을경우에는 0.3, 1% 매수청산이고 추매하지 않았을경우에는 3,4% 매수청산인데
적용이 안되는것 같습니다. 도와주세요..ㅜ.ㅜ
5. 기초적인거 많이 물어봐서 죄송합니다. 그리고 항상 감사합니다.
------------------------------------------------------------------------------
input :금액1(500000),상한가(36500),손절금액(300000),N(3);
input : 익절(3),익절2(1);
var : cnt(0),sum(0),mav(0),DD(0);
var : day(0),entry(False),AP(0),TT(0);
var : LL(0),RR(0),rate(0);
sum = 0;
For cnt = 0 to N-1
{
sum = sum + DayClose(cnt);
}
mav = (sum/N)*1;
if Bdate != Bdate[1] Then
Condition1 = False;
entry = True;
if sTime > 120000 and C[0] >= DayClose(1)*1.265 Then
Condition1 = true;
if LatestExitName(0) == "손절" or (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
entry = False;
#여기서 부터 매수하기.
if NextBarSdate == sDate and entry == true and (MarketPosition == 0 or (MarketPosition == 1 and sDate == EntryDate)) Then
{
if condition1 == true OR LatestExitName(1) == "4%익절" Then
Buy("상한가매수",AtStop,상한가,Floor(금액1/min(NextBarOpen,상한가)));
if condition1 == true and IsEntryName("상한가매수") == true Then
Buy("BS1(상풀)",AtLimit,상한가*0.955,Floor(금액1/min(NextBarOpen,상한가*0.955)));
if condition1 == true Then
Buy("BS1",AtLimit,Dayclose(1)*1.235,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.235)));
if condition1 == true and IsEntryName("BS1") == true and sdate >= EntryDate+1 and day <=1 Then
Buy("S1",AtLimit,Dayclose(1)*1.19,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.19)));
if condition1 == true and IsEntryName("BS1") == true and sTime == 150800 Then
Buy("3시10분매수(1-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151300 Then
Buy("3시15분매수(1-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151700 Then
Buy("3시19분매수(1-3)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and MarketPosition == 0 and sTime == 150800 Then
Buy("3시10분매수(2-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151300 Then
Buy("3시15분매수(2-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151700 Then
Buy("3시19분매수(2-3)",AtMarket,floor(금액1/nextbaropen));
if MarketPosition == 1 and day >=2 and DayOpen*1.04>=DayHigh Then
Buy("S1(NEXT)",AtLimit,DayHigh*0.92,Floor(금액1/min(NextBarOpen,DayHigh*0.92)));
}
if MarketPosition == 1 and sdate >= EntryDate+1 and L > mav Then
Buy("담날추매",AtLimit,mav,Floor(금액1/min(NextBarOpen,mav)));
#여기서 부터 매도하기.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
{
if LL == 0 then
LL = L;
Else
{
if L < LL then
LL = L;
}
RR = (LL-AVGEntryPrice)/AVGEntryPrice*100;
if RR >= -0.9 Then
Rate = 익절;
if RR >= -2.9 and RR < -0.9 Then
Rate = (익절+RR);
if RR < -2.9 Then
Rate = 0.3;
ExitLong("3%익절",AtLimit,AVGEntryPrice*(1+Rate/100),"",Floor(MaxContracts*0.5));
ExitLong("4%익절",AtLimit,AVGEntryPrice*(1.01+Rate/100));
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 3%, 4% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
{
ExitLong("0.3%익절",AtLimit,AVGEntryPrice*1.003,"",Floor(MaxContracts*0.5));
ExitLong("1%익절",AtLimit,AVGEntryPrice*1.1);
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 0.3%, 1% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
if sdate >= EntryDate+1 and sTime == 100000 Then
{
ExitLong("다음날 10시청산");
}
#----------------------------------------------------------------------------
# 다음날 10시 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
ExitLong("손절",AtStop,AvgEntryPrice-손절금액/CurrentContracts);
#----------------------------------------------------------------------------
# 손절
------------------------------------------------------------------------------
2022-03-09
1202
글번호 157040
답변완료
시스템 작성 부탁드립니다.
항상 수고가 많으십니다.
저는 스토캐스틱 모먼트 인텍스 중 period 1 과 period 2 의 숫자를 변경하여 plotno1만
체크하여 한선만 사용합니다.매수와 청산 / 매도와 청산 2가지로 만들어 주시면 감사하겠습
니다.
첫번째 식
매도 조건 : plotno1이 80선에 닿을 때 매도신호
청산 조건 : plotno1이 -80선에 닿을 때 청산
두번째식
매수 조건 : plotno1이 -80선에 닿을 때 매수신호
청산 조건 : plotno1이 80선에 닿을 때 청산
코로나로 힘드신 시기에 몸잘챙기시구요. 항상 감사합니다.
2022-03-09
1195
글번호 157039
답변완료
수식 문의 드립니다
안녕하세요
작성해주신 수식은 감사히 잘 사용하고있습니다
다름이 아니라 거래대금 전일비교 말고 그냥 거래대금을 색을 통일할수는 없을까요?
일반 거래대금은 검정색으로 부탁드리고
500억이상은 그대로 주황색
1000억이상은 형광색 (bright green)
으로 부탁드립니다~
번거롭게 해드려 죄송합니다
-------------------
var : color(0);
If m > m[1] Then
{
color = RED;
if m > 50000000000 Then
color = RGB(255,165,0);
if m > 100000000000 Then
color = CYAN;
Plot1(m, "거래대금",Color);
}
Else
{
color = BLUE;
if m > 50000000000 Then
color = RGB(255,165,0);
if m > 100000000000 Then
color = CYAN;
Plot1(m, "거래대금",blue);
}
PlotBaseLine1(30000000000,"기준1");
PlotBaseLine2(50000000000,"기준2");
PlotBaseLine3(100000000000,"기준3");
2022-03-08
947
글번호 157033
답변완료
수식 문의 드립니다.
스토캐스틱. 80 선을 두번째 아래로 내려갈때 매도. ( 첫번째는 매도 안함 )
소토캐스틱. 20 선을 두번째 위로 올라갈때 매수
익절 1% 손절 2% ( 둘다 안걸리면 3시 정각에 정리 )
하루에 매수던 매도던 한번만 거래.
감사합니다.
2022-03-08
886
글번호 157032
답변완료
문의 드립니다.
아래 이동평균선을 당일 새로 시작하게 만들 수 있나요?
날마다 새로 시작하는 이동평균선요.
답변 감사합니다.
Input : Period1(5), Period2(20), Period3(60);
var : Sma1(0),Sma2(0),Sma3(0);
Sma1 = ma(C,Period1);
Sma2 = ma(C,Period2);
Sma3 = ma(C,Period3);
Plot1(Sma1, "이동평균1");
Plot2(Sma2, "이동평균2");
Plot3(Sma3, "이동평균3");
2022-03-08
930
글번호 157031