커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4502
글번호 230811
답변완료
부탁해요
아래의지표를 복합장의 차트로 변경부탁합니다,,,
input:renkoSize(0.5),length(10),NumATRs(1.5);
var:j(0),k(0),renkoCnt(0),gubun(0),Sum(0),trSum(0),atrV(0),time1(0),filename("renko3.txt"),printOK(False);
array:OO[50](0),HH[50](0),LL[50](0),CC[50](0),
TR[50](0), //True Range
upperLine[50](0), //상단채널
lowerLine[50](0), //하단채널
maV[50](0); //이평선
if stime >= 180000 or stime < 090000 then{
If index == 0 or (stime == 180000) or (stime > 180000 and stime[1] < 180000) Then { //break on session에 해당, 즉 일자가 바뀌면 새로 계산
gubun = 0; //방향을 초기화한다. 이후 형성되는 가격에 의해 방향이 계산
For j = 49 DownTo 1 { //금일 시가봉을 신규 추가
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
OO[0] = C; //분봉의 종가를 기반으로 계산하기 때문에 당일 시초가 아니다
HH[0] = C;
LL[0] = C;
CC[0] = C;
}
Else {
If gubun == 0 and CC[0] > 0 Then { //일 첫봉이 완성되지 않은 시점
If OO[0] - renkoSize >= C Then {
gubun = -1; //하락 방향
CC[0] = OO[0] - renkoSize; //음봉
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]); //true range 계산식 참조
//macd 계산 당시와 마찬가지로 sum 값이 있을 때만 처리
If sum > 0 Then {
sum = sum + CC[0] - CC[length]; //이평선 계산 원리 그대로, 현재가를 더하고 n봉전 가격 뺌
trSum = trSum + TR[0] - TR[length]; //true range의 합을 계산
maV[0] = Sum / length; //n개의 종가 합을 n으로 나누어 이동평균 계산
atrV = trSum / length; //ATR 계산식 참조
upperLine[0] = maV[0] + atrV * NumATRs; //상단 밴드 계산
lowerLine[0] = maV[0] - atrV * NumATRs; //하단 밴드 계산
}
j = 0;
if printOK then print(filename,"1=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
Else If OO[0] + renkoSize <= C Then {
gubun = 1; //상승 방향
CC[0] = OO[0] + renkoSize; //양봉
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
If sum > 0 Then { //계속 반복되는 공통 루틴이므로 if문 바깥으로 뺄까도 했으나
sum = sum + CC[0] - CC[length]; //더 복잡해지므로 copy & paste로 처리
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0;
if printOK then print(filename,"2=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
If LL[0] - renkoSize >= C Then {
gubun = -1;
renkoCnt = Int(Round((LL[0]-C)/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = LL[j+1];
CC[j] = LL[j+1] - renkoSize;
HH[j] = OO[j];
LL[j] = CC[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"3=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If HH[0] + renkoSize <= C Then {
gubun = 1;
renkoCnt = Int(Round((C-HH[0])/renkoSize,9));
if renkoCnt > 49 then renkoCnt = 49;
For j = 49 DownTo renkoCnt {
OO[j] = OO[j-renkoCnt];
HH[j] = HH[j-renkoCnt];
LL[j] = LL[j-renkoCnt];
CC[j] = CC[j-renkoCnt];
TR[j] = TR[j-renkoCnt];
maV[j] = maV[j-renkoCnt];
upperLine[j] = upperLine[j-renkoCnt];
lowerLine[j] = lowerLine[j-renkoCnt];
}
For j = renkoCnt-1 DownTo 0 {
OO[j] = HH[j+1];
CC[j] = HH[j+1] + renkoSize;
HH[j] = CC[j];
LL[j] = OO[j];
TR[j] = max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
If sum > 0 Then {
sum = sum + CC[j] - CC[j+length];
trSum = trSum + TR[j] - TR[j+length];
maV[j] = Sum / length;
atrV = trSum / length;
upperLine[j] = maV[j] + atrV * NumATRs;
lowerLine[j] = maV[j] - atrV * NumATRs;
}
if printOK then print(filename,"4=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
Else If sTime >= 45500 and stime < 090000 Then { //당일 종가봉에서
For j = 49 DownTo 1 {
OO[j] = OO[j-1];
HH[j] = HH[j-1];
LL[j] = LL[j-1];
CC[j] = CC[j-1];
TR[j] = TR[j-1];
maV[j] = maV[j-1];
upperLine[j] = upperLine[j-1];
lowerLine[j] = lowerLine[j-1];
}
If LL[1] > C Then { //종가가 이전 봉보다 아래 형성
OO[0] = LL[1];
CC[0] = C;
HH[0] = OO[0];
LL[0] = CC[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else If HH[1] < C Then { //종가가 이전 봉보다 위에 형성
OO[0] = HH[1];
CC[0] = C;
HH[0] = CC[0];
LL[0] = OO[0];
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
} Else { //종가가 이전 봉의 중간에 형성
OO[0] = C;
CC[0] = C;
HH[0] = C;
LL[0] = C;
TR[0] = max(CC[1],HH[0]) - min(CC[1],LL[0]);
}
If sum > 0 Then {
sum = sum + CC[0] - CC[length];
trSum = trSum + TR[0] - TR[length];
maV[0] = Sum / length;
atrV = trSum / length;
upperLine[0] = maV[0] + atrV * NumATRs;
lowerLine[0] = maV[0] - atrV * NumATRs;
}
j = 0; //채널 값을 새로이 계산
if printOK then print(filename,"5=>,%.0f,%.0f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f",j,gubun,OO[j],HH[j],LL[j],CC[j]);
}
}
if sum == 0 and CC[length] > 0 then {
for j = 0 to length - 1 {
sum = sum + CC[j];
trsum = trsum + max(CC[j+1],HH[j]) - min(CC[j+1],LL[j]);
}
}
}
If OO[0] > 0 Then Plot1(OO[0],"OO",iff(OO[0] > CC[0],BLACK,MAGENTA)); //지표속성 -> 차트표시 -> 채우기 -> OO < CC 면 빨강 추가
If CC[0] > 0 Then Plot2(CC[0],"CC"); // OO > CC 면 파랑 추가
if upperLine[0] > 100 then plot3(upperLine[0],"UpperBand");
if lowerLine[0] > 100 then plot4(lowerLine[0],"LowerBand");
if maV[0] > 100 then plot5(maV[0],"MidLine");
2016-10-21
165
글번호 103175
qha71 님에 의해서 삭제되었습니다.
2016-10-21
39
글번호 103174
답변완료
신호 수정 의뢰드려요
아래는 지난번에 만들어 주신 수식인데 잘 사용하고 있습니다!
감사합니다.
다름이 아니고 신호가 현재는 한 방향만 나오는데 전 골드, 데드 구간에서
매수 매도 신호가 양방향 전부 다 나왔으면 좋겠습니다.
수정 부탁 드려요!
Input : short(25), long(26), sig(9),Period(20);
var : T(0),MACDV(0),MACDS(0),CCIV(0);
MACDV = MACD(short, long);
MACDS = ema(MACDV, sig);
CCIV = CCI(Period);
If CrossUP(MACDV, MACDS) Then
{
T = 1;
}
If CrossDown(MACDV,MACDS) Then
{
T = -1;
}
#골드구간에서는 매수와 매수청산만
if T == 1 Then{
If CrossUp(CCIV,-100) Then
{
Buy("b");
}
If CrossDown(CCIV,100) Then
{
ExitLong("bx");
}
}
#데드구간에서는 매도와 매도청산만
if T == -1 Then{
If CrossDown(CCIV,100) Then
{
sell("s");
}
If CrossUp(CCIV,-100) Then
{
ExitShort("sx");
}
}
SetStopProfittarget(PriceScale*4,PointStop);
2016-10-20
131
글번호 103173
답변완료
시스템 수식 요청드립니다
안녕하세요 수식 문의 드립니다.
크루드오일 22시30분봉부터 00시까지
기준선 HC와 실시간 현재가격이 동일하면 매도진입
기준선 LC와 실시간 현재가격이 동일하면 매수진입
익절은 20틱 손절은 15틱입니다.
진입시에는 02시까지 운용합니다.
기준선 식은 아래와 같습니다.
HC=(dayhigh+dayclose)/2
LC=(daylow+dayclose)/2
부탁드립니다~
2016-10-20
114
글번호 103172
답변완료
부탁드립니다.
5분챠트 매시간 4번째봉 고가보다 그 이후의 봉의 종가가 같거나 높으면 빨간색으로, 저가보다 그 이후의 봉의 종가가 같거나 낮으면 파란색으로 칠해주세요. 감사합니다.
2016-10-20
107
글번호 103171
답변완료
질문이 있습니다.
안녕하세요?
아래 분할 매수/매도로 활용하고 있습니다.
예) if Dayopen <= 기준선 and crossup(c, 기준선) then
buy("b1",OnClose,def,vol1);
그런데, 모의로 매매한 금액이랑 지표에서 매매한 호가가 틀린데요.
(장중 모의로 매수한 호가 vs 장후 시스템 성능보고서에서 표시된 매수한 호가)
1. 이유가 무엇인가요?
2. 그리고 미완성봉시 기준선만 돌파하면 매수를 하는 방법은 없나요?
안된다면 onclose 가 아니라 onopen 기능과 유사한 성능으로 사용할 수 있도록
식을 작성 부탁드립니다.
3. 무조건 시초가 매매를 할 수 있는 식 부탁드립니다.
onclose는 완성봉 종가이고 atmarket 로 하면 완성봉 다음 시초가인데
다른식으로 풀어서 시초가 매매를 시장가로 매수할 수 있는 식이 궁금합니다.
아래 식으로 응용하면 될 것 같은데 잘 안되네요..
if MarketPosition == 0 and NextBarSdate != sdate and NextBarOpen >= C Then
buy("b1",atmarket,def,vol1);
2016-10-20
101
글번호 103170
답변완료
문의드립니다.
현재 전에 알려주신 트레일링스탑 구간별 청산을 적용해 놓았습니다.
현재는 같은 계약수를 매수매도 진입하여 사용하고 있는데요.
2계약을 매수신호에 진입하여
1계약을 10틱수익이나면 청산하고 나머지 1계약은
이미 설정되어있는 트레일링스탑 구간에 따라 청산되도록 설정이 가능할까요 ?
미리 감사드립니다.
2016-10-20
100
글번호 103169
답변완료
키움 수식 변경 부탁드려요
안녕하세요!
아래는 키움 수식이고 예스용으로 변경을 부탁드려요!
[수식1]
A=AVG(C,3);
B=AVG(C,20);
HIGHESTSINCE(1,A>B,B)
[수식2]
A=AVG(C,3);
B=AVG(C,20);
LOWESTSINCE(1,A<B,B)
[수식3]
AVG(C,20)
감사합니다!
2016-10-20
200
글번호 103168
답변완료
가격 갱신 횟수 표시
안녕하세요?
아래 조건을 만족하는 지표 작성 부탁합니다.
1. 당일 신고가 갱신 할 때마다 갱신 횟수를 신고가 위에 텍스트(빨간색)로 표시하고자 합니다.
2. 단, 신고가가 나온 후 신고가 보다 작은 음봉이 1개이상 완성될 때만 신고가로 인정합니다.
3. 마찬가지로 당일 신저가가 갱신되고 이후에 양봉 완성 시 신저가의 갱신 횟수를 신저가 아래에 파란색으로 표시합니다.
감사합니다.
2016-10-20
111
글번호 103167