커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7499
글번호 230811
답변완료
참조 문의
안녕하세요
틱차트를 시스템 적용 차트로 사용하고 있는데 수급을 참조할때 틱차는에는 불규칙하게
나옵니다.
1분봉 차트에 적용한 수급 참조를 틱차에 불러오는 방법은 없나요?
만약 가능하다면 자세한 적용 방법을 알려주시면 감사하겠습니다.
그리고 차트 상단에 사슬 고리 모양의 아이콘이 있는데 이것은 어떻게 사용하는 건가요?
2014-07-31
153
글번호 77279
외환달러 님에 의해서 삭제되었습니다.
2014-07-30
15
글번호 77277
답변완료
거래 시간 수식 좀 넣어 주세요 ~~
value1 = ma(C, shortPeriod);
value2 = ma(C, longPeriod);
Condition1 = ExitDate(1) == sdate and (IsExitName("StopLoss",1) or IsExitName("StopProfittarget",1));
if dayPL < 100 and DayPL > -100 Then{
If CrossUP(value1, value2) Then
{
if MarketPosition == -1 or
(MarketPosition == 0 and Condition1 == false) Or
(MarketPosition == 0 and Condition1 == true and TimeToMinutes(stime) >= TimeToMinutes(ExitTime(1))+5) Then
Buy();
}
If CrossDown(value1, value2) Then
{
if MarketPosition == -1 or
(MarketPosition == 0 and Condition1 == false) Or
(MarketPosition == 0 and Condition1 == true and TimeToMinutes(stime) >= TimeToMinutes(ExitTime(1))+5) Then
Sell();
}
}
....................................................................................
위 수식에 7시 부터 16시까지의 거래 수식 stime >= 070000 and stime < 160000
요것 좀 넣어서 완성 좀 부탁합니다...어디에 첨부시켜야 되는지 ,,,
지식이 낮아 완성시키기 힘드네요... 수고하십시요...감사합니다
2014-07-30
190
글번호 77275
답변완료
문의
> 시스템식 부탁합니다.
일봉 (피라미딩20)
매수: 오늘의 종가 > 어제의 종가 , 종가에 매수
매도: 시장가격이 매수한평균값보다 +1.5% 이상일때 종가에 매도청산
2014-07-30
140
글번호 77272
답변완료
37372 재질문
함수 화일 저장하고 수식 만들어서 검증하니 "외부 입력값을 넣으세요" 라는 오류 메세지가 뜹니다.
2014-07-30
132
글번호 77267
답변완료
문의
시스템식 부탁합니다.
일봉(시뮬레이션용)
매수: 오늘의 종가 > 어제의 종가 , 내일의 시작가에 매수
매도: 매수한평균값이 어제의 종가보다 +1% 이상일때 오늘 시작가에 매도청산
2014-07-30
144
글번호 77265
좋은하루7 님에 의해서 삭제되었습니다.
2014-07-30
9
글번호 77259
답변완료
알람작동
아래와 같이 피봇라인에서 소리를 나게 할려고 하는데, 이상하게 소리가 안나는데 뭔가 잘못되었나요?
Var: Value1(0),Value2(0),Value3(0),Value4(0),Value5(0);
Value1 = (DayHigh(1) + DayClose(1) + DayLow(1))/3; //중심선
Value2 = Value1+DayHigh(1)-DayLow(1); //2차저항
Value3 = 2 * Value1 - DayLow(1); //1차저항
Value4 = 2 * Value1 - DayHigh(1); //1차지지
Value5 = Value1-DayHigh(1)+DayLow(1); //2차지지
If Close == Value1 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value2 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value3 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value4 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
If Close == Value5 Then{
PlaySound("C:₩예스트레이더₩Data₩sound₩stop.wav");
}
2014-07-30
144
글번호 77258
답변완료
감사드립니다
모지표를 보고 질의 올립니다...
Input :short(5),Long(20);
Var : T(0),mav1(0),mav2(0),HH(0),LL(0),PreHH(0),PreLL(0),VV(0);
mav1 = ma(c,short);
mav2 = ma(c,long);
if crossup(mav1,mav2) Then{
plot1(L,"ZigZag",BLUE);
T = 1;
VV = (mav1+mav2)/2;
HH = H;
LL = L;
PreHH = HH[1];
PreLL = LL[1];
}
if CrossDown(mav1,mav2) Then{
plot1(H,"ZigZag",RED);
T = -1;
VV = (mav1+mav2)/2;
HH = H;
LL = L;
PreHH = HH[1];
PreLL = LL[1];
}
if H > HH Then
HH = H;
if L < LL Then
LL = L;
if PreHH > 0 and PreLL > 0 Then{
if T == 1 Then{
plot2(VV+(PreHH-PreLL)*0,"하락0%");
plot3(VV+(PreHH-PreLL)*0.236,"하락23.6%");
plot4(VV+(PreHH-PreLL)*0.382,"하락38.2%");
plot5(VV+(PreHH-PreLL)*0.500,"하락50%");
plot6(VV+(PreHH-PreLL)*0.618,"하락61.8%");
plot7(VV+(PreHH-PreLL)*0.764,"하락76.4%");
plot8(VV+(PreHH-PreLL)*1.000,"하락100%");
}
if T == -1 Then{
plot2(VV-(PreHH-PreLL)*0,"하락0%");
plot3(VV-(PreHH-PreLL)*0.236,"하락23.6%");
plot4(VV-(PreHH-PreLL)*0.382,"하락38.2%");
plot5(VV-(PreHH-PreLL)*0.500,"하락50%");
plot6(VV-(PreHH-PreLL)*0.618,"하락61.8%");
plot7(VV-(PreHH-PreLL)*0.764,"하락76.4%");
plot8(VV-(PreHH-PreLL)*1.000,"하락100%");
}
}
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 DayIndex == 0 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 Time >= 151500 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"); //지표속성 -> 차트표시 -> 채우기 -> 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");
위의 지표에서
하락0%보다 하락100%가 위에 있고 CC[0]>OO[0]이면
a가 하락0%보다크고 하락100%보다작을때
현재가가 a를 크로스없하면 매수,
하락0%보다 하락100%가 아래에 있고 CC[0]<OO[0]이면
b가 하락0%보다 작고 하락100%보다 클때
현재가가 b를 크로스다운하면 매도
하락100%가 하락0%를 크로스다운하고 현재가가 하락0%보다 작으면 매수청산
하락100%가 하락0%를 크로스업하고 현재가가 하락0%보다 크면 매도청산
만들때 같은내용의 지표가 있다고 수정을 요해서 어려워서 부탁드립니다
부탁드립니다
2014-07-30
197
글번호 77257