커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6133
글번호 230811
답변완료
표시가 사라집니다
안녕하세요 예스스탁님
해외선물 오일240분 분봉에서 오늘만 지정선을 표시할려고 합니다
if CurrentDate == sdate Then
plot1(68.75);
plot1(68.75);만 있으면 그래프에 날짜 상관없이 쭉~ 선이 나타나는데요
오늘그래프에만 표시할려고 if CurrentDate == sdate Then을 쓰면 아예 68.75가 사라집니다
순서가 뒤바뀐줄알고 이렇게 sdate== CurrentDate 써봐도 뿅~하고 사라집니다
뭐가 문제인지 모르겠습니다
2018-08-03
210
글번호 121101
답변완료
수식 함수
안녕하세요.
키움 영웅문W에서 사용하는 아래 함수들은 예스에서는 어떻게 변환해서 써야 하나요?
아래 함수들을 이용해 예시를 든 키움수식들을 예스 수식으로 변환 부탁드립니다.
함수들
* TEMA()
* ValueWhen()
* HighestSince()
* MAX(), MIN()
수식들
T = ValueWhen(1, X != X(1), TEMA(C, P3))
X = ValueWhen( 1, CrossDown(C, Y), HighestSince(1, CrossUp(C, Y), Y) );
Y = ValueWhen( 1, CrossUp(C, X), LowestSince(1, CrossDown(C, X), X) );
MAX(A, B)
MIN(A, B)
2018-08-03
411
글번호 121100
답변완료
문의 드립니다
더위에 수고가 많습니다
TEMA이평을 사용하고자 합니다 수식부탁드립니다
1. 5,20,40 이평을 동시에 표시하려합니다
2. 상승시 red선, 하락시 blue선으로 표시 부탁합니다
감사합니다
2018-08-02
226
글번호 121099
답변완료
수식변경요청
안녕하세요
아래수식은 고저점파동수식입니다
이수식을 Length2와 Length4 파동선 2개가 함께 나타나도록 수식변경부탁드립니다
감사합니다
Input:length(2),종가사용여부(0),파동선두께(2),수치표시(1) ;
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 2, 1);
Text_SetSize(Text1, 15);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,BLACK);
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 2, 2);
Text_SetSize(Text1, 15);
Text_SetColor(Text1,BLACK);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,BLACK);
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
2018-08-02
221
글번호 121098
답변완료
문의 드립니다.
틱차트에 해선의 일봉이평의 가격라인을 표시하고자 수식을 찾아보았는데요
input : Price1(67.60),Price2(68.20);
plot1(Price1);
plot2(Price2);
이와 같은 수식이 있습니다.
이 가격라인 오른쪽 끝부분에 텍스트 출력을 하려면
var : tx1(0),tx2(0);
Text_Delete(tx1);
Text_Delete(tx2);
tx1 = Text_New(sdate,stime,Price1,"20이평");
tx2 = Text_New(sdate,stime,Price2,"60이평");
이것을 추가하면 나오는데요
문의사항은
1.
위와같은 20이평, 60이평 등의 택스트를
input 등 외부에서 수정변경하는 방법이 있으면 일려주세요
2.
이러한 내용을 추세선 수식으로 표시하는 방법도 있던데 알려주시면 고맙겠습니다.
(오른쪽 연장, 선굵기, 선색깔, 텍스트 표시 등 포함해서요)
2018-08-02
208
글번호 121097
답변완료
확인부탁드립니다
시간내에 익절이던 손절이던 안나면 청산하게끔 하는 수식도 포함이 된건가요?
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식 부탁드립니다.
>
안녕하세요
예스스탁입니다.
1
Input : shortPeriod(8);
input : starttime(90000),endtime(20000);
Input : 당일수익틱수(80),당일손실틱수(80);
Var : value1(0), value2(0), value3(0), value4(0);
var : Tcond(false),N1(0),dayPl(0),당일수익(0),당일손실(0),Xcond(false);
당일수익 = PriceScale*당일수익틱수;
당일손실 = PriceScale*당일손실틱수;
if (sdate != sdate[1] and stime >= starttime) or
(sdate == sdate[1] and stime >= starttime and stime[1] < starttime) then
{
Tcond = true;
Xcond = false;
N1 = NetProfit;
}
if (sdate != sdate[1] and stime >= endtime) or
(sdate == sdate[1] and stime >= endtime and stime[1] < endtime) then
{
Tcond = false;
if MarketPosition == 1 Then
ExitLong();
if MarketPosition == -1 Then
ExitShort();
}
daypl = NetProfit-N1;
if TotalTrades > TotalTrades[1] and
(IsExitName("dbp",1) == true or IsExitName("dbl",1) == true or
IsExitName("dsp",1) == true or IsExitName("dsl",1) == true) then
Xcond = true;
value1 = highest(H[25],26)+lowest(L[25],26);
value2 = highest(H[25],26)+lowest(L[25],26);
value3 = highest(H[25],82)+lowest(L[25],82);
value4 = ma(C, shortPeriod);
if Tcond == true and Xcond == false then
{
If CrossUp(Value4, max(value3)/2) Then
buy();
If CrossDown(Value4, min(value3)/2) Then
sell();
}
if MarketPosition == 1 then{
ExitLong("dbp",atlimit,EntryPrice+((당일수익-daypl)/CurrentContracts));
ExitLong("dbl",AtStop,EntryPrice-((당일손실+daypl)/CurrentContracts));
}
if MarketPosition == -1 then{
ExitShort("dsp",atlimit,EntryPrice-((당일수익-daypl)/CurrentContracts));
ExitShort("dsl",AtStop,EntryPrice+((당일손실+daypl)/CurrentContracts));
}
2
저희가 제공하는 프로그램의 랭귀지는 모두 같습니다.
수식은 차트의 데이터를 읽어 계산을 하고 신호를 발생하는데
동일수식을 동일기간과 동일설정시 신호가 다르다면
해당 증권사/선물사의 데이터가 상이한 것입니다.
즐거운 하루되세요
> 이인 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다.
> 현재 하기와 같은 수식을 쓰고 있습니다
Input : shortPeriod(8);
Var : value1(0), value2(0), value3(0), value4(0);
value1 = highest(H[25],26)+lowest(L[25],26);
value2 = highest(H[25],26)+lowest(L[25],26);
value3 = highest(H[25],82)+lowest(L[25],82);
value4 = ma(C, shortPeriod);
if stime >= 090000 or stime < 020000 then
{
If CrossUp(Value4, max(value3)/2) Then
buy();
If CrossDown(Value4, min(value3)/2) Then
sell();
}
요청사항
1. 익절 50틱 달성시 거래 중단&손절 50틱 달성시 거래중단
2. 거래 시간을 오전 2시까지 했는데 그때까지 진입한 계약이 익절이던 손절이던 안될경우
2시에 시장가 청산 후 거래 중지
그리고 같은 수식이라도 증권사별 (한투랑 농협)로 동일하지 않던데 원래 그런건가요?
부탁드리겠습니다
2018-08-02
263
글번호 121096
답변완료
문의드립니다
Var : cnt_total(0);
Var : Entrycnt(0);
Entrycnt = 0;
for cnt_total = 0 to 100
{ if sdate == EntryDate(cnt_total)
Then Entrycnt = Entrycnt+1;}
input : stime11(90000);
input : stime12(95900);
if MarketPosition == 0
and entrycnt <1
and Time >= stime11
and Time <= stime12
and RSI(10) > 60
Then
buy("매수");
if MarketPosition == 0
and entrycnt <1
and Time >= stime11
and Time <= stime12
and RSI(10) < 40
Then
sell("매도");
if MarketPosition == 1
and RSI(10) < 50
Then
exitlong("매수청산");
if MarketPosition == -1
and RSI(10) > 50
Then
ExitShort("매도청산");
위식에서
매수진입시그널이 나오고
매수청산시그널이 안나왔을 조건하에
N봉후 매수진입을 늦게하고 싶습니다
만약
N=9봉 후 진입 이라면
매수진입시그널이 나오고
1봉 2봉 3봉... 이 지나고
4봉에서 매수청산 시그널이 나왔다면
매수진입이 없어야 함
매도진입도 같게 하고싶습니다
감사합니다
2018-08-02
198
글번호 121095
답변완료
수식요청드립니다.
아래식을 아래와 같이 수정요청드립니다. 감사합니다.
진입가 대비 3% 상승하면, 최고 익절틱 대비 20% 떨어지면 청산,(매수,매도청산)
예) 1000(진입가) --> 1030(3%상승) --> 1050(최고값) --> 1040(50틱대비20%하락) 청산
if MarketPosition == 1 Then{
BH = highest(H,BarsSinceEntry);
if MaxEntries == 1 Then
HE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) > HE Then
HE = LatestEntryPrice(0);
if BH >= EntryPrice+PriceScale*30 then{
ExitLong("B익절%",AtStop,BH-(BH-EntryPrice)*0.1);
}
ExitLong("B손절",AtStop,HE-PriceScale*30);
}
if MarketPosition == -1 Then{
SL = Lowest(L,BarsSinceEntry);
if MaxEntries == 1 Then
LE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) < LE Then
LE = LatestEntryPrice(0);
if SL <= EntryPrice-PriceScale*30 then{
ExitShort("S익절%",AtStop,SL+(EntryPrice-SL)*0.1);
}
ExitShort("S손절",AtStop,LE+PriceScale*30);
}
2018-08-02
212
글번호 121094
답변완료
문의
디버깅 창을 참조 : 시작시 매도포지션 2개가 있었고 스팟식으로 매도1차, 2차 1개씩 청산되어 무포지션 상태인데... 인식을 못하고 매도포지션 2개를 익절 주문이 나갑니다
도무지 해결방법을 찾지 못하겠읍니다. 어떻게 해야 되나요 ?
2018-08-02
218
글번호 121081