커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3405
글번호 230811
답변완료
문의 드립니다.
안녕하세요
항상 빠른 답변 감사드립니다.
1, 5분봉상 일봉 5이평선을 지표식을 요청 드립니다.
2,종목 검색식
종목검색식에서 장중(실시간)에 검색과 장마감이후 검색에 대한 차이를 문의 드립니다.
2-1 장중 시가 돌파시 실시간 검색과 5분봉에서
2-2 장마감이후 장중에 한번이라도 시가를 돌파를 한적이 있는 종목 검색
두개의 검색식에 차이의 식을 주석과 함께 요청 드립니다.
3,종목 검색식
5분봉상 이평선ma(c,300)에 시가가 1%수렴하는 종목 검색식을 요청 드립니다.
그럼 좋은 하루 되세요^^
2020-04-22
473
글번호 138207
답변완료
시스템식 부탁드립니다( 분봉 중심돌파)
양봉중심아래로 돌파---매도 음봉중심 위로돌파---매수
1.기준봉 1봉전=(1)
2.봉의중심=(0+C)/2
3.양봉 = 0<C 음봉 =O>C
4 아래로돌파 --CROSSDOWN CROSSUP 봉완성시 매수매도 부탁합니다
2020-04-22
455
글번호 138206
답변완료
수식요청 좀 드립니다.(몸통)
* 맣은 도움에 고맙습니다.
* 첨부 그림처럼 갭상승 및 몸통길이가 클경우 매수 금지 수식 좀 요청 드립니다.
▶대상은 마이크로 미니 S&P500 종목 입니다.
and abs(C - O) < 20*PriceScale 이게 아닌 가요???
and o < c[1]*PriceScale*10 이게 아닌 가요???
두가지 경우 적용이 안됨니다.
호가 단위가 틀려서 그런가요?
* 고맙습니다. 환절기 감기 조십하십시요.
2020-04-22
445
글번호 138201
여행88 님에 의해서 삭제되었습니다.
2020-04-22
11
글번호 138200
여행88 님에 의해서 삭제되었습니다.
2020-04-22
9
글번호 138199
답변완료
문의드립니다.
sensitivity = input(10, title="Sensitivity")
fastLength=input(20, title="FastEMA Length")
slowLength=input(40, title="SlowEMA Length")
channelLength=input(20, title="BB Channel Length")
mult=input(2.0, title="BB Stdev Multiplier")
Trend_ZONE = nz(rma(tr(true),100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)
fastMA - slowMA
calc_BBUpper(source, length, mult) =>
basis = sma(source, length)
dev = mult * stdev(source, length)
basis + dev
calc_BBLower(source, length, mult) =>
basis = sma(source, length)
dev = mult * stdev(source, length)
basis - dev
t1 = (calc_macd(close, fastLength, slowLength) - calc_macd(close[1], fastLength, slowLength))*sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) - calc_macd(close[3], fastLength, slowLength))*sensitivity
e1 = (calc_BBUpper(close, channelLength, mult) - calc_BBLower(close, channelLength, mult))
trendUp = (t1 >= 0) ? t1 : 0
trendDown = (t1 < 0) ? (-1*t1) : 0
plot(trendUp, style=columns, linewidth=1, color=(trendUp<trendUp[1])?lime:green, transp=45, title="UB")
plot(trendDown, style=columns, linewidth=1, color=(trendDown<trendDown[1])?orange:red, transp=45, title="LB")
plot(e1, style=line, linewidth=2, color=#A0522D, title="trendLine")
plot(Trend_ZONE, color=blue, linewidth=1, style=cross, title="TrendZoneLine")
변환 문의드립니다. 감사합니다.
2020-04-22
619
글번호 138196
답변완료
전에 문의했던 사항인데 잘 안되어 다시 부탁드리겠습니다. (매수진입 및 매도 진입)
해당 수식으로 손절을 적용하고 있는데요...
ExitLong("즉시손절1",AtStop,EntryPrice-PriceScale*즉시손절1);
매수 진입한 봉한개에서 에서 하락 틱수가 "즉시손절1"틱수를 넘어서더라도
손절처리가 안되요... 매수한 다음봉부터 인지를 한다고 들었습니다.
그러면 진입하자마자 해당봉에서 손실을 제한하는 수식을 알려주시면 감사하겠습니다.
수식은 다음과 같습니다.
변수중 "즉시손절1" 값에 도달시 청산하는 수식 부탁드려요~~ 그봉에
# 매수 진입 조건 변수
Input : RSIPeriod(7),RSI매수값(28),SimPeriod(14),심리도값(36); # RSI와 심리도 기간 및 값 변수
Input : N1(1),초기화(3); # 위 해당 조건 발생후 진입 유효 기간, 7일경과후 초기화
Input : 하락틱수(2); # 해당 조건 발생후 하락틱수만큼 하락후 진입 변수
Input : RSIPeriod1(6),A(0),B(4),D(48),E(72); # 일봉기준 RSI값이 해당변수안에 속해있을때 진입 변수
Input : 거래량1(600),거래량평균봉수(55),거래량평균봉수비율(3.6); # 해당 거래량1,2 사이에 속해 있을때 진입되는 변수 18000
# 1일 1회 거래
# 청산 조건 변수
Input : CCI기간(20),CCI값(500); # CCI값에 의해 청산 수식 변수
Input : 즉시익절1(70),즉시손절1(90); # 익절값 손절값 변수
Input : N2(0.6),N3(0.15); # 상승후 본절청산 관련 수식
Input : tr수익(70),tr하락(25); # 트레일링 관련 수식
Input : N4(0.7),본전생각틱(10); # 하락후 본절청산 관련 수식
Input : N5(0.8),CCI값1(120); # 약 손절 관련 수식
Input : 터치익절(105);
var : cnt(0),SigSum(0),count2(0),RSIsig(0);
Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0);
var : idx(0), PreUpAvg(0), preDownAvg(0),RSIVv(0);
Array : C1[100](0);
var : CCIv(0),RSIv(0),Simri(0),BuySetup(false),DD(0),entry(0);
CCIv = CCI(CCI기간);
RSIV = RSI(RSIPeriod);
Simri = Simrido(SimPeriod);
var4 = ma(V,20);
if Bdate != Bdate[1] Then
{
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
}
PreUpAvg = UpAvg[1];
preDownAvg = DownAvg[1];
idx = idx + 1;
}
C1[0] = C;
If idx == RSIPeriod1+2 Then
{
UpSum = 0;
DownSum = 0;
For Counter = 0 To RSIPeriod1 - 1
{
UpAmt = C1[Counter] - C1[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
}
UpAvg = UpSum / RSIPeriod1;
DownAvg = DownSum / RSIPeriod1;
}
If idx > RSIPeriod1+2 Then
{
UpAmt = C1[0] - C1[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpAvg = (PreUpAvg * (RSIPeriod1 - 1) + UpAmt) / RSIPeriod1;
DownAvg = (preDownAvg * (RSIPeriod1 - 1) + DownAmt) / RSIPeriod1;
}
If UpAvg + DownAvg <> 0 Then
RSIvv = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIvv = 0;
if bdate != bdate[1] Then
{
Entry = 0;
Condition2 = true;
}
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
if TotalTrades > TotalTrades[1] and
(IsExitName("즉시손절1",1) == true or IsExitName("본전청산1",1)) then
Condition2 = false;
Condition1 = RSIv < RSI매수값 and Simri < 심리도값 and ((RSIVV > A and RSIVV < B) or (RSIVV > D and RSIVV < E)) ;
if bdate != bdate[1] Then
{
DD = DD+1;
if var2 > 0 and DD == var2+초기화 Then
BuySetup = false;
}
if BuySetup == false and Condition1 == true and Condition1[1] == false Then
{
var1 = C;
var2 = DD;
BuySetup = true;
}
if Condition2 == true and MarketPosition == 0 and C < O and C[1] < O and BuySetup == true and entry == 0
and v < ma(v,거래량평균봉수)*거래량평균봉수비율 and v > 거래량1 Then # and C < O
buy("매수",AtLimit,var1-PriceScale*하락틱수);
if MarketPosition == 1 then
{
BuySetup = false;
SetStopProfittarget(PriceScale*터치익절,PointStop);
if countif(CrossDown(CCIv,CCI값),BarsSinceEntry) >= 1 and
CCIv < CCI값 and C < O Then
ExitLong("매수cci청산",OnClose);
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*즉시익절1 and C < O Then
ExitLong("즉시익절1",OnClose);
if highest(H,BarsSinceEntry) >= (EntryPrice+PriceScale*즉시익절1*N2) Then
ExitLong("본전청산1",AtStop,EntryPrice+PriceScale*즉시익절1*N3);
Else
{
ExitLong("즉시손절1",AtStop,EntryPrice-PriceScale*즉시손절1);
}
if highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*tr수익 Then
ExitLong("tr",AtStop, highest(H,BarsSinceEntry)-PriceScale*tr하락);
if lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*즉시손절1*N4 and C < O Then
ExitLong("저점에서 올라와서 본전 청산",atlimit,EntryPrice+PriceScale*본전생각틱);
if lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*즉시손절1 *N5 and CCIv >= CCI값1 and C < O Then
ExitLong("저점에서 올라와서 약손절",OnClose);
}
=====================================================================================
매도 진입 및 청산 수식
# 매도 진입 조건 변수
Input : RSIPeriod(7),RSI매수값(65),SimPeriod(7),심리도값(45);
Input : N1(1),초기화(2);
Input : 하락틱수(5);
Input : RSIPeriod1(6),A(14),B(40),D(88),E(100);
Input : 거래량1(100),거래량평균봉수(60),거래량평균봉수비율(4); # Input : 거래량1(100),거래량2(22000);
# 청산 조건 변수
Input : 즉시익절1(70),즉시손절1(70);
Input : N2(0.25),N3(-0.75);
Input : tr수익(75),tr하락(55);
Input : N4(0.45),본전생각틱(55);
Input : 터치익절(115);
var : cnt(0),SigSum(0),count2(0),RSIsig(0);
Var : Counter(0), DownAmt(0), UpAmt(0), UpSum(0), DownSum(0), UpAvg(0), DownAvg(0);
var : idx(0), PreUpAvg(0), preDownAvg(0),RSIVv(0);
Array : C1[100](0);
var : CCIv(0),RSIv(0),Simri(0),SellSetup(false),DD(0),entry(0);
RSIV = RSI(RSIPeriod);
Simri = Simrido(SimPeriod);
if Bdate != Bdate[1] Then
{
for cnt = 1 to 99
{
C1[cnt] = C1[cnt-1][1];
}
PreUpAvg = UpAvg[1];
preDownAvg = DownAvg[1];
idx = idx + 1;
}
C1[0] = C;
If idx == RSIPeriod1+2 Then
{
UpSum = 0;
DownSum = 0;
For Counter = 0 To RSIPeriod1 - 1
{
UpAmt = C1[Counter] - C1[Counter+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
}
UpAvg = UpSum / RSIPeriod1;
DownAvg = DownSum / RSIPeriod1;
}
If idx > RSIPeriod1+2 Then
{
UpAmt = C1[0] - C1[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else
{
DownAmt = -UpAmt;
UpAmt = 0;
}
UpAvg = (PreUpAvg * (RSIPeriod1 - 1) + UpAmt) / RSIPeriod1;
DownAvg = (preDownAvg * (RSIPeriod1 - 1) + DownAmt) / RSIPeriod1;
}
If UpAvg + DownAvg <> 0 Then
RSIvv = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIvv = 0;
if bdate != bdate[1] Then
{
Entry = 0;
Condition2 = true;
}
if MarketPosition != 0 and MarketPosition != MarketPosition[1] Then
entry = entry+1;
if TotalTrades > TotalTrades[1] and
(IsExitName("즉시손절1",1) == true or IsExitName("본전청산1",1)) then
Condition2 = false;
Condition1 = RSIv > RSI매수값 and Simri > 심리도값 and ((RSIVV > A and RSIVV < B) or (RSIVV > D and RSIVV < E)) ;
if bdate != bdate[1] Then
{
DD = DD+1;
if var2 > 0 and DD == var2+초기화 Then
SellSetup = false;
}
if SellSetup == false and Condition1 == true and Condition1[1] == false Then
{
var1 = C;
var2 = DD;
SellSetup = true;
}
if Condition2 == true and MarketPosition == 0 and SellSetup == true and C > O and entry == 0 and v > 거래량1
and v < ma(v,거래량평균봉수)*거래량평균봉수비율 Then
sell("매도",AtStop,var1+PriceScale*하락틱수);
if MarketPosition == -1 then
{
SellSetup = false;
SetStopProfittarget(PriceScale*터치익절,PointStop);
if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*즉시익절1 and C > O Then
ExitShort("s즉시익절1",OnClose);
if Lowest(L,BarsSinceEntry) <= (EntryPrice-PriceScale*즉시익절1*N2) Then
ExitShort("s본전청산1",AtStop,EntryPrice-PriceScale*즉시익절1*N3);
Else
ExitShort("s즉시손절1",AtStop,EntryPrice+PriceScale*즉시손절1);
if Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*tr수익 Then
ExitShort("str",AtStop, Lowest(L,BarsSinceEntry)+PriceScale*tr하락);
if Highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*즉시손절1*N4 and C > O Then
ExitShort("s고점에서 내려와서 본전 청산",atlimit,EntryPrice-PriceScale*본전생각틱);
}
2020-04-21
634
글번호 138195
답변완료
이평선 돌파
종목들이 제대로 나오지 않는 것 같습니다.ㅜ
검색이 안되는 종목들이 더 많은거 같습니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 이평선 돌파
> 안녕하세요
예스스탁입니다.
input : P1(5),P2(10),P3(20);
var1 = ma(C,P1);
var2 = ma(C,P2);
var3 = ma(C,P3);
if crossup(c,var1) and crossup(c,var2) and crossup(c,var3) Then
find(1);
즐거운 하루되세요
> 쓰임과이롬 님이 쓴 글입니다.
> 제목 : 이평선 돌파
> 항상 감사합니다
당일....5분봉 차트에서
5,10,20 이평선을 동시에 모두 돌파한 봉을 찾는 검색을 하고 싶습니다.
2020-04-21
637
글번호 138194
답변완료
67126 지표 조건추가
67126 글에서 문의한 지표수식을
훌륭하게 만들어주셔서 감사합니다.
수식이 정상적으로 잘 작동하는것을 확인하였습니다.
input : N(10);
var : hh(0),ll(0),x(0),y(0),hv(0),hp(0);
hh = highest(H,N);
ll = lowest(L,N);
hv = 0;
hp = 0;
for x = ll to hh step PriceScale
{
var3 = 0;
for y = 0 to N-1
{
if h[y] >= x and X >= l[y] Then
var3 = var3+v[y];
}
if LastBarOnChart == 1 Then
MessageLog("%.2f %.f",x,var3);
if var3 >= hv Then
{
hv = var3;
hp = x;
}
}
plot1(hp);
현재 수식의 경우, N개의 '모든'봉을 유효한 봉으로 보고,
모든 봉들의 거래량을 참고로 지표 계산을 하는데
N개의 봉들중, 거래량 상위 mm%의 봉들만 유효한 봉으로 간주하고
계산하도록 하려면 어떻게 하여야 할까요?
2020-04-21
661
글번호 138193