커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3360
글번호 230811
레전드 님에 의해서 삭제되었습니다.
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
2847
글번호 139682
답변완료
시스템
***야~~~~~~호****
>표시가 나왔어요 신기해요!!!!
쌤은 천재예요!!!!!!!
헌데 기존 만들었던 바탕색이랑
기타 범위표시의 색이 다바뀌네요
이럴땐 어케해야하죠???
>sell표시는 나왔다가 사라졌어요
(다시 복귀 할때 보고 싶은데요)
sell을 구현하려면 지표에서는 불가 하다해서
시스템에서 적용해 보았는데
지표에서 sell의 표현아니고
화살표표시정도는 안되는 건간요
지표로 하면 시스템처럼
나왔다가 사라지지않고
표시가 남을 것 같기도 하구요
>솔직히 시스템에 들어가서 보니
좀 감깜하네요
***********************************
1>지표수시으로
sell/buy수식 될까요
************************************
2020-06-09
2269
글번호 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
2209
글번호 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
1993
글번호 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
2164
글번호 139676
답변완료
수식 수정 좀 부탁드립니다.
var1 = sum(V);
var2 = valuewhen(1, date(1)!=date, var1(1));
var3 = var1 - var2;
위에 있는... 영웅문에서 쓰던 수식을 예스랭귀지에 맞게 고쳐주시면 감사하겠습니다
2020-06-09
2388
글번호 139674
답변완료
어제 수식 수정부탁드려요
제가 원하는 곳에서 신호가 않나와서요
---------------------------------
그림 1에서 네모 봉을 확인후(봉의 몸통으로 이평선을 돌파한경우에만) + 아래 화살표처럼 CCI 우상향일시 동그라미 봉에서 매수가 진입이 되게 하고싶습니다 동그라미가 음봉으로 시작하면 안되고 네모봉 종가와 같거나 양봉으로 시작해야 됩니다
매도일때는 반대의경우 입니다
1번그림처럼 네모봉이 5 10 20 분봉이 돌파 해도 되지만 바로아래그림처럼 5, 10 20 60 120 모두 돌파해도 상관없습니다 5 10만 돌파하거나 5.20만 돌파 하면 안됩니다 네모 봉 몸통으로 3개이상만 순서상관없이 돌파하면 됩니다
------------------------------------
그림 4처럼 이전 봉들이 연속적으로 3개이상 돌파봉이 되었다면 진입 금지 입니다
이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우 위와같이 봉몸통으로 돌파한봉이 최근 5개봉중 3개 이하 여야되고 5,10 20 60 120 중 순서는 상관없이 3개 봉 이하일때만 진입입니다
----------------------------------------
그림 2처럼 만든어주신 시스템 적용했는데 원하지 않는 곳에서 매매가 시작 됩니다
-----------------------------------
그림 3처럼 만약 네모 봉에서 매도 신호가 발생을했으면 동그라미 봉이 양봉으로 끝났을때 청산 원하는데 그렇게 안되는거 같아서 수정부탁드려요
---------------------------
1번시스템은 위와 같이 수정 부탁드리오 2번시스템은 위내용과 동일하고 5 10 20 60 120분봉 2개이상 몸통돌파봉을 확인하고 경우 매수일경우 매도일경우 청산도 위와 같이 해주시면됩니다
혹시 가능하다면 초보라서 시스템에 자세한 주석 부탁드립니다
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 부탁드려요
> 안녕하세요
예스스탁입니다.
1
input : StartTime(91000),EndTime(130000);
input : P1(5),P2(10),P3(20),CCIP(9);
input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3);
input : 익절틱수(100),손절틱수(100);
var : Tcond(false),mav1(0),mav2(0),mav3(0),CCIv(0);
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
mav1 = ma(C,P1);
mav2 = ma(C,P2);
mav3 = ma(C,P3);
CCIv = CCI(CCIP);
var1 = 0;
if max(C,O) > mav1 and mav1 > min(C,O) Then
var1 = var1+1;
if max(C,O) > mav2 and mav2 > min(C,O) Then
var1 = var1+1;
if max(C,O) > mav3 and mav3 > min(C,O) Then
var1 = var1+1;
if Tcond == true then
{
if MarketPosition <= 0 and
C > max(mav1,mav2,mav3) and min(mav1,mav2,mav3) > O and
CCIv > CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
buy("b",AtStop,NextBarSdate+PriceScale*1);
if MarketPosition >= 0 and
C < max(mav1,mav2,mav3) and min(mav1,mav2,mav3) < O and
CCIv < CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
sell("s",AtStop,NextBarSdate-PriceScale*1);
if MarketPosition == 1 then
{
if C < O Then
ExitLong("bx1");
}
if MarketPosition == -1 then
{
if C > O Then
ExitShort("sx1");
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStoploss(PriceScale*손절틱수,PointStop);
if EndTime > Starttime Then
SetStopEndofday(EndTime);
if EndTime < Starttime Then
{
if sdate != sdate[1] Then
SetStopEndofday(EndTime);
if bdate != bdate[1] Then
SetStopEndofday(0);
}
2
input : StartTime(91000),EndTime(130000);
input : P1(5),P2(10),P3(20),P4(60),P5(120),CCIP(9);
input : 진폭봉수(5),진폭틱수(50),N(5),돌파봉수(3);
input : 익절틱수(100),손절틱수(100);
var : Tcond(false),mav1(0),mav2(0),mav3(0),mav4(0),mav5(0),CCIv(0);
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
mav1 = ma(C,P1);
mav2 = ma(C,P2);
mav3 = ma(C,P3);
mav4 = ma(C,P4);
mav5 = ma(C,P5);
CCIv = CCI(CCIP);
var1 = 0;
if C > mav1 and mav1 > O Then
var1 = var1+1;
if C > mav2 and mav2 > O Then
var1 = var1+1;
if C > mav3 and mav3 > O Then
var1 = var1+1;
if C > mav4 and mav4 > O Then
var1 = var1+1;
if C > mav5 and mav5 > O Then
var1 = var1+1;
var2 = 0;
if C < mav1 and mav1 < O Then
var2 = var2+1;
if C < mav2 and mav2 < O Then
var2 = var2+1;
if C < mav3 and mav3 < O Then
var2 = var2+1;
if C < mav4 and mav4 < O Then
var2 = var2+1;
if C < mav5 and mav5 < O Then
var2 = var2+1;
if Tcond == true then
{
if MarketPosition <= 0 and
var1 >= 2 and
CCIv > CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
buy("b",AtStop,NextBarSdate+PriceScale*1);
if MarketPosition >= 0 and
var2 >= 2 and
CCIv < CCIv[1] and
highest(h,진폭봉수) >= lowest(L,진폭봉수)+PriceScale*진폭틱수 and
AccumN(var1,N) <= 돌파봉수 then
sell("s",AtStop,NextBarSdate-PriceScale*1);
if MarketPosition == 1 then
{
if C < O Then
ExitLong("bx1");
}
if MarketPosition == -1 then
{
if C > O Then
ExitShort("sx1");
}
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStoploss(PriceScale*손절틱수,PointStop);
if EndTime > Starttime Then
SetStopEndofday(EndTime);
if EndTime < Starttime Then
{
if sdate != sdate[1] Then
SetStopEndofday(EndTime);
if bdate != bdate[1] Then
SetStopEndofday(0);
}
즐거운 하루되세요
> 가날 님이 쓴 글입니다.
> 제목 : 시스템식 부탁드려요
> 매매 시작시간은 오전 9시 10분 종료시간은 13시
매수조건 :
전양봉이 몸통으로 5 10 20이평을(순서는 상관없음) 돌파후 양봉시작 + CCI 우상향일시
+ 이전 최근 5봉의 최저점 최고점 진폭 50틱이상 + 이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우
매도조건 :
전음봉이 몸통으로 5 10 20이평을(순서는 상관없음) 돌파후 양봉시작 + CCI 우하향일시 매도
+ 이전 최근 5봉의 최저점 최고점 진폭 50틱이상 + 이전 최근 5봉의 몸통으로 응봉이든 양봉이든 5 10 20분봉(순서는 상관없음) 돌파한봉이 3개이하 일경우
청산조건 :
매수후 완성봉이 음봉나올때 나 수익 100틱 손절 100틱
매도후 완성봉이 양봉이 나오면 청산 수익 100틱 손절 100틱
제가 숫자로 지정한것들은 변수로 설정 부탁드립니다
-----------------------
추가적으로 위 시스템이랑 모두 같은 조건에서
전양봉이 몸통으로 5 10 20분봉(순서는 상관없음) 돌파후 양봉시작 을
->
전양봉이 몸통으로 5 ,10,20,60,120 이평선중에 ( 순서는 상관없음) 2개 분봉 돌파
음봉도 반대의 경우로 매매할수있는 시스템식도 추가적으로 부탁드려요
총2개 부탁드려요
요청이 많아서 죄송 합니다
2020-06-10
2397
글번호 139671