커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4416
글번호 230811
답변완료
수정부탁드립니다.
안녕하세요?
아래의 수식에서 진입조건중, 연속 음봉2개 매도, 연속양봉 2개 매수를 하라고 되어있습니다.
여기에서 연속봉 사이에 도지가 나와도 연속봉으로 인식을 하도록 수정부탁드립니다.
(봉과 봉사이에 도지가 몇개가 나오든간에 연속봉으로 인식요망)
감사합니다.
**진입조건
1.몸통 길이가 같은 연속 음봉 2개 매도
2.몸통 길이가 같은 연속 양봉 2개 매수
#몸통길이 : 외부변수
**청산조건
1.손/익절 : 외부변수
#진입후 청산 이후 재진입 반복. (익절이든 손절이든 하기전에 신규진입 금지)
input : 몸통길이틱수(10),익절틱수(10),손절틱수(10);
var : T(0);
var1 = abs(C-O);
if MarketPosition == 0 and countif(C<O,2) == 2 and
var1 == var1[1] and var1 == PriceScale*몸통길이틱수 then
{
sell("s");
}
if MarketPosition == 0 and countif(C>O,2) == 2 and
var1 == var1[1] and var1 == PriceScale*몸통길이틱수 then
{
Buy("b");
}
SetStopProfittarget(익절틱수*PriceScale,PointStop);
SetStopLoss(손절틱수*PriceScale,PointStop);
2018-07-17
214
글번호 120654
답변완료
수정 및 추가질문 부탁드립니다.
input : 금액(10000000);
if stime == 140000 Then
buy("b1",OnClose,def,Floor(금액/C));
if stime == 141000 Then
buy("b2",OnClose,def,Floor(금액/C));
if stime == 142000 Then
buy("b3",OnClose,def,Floor(금액/C));
if MarketPosition == 1 and sdate > EntryDate then
{if entryprice <= L Then ExitLong("bx", onclose,def,"");
else if stime>=100000 Then ExitLong("bx_tx", OnClose, def, "");
}
이렇게 수식을 만들었습니다.
1. 2시와 2시10분 2시 20분에 봉이 나오지 않는다면(거래량이 없다면) 매수가 일어나지 않습니다. 보완할 방법을 알려주세요.
2. 매도식에서 매수가 매도로 8시50분에 주문을 넣고 싶습니다. 즉. 9시에 시가가 매수가보다 높으면 팔리는 것이고, 낮으면 매수가까지 기다리는 것입니다. 봉이 완성되기 전에 주문이 나갈수 있을까요?
3. 10시 타임컷을 하고 싶은데 2번의 매도 주문과 안 겹치게 할수 있나요?
4. 위에 1,2,3번을 적용하여 시뮬레이션을 돌리고 싶습니다. 시뮬레이션시 일정한 가격을 계속하는것이 아니고 복리로. 즉 계좌에 있는 돈을 전부 활용하여 할수 있을가요?
5. 현재 예스트레이를 통하여 20개의 종목(미리 정해진)에 시스템을 적용시켜 돌려보려고 하는데 예스스팟으로 하면 위에 문제점들이 해결될꺼 같은데 예스스팟 코드도 작성 부탁드립니다.
2018-07-17
215
글번호 120653
답변완료
line
안녕하세요.
귀사의 도움덕분에 항상 감사를 드립니다.
그림파일과 같이 검색식 부탁 드립니다.
녹색선굵기 조정이 가능 하도록 부탁드립니다
수고하십시요 ^_^
2018-07-17
290
글번호 120652
답변완료
문의드립니다.
무더위에 고생 많으십니다.
다름이 아니오라 아래와 같은 지표수식 부탁드립니다.
1. 1분봉차트에서 5분봉차트의 스토캐스틱 지표를 사용하려하는데
수식 부탁드립니다.
2. 300틱차트에서 900틱차트의 스토캐스틱 지표를 사용하려하는데
수식 부탁드립니다.
초복 잘 보내세요...
2018-07-17
228
글번호 120651
답변완료
종목 검색식에서 일봉 분봉을 동시에 사용하려면요
종목 검색을 할때 분봉 일봉 두가지 다 필요하면 검색식을 일봉별, 분봉별로 따로 작성해야 하나요?
제가 일봉 검색식을 사
용하는데 1분봉 조건도 필요해서 파일을 따로 작성했습니다. 그런데 검색 결과가 이상하게
나와서 질문드립니다. 일봉 검색식은 잘 되는데요. 분봉에서 예를 들어
최근 봉이 양봉을 원하면
Condition1 = O < C;
If Condition1 Then
Find(1);
이렇게 하고 예스트레이더 '파워종목검색' 창에서 검색에 필요한 최소기간 10봉,
분체크, 1분봉 선택하고 설정에서는 보통주, 제외항목에 모두 체크하고 검색을 하면
검색 종목이 4개가 나옵니다ㅡㅡ; 장 종료 후 검색한 결과입니다. 금일 마지막 1분봉이
양봉으로 장 마감한 종목은 다 불러와야 맞는거 아닌가요?
위 조건 1분봉에서 양봉조건으로만 검색했는데 결과가 4개가 나오는건 잘못된것 같아서요. 훨씬 더 나와야
할것 같은데 이렇게 나와서 제가 설정을 잘못한건가 해서 질문드립니다.
우선 위 검색 조건을 제가 설정을 잘못한건지, 그리고 검색목록이 4개정도가 나오는게
맞는건지, 그리고 일봉, 분봉을 다 필요로 할때 두개의 종목검색 파일을 따로 작성하여
파워 종목검색에서 A and B조합으로 검색하면 되는건지 궁금합니다.
그리고 한가지 더 질문드리면요.
RCI(Rank Correlation Index) 지표가 기본 내장으로 작성되어있는것 같은데
전 RCI가 없어요. 제가 따로 지운건 없는데 원래 내장함수로 등록되어있지 않는건지요?
만약 있다면 식좀 부탁드립니다
2018-07-16
239
글번호 120650
답변완료
오늘의 주가표시6
안녕하세요 관리자님 날씨가 무지 덮습니다.
이번주가 아닌 前주의 시가, 최고가, 최저가에서 오늘의 주가가 각각 표현되도록 하는 이격도를 구현하고 싶습니다. 부탁드립니다.
2018-07-16
217
글번호 120649
답변완료
피보나치 지표 부탁드립니다.
1. 일봉챠트 상에 120봉 기준으로 최고가와 최저가를 잊는 피보나치 조정대를
연속되는 선으로 봉챠트 위에 보이게 할수 있을까요??
2. 분봉챠트 상에서 하루 이내에 피보나치 조정대를
연속되는 산으로 봉챠트 위에 보이게 할수 있을까요??
2018-07-16
285
글번호 120648
답변완료
에러 수정 요망
1.어느날 우연히 통화 중에 김**차장님이 알려준 시스템 성능보고서를 보는 법과 print하는 법을 배워서 고맙게 활용하다 일년전에 물어봤던 수식지왕님의 시스템을 활용하고자 합니다
2. 질문(1번,2번) 내용은 해당 위치에 써 놓았음(//를 지워서 검증이 에러가 나도록 했음)
3. 전략챠트에 어떤 시스템을 띄워놓으면 신호가 해당되면 알려주던데 오늘 화면분할을 실행시켜 25개 띄워놓고 전체를 누르고 적응시켜봤는데 어떤 신호도 안나오던데 혹시 한종목만 나오는 것인지요?
4.마지막으로 검색 종목을 엑셀로 보내지던데 역으로 엑셀의 종목을 관심종목으로 가져오는 방법이 있는지요??
#==========================================#
# 시스템명 : 고저라인_자동추세선_ver_15
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#==========================================#
Input:length(10),추세선연장(5),추세판단범위(10),진입횟수제한(1),시작(20170601),종료(20180716),
#ssssssssssssssssssssssssssssssssss
파동선두께(7),추세선두께(0),파동선색(red),수치표시(1);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Var:j(0),jj(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),진입횟수(0),
TL1(0),TL2(0),TL3(0),Text1(0),
고추세최종(0),저추세최종(0),고ID(0),저ID(0);
Array:고[100,4](0),저[100,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
if sDate == 시작 or (sDate > 시작 and sDate[1] <시작) Then{
질문1) 50일 정도만 검색하려는데 맞는지??
#ssssssssssssssssssssssssssssssssss
If Index == 0 Then
{
고[1,1] = C;
저[1,1] = C;
}
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Condition1 = Highest(C,length) == C and 최종고가 <> C;
Condition2 = Lowest (C,length) == C and 최종저가 <> C;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리
Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = C; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
진입횟수 = 0;
For j = 100 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = C;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 4 Then
{
Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2));
Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,파동선색);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
Else If 고[1,1] < C Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = C;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 4 Then
{
Text_SetLocation(Text1,sDate,sTime,고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
/* 고점추세선 */
If 고[2,2][1] <> 고[2,2] Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
{
고추세최종 = 0;
For j = 3 To 추세판단범위
{
If 고[2,1] < 고[j,1] Then
{
고추세최종 = (고[2,1] - 고[j,1])/(고[2,2] - 고[j,2]) * (Index - 고[j,2]) + 고[j,1];
TL2 = TL_New(고[j,3],고[j,4],고[j,1],sDate,sTime,고추세최종);
고ID = j;
#ssssssssssssssssssssssssssssssssss
TL_SetSize(TL2,추세선두께);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
TL_SetColor(TL2,RED);
j = 100;
}
}
}
Else If 고추세최종[1] > 0 Then
{
고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1];
TL_SetEnd(TL2,sDate,sTime,고추세최종);
}
If 저추세최종[1] > 0 Then
{
저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1];
TL_SetEnd(TL3,sDate,sTime,저추세최종);
}
최종꼭지점 = "고점";
If 진입횟수 < 진입횟수제한 and
고추세최종 > 0 and 고추세최종 < C and c>3000 and v>100000 Then
{ Text1 = Text_New(sDate,sTime,고[1,3],NumToStr(고[1,4],2));
Text_SetStyle(text1,2,2);#중앙에 위치(기본은 봉의 좌측에 표시됩니다);
Buy("매수");
}
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = C;
If 최종꼭지점 == "고점" then
{
진입횟수 = 0;
For j = 100 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = C;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 4 Then
{
Text1 = Text_New(sDate,sTime,저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 0);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,파동선색);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
Else If 저[1,1] > C then
{
저[1,1] = C;
저[1,3] = sDate;
저[1,4] = sTime;
저[1,2] = Index;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
#ssssssssssssssssssssssssssssssssss
If 수치표시 == 4 Then
{
Text_SetLocation(Text1,sDate,sTime,저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
}
/* 저점추세선 */
If 저[2,2][1] <> 저[2,2] Then
{
저추세최종 = 0;
For j = 3 To 추세판단범위
{
If 저[2,1] > 저[j,1] and 저[j,1] > 0 Then
{
저추세최종 = (저[2,1] - 저[j,1])/(저[2,2] - 저[j,2]) * (Index - 저[j,2]) + 저[j,1];
TL3 = TL_New(저[j,3],저[j,4],저[j,1],sDate,sTime,저추세최종);
저ID = j;
#ssssssssssssssssssssssssssssssssss
TL_SetSize(TL3,추세선두께);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
TL_SetColor(TL3,green);
j = 100;
}
}
}
Else If 저추세최종[1] > 0 Then
{
저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1];
TL_SetEnd(TL3,sDate,sTime,저추세최종);
}
If 고추세최종[1] > 0 Then
{
고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1];
TL_SetEnd(TL2,sDate,sTime,고추세최종);
}
최종꼭지점 = "저점";
If 진입횟수 < 진입횟수제한 and
저추세최종 > 0 and 저추세최종 > C Then
{
Sell("매도");
}
}
#==========================================#
If 처리구분 == "" Then
{
If Index - 고[2,2] <= 추세선연장 Then
{
If 고추세최종[1] > 0 Then
{
고추세최종 = (고[2,1] - 고[고ID,1])/(고[2,2] - 고[고ID,2]) * (Index - 고[고ID,2]) + 고[고ID,1];
TL_SetEnd(TL2,sDate,sTime,고추세최종);
}
}
Else
{
고추세최종 = 0;
}
If Index - 저[2,2] <= 추세선연장 Then
{
If 저추세최종[1] > 0 Then
{
저추세최종 = (저[2,1] - 저[저ID,1])/(저[2,2] - 저[저ID,2]) * (Index - 저[저ID,2]) + 저[저ID,1];
TL_SetEnd(TL3,sDate,sTime,저추세최종);
}
}
Else
{
저추세최종 = 0;
}
If MarketPosition > 0 and TL2[1] == TL2 and
고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then
ExitLong("매수유지");
If MarketPosition < 0 and TL3[1] == TL3 and
저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then
ExitShort("매도필수");
}
If ((최종꼭지점 == "고점" and MarketPosition == 1) or
(최종꼭지점 == "저점" and MarketPosition == -1)) and
MarketPosition[1] != MarketPosition Then
{
진입횟수 = 진입횟수 + 1;
}
if TotalTrades > TotalTrades[1] Then
{
Print("0716.CSV",",%s,포지션,%.f,진입명,%.s,진입일,%.f,진입시간,%.f,진입가격,%.2f,청산명,%.s,청산일,%.f,청산시간,%.f,청산가격,%.2f,손익,%.2f",
SymbolName,MarketPosition(1),LatestEntryName(1),EntryDate(1),EntryTime(1),EntryPrice(1),LatestExitName(1),ExitDate(1),ExitTime(1),ExitPrice(1),PositionProfit(1));
}
질문2)
1.진입명과 청산명을 print해보고 싶고(제가 해보니까 공란으로나오네요)
2. 시스템 성능 보고서는 진입후 청산이 되기전에는 "평가"라고 나오는데
역시 출력될 때 보고서 처럼 청산 종류에 평가라고 나왔으면 합니다.
제가 엑셀을 보면 진입과 청산된 것 만 나오고 진입해서 진행중인 종목의 결과는 안나오네요.
2018-07-16
277
글번호 120647
답변완료
please check attaschment
please check attaschment.
always thank you.
2018-07-17
215
글번호 120646