커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4502
글번호 230811
답변완료
질문입니다.
틱 복합장 차트에서 현재시각으로부터 전거래일의 시각까지 봉의 갯수를 구하는 지표를
아래와 같이 작성해 주셨습니다.
var : S1(0),S2(0),TM(0),T(0);
var : idx(0),idx1(0);
var : cnt(0),count(0);
if Bdate != Bdate[1] Then{
S1 = TimeToMinutes(stime);
S2 = stime;
idx = 0;
idx1 = idx[1];
}
if S1 > 0 Then{
idx = idx+1;
if Stime >= S2 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
}
if idx1 > 0 then{
count = 0;
for cnt = idx to idx+idx1{
if bdate[cnt] < bdate and TM[cnt] <= TM Then{
count = cnt;
cnt = idx+idx1+10;
}
}
plot1(count);
}
제가 이해가 잘 되지 않아서 그러는데,
각 줄에 주석으로 설명을 부탁드리겠습니다.
그리고 한가지 더 질문할 것이,
전거래일까지의 봉의 갯수가 아니라 현재시각으로부터 x일전의 시각까지 봉의 갯수를 구하는 수식도 예시로 부탁드리겠습니다.
감사합니다.
2016-10-25
99
글번호 103314
답변완료
수정요
50200
종목검색이으로 좀 부탁 드립니다
그리고 하나더 부탁 드립니다
9시시가에만 점 이탈만 종목 검색으로 좀 부탁 드립니다
고맙습니다.
2016-10-25
91
글번호 103313
답변완료
수식복사해서 붙여넣게했는데요
수식복사해서 붙여넣기 했는데요 물음표가 엄청많이 나오는데 이거 어뜨게해야하나여
2016-10-25
98
글번호 103312
답변완료
부탁 드립니다
도움주심에 감사 드립니다.
아래 출력되는(유로화) 값의 옆에 (예를 들어 숫자 옆에) "고저차이" 이라고 넣고 싶습니다.
미리 감사 드립니다.
VAR:TX11(0);
Text_Delete(tx11);
Tx11 = Text_New(sdate[1],stime[1],dayhigh,NumToStr((DAyhigh-daylow)*10000,0));
2016-10-25
97
글번호 103304
답변완료
아래 수식을 수정작업좀 부탁드립니다.
안녕하세요 예스스탁님
50203번방에서 재수정 내용입니다.
위의 첨부파일 그림에서 보는바와 같이 아래 시스템 수식에서
검은선을 돌파/이탈시 진입이 안되구요
현재는 스위칭 기능 위주로 수식이 작성되어 있는데
이평선 돌파/이탈후에는 스위칭 기능을 없애고 매수/매도 독립신호로
진입과 청산 기능이 동작하도록 되어야 합니다.
현재 아래 수식에서는 "시스템성능보고서"에서 보는바와 같이 청산만되고
진입은 되지않아야 되는데 같은가격에 같이 진입되는 것으로 나옵니다.
결론을 서술하면 아래 수식을 이용하여 수정작업좀 부탁드립니다.
1. 주가가 검은선(27일선) 돌파/이탈시에는 스위칭 기능 수식을 사용해 주시고
2. 주가가 검은선(27일선) 돌파후에는 매수신호만 진입하고 매도신호출현일때는 청산만
주가가 검은선(27일선) 이탈후에는 매도신호만 진입하고 매수신호출현일때는 청산만
되독록 하는 아래 수식을 수정작업좀 부탁드립니다.
input : P(14),BBP(20),dv(2),MAP(60),X(15),short(12),long(26),sig(9),Period(27);
var : ADXV(0),DP(0),DM(0),T(0),BBup(0),BBdn(0),mav(0);
var : MACDV(0),MACDS(0),mav1(0);
ADXV = ADX(P);
DP = Diplus(P);
DM = DiMinus(P);
BBup = BollBandUp(BBP,dv);
BBdn = BollBandDown(BBP,dv);
mav = ma(C,MAP);
MACDV = MACD(short,long);
MACDS = ema(MACDV,sig);
mav1 = ma(C,Period);
if crossup(ADXV,20) and ADXV >= X Then{
if DP > DM and dp < 25 Then{
if MarketPosition == -1 and IsEntryName("bs") == true then
ExitShort();
Else
buy("매수진입1");
}
if DP < DM and dm < 25 Then{
if MarketPosition == 1 and IsEntryName("sb") == true then
ExitLong();
Else
sell("매도진입1");
}
}
if MarketPosition == 1 and IsEntryName("매수진입1") == true Then{
if CrossDown(DP,DM) Then
ExitLong();
}
if MarketPosition == -1 and IsEntryName("매도진입1") == true Then{
if CrossUp(DP,DM) Then
ExitShort();
}
if crossup(ADXV,10) and ADXV >= X Then{
if DP > DM Then{
if MarketPosition == -1 and IsEntryName("bs") == true then
ExitShort();
Else
buy("매수진입4");
}
if DP < DM Then{
if MarketPosition == 1 and IsEntryName("sb") == true then
ExitLong();
Else
sell("매도진입4");
}
}
if MarketPosition == 1 and IsEntryName("매수진입4") == true Then{
if CrossDown(DP,DM) Then
ExitLong();
}
if MarketPosition == -1 and IsEntryName("매도진입4") == true Then{
if CrossUp(DP,DM) Then
ExitShort();
}
if ADXV >= X Then{
if crossup(MACDV,MACDS) Then{
if MarketPosition == -1 and IsEntryName("bs") == true then
ExitShort();
Else
buy("매수진입5");
}
if CrossDown(MACDV,MACDS) Then{
if MarketPosition == 1 and IsEntryName("sb") == true then
ExitLong();
Else
sell("매도진입5");
}
}
if MarketPosition == -1 and crossup(c,mav1) Then{
if MarketPosition == -1 and IsEntryName("bs") == true then
ExitShort();
Else
buy("sb");
}
if MarketPosition == 1 and CrossDown(c,mav1) Then{
if MarketPosition == 1 and IsEntryName("sb") == true then
ExitLong();
Else
sell("bs");
}
2016-10-25
138
글번호 103303
답변완료
국선 이요~
다름이 아니라 국선은 시가 대비 0.3포씩 위로 4줄 아래로 4줄 이렇게 할수 있을까요~
그리고 오일은 시가 대비 50틱씩 위로 4줄 아래로 4줄 이렇게요~
그리고 항생은 시가 대비 100틱씩 위로 4줄 아래로 4줄 이렇게 구현 할수가 있을까요~~
부탁 드립니다... 그럼 수고 하십시요~~
2016-10-25
109
글번호 103302
임가에미소 님에 의해서 삭제되었습니다.
2016-10-25
8
글번호 103301
답변완료
수식 문의드립니다.
진입 청산 수식에 대해서 문의 드립니다.
매수 진입시에는
1. Stok가 Stod를 crossup 할때 최초 1회 매수 진입
2. 1번 진입 후에... 추가로 Macd가 기준선을 crossup 할때 추가 1회 매수 진입
매수 청산시에는
1. 1번만 진입했을때 Stok가 Stod를 crossdown할때 청산 완료
2. 진입시 위의 1, 2 모두 진입되어 있을때, 진입 물량 2개 모두 동시 청산
그리고 위에 해당하는 매도 진입, 매도 청산에 대해서도 수식 문의 드립니다.
감사합니다.
2016-10-25
89
글번호 103300
답변완료
부탁해요
RED확정으면 매도신호,
BLUE확정이면 매수신호
부탁드립니다
Input:length(12);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),TL3(0),Text1(0),처리구분(""),
TL_Val1(0),TL_Val2(0);
Array:고점[10,2](0),저점[10,2](0);
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then 처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 고점[3,1][1] < 고점[2,1][1] and 고점[2,1][1] > 고점[1,1][1] and 저점[2,1][1] < 저점[1,1][1] Then
TL_Delete(TL2);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL_SetSize(TL1,3);
TL_SetColor(TL1,red);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then
{
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
TL2 = TL_New(sDate[sBar],sTime[sBar],저점[2,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL_SetColor(TL2,BLUE);
}
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] Then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 저점[2,1][1] < 저점[1,1][1] and 저점[2,1][1] < 저점[3,1][1] and 고점[2,1][1] > 고점[1,1][1] Then
TL_Delete(TL3);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL_SetSize(TL1,3);
TL_SetColor(TL1,blue);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
TL3 = TL_New(sDate[sBar],sTime[sBar],고점[2,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL_SetColor(TL3,RED);
}
}
}
TL_SetSize(TL2,2);
TL_SetSize(TL3,2);
2016-10-24
94
글번호 103299