커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7354
글번호 230811
답변완료
만기일 청산
안녕하세요?
일봉 차트에서
data1: 연결선물지수
data2: 콜옵션; data3: 풋옵션입니다.
아래 만기일 조건 만족하면 청산하려고 합니다.
If cond_만기일 == True Then {
exitlong();
exitshort();
}
그런데 종가에서 임시 신호만 생기고 정식 신호가 생기지 않습니다.
오류 수정 부탁드립니다.
감사합니다.
2017-01-12
145
글번호 105853
답변완료
마지막 거래시간 카운트하는 방법을 문의드립니다
안녕하십니까?
일부 ETF, ETN 종목은 거래량이 너무 적어서 시스템 신호가 제대로 나오지 않는 경우가 있습니다.
그래서 봉을 인위적으로 생성하기 위하여, 10분봉 시스템에서 090000부터 150000까지 1시간 간격으로 봉의 갯수를 세어서 만약 거래가 없어서 봉의갯수가 "0"이면 1개의 매수주문이 나갈 수 있도록 하려면 어떤조건을 넣어야 할지 문의드립니다.
If
"지난 1시간동안 생성된 봉갯수" == 0
Then
Buy("봉생성", OnClose, DEF, 1 );
또다른 방법으로는 마지막 거래봉이 생성된지 60분이 지나면 1개의 매수주문이 나갈 수 있도록 하는 방법을 문의드립니다.
If
"(CurrentTime - 마지막봉이 생성된시간)" >= 60분
Then
Buy("봉생성", OnClose, DEF, 1 );
부탁드립니다.
2017-01-13
126
글번호 105852
답변완료
포지션 정리 후 다음봉에서 신규매수나 매도
항상 설명을 자상하게 해주셔서 감사합니다.
if crossup(sma,lma) then
buy:
if crossdown(sma,lma) then
sell:
이렇게 하면
crossup 하는 경우에 기존 포지션을 정리하면서 동시에 매수를 하게 됩니다.
crodddown 하는 경우에 기존 포지션을 정리하면서 동시에 매도를 하게 됩니다.
동시에 매매하지 않고 기존포지션을 정리한 다음
그 다음봉에서 신규매수나 신규매도가 일어나게 하고 싶습니다.
어찌하면 될까요?
2017-01-12
117
글번호 105851
답변완료
시스템 작성좀 부탁드립니다.^^
input : P1(1),P2(2),P3(3);
input : Period11(5),Period12(6),Period13(2);
input : Period21(7),Period22(8),Period23(2);
input : Period31(9),Period32(10),Period33(2);
input : Period41(11),Period42(12),Period43(2);
var : wma1(0),wma2(0),wma3(0);
var : SMI1(0),SMI2(0),SMI3(0),SMI4(0);
wma1 = wma(c,P1);
wma2 = wma(c,P2);
wma3 = wma(C,P3);
SMI1 = SMI(Period11,Period12,Period13);
SMI2 = SMI(Period21,Period22,Period23);
SMI3 = SMI(Period31,Period32,Period33);
SMI4 = SMI(Period41,Period42,Period43);
if wma1 > wma2 and wma2 > wma3 and
SMI3 > 0 and SMI4 > 0 and SMI3 > SMI4 and
((SMI2 > 0 and crossup(SMI1,0)) or (SMI1 > 0 and crossup(SMI2,0))) Then
buy();
if wma1 < wma2 and wma2 < wma3 and
SMI3 < 0 and SMI4 < 0 and SMI3 < SMI4 and
((SMI2 < 0 and CrossDown(SMI1,0)) or (SMI1 < 0 and CrossDown(SMI2,0))) Then
sell();
수고 많으십니다. 위 식에서 청산조건을 넣고 싶은데요.
매수 청산 조건: 가중이동평균P1(1)<가중이동평균선P3(3)일때 청산
매도 청산 조건: 가중이동평균P1(1)>가중이동평균선P3(3)일때 청산
부탁드립니다.^^*
2017-01-12
114
글번호 105850
천용인 님에 의해서 삭제되었습니다.
2017-01-12
1
글번호 105849
만강 님에 의해서 삭제되었습니다.
2017-01-12
19
글번호 105848
답변완료
누적거래량
var1 = ma(c,20); 에서 다음조건에 부합하는 수식을 부탁드립니다.
지수가 var1 의 값을 상향 돌파 한 시점부터 누적거래량이 1000 을 초과하면 매수
지수가 var1 의 값을 하향 돌파 한 시점부터 누적거래량이 1000 을 초과하면 매도
2017-01-13
142
글번호 105847
답변완료
51402번 질문관련하여 문의드립니다.
안녕하세요.
보조종목 사용시 주종목의 데이터 및 함수 앞에는 "data1"라고 항상 명시를 해주어야 하는지요? 예스랭귀 매뉴얼에선 그럴 필요 없다는 의미로 설명하고 있기도 하고요;;
이를테면 data1(dayopen), data1(highest(H,BarsSinceEntry)),data1(eMa(C,20)) 등과 같이 입력해야 하는지 궁금합니다.
또한, 아래와 같은 조건식은 어떻게 해야 하는지요?
if Bdate != Bdate[1] Then{
HH = MACDV;
LL = MACDV;
}
if MACDV > HH Then
HH = MACDV;
if MACDV < LL Then
LL = MACDV;
감사합니다.
2017-01-12
130
글번호 105844
답변완료
항상 감사드립니다.
좀전에 수정해주신 수식을 적용했는데요
추가 진입이 이뤄지지가 않습니다.
b1과 b2가 조건이 틀려야 한다고 하셨는데요
buy("b1",AtStop,NextBarOpen+PriceScale*1,2);
buy("b2",AtStop,NextBarOpen+PriceScale*3,1);
이 두조건은 시스템에서 틀린것으로 인식한게 맞나요.
아니면 atstop를 atlimit 이런식으로 해야 시스템에서 틀린조건으로 인식하나요?
input : 최대진입횟수(1);
var : Xcond(false),HH(0);
var1 = ma(c,5);
var2 = ma(c,20);
if TotalTrades > TotalTrades[1] Then{
if (IsExitName("dl1",1) == true or IsExitName("dl2",1) == true or IsExitName("bl1",1) or IsExitName("bl2",1)) Then
Xcond = True;
Else
Xcond = false;
}
if MarketPosition == 0 and (Xcond == false or (MarketPosition == 1 and MaxEntries == 1) or (Xcond == true and BarsSinceExit(1) >= 1)) then {
If CrossUP(var1, Var2) Then {
buy("b1",AtStop,NextBarOpen+PriceScale*1,2);
}
}
if MarketPosition == 1 then{
if MaxEntries >= 1 and MaxEntries < 최대진입횟수 Then {
buy("b2",AtStop,NextBarOpen+PriceScale*3,1);
}
if CurrentContracts > CurrentContracts[1] Then
HH = H;
if H > HH Then
HH = H;
if MaxEntries == 1 Then{
MessageLog("%.2f",LatestEntryPrice(0));
ExitLong("dl1",atlimit,LatestEntryPrice(0)+PriceScale*20,"",1,1);
}
if MaxEntries == 2 Then
ExitLong("bp2",atlimit,LatestEntryPrice(0)+PriceScale*20);
if HH < LatestEntryPrice(0)+PriceScale*13 Then
ExitLong("bl1",AtStop,LatestEntryPrice(0)-PriceScale*10);
if HH >= LatestEntryPrice(0)+PriceScale*13 Then
ExitLong("bl2",AtStop,LatestEntryPrice(0)+PriceScale*1);
}
2017-01-12
165
글번호 105842