커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7797
글번호 230811
답변완료
수식 가능할까요?
안녕하세요?
전에 시스템으로 여쭌적이 있는데요,
지표식으로 질문드려야 할 것 같네요..
예를들어 아래의 스토식에서
Input : Period(12), Period1(5), Period2(5);
Plot1(StochasticsK(Period,Period1), "StochasticsK");
Plot2(StochasticsD(Period,Period1,Period2), "StochasticsD");
PlotBaseLine1(20, "기준선1");
PlotBaseLine2(80, "기준선2");
이 식에서 스토값은 매일 연속되어 표시되잖아요
제가 궁금한 것은
이 스토값을 매일 종가에 또는 다음날 시가에 0 에서 다시 시작할 수 있도록
하고 싶다는 겁니다..
예를들어 시스템식에서 setstopendofday하면 종가에 포지션이 청산 되듯이
위 식에서 스토값을 종가나 다음날에 0 에서부터 다시 시작할 수 있는 방법
을 부탁 드립니다..
감사합니다^^
2008-07-09
696
글번호 16079
답변완료
지표식 문의
안녕하세요!
아래 수식 작성법 문의 드립니다.
반복계산하면서 A조건이 맞을때, B조건을 실행하는 수식을 만들려고 하는데
For 나 While 문구로 작성하여 주시기 바랍니다.
예를 들어,
count는 1부터 50까지 범위를 정하되, 아래 A조건이 맞을때만 B조건을 실행하도록
하고, A조건이 맞지 않을때는 더이상 count숫자를 1씩 올려가면서 B조건을 계산할
필요가 없도록 하는 수식을 작성요청드립니다. X는 Numeric 변수입니다.
A조건 : ( dayOpen() + X * count ) < dayHigh()
감사합니다.
2008-07-09
712
글번호 16078
답변완료
선물 일봉챠트에서 주봉의 이평선 나타내기
선물 일봉챠트에서 주봉의 이평선 나타내는 수식은 어떻게 해야하는지
도움을 부탁드립니다.
선물연결챠트 일봉을 열고 주봉챠트를 참조종목으로 열어서 할려고 했더니
설정이 안되게 되어있더군요(주식종목은 이렇게 해서 참조종목해서 구할수 있는것
같은데...)
2008-07-08
788
글번호 16077
묵향123 님에 의해서 삭제되었습니다.
2008-07-08
135
글번호 16076
답변완료
문의
1.아래 첨부식이 분할손절과 분할청산후 재진입 될수 있도록 수정 부탁 드립니다.
==
input : Period(1);
var : count(0);
var1 = 1300000+GrossProfit;
var2 = int((var1/(Close*100000)));
Count = 0 ;
for Value1 = 0 to 10 {
if EntryDate( Value1 ) == sdate then
Count = Count + 1;
}
#1. 진입
If count < 1 Then {
If stime >= 091000 And stime < 140000 and sdate==CURRENTDATE Then {
if Data2(crossdown(ma(c,5),ma(c,20))) Then {
Buy("a1",Atmarket,def,var2);
}}}
#2.재진입
If count < 2 Then {
If stime >= 091000 And stime < 140000 and sdate==CURRENTDATE and (IsExitName("b4",1) or IsExitName("b5",1) or IsExitName("c",1) or IsExitName("c",4)) Then {
if Data2(crossdown(ma(c,5),ma(c,20))) then {
Buy("a2",Atmarket,def,var2);
}}}
#4.청산
if MarketPosition() == 1 Then{
if MarketPosition()[1] != 1 then{
var11 = CurrentContracts(); //진입수량
var12 = Round(CurrentContracts*0.3,0); //진입수량의 30%
var13 = var11-var12*2;//진입수량의 40%
}
if CurrentContracts() == var11 Then
exitlong("b1",Atlimit,EntryPrice*1.2,"",var12,1);
if CurrentContracts() == var11-var12 Then
exitlong("b2",Atlimit,EntryPrice*1.45,"",var12,1);
if CurrentContracts() == var13 Then
exitlong("b3",Atlimit,EntryPrice*1.9,"",var13,1);
}
if MarketPosition() != 0 Then{
if highest(H,BarsSinceEntry()) >= EntryPrice()*1.2 then {
ExitLong("b4",Atstop,entryprice+0.05);
}}
if MarketPosition() != 0 Then{
if highest(H,BarsSinceEntry()) >= EntryPrice()*1.2 and highest(H,BarsSinceEntry()) < EntryPrice()*1.45 then {
ExitLong("b5",Atstop,entryprice);
}}
#5.손절
if MarketPosition() == 1 Then{
if MarketPosition()[1] != 1 then{
var21 = CurrentContracts(); //진입수량
var22 = Round(CurrentContracts*0.3,0); //진입수량의 30%
var23 = var21-var22*2;//잔여수량 40%
}
if CurrentContracts() == var21 And highest(H,BarsSinceEntry())>=entryprice*1.1 And highest(H,BarsSinceEntry())<entryprice*1.2 Then
exitlong("c1",Atstop,highest(H,BarsSinceEntry())*0.95,"",var22,1);
if CurrentContracts() == var21-var22 And highest(H,BarsSinceEntry())>=entryprice*1.1 And highest(H,BarsSinceEntry())<entryprice*1.2 Then
exitlong("c2",Atstop,highest(H,BarsSinceEntry())*0.90,"",var22,1);
if CurrentContracts() == var23 And highest(H,BarsSinceEntry())>=entryprice*1.1 And highest(H,BarsSinceEntry())<entryprice*1.2 and Data2(crossup(ma(c,5),ma(c,20)))Then
exitlong("c3",Atmarket,def,"",var23,1);
}
if MarketPosition() == 1 Then{
if MarketPosition()[1] != 1 then{
var31 = CurrentContracts(); //진입수량
var32 = Round(CurrentContracts*0.3,0); //진입수량의 30%
var33 = var31-var32*2;//잔여수량 40%
}
if CurrentContracts() == var31 And highest(H,BarsSinceEntry())<entryprice*1.1 Then
exitlong("c4",Atstop,EntryPrice*0.95,"",var32,1);
if CurrentContracts() == var31-var32 And highest(H,BarsSinceEntry())<entryprice*1.1 Then
exitlong("c5",Atstop,EntryPrice*0.93,"",var32,1);
if CurrentContracts() == var33 And highest(H,BarsSinceEntry())<entryprice*1.1 and Data2(crossup(ma(c,5),ma(c,20)))Then
exitlong("c6",Atmarket,def,"",var33,1);
}
#6.당일청산
If MarketPosition()==1 And stime==144500 Then {
exitlong("d",Atmarket);
}
============
2. 아래식은 data 2 매수매도비가 데드크로스 발생후 봉 갯수를 리턴하는 식으로 작성해 본것인데 잘 안되서요. 수정부탁드립니다. 그리고 골드크로수 발생후 봉갰수 리턴하는식도 부탁드립니다.
if Crossdown(data2(bids), data2(asks)) Then{
barsincedown = 0;
}
if !(Crossdown(data2(bids), data2(asks)) Then{
barsincedown = barsincedown[1]+1;
}
==============
2008-07-08
785
글번호 16075
답변완료
답변감사드리며 한가지만 더
자꾸 질문을 많이 들여서 죄송합니다.
if data4(stime)==090100
위 조건의 경우 3번째 참조차트의 봉의 시가를 읽어오게 되어있는데 시가가 090100이렇게 시작되나요(참고로 1분봉입니다).
2008-07-08
870
글번호 16072
답변완료
input으로 문자열 받아서 비교 할 수 있나요?
input으로 문자열 받아서 비교 할 수 있나요?
문자열 변수를 어떻게 사용하는지 모르겠습니다. 알려주세요~~~
감사합니다.
2008-07-08
806
글번호 16060
답변완료
참조챠트의 시가
찾아보다가 못찾았는데 참조챠트의 경우
data2(dayopen(0)이렇게 쓰면안되나요?
참조챠트의 그날 시가 또는 저가 종가 고가를 표시하는 방법을 좀 알려주세요.
2008-07-08
781
글번호 16059
답변완료
매매관련 질문입니다.
안녕하세요.
다음과 같은 사항을 알고 싶습니다.
1. 봉완성전에 청산하는 방법이 있나요. ExitLong등을 사용하면 봉완성후 청산으로 알고 있습니다. 시스템 트레이딩 설정에 "강제청산"은 청산시점을 정할 수 있는데 프로그램으로도 즉시 청산이 가능한지 알고 싶습니다.
2. 청산 사유를 알 수 있는 방법이 있나요. 즉 SetStopTrailing에 의해 청산된건지 ExitLong에 의해 청산된건지 알 수 있는 함수가 있나 궁금합니다. SetStopXXX 등등의 함수로 청산된 후에 재진입을 방지하기 위해 청산 사유를 알아야 하거든요.
3. SetStopXXX 함수로도 시스템 트레이딩 설정 같이 봉완성전에 즉시 청산 가능한지 알고 싶습니다.
4. 현재종목코드를 알수 있는 함수가 있나요. CodeCategoryEx라는 함수를 보니 콜/풋/선물정도만 구분할 수 있고 상세종목 구분값을 알려주진 않더군요. 상세종목값을 알 수 있는 함수가 있나요.
감사합니다.
2008-07-08
672
글번호 16058