커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
2548
글번호 230811
매치다는 님에 의해서 삭제되었습니다.
2022-10-18
3
글번호 163086
답변완료
파동의 저점과 고점 위치
안녕하십니까.
아래 프로그램으로 장중 파동의 고점과 저점의 봉의 데이터 값, 즉 첨부된 그름 파일에서 붉은 색 값인 경우 +1로 출력하고 푸른색의 값인 경우 -1로 리턴하는 함수를 작성하고자 합니다. 도움 좀 부탁드립니다.
사용 목적은 파동의 고점과 저점 봉의 데이터 출력하고자 합니다.
(죄송스럽게도 제가 로직 이해가 부족해서 인지 정확히 숫자 찍히는 고점과 저점 지점을 잡을 수가 없네요)
Input:P(0),length(10);
Var:j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),
Text1(0),처리구분(""),T(0),TL3(0),TL4(0),TL5(0);
Array:고점[10,2](0),저점[10,2](0); //가격,위치
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L
Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
TL_Delete(TL2);
TL_Delete(TL3);
TL_Delete(TL4);
TL_Delete(TL5);
If TL_GetBeginDate(TL1) == sDate[sBar] and
TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL2 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL3 = TL_New(sDate[sBar],sTime[sBar],저점[1,1]+(고점[1,1]-저점[1,1])*0.382,sDate[eBar],sTime[eBar],저점[1,1]+(고점[1,1]-저점[1,1])*0.382);
TL4 = TL_New(sDate[sBar],sTime[sBar],저점[1,1]+(고점[1,1]-저점[1,1])*0.500,sDate[eBar],sTime[eBar],저점[1,1]+(고점[1,1]-저점[1,1])*0.500);
TL5 = TL_New(sDate[sBar],sTime[sBar],저점[1,1]+(고점[1,1]-저점[1,1])*0.618,sDate[eBar],sTime[eBar],저점[1,1]+(고점[1,1]-저점[1,1])*0.618);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(고점[1,1],P));
Var1 = 고점[1,1];
Text_SetStyle(Text1, 2, 1);
Text_SetColor(Text1,Blue);
} # End of If 고점[1,2] < 저점[1,2] or 고점[1,1] < H
} # End of If 처리구분 == "고점처리"...
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
TL_Delete(TL2);
TL_Delete(TL3);
TL_Delete(TL4);
TL_Delete(TL5);
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
} # End of If TL_GetBeginDate(TL1) ==
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL2 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL3 = TL_New(sDate[sBar],sTime[sBar],고점[1,1]-(고점[1,1]-저점[1,1])*0.382,sDate[eBar],sTime[eBar],고점[1,1]-(고점[1,1]-저점[1,1])*0.382);
TL4 = TL_New(sDate[sBar],sTime[sBar],고점[1,1]-(고점[1,1]-저점[1,1])*0.500,sDate[eBar],sTime[eBar],고점[1,1]-(고점[1,1]-저점[1,1])*0.500);
TL5 = TL_New(sDate[sBar],sTime[sBar],고점[1,1]-(고점[1,1]-저점[1,1])*0.618,sDate[eBar],sTime[eBar],고점[1,1]-(고점[1,1]-저점[1,1])*0.618);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(저점[1,1],P));
Var2 = 저점[1,1];
Text_SetStyle(Text1, 2, 8);
Text_SetColor(Text1,Red);
} # End of If 저점[1,2] < 고점[1,2] or 저점[1,1] > L
} # End of If 처리구분 == "저점처리"
TL_SetSize(TL1,0);
TL_SetColor(TL1,GRAY);
2022-10-18
1439
글번호 163085
답변완료
수식 문의 드립니다.
IF marketposition == 1 and OpenPositionProfit>loss*5 and data2(C)<entry2 Then
SetStopTrailing(loss,loss*5,PointStop);
SetStopLoss(loss,PointStop);
loss는 ATR(10)이고
data2는 코스피 5분봉이며
entry는 data2의 당일매도역치 설정 기준입니다.
의도는 수익이 loss*5 이상인 상황에서 loss 만큼 빠지면 이익청산한다 입니다.
이때 혹시 트레일링스탑 과최적화가 발생할 수 있습니까?
https://blog.naver.com/chartist/30035941729
이 글을 읽고 혹시나 싶어서 질문 드립니다.
항상 감사합니다.
2022-10-18
1428
글번호 163080
답변완료
당일 데이타만 사용하는식 부탁드립니다
아래 swing함수로 신호를 발생시키면 막 당일 첫봉에도 신호가 발생됩니다.
전날 봉을 인식해서 인것 같은데요 당일 데이타만 사용하는 식 부탁드립니다.
sdate? 사용법을 몰라서, 미리 감사.
//바닥발생 간단식
input : Left(3),right(3),DN(4),TS(20),loss(20);
var : b1(0),LL(0),entry(0),h2(0);
if SwingLow(1,L,left,right,Left+right+1) != -1 Then
{
b1 = L[right]; //swin1glow가 발생하면 그 Low값(왼쪽3봉전값?)을 b1에 저장히고
}
if MarketPosition == 0 Then {
Buy("b1",AtStop,B1);// b1가격에 걸리면 주문발생 AtLimit?
}
SetStopTrailing(DN,TS,PercentStop,1);
2022-10-18
1154
글번호 163079
포보스 님에 의해서 삭제되었습니다.
2022-10-18
0
글번호 163078
답변완료
내부변수 선언위치
안녕하세요.
시스템식에서 내부변수선언부분을 수식중간에 넣는거랑, 수식제일 앞에 두는거랑 어떤차이가
있는지요?
VARS: count1(0),count2(0),count3(0);
가령, 분봉차트에 일봉을 계산하는데 필요한 내부변수들이라면, 매분마다 읽을필요는 없이
일자가 변경될때만 한번 읽어주면 될거같은데,
중간에서 선언시 계속 반복될것 같기도 하구요.
실제 운용시 매매에 영향을 주는 요인인지 궁금합니다.
2022-10-18
1352
글번호 163077
답변완료
신호타입
안녕하십니까 !!
갑자기 추위가 왔네요 감기 조심하세요^^
항상 도움 주심에 감사합니다.
아래 항목에 의문이 있어 질의 드립니다.
기준: 일봉 주식
질의 1번.
신호타입 OnClose로 예비진입신호가 발생한 수식을 AtStop으로 바꾸었는데, 수식변환이 잘 못 된 것인지 익일 신호로 나오고 있습니다.
또한, 두 개의 신호타입 별로 전체 거래 횟수도 조금 틀리게 나옵니다.
무엇이 잘 못 된 것인지요?
질의 2번.
신호타입 OnClose로 진입시 익일시초가 수신시 시스템 성능보고서에 예비신호가 발생한 날의 종가로 진입하게 되어 있는데, 이것을 익일시초가로 바꿀 수 있는지요?
3번 .
시간이 되면 원격접속을 부탁 드립니다. 바쁘시면 QnA 게시글로 알려주십시요.
### 질의 시스템 수식
# 시스템명 : HA_Trade
#------------<백테스팅 시뮬레이션 최적화변수>---------------------#
input : 시스템실행구분(0) ; # 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:자동주문, 3:필터링, 4:전진분석)
input : 분할화면번호(0) ; # 전략실행차트(가로5, 세로6)의 분할화면번호
#input : 최적화_진입청산구분(4) ; # 최적화_진입/청산구분 , <0:최적화없음>, <진입:4 청산:8>, <진입(필터채택시):5 청산(필터채택시):9>
var : 백테스팅기간조건(False), 전진분석기간조건(False), Print기간조건(False), 기간평가일(20081230), 숫자증가(0) ; #기간평가일(20081230)20220929
var : 최적화_진입청산구분(4) ; # 최적화_진입/청산구분 , <0:최적화없음>, <진입:4 청산:8>, <진입(필터채택시):5 청산(필터채택시):9>
#======================================================#
# 초기화 처리
#---------------전체기간 조건처리----------------------------#
백테스팅기간조건 = 시스템실행구분 == 0 and ( 20030101 <= bDate and bDate <= 20081231 ) ; // 최적화, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석)
#백테스팅기간조건 = 시스템실행구분 == 0 and ( 20000101 <= bDate and bDate <= 20220926 ) ; // 최적화, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석)
전진분석기간조건 = 시스템실행구분 == 4 and ( 20000101 <= bDate and bDate <= 20220429 ) ; // 전진분석, 시스템실행구분(0:백테스팅&&최적화, 1:시험적용, 2:매매일지, 3:필터링, 4:전진분석)
If 전진분석기간조건 == True Then 백테스팅기간조건 = False ;
If 백테스팅기간조건 == True Then 전진분석기간조건 = False ;
Print기간조건 = 백테스팅기간조건 == True or 전진분석기간조건 == True or 시스템실행구분 == 1 or 시스템실행구분 == 2 or 시스템실행구분 == 3;
#======================================================#
Vars: ha_몸통비율(0), ha_몸통비율_진입(0), ha_몸통비율_청산(0) ; # 20221008 추가
#======================================================#
# 출처 : HA_지표_Total.yin
#======================================================#
# Heikin Ashi Candle 계산식
# input : P0(7) ;
var : P0(7) ;
Vars: ha_O(0), ha_C(0), ha_H(0), ha_L(0) ;
Vars: ha_MAv(0), ha_MAv기울기(0) ;
#------------------------------------------------------#
ha_O = (ha_O[1] + ha_C[1]) / 2 ; # 시가 = (이전 막대의 시가+이전막대의 종가)/2, 직전HA의 몸통 중간값(절반)
If Index == 0 then ha_O = O ;
ha_C = (O+H+L+C)/4 ; # 종가 = 캔들의 4median
ha_H = MaxList(H, ha_O, ha_C) ;
ha_L = MinList(L, ha_O, ha_C) ;
ha_MAv = EMA(ha_C, P0) ;
ha_MAv기울기 = (ha_MAv[0] - ha_MAv[1]) / ha_MAv[1] ;
#======================================================#
#======================================================#
# HA Candle 머리길이, 꼬리길이, 몸통길이, 전체길이, 매수/도세힘 계산
Vars: ha_전체길이(0), ha_몸통길이(0), ha_머리길이(0), ha_꼬리길이(0) ; # 머리길이, 꼬리길이, 몸통길이, 전체길이 계산
Vars: ha_매수세힘(0), ha_매도세힘(0) ; #미사용변수
Vars: MA_ha전체(0), MA_ha몸통(0), MA_ha머리(0), MA_ha꼬리(0) ;
#------------------------------------------------------#
ha_전체길이 = ha_H - ha_L ;
ha_몸통길이 = MaxList(ha_O, ha_C) - MinList(ha_O, ha_C) ;
ha_머리길이 = ha_H - MaxList(ha_O, ha_C) ;
ha_꼬리길이 = MinList(ha_O, ha_C) - ha_L ;
If ha_O < ha_C Then ha_매수세힘 = ha_H - ha_O ; #미사용변수
If ha_O >= ha_C Then ha_매도세힘 = ha_O - ha_L ; #미사용변수
MA_ha전체 = Ma(ha_전체길이, P0) ;
MA_ha몸통 = Ma(ha_몸통길이, P0) ;
MA_ha머리 = Ma(ha_머리길이, P0) ;
MA_ha꼬리 = Ma(ha_꼬리길이, P0) ;
#======================================================#
#======================================================#
# Four 파라볼릭(주가:Sar,CSar , HA:ha_Sar,ha_CSar)의 구간을 비교하여 같으면 동일 색표시, 틀리면 Yellow
#Input : af(0.02), maxAF(0.2);
var : af(0.02), maxAF(0.2);
Var : SarV(0), CSarV(0), ha_SarV(0), ha_CSarV(0) ;
Var : PSar_상승cc(False), PSar_하락cc(False), PSar_횡보cc(False);
#------------------------------------------------------#
SarV = Sar(af,maxAF); # 주가 High Low Parabolic (S)top (A)nd (R)eversal
CSarV = CSar(af,maxAF); # 주가 Close Parabolic (S)top (A)nd (R)eversal
ha_SarV = ha_Sar(af,maxAF,ha_O,ha_C,ha_H,ha_L); # HA High Low Parabolic (S)top (A)nd (R)eversal
ha_CSarV = ha_CSar(af,maxAF,ha_O,ha_C,ha_H,ha_L); # HA Close Parabolic (S)top (A)nd (R)eversal
#나중에 4개 개별조합을 생각해야한다.
PSar_상승cc = SarV < C and CSarV < C and ha_SarV < ha_C and ha_CSarV < ha_C ; # 상승추세, Red
PSar_하락cc = SarV > C and CSarV > C and ha_SarV > ha_C and ha_CSarV > ha_C ; # 하락추세, Blue
PSar_횡보cc = PSar_상승cc == False and PSar_하락cc == False ; # 횡보추세, Yellow
#======================================================#
#======================================================#
# 진입/청산
var : 청산조건(False) , 진입조건(False);
var : 추세점수(0) ;
Array : FL[1024](False) ; # 필터조건변수, [0]번은 버리고, [1]번부터 [10]번까지 사용 2^10 = 1024
#------------------------------------------------------#
# 필터 등록
#필터사용 전략식명: HA_지표_Total.yin
#------------------------------------------------------#
# 필터 케이스
FL[001] = ha_몸통비율 > 0 ;
FL[008] = PSar_상승cc == True ;
if MA_ha몸통 < ha_몸통길이 and MA_ha전체 < ha_전체길이 then {
if ha_O[0] < ha_C[0] Then ha_몸통비율 = ha_몸통길이 / ha_전체길이 ; # HA양봉
if ha_O[0] > ha_C[0] Then ha_몸통비율 = (ha_몸통길이 / ha_전체길이) * -1 ; # HA음봉
}
#------------------------------------------------------#
# 진입 신호타입 : (0)OnClose / (1)AtStop
input :신호타입(0);
#------------------------------------------------------#
# OnClose
if 신호타입 == 0 Then {
진입조건 = FL[001] == true and FL[008] == true
and 0.33 < ha_몸통비율 ;
if 진입조건 == True and Print기간조건 == True and MarketPosition == 0 Then
{
buy("on49") ; # 속성창 비용/수량탭의 고정자산으로 사전입력 관리
}
}
#------------------------------------------------------#
# AtStop
var : imsi(0);
if 신호타입 == 1 Then {
진입조건 = FL[001] == true and FL[008] == true ;
if 0.33 < ha_몸통비율 Then
imsi = C;
Else imsi = 0;
if 진입조건 == True and Print기간조건 == True and MarketPosition == 0 Then
{
buy("at49", AtStop, imsi) ;
}
}
#------------------------------------------------------#
# 청산
#------------------------------------------------------#
If marketposition == 1 Then {
ExitLong("XL",AtStop,Highest(H,BarsSinceEntry+1)-ATR(14)*2.5);
SetStopLoss(5,PercentStop);
}
If MarketPosition == 0 Then { #무포 손절 Clear
SetStopLoss(0, PercentStop);
}
#======================================================#
2022-10-18
1346
글번호 163074
답변완료
수식전환 부탁
다음 수식을 예스수식으로 전환부탁드립니다.
<1>강조
a=shift(close,p);
b=ma(c,period);
crossup(c,p1) or c>b(p2)
추가설정
p 음수 9
p1 양수 5
p2 양수 10
<2>지표
수식1
a=ma(가격,기간,이평종류);
highest(a,폭,0)
수식2
a=ma(가격,기간,이평종류);
lowest(a,폭,0)
이평종류 단순
가격 종가
기간 20
폭 2
<3>지표
수식1
MA(O,period,이평종류)
수식2
MA(C,period,이평종류)
수식3
MA(O,period1,이평종류)
수식4
MA(C,period1,이평종류)
설정
period 10
period1 20
이평종류 단순
2022-10-18
1314
글번호 163073
답변완료
종목검색 수식 부탁드립니다
안녕하세요
고생이 많으십니다 종목검색 수식은 너무 험난하네요
수식 좀 부탁 드리겠습니다
1.1분봉
A = MA(가격,이평기간,이평방법); // 종가,240,단순
b=A + AvgIf( c - A, -1, 0.0 )
-2*StdevIf( c - A, -1, 0.0 );
crossup (c,b)
2.1분봉
거대량순위 100
기간1 1, 기간2 20,방법 단순, midPeriod 17,
A=RSI(7);
A1=RSI(21);
d=ma(c,기간1,방법);
e=ma(c,기간2,방법);
f=(highest(high,midPeriod)+lowest(low,midPeriod))/2;
(O<=C && L<=f && C>f ) or
O<=C && L<=f && C>f &&
crossup(d,e) && CROSSUP(A,A1)
수고하세요.
2022-10-18
1407
글번호 163072