커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3467
글번호 230811
답변완료
수식문의 드립니다.
매수 : 두봉 의 최저점 대비 5 % 상승시 즉시 실시간 매수
메도 : 두봉 의 최고점 대비 5 % 하락시 즉시 실시간 매도
매도: 매입가 와 최고점 비교 수익의 5% 가 최고점 대비 하락시 즉시 실시간 매도
매도: 5개 봉 중 최고점대비 5% 하락시 즉시 실시간 매도
2020-02-21
316
글번호 136182
답변완료
제가 테스트로 만든 매도 시스템 인데요.
제가 테스트로 만든 매도 시스템 인데요.
1:50 분에 행잉맨이 발생하면
2:20 분에 close < high[1] 이면 매도
2:30 분에 close < high[1] 이면 매도
이런 단순한 프로그램인데요.
이 시스템이 생성한 파일을 보면 매도가 발생했다는 메시지가 나오는데요.
실제 매도는 안되요(매도 시스템을 적용했을때요)
한달 내내 이문제로 씨름 하고 있는데요 뭐가 문제인지 도저히 알수가 없어서..
고수님들께 문의 드려요.
아래 파일을 한번 봐주시면 감사드리겠습니다.
----------------------------------------------------
input : starttime(220000),endtime(020000),intervalMin(2),intervalHammer(4),interval25(1), interval30(2),deceisionDuration(1),hat(1.3),head(1.4),pricegap(0.07);
var : S1(0),D1(0),TM(0),TF(0);
var : CurMin(0);
var : curTime(0);
var : con2(False);
var : file_name("c:₩dantawang4-gc-xxxxxxxx.csv");
curMin = TimeToMinutes(time)-TimeToMinutes(sTime);
if(NextBarOpen > 0) Then
{
Print(file_name,"bar open 봉번호=%f 봉시작=%f 봉끝=%f barsinceentry[0]=%f BarsSinceEntry=%f " ,index, sTime,Time, BarsSinceEntry[0],BarsSinceEntry);
if HangingMan2(hat, head, pricegap) == True Then
{
con2 = True;
Print(file_name, "xHangingMan2--------------------------------------------------------------------------!");
Print(file_name,"[x-curtime=%f time=%f curmin=%f con2=%s time to create hanginman", CurrentTime(),time, curMin, con2 );
Value1 = time; #CurrentTime() ;
}
}
#MessageLog("curmin=%f intervalHammer=%f Close=%f", curmin, intervalHammer, Close);
Print(file_name,"curTime=%f time=%f curMin >= IntervalHammer %f >= %f " ,CurrentTime(),time, curmin, intervalHammer);
#Print(file_name, " %f current HangingMan2 time now!" , curTime);
if curMin >= IntervalHammer then {
Print(file_name," [curtime=%f time=%f Value1time=%f stime=%f con2=%s] <----------",CurrentTime(),time, Value1, stime,con2);
Print(file_name," TimeToMinutes(time) - TimeToMinutes(Value1)=%f TimeToMinutes(currunt) - TimeToMinutes(Value1)=%f",TimeToMinutes(time) - TimeToMinutes(Value1), TimeToMinutes(CurrentTime()) - TimeToMinutes(Value1));
Print(file_name, "%f %f e(%f>=%f) " , TimeToMinutes(time) , TimeToMinutes(Value1) , TimeToMinutes(time) - TimeToMinutes(Value1) , intervalMin);
if( con2 == True and ( TimeToMinutes(time) - TimeToMinutes(Value1) >= IntervalMin) ) Then {
#curTime = CurrentTime() + 1 ;
Print(file_name, "curTime=%f %f exit time!" ,CurrentTime(), Value1);
Condition10 = False;
Condition1 = False;
con2 = False;
Value10 = 0.0;
}
}
#----해머나 행잉맨을 찾은 후에--------------------------------------------------------------------------
#-----condition10=true이면
#25-30 분 사이에 결정.
Print(file_name , "%f curMin >= interval25 %f >= %f and %f < %f" ,time, curMin, interval25 ,curMin , Interval25 + deceisionDuration );
if curMin >= interval25 and curMin < Interval25 + deceisionDuration then {
Print(file_name , "1---------------------------------------------");
Print(file_name , "curTime=%f time=%f Close=%f < Close[1]=%f ",CurrentTime(), time,Close, Close[1]);
if( con2 == True and Close < Close[1] ) Then {
#Sell("sell1");
#sell("s",AtMarket);
Sell ("HM", AtStop,High[1]);
MessageLog("HangingMan sell!");
Print(file_name, "curTime=%f time=%f HangingMan sell! ",CurrentTime(), time);
Print(file_name,"curTime=%f time=%f High[1]=%f Low[1]=%f Close[1]=%f",CurrentTime(), time,High[1], Low[1], Close[1]);
Condition10 = false;
con2 = false;
Condition1 = false;
}
}
#----해머나 행잉맨을 찾은 후에--------------------------------------------------------------------------
#-----condition10=true이면
#30-35 분 사이에 결정.
Print(file_name , "curTime=%f time=%f curMin >= interval30 %f >= %f and %f < %f" ,CurrentTime(), time,curMin, interval30 ,curMin , interval30 + deceisionDuration );
if curMin >= interval30 and curMin < Interval30 + deceisionDuration then {
Print(file_name , "2---------------------------------------------");
Print(file_name , "curTime=%f time=%f Close < Close[1] Close=%f < Close[1]=%f ",CurrentTime(),time, Close, Close[1]);
if( con2 == True and Close < Close[1] ) Then {
#if MarketPosition[0] == 0 Then{
#Sell("sell2");
#sell("s2",AtMarket);
Sell ("HM2", AtStop,High[1]);
Print(file_name, "curTime=%f time=%f HangingMan sell! ",CurrentTime(), time);
Print(file_name,"curTime=%f time=%f High[1]=%f Low[1]=%f Close[1]=%f",CurrentTime(), time,High[1], Low[1], Close[1]);
#}
Condition10 = false;
con2 = false;
Condition1 = false;
#Value10 = 0.0;
}
}
# Condition1 == true 이면 다음 시그널 시작
#특정 시간 이후 청산.
if BarsSinceEntry == 1 Then
{
Print(file_name, "curTime=%f time=%f EXIT SHORT! ", CurrentTime(),time);
exitShort();
}
if MarketPosition[0] == -1 AND BarsSinceEntry == 0 AND High > High[1] Then
{
Print(file_name,"------------------------reached high!==============");
Print(file_name,"curTime=%f time=%f High[1]=%f", CurrentTime(),time,High[1]);
Print(file_name,"------------------------reached high!==============");
exitShort();
}
if MarketPosition[0] == -1 AND BarsSinceEntry == 1 AND High > High[2] Then
{
Print(file_name,"------------------------reached high!==============");
Print(file_name,"curTime=%f time=%f High[2]=%f", CurrentTime(), time,High[2]);
Print(file_name,"------------------------reached high!==============");
exitShort();
}
2020-02-21
410
글번호 136177
답변완료
지표문의
안녕하세요
보내주신 내용 잘 받았습니다. 감사합니다.
그리고 이해했습니다.
그런데, 죄송하지만 제가 프로그램 및 컴퓨터를 잘 몰라서,
그냥 5분, 15분, 30분 60분, 360분 볼린져 밴드챠트를 15분 기준으로
작성해 주시면 않될련지요?
바로 복사해서 붙혀넣기만 하면 되게 부탁드립니다.
번거롭게해서 죄송하지만 부탁드립니다.
감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 지표문의
>
안녕하세요
예스스탁입니다.
1
타주기의 계산은 기본차트의 배수가 되는 주기만 가능합니다.
하나수식에서 여러 타주기는 시간상 모두 작성해 드릴수 없습니다.
아래식으로 기본차트 주기의 배수로 "타주기분"조정해서 반복적용하시면 됩니다.
input : 타주기분(15),P(20),Dv(2);
var : S1(0),D1(0),TM(0),TF(0);
var : cnt(0),SumSqrt(0),Stdv(0);
var : sum(0),BBmd(0),Bbup(0),BBdn(0);
Array : CC[100](0);
if Bdate != Bdate[1] Then{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then{
for cnt = 1 to 99{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P] > 0 then{
sum = 0;
for cnt = 0 to P-1{
sum = sum + CC[cnt];
}
BBmd = sum/P;
SumSqrt = 0;
For cnt = 0 To P - 1 {
SumSqrt = SumSqrt + (CC[cnt] - BBmd)^2;
}
Stdv = SquareRoot(SumSqrt / P);
BBup = BBmd + (Dv * Stdv);
BBdn = BBmd - (Dv * Stdv);
plot1(BBmd);
plot2(BBup);
plot3(BBdn);
}
}
2
분봉에서 틱은 계산이 불가능합니다.
반대로 틱봉에서 분봉도 정확히 계산이 가능하지 않고
위 1번식 적용해서 근사값으로 보셔야 합니다.
틱봉에서 배수로 높은 다른 틱봉의 그리는 수식은 아래와 같습니다.
100틱봉에서 500틱은 N에 5로 지정해 주시면 됩니다.
input : N(5),P(20),Dv(2);
var : D1(0),TF(0),idx(0);
var : cnt(0),SumSqrt(0),Stdv(0);
var : sum(0),BBmd(0),Bbup(0),BBdn(0);
Array : CC[100](0);
if Bdate != Bdate[1] Then
{
D1 = sdate;
idx = 0;
}
Else
idx = idx+1;
if D1 > 0 then
{
TF = idx%N;
if Bdate != Bdate[1] or (Bdate == Bdate[1] and TF < TF[1]) Then
{
for cnt = 1 to 99
{
CC[cnt] = CC[cnt-1][1];
}
}
CC[0] = C;
if CC[P] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + CC[cnt];
}
BBmd = sum/P;
SumSqrt = 0;
For cnt = 0 To P - 1
{
SumSqrt = SumSqrt + (CC[cnt] - BBmd)^2;
}
Stdv = SquareRoot(SumSqrt / P);
BBup = BBmd + (Dv * Stdv);
BBdn = BBmd - (Dv * Stdv);
plot1(BBmd);
plot2(BBup);
plot3(BBdn);
}
}
즐거운 하루되세요
> softtoug 님이 쓴 글입니다.
> 제목 : 지표문의
> 안녕하세요
하기 지표문의 드립니다. 도움 부탁드립니다
* 한개의 챠트에 시간대별 볼린져 밴드를 그물망 챠트처럼 만들고 싶습니다.
5분, 15분, 30분, 60분, 360분
이렇게 5개의 시간대별 볼린져 밴드 챠트가 한 챠트에 보여지게 부탁드립니다.
기준은 15분 봉으로 부탁드립니다.
- 옵션으로 상기 챠트에 900틱 시간대도 추가한 옵션 부탁드립니다.
감사합니다.
2020-02-21
373
글번호 136176
답변완료
산식검토
검색조건(30분봉 차트 기준)
1. 27%이상 상승한 장대가 33일내에 있을것
2. countdown( crossdown(stockD(20,12,12),20) , 80)>0
상기조건을 아래와같이 했는데 검색이 않됩니다
그리고 장대조건을 60일 이내로 하려고 했는데 30분봉차트와 500봉의 제한에
맞추다보니 아래산식에서33으로 됐습니다 60으로 할수 있는방법이 있을까요??
일단은 검색식이 작동을 해야하는데 어디서 실수한건지???
[아래]
Condition1= DayClose(0)/DayClose(1)>=1.27 ;
If
CountIF(Condition1==True,499)>0 and
countdown( crossdown(stockD(20,12,12),20) , 80)>0
Then
Find(1);
2020-02-21
320
글번호 136174
답변완료
질문드립니다
안녕하세요
국선 3분봉에서 장시작과 동시에 첫번째 캔들이 20이평선을 터치하는 순간 매도진입시키는 방법이 궁금합니다.
감사합니다.
2020-02-20
347
글번호 136173
답변완료
종목검색식 부탁합니다..
수고하십니다.
아래와 같은 내용의 식을
for문이나 array를 사용하여 간단하게 식 하나로 바꾸어 주시면 고맙겠습니다..
[어떤 함수를 사용해야 하는지 잘 모름...사용자 메뉴얼이 어디 있는지 알려주세요...]
Q1]일봉 종목검색에서
오늘 종가가 월시가를 돌파하고,
종가가 월시가 위에 [계속] 존재하고 있는 종목을 검색 or
1일전에 종가가 월시가를 돌파하고,
종가가 그후로 월시가 위에 계속 존재하고 있는 종목을 검색 or
2일전에 종가가 월시가를 돌파하고,
종가가 그후로 월시가 위에 계속 존재하고 있는 종목을 검색 or
........
N일전에 종가가 월시가를 돌파하고,
종가가 그후로 월시가 위에 계속 존재하고 있는 종목을 검색
N이 큰 경우
위의 각각의 경우에 검색되는 모든 종목을 한 식으로 검색하여
전부 볼 수 있게하는 검색식 부탁합니다..
var1 = monthopen(0) ;
if (crossup(c,var1) and countif(c>var1,1)==1) or
(crossup(c[1],var1) and countif(c>var1,2)==2) or
(crossup(c[2],var1) and countif(c>var1,3)==3) or
......
(crossup(c[N],var1) and countif(c>var1,N)==N) then
Find(1);
Q2] 월이 바뀐 경우,
위 로직에 전 달 월시가 var1[1]을 적용하려면
식이 어떻게 수정되어야 하는지요?
수고하세요..
2020-02-21
345
글번호 136172
답변완료
문의드립니다.
input : Period(12),Period1(20);
input : P(20);
mav = ma(C,P);
var1 = trix(Period);
var2 = ma(C,Period1);
if crossup(var1,0) Then
value1 = var2;
if var2 > value1 Then
value1 = var2;
if CrossDown(var1,0) Then
value2 = var2;
if var2 < value2 Then
value2 = var2;
plot1(value1);
plot2(value2);
에서
1. 매수
1-1 ) value1의 가격이 전봉과 같고
value2의 가격도 전봉과 같아야하고
value1의 가격과 value2의 가격폭은 45틱 이상이어야하며
전봉의 20이평가격이 전봉의 value2의 가격과같고
20 이평이 value2보다 커야하고
20 이평이 전봉보다 커야한다.
( 단, 종가가 value2보다 25틱 이상일경우 5봉이내에 음봉에서 매수 ) - 5봉이상이면 취소
1-2 ) value1의 가격이 전봉과 같고
value2의 가격도 전봉과 같아야하고
value1의 가격과 value2의 가격폭은 45틱 이상이어야하며
( 단, value1의 가격이 전봉과 같지않으면 폭의 크기 45틱이상 조건무시 )
저가는 value2보다 작거나 같고
종가는 value2보다 커야한다.
2. 매수청산
2-1 ) 매수조건 1-1)
2-2 ) 매수조건 1-2)
2-3 ) 매수이후 50틱 이상이면 5틱익절 ( 트레일링 )
2-4 ) 매수이후 볼밴하단을 계속 확인하여 볼밴 촤상단의 15틱 밑에서 청산
>>> 저번에 작성해주신
ExitLong("btr",AtStop,highest(BBdn,BarsSinceEntry)-PriceScale*15);
를 적용하니 청산이 제대로 안되는것같은데 다시 검토부탁합니다.
2-5 ) value2 밑 15틱에서 손절
매도는 반대
제가 작성해서 적용해보니 제대로 작동이 안되는것 같아 다시 부탁드립니다.
2020-02-20
335
글번호 136171
답변완료
주문 가격 정정
안녕하세요,
1. 주문 취소 기능이 제공되는 지요 ?
. 시뮬레이션할 때만이라도 취소 기능이 제공되면 유용할 것 같습니다.
2. 주문 취소가 안된다면
. buy("매수", AtStop, 가격1)로 주문을 한 상태에서
. 주문이 체결되기 전에 (즉 Marketposition이 0인 상태)
. buy("매수", AtStop, 가격2)를 호출하면,
. 기존 주문은 취소되고, 새로운 가격(가격2)으로 변경되는지요?
* 피라미딩은 '허용안함'으로 설정되어 있습니다.
고맙습니다.
2020-02-20
387
글번호 136170
답변완료
어제 신호난거 오늘 보려면
수고하십니다
stochastics FAST (10, 5) 에서 어제 매수신호가 난걸 오늘 볼수있는 수식은
어떻게 하는지요?
감사합니다
2020-02-20
410
글번호 136169