커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7152
글번호 230811
답변완료
문의드립니다.
안녕하세요.
답변이 없어 재 문의드립니다.
브이아이금융투자 해외선물 거래입니다.
동일봉(현재 틱으로 검토 중입니다.)에서 청산과 진입이 동시신호가 발생할때
청산은 되지만 신규진입은 되지 않는 경우가 확인되어 수정 및 문의드립니다.
1. 청산은 되는데 신규진입이 안되는 이유가 무엇인지요?
2. 청산과 신규진입이 순서대로 진행되도록 수정 부탁드립니다.
3. 하기 수식에서 신규진입이 안되었을 경우 SetStopProfittarget은 반대로 신규 진입이 되는지요? (이후 진입, 청산이 반대로 되는건지요?)
수식은 아래와 같습니다.
If MarketPosition == 0 and 매수조건 Then
Buy("매수");
If MarketPosition == 0 and 매도조건 Then
Sell("매도");
SetStopProfittarget(PriceScale*Stop수익틱,PointStop);
2020-06-09
2362
글번호 139686
답변완료
문의
해선에서 밤10시 반에서 ~11시반 사이의 고점 저점을 표현하고 싶습니다
2020-06-09
2399
글번호 139685
레전드 님에 의해서 삭제되었습니다.
2020-06-09
0
글번호 139684
레전드 님에 의해서 삭제되었습니다.
2020-06-09
0
글번호 139683
답변완료
KP-ratio 수식 문의
1. DrawDown (낙폭기간, 낙폭)을 표현한 지표를 만들려고 하는데,
아래 수식을 작성했는데,
???? 으로 표시한 부분의 랭귀지로 표현이 어려워서 문의드립니다.
-------미완성 수식 인용-----
input: period(24);
var: 기간MDD(0), DD기간합(0),KPratio(0), SMscore(0),일별수익률(0), 누적수익률(0), DD기간(0),Count(0) ;
일별수익률 = (C/C[1]-1);
누적수익률 = accumN(일별수익률 , Period) ;
DD기간 = iff( (누적수익률- highest(누적수익률,period) < 0) ,
(누적수익률- highest(누적수익률,period)) , 0 ); //감소시
기간MDD = IFF(DD기간 <0, lowest(DD기간,"????????",0);
// ???? 누적수익률이 하락하여, 전고점 회복하는 데 걸리는 봉수
DD기간합 = countif( DD기간 < 0 , period ) ; //모든 DD의 기간 합계
KPratio = ( c / c[period]-1 )/
( (""-기간MDD???????") *sqrt( DD기간합 / period));
// 기간MDD=낙폭기간별 Max Drawdown의 합
----------------인용끝 ------
2. sm-score는 상기 KP-score를 산출후 , 표준정규분포로 가정하여, 확률을 산출 하는것인데
랭귀지로 표현이 가능할까요 (사진참조)
KP 평균, KP 표준편차는 예스트레이더의 시스템 포트폴리오(%형태의 편차)에서는 없는 기능 같아, 직접 구해야 할것 같아, 외부변수로 빼는것으로 가정)
2020-06-09
2973
글번호 139682
답변완료
시스템
***야~~~~~~호****
>표시가 나왔어요 신기해요!!!!
쌤은 천재예요!!!!!!!
헌데 기존 만들었던 바탕색이랑
기타 범위표시의 색이 다바뀌네요
이럴땐 어케해야하죠???
>sell표시는 나왔다가 사라졌어요
(다시 복귀 할때 보고 싶은데요)
sell을 구현하려면 지표에서는 불가 하다해서
시스템에서 적용해 보았는데
지표에서 sell의 표현아니고
화살표표시정도는 안되는 건간요
지표로 하면 시스템처럼
나왔다가 사라지지않고
표시가 남을 것 같기도 하구요
>솔직히 시스템에 들어가서 보니
좀 감깜하네요
***********************************
1>지표수시으로
sell/buy수식 될까요
************************************
2020-06-09
2328
글번호 139681
답변완료
부탁 드립니다.
변환 문의 드립니다.
m=ma(c,p20,단순);
a=m+avgif(c-m,1,0.0)+2*stdevif(c-m,1,0.0);
여기서 avgif , stdevif는 무슨의미 인지요?
미리 감사드립니다.
2020-06-09
2271
글번호 139680
답변완료
수식 문의 드립니다.
관리자님,
회신 감사드립니다.
허나 최고점 대비 5%에 곤바로 팔리지 않고
봉이 완성되고 난뒤인 한참 아래서 팔립니다.
재 검토 후 회신 부탁 드립니다.
감사 드립니다.,
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식 문의 드립니다.
>
안녕하세요
예스스탁입니다.
input : P(9);
var1 = cci(P);
if var1 >= 100 Then
sell("s",AtStop,highest(H,2)*0.95);
즐거운 하루되세요
> 기관장 님이 쓴 글입니다.
> 제목 : 수식 문의 드립니다.
> 매도 : cci(9,10) 이 100 이상이고, 이전 2봉중 최고점 대비 5% 하락시 봉끝나기 전이라도 즉시 매도
2020-06-09
2054
글번호 139677
답변완료
알려주신 수식대로 했는데 잘 안됩니다 ^^;; 번거롭게 해드려서 대단히 죄소합니다
1분봉으로 바꿀경우 매수신호는 나오는데요, 2000년도부터 현재까지 데이터를 보려고 하니 1분봉으로 바꿀경우 데이터가 너무 커서 예스트레이더가 자꾸 멈춥니다 ^^;;
그래서 5분봉 상태에서 수식을 넣고 백테스팅을 해보고 싶은데 잘 안되네요 ^^;;
알려주신 수식 그대로 적용을 해봤는데요, 가장 최근 6월 3일 매수가 안잡힙니다
필요하시다면 ,,,메일을 알려주시면 제 수식을 전부 드리도록 하겠습니다/!
atr = DAYHIGH(1) - DAYLOW(1);
LTR = MAX(1,NOISE * ATR);
STR = MAX(1,(1-NOISE) * ATR);
VL = cap / (dayclose(1) * MUL * rt);
LUNIT = INT((CAP * RISK) / (LTR * MUL));
SUNIT = INT((CAP * RISK) / (STR * MUL));
IF LUNIT >= VL Then LUNIT1 = VL; ELSE LUNIT1 = LUNIT;
IF LUNIT * 3 <= VL THEN LUNIT2 = LUNIT1; ELSE LUNIT2 = (VL - LUNIT)/2;
IF SUNIT >= VL THEN SUNIT1 = VL; ELSE SUNIT1 = SUNIT;
IF SUNIT * 3 <= VL THEN SUNIT2 = SUNIT1 ; ELSE SUNIT2 = (VL - SUNIT)/2;
# ENTRY
L1 = DAYOPEN + LTR ;
L2 = L1 + (LTR * 0.5);
L3 = L1 + LTR;
S1 = DAYOPEN - STR;
S2 = S1 - (STR * 0.5);
S3 = S1 - STR;
NL1 = LatestExitPrice(1)+LTR;
NL2 = NL1 + LTR * 0.5;
NL3 = NL1 + LTR;
NS1 = LatestExitPrice(1)-STR;
NS2 = NS1 - STR * 0.5;
NS3 = NS1 - Str;
IF MarketPosition == 0 AND NextBarSdate != sdate Then
{
BUY("L11",ATSTOP,NextBarOpen+LTR,LUNIT1);
SELL("S11",ATSTOP,NExtBarOpen-STR,SUNIT1);
}
IF MarketPosition == 0 AND BDATE != EXITDATE(1) Then {
IF H <= L1 AND NEXTBARSDATE == SDATE Then BUY("L1",ATSTOP,L1,LUNIT1);
IF L >= S1 AND NextBarSdate == SDATE THEN SELL("S1",ATSTOP,S1,SUNIT1);
}
# 매수 피라미딩
IF MarketPosition == 1 AND STIME <153000 and (IsEntryName("L1")==True or IsEntryName("L11") == True) THEN {
if highest(h,BarsSinceEntry) <= L2 Then
buy("L2",ATSTOP,L2,LUNIT2);
if highest(h,BarsSinceEntry) <= L1 + LTR Then
buy("L3",ATSTOP, L3,LUNIT2);
}
# 매수청산
IF MarketPosition == 1 then {
if NextBarSdate == SDATE Then
ExitLong("LS",AtStop,LatestEntryPrice - LTR);
IF NextBarSdate != SDATE Then
ExitLong("EL",ATMARKET);
}
# 매도 피라미딩
IF MarketPosition == -1 AND STIME < 153000 AND (IsEntryName("S1") == True or IsEntryName("S11") == True) THEN {
IF Lowest(L,BarsSinceEntry) >= S2 Then
SELL("S2",AtStop,S2,SUNIT2);
IF Lowest(L,BarsSinceEntry) >= S1 - STR Then
SELL("S3",AtStop,S3,SUNIT2);
}
# 매도청산
IF MarketPosition == -1 then {
IF NextBarSdate == SDATE Then EXITSHORT("SS",AtStop,LatestEntryPrice + STR);
SetStopEndofday();
}
ELSE SetStopEndofday(0); #해제
# 재진입
IF MarketPosition == 0 AND BDATE == EXITDATE(1) Then {
IF MarketPosition(1) == 1 AND H <= NL1 AND NextBarSdate == sDate AND IsExitName("LS",1) == TRUE THEN BUY("NL1",ATSTOP,NL1,LUNIT1);
IF MarketPosition(1) == -1 AND L >= NS1 AND NextBarSdate == SDATE THEN SELL("NS1",ATSTOP,NS1,SUNIT1);
}
IF BDATE == EXITDATE(1) AND MarketPosition == 1 AND IsEntryName("NL1") == TRUE THEN {
IF LatestEntryName == "NL1" AND Highest(H,BarsSinceEntry) <= NL2 THEN BUY("NL2",ATSTOP,NL2,LUNIT2);
IF LatestEntryName == "NL2" AND HIGHEST(H,BarsSinceEntry) <= NL3 THEN BUY("NL3",ATSTOP,NL3,LUNIT2);
}
IF BDATE == ExitDate(1) AND MarketPosition == -1 AND IsEntryName("NS1") == TRUE Then {
IF LatestEntryName == "NS1" AND Lowest(L,BarsSinceEntry) >= NS2 THEN SELL("NS2",ATSTOP,NS2,SUNIT2);
IF LatestEntryName == "NS2" AND Lowest(L,BarsSinceEntry) >= NS3 THEN SELL("NS3",ATSTOP,NS2,SUNIT2);
}
2020-06-09
2298
글번호 139676