커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4324
글번호 230811
답변완료
함수변환요청드립니다.
안녕하세요?
키움에서 사용하였던 수식입니다.
예스트레이더로 사용할 수 있도록 함수 변환 요청드립니다.
크루드 오일 60분봉에 적용하여
써머타임 적용 현재
8시에 완성되는 봉을 기준으로
(써머타임 해제 적용 기간은 9시에 완성되는 봉을 기준으로)
그 봉이 시가 = 고가이면 N번째 이후 봉 시가로 매수 진입이며
시가 = 저가 이면 N번째 이후 봉 시가로 매도 진입하고자 합니다.
진입 후 M번 이후째 봉 시가로 강제청산 하고자합니다.
당일청산입니다.
Vars : ii( 0 ), st( 0 ), et( 0 );
V1 = Dayofweek((10000 * Year(D)) + (100 * 3) + 1);
If V1 = 0 Then Value2 = 8
Else Value2 = 15 - V1;
V2 = Dayofweek((10000 * Year(D)) + (100 * 11) + 1);
If V2 = 0 Then Value4 = 1
Else value4 = 8 - V2;
If date > (10000 * Year(D)) + (100 * 3) + value2
And date < (10000 * Year(D)) + (100 * 11) + value4 Then
Begin
st = 070000;
et = 060000;
End
Else
Begin
st = 080000;
et = 070000;
End;
condition1 = (IntPortion(time/10000) > IntPortion(et/10000) And IntPortion(time[1]/10000) <= IntPortion(et/10000))
Or st <> st[1];
Inputs : Ncount(1), Mcount(1);
Vars : Bcond(False), Scond(False), DayIndex_user(0);
If condition1 Then
Begin
If O = H Then Bcond = true
Else
Begin
Bcond = False;
Scond = False;
End;
If O = L Then Scond = True
Else
Begin
Bcond = False;
Scond = False;
End;
DayIndex_user = 0;
End;
DayIndex_user = DayIndex_user + 1;
If Bcond And DayIndex_user = Ncount Then Buy("매수", atmarket);
If Scond And DayIndex_user = Ncount Then Sell("매도", atmarket);
If BarsSinceEntry >= Ncount + Mcount Then
Begin
ExitLong();
ExitShort();
End;
2017-10-16
115
글번호 113373
답변완료
수식에서 조건발생시 당일1회진입 부탁드립니다.
var : 전환선(0),기준선(0),후행스팬(0),선행스팬1(0),선행스팬2(0),거래기간(110);
Input : af(0.015), maxAF(0.09);
Var : value(0);
value = sar(af,maxAF);
전환선 = (highest(H,9)+lowest(L,9))/2;
기준선 = (highest(H,26)+lowest(L,26))/2;
후행스팬 = C;
선행스팬1 = (전환선+기준선)/2;
선행스팬2 = (highest(H,52)+lowest(L,52))/2;
IF ma(v,거래기간)*10<v and DayVolume>50000 and ma(DayVolume,5)>50000 and 선행스팬1<c and 선행스팬2<c and 기준선 < c and value < c
then
buy("b");
var1 = (Highest(H, 26) + Lowest(L, 26)) / 2;
if MarketPosition == 1 and CrossDown(h,var1) Then
exitlong("bx");
SetStopProfittarget(3,PercentStop);
SetStopLoss(4,PercentStop);
위 조건에서 10시이전 조건발생시 당일1회 진입만 되게 하고 싶습니다.
2017-10-16
117
글번호 113372
답변완료
문의드립니다
oc Histogram와MACD지표겹치기을하고 MACD선과시그널선 교차시 상승의빨강색 하락의파랑색
잘 부탁드립니다
2017-10-15
113
글번호 113371
답변완료
수식 점검 부탁드립니다.
if sdate >= 지정일 and
MarketPosition == 0 and
C > HH and
(V1 == 0 or V1 >= 150000) and
stime == 150000 and C < DayClose(1) and C < O then
Buy("매수",OnClose,def,Floor(매수금액/C));
if MarketPosition == 1 Then
{
if MaxEntries == 5 and C <= AvgEntryPrice*0.75 Then
cond = true;
if stime == 150000 and C < DayClose(1) and C < O and C < AvgEntryPrice then
{
if ((cond == false and MaxEntries > 1 and MaxEntries < 5) or
(cond == true and MaxEntries > 5 and MaxEntries < 10)) then
{
Buy("매수1",OnClose,def,Floor(매수금액/C));
}
}
위 수식을 적용해 본 결과
음봉이 발생하는 3시에 정상적으로 매수가 되는 것을 확인하였는데요.
문제는 5회까지 분할 매수가 안되고 첫 매수 이후 매수에 대한 매도가 완료되어야 다음 매수 진입을 하네요.
제가 구상한 로직은 아래와 같습니다.
- 아 래 -
- 매수 시작일 설정
- 1회 매수 금액 500,000원
- 분할 매수 5회(총 2,500,000원)까지 제한 (단, 5회 매수후 주가 지속하락하여 평단가대비 -25% 발생시 재작동하여 다시 5회(총 2,500,000원 + 2,500,000원 = 5,000,000원)까지 분할 매수)
** 코스피(코스닥) 지수가 일봉상 스토캐스틱(20,12,12) 과열권 진입시 신규 매수 제한 (기 보유종목에 대한 매수는 진행)
- 30분봉 챠트에 적용하며 전일종가(직전봉이 아닌 날짜상의 전일 종가)보다 낮은 음봉이며 평단가보다 낮은 경우 150000에 매수
끝.
위와 같이 만들어보려 했는데 수정에 수정을 거듭해도 성과가 나질 않아서 부득이 요청드립니다.
고견을 좀 주시면 많은 도움이 되리라 사료되면 늘 감사한 마음 전합니다.
2017-10-15
116
글번호 113370
답변완료
이것저것 문의드립니다.
수식왕 예스스탁님 감사합니다 .
1. 시스템관련
미완성 봉 관련해서 질문드립니다. 만약에 갭상승하면 그쪽 방향으로 매수한다·매도한다는 전략을 30분봉에 적용시켰다 하면, 갭상승 신호를 확인한 후 30분 01초에(예를 들어) 진입이 들어간다고 보면 되는 건가요? 만약 갭상승 이후에 상승방향과 완전 다른 하락 방향에 갔다 하더라도 진입신호는 발생했으므로 30분01초가 되면(봉이 완성되면)진입을 하게 되는 건가요?
setstoptrailing을 시간대를 다르게 해보니 전부다 다른 시뮬레이션 리포트가 나오더라구요. 제 생각으론 고점 대비 떨어진 수치는 똑같으니까 같은 수익률이 나오지 않을까 생각했는데 아니었습니다. 여전히 개념이 잘 안 잡히네요.
2. 시스템
진입
-a(변수)거래일간 상승률이 50%(변수)인 상태에서
-b% 하락했을 때 진입
청산
진입시점에서 상승률이 c%가 됐을 때 청산
비고: 상승률 거래일 하락후 상승률은 일간으로 해주시되 적용은 1분봉으로 부탁드립니다.
3. 미완성봉에 대해 2
오늘 한번 소액으로 시험매매를 해봤는데요. 30분이 되더니 매수가 들어가고 setstop을 짧게 잡으니 사자마자 바로 청산을 시키더라구요. 시뮬리포트의 우상향 그래프를 보다가 실제와 크게 다른 것을 보니 당황했습니다. 그럼 시뮬레이션 리포트의 계산은 진입시점에 들어갔다 진입시점에 setstop을 했을 것을 가정하고 나서 계산을 하는 것인가요? 반면 실제의 매매의 30분 이후에 매매를 들어가게 되므로 시뮬결과와는 완전히 다르다고 보면 될까요? 자세한 설명을 들었지만 여전히 헷갈립니다. 다른 분들은 그럼 어떤 식으로 사고하고 코딩을 짜고 매매하는 지도 궁금하기도 하구요.
4. 가장 시뮬레이션과 비슷한 결과를 얻고 싶다면 가장 짧은 봉으로 시뮬을 하고 적용을 하면 될까요?
5. 아래와 같은 식은 그럼 미완성이라도 실제 매매가 바로 일어나게 되나요? 아래와 같은 식은 어떻게 가능한 건가요? 원리가 궁금합니다. 아래와 같은 코딩은 시뮬레이션 리포트와 실매매와 비슷하게 나올까요?(물론 차이가 없을 수는 없겠지만 비슷하게는 되는가라는 질문입니다.)
Re : 봉 미완성 진입
안녕하세요
예스스탁입니다.
시초가 +0.8이상의 시세발생시 즉시 매수진입
시초가 -0.8이하의 시세발생시 즉시 매도진입
되게 변경했습니다.
var : cnt(0),count(0);
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count = count+1;
}
if count < 1 then{
if MarketPosition == 0 Then{
buy("b",AtStop,dayopen+0.8);
sell("s",AtStop,dayopen-0.8);
}
}
SetStopProfittarget(0.55,PointStop);
SetStopLoss(0.8,PointStop);
SetStopEndofday(150000);
2017-10-16
153
글번호 113369
이섭대천 님에 의해서 삭제되었습니다.
2017-10-14
1
글번호 113368
답변완료
함수 요청입니다..
사용자함수에 data2가 들어간 함수를 만들었는데요.
제함수 = 함수내용;
마무리하고 올바로 검증된뒤에 다른 지표식에 넣고 어제 데이터를 불러오려고 (1)를 넣으면
'함수의 입력 값이 필요 없습니다.' 라고 나옵니다. 어떤 곳에 오류가 생기면 이렇게 나오나요?
2017-10-14
112
글번호 113367
답변완료
이평선변곡
안녕하세요?
첨부한 그림처럼 7이동평균선이 하락하다가 상승전환하는 B점에서 라인이 출력되고 있는데 이동평균선이 -를 유지하다 +로 전환되는 점을 기준으로 A점의 일정틱수(변수)아래 또는 위에 라인출력되도록 부탁드립니다. 예를들면 이평선이 하락하다 상승전환되면 "5틱아래"에 매수신호 상승하다 하락하면 "5틱 아래"에 매도신호 발생되도록 부탁드립니다
현재사용공식은 ~~~
input : P(7);
var : mav(0),T(0);
mav = ma(C,P);
if mav > mav[1] Then
T = 1;
if mav < mav[1] Then
T = -1;
if T[1] == 1 and T[1] != T[2] Then
var1 = O;
if T[1] == -1 and T[1] != T[2] Then
var1 = O;
if T == 1 Then
plot1(var1,"1",RED);
if T == -1 Then
plot1(var1,"1",blue);
입니다...
2017-10-16
318
글번호 113359
답변완료
부탁드립니다
아래수식은 당일 최고거래량을 나타내는 지표입니다
여기다 "거래량은 5000개이상"을 삽입해주십시요
var : HV1(0),HH1(0),HV2(0),HH2(0),HV3(0),HH3(0);
if Bdate != Bdate[1] then
{
HV1 = V;
HH1 = H;
HV2 = 0;
HH2 = O;
HV3 = 0;
HH3 = O;
}
Else{
if V > HV1 Then{
HV1 = V;
HH1 = C;
HV2 = HV1[1];
HH2 = HH1[1];
HV3 = HV2[1];
HH3 = HH2[1];
}
if V < HV1 and V > HV2 Then{
HV2 = V;
HH2 = C;
}
if V < HV1 and V < HV2 and V > HV3 Then{
HV3 = V;
HH3 = C;
}
}
plot1(HH1,"최고거래량고가");
plot2(HH2,"두번째최고거래량고가");
plot3(HH3,"세번째최고거래량고가");
2017-10-13
127
글번호 113355