커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7152
글번호 230811
답변완료
부탁 드립니다.
도움에 감사 드립니다.
해선용으로 사용하는 수식을
국내 주식용으로 사용코자 합니다.
그대로 사용해도 되는지요?
input : ntime(30),P(10),sig(5);
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),VV(0),V3(0),V5(0),V7(0);
Array : CC[100](0),V1[100](0),V2[100](0),V4[100](0),V6[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%ntime;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and ntime > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and ntime > 1 and TM >= TM[1]+ntime) or
(Bdate == Bdate[1] and ntime == 1 and TM > TM[1]) Then
{
for cnt = 1 to 99
{
CC[cnt] = CC[cnt-1][1];
V1[cnt] = V1[cnt-1][1];
V2[cnt] = V2[cnt-1][1];
V4[cnt] = V4[cnt-1][1];
V6[cnt] = V6[cnt-1][1];
}
}
CC[0] = C;
if CC[P-1] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + CC[cnt];
}
V1[0] = sum/P;#var1
}
if V1[P-1] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + V1[cnt];
}
V2[0] = sum/P;#var2
}
if V2[P-1] > 0 then
{
sum = 0;
for cnt = 0 to P-1
{
sum = sum + V2[cnt];
}
VV = sum/P;
SumSqrt = 0;
For cnt = 0 To P - 1 {
SumSqrt = SumSqrt + (V2[cnt] - VV)^2;
}
Stdv = SquareRoot(SumSqrt / P);
V3 = 2*stdv;
V4[0] = V2[0]+v3;
}
if V4[sig-1] > 0 then
{
sum = 0;
for cnt = 0 to sig-1
{
sum = sum + V4[cnt];
}
V5 = sum/sig;
V6[0] = C-V5;
}
if V5[sig+sig-1] > 0 then
{
sum = 0;
for cnt = 0 to sig-1
{
sum = sum + V6[cnt];
}
V7 = sum/sig;
plot1(V7);
}
}
2020-06-15
1991
글번호 139830
답변완료
지표문의
안녕하세요
지표문의 드립니다.
검토 부탁드립니니다.
볼린져 밴드를 그물망 챠트 처럼 보고 싶습니다.
5 분봉
15 분봉
30 분봉
60 분봉
120 분봉
400 분봉
상기 6개의 봉챠트의 볼린져 밴드를
15분봉 챠트에 한번에 표현되게 부탁드립니다.
색상은 각 분봉의 볼린져 밴드가 한가지 색상으로
상단 하단 중앙이 표현되며
하기와 같이 부탁드립니다.
5 분봉 - 빨강
15 분봉 - 흰색
30 분봉 - 파랑
60 분봉 - 검정색
120 분봉 - 노랑
400 분봉 - 연두
감사합니다.
2020-06-14
1999
글번호 139829
답변완료
문의드립니다
안녕하세요.
늘 감사드립니다.
무포지션에서 모든 변수는 초기화 하고
매수: 무포지션에서 첫음봉뒤에 양봉이 2연속으로 발생하면
매수준비 조건가 = O; // 현재봉 양봉의 시가
매수준비 T = 1 라고 정의하고
이후에 또 양봉이 발생하면
매수준비 조건가 = O; // 현재봉 양봉의 시가 가 되고
또는 이후에 음봉이 발생하고 음봉의 종가가 위의 매수준비 조건가 를 하방으로 깨면
매수조건 T = 0 ; // 숫자 0 으로 초기화
매수준비 조건가 =0 // 숫자 0 으로 초기화 처럼
모든변수 초기화 합니다.
즉 현재봉 발생음봉의 종가가 가장 최근의 양봉(전봉일 수도 있고 전봉 이전봉들 일수도 있음)의 시가를 하방으로 깨지 않으면
매수 준비 상태는 그대로 유지하고 깨면 초기화합니다.
이 상태에서
가장 최근의 음봉의 시가를 다음 발생하는 양봉의 종가가 상방으로 돌파하면
매수합니다.
매수손절:
매수봉의 시가를 현재가가 하방으로 돌파하면 손절합니다.
매수추적청산 :
매수후 20 틱 이상 ~ 50틱 까지 이익이 나면 최대 이익이 30% 까지 떨어지면
추적이익 청산 합니다.
매수후 50 틱 이상 이익이 나면 최대 이익이 50% 까지 떨어지면
추적이익 청산 합니다.
매도: 매도도 매수와 동일한 논리로 수식을 부탁드립니다.
2020-06-14
2130
글번호 139828
답변완료
삼성전자 매매 수식 부탁드림니다.
data1 삼성전자 일봉 챠트
data2 코스피(업종) 일봉 챠트
진입 수식
data2(코스피차트) 120일 평균 값에 -10% 하락시
1차 진입 data1(삼성전자) 종가 진입 100만원
2차 진입 data1(삼성전자) 1차 종가진입가 보다 -5% 하락시 추가로 100만원 진입
3차 진입 data1(삼성전자) 1차 종가진입가 보다 -10% 하락시 추가로 100만원 진입
4차 진입 data1(삼성전자) 1차 종가진입가 보다 -15% 하락시 추가로 100만원 진입
5차 진입 data1(삼성전자) 1차 종가진입가 보다 -20% 하락시 추가로 100만원 진입
청산 수식
data1(삼성전자) 차트에서 MFI(15) > 85 또는 투자심리도(15) > 85 일때 일괄 청산
2020-06-14
2244
글번호 139827
답변완료
수식 부탁 드립니다
고생이 많으십니다.
지표수식 변환 부탁 드립니다.
수식1
LL=lowest(L,기간);
HH=highest(H,기간);
DH=valuewhen(1,H>HH(1),H);
Valuewhen(1,barssince(H>HH(1))==(기간-k),DH)
수식2
LL=lowest(L,기간);
HH=highest(H,기간);
DH=valuewhen(1,H>HH(1),H);
Valuewhen(1,barssince(H>HH(1))==(기간-k),LL)
기간 : 10
k : 5
추가문의)
색상 표시를 여러개 알고 싶습니다
예를들어 빨강은 red , 청색은 blue..등등
그외 분홍 , 그레이, 주황, 녹색, 황금색..... 색상분류표 명칭 영문으로 있다면
부탁 드립니다
감사합니다
2020-06-15
2158
글번호 139826
답변완료
수식 수정부탁드려요
여기 글중에 참고 한 시스템인데요
1
매수 추세 신호는 나오는데 매도 추세신호가 안나와서요
수식이 잘못된건지 조건이 안맞는건지 만약 조건이면 조건 어느부분을 완화 하면
되는 지 알려주세요
2
이 시스템 열리는데 올래걸리는데 선을 표시하는거 때문에 올래걸리는거면 결과에
영향을 안주게 삭제 가능하면 삭제부탁드려요
3
매매시작시간 8시 40분 종료시간 새벽 5시에 할려고 시간 추가했는데 적용이 안되는거 같아서
수정부탁드려요
input : StartTime(84000),EndTime(50000);
var : mav1(0),mav11(0),mav2(0),mav21(0), Tcond(false);
value1 = 0;
# 매수 / 매도청산
If CCI(9) > 0 Then
value1 = 1;
If MACD(12,26) > 0 Then
value1 = value1+1;
If DIPlus(14) > DIMinus(14) Then
value1 = value1+1;
If StochasticsK(12,5) > StochasticsD(12,5,5) Then
value1 = value1+1;
value2 = 0;
# 매도/매수청산
If CCI(9) < 0 Then
value2 = 1;
If MACD(12,26) < 0 Then
value2 = value2+1;
If DIPlus(14) < DIMinus(14) Then
value2 = value2+1;
If StochasticsK(12,5) < StochasticsD(12,5,5) Then
value2 = value2+1;
if H[1] == highest(H,5)[1] and
H[1] > max(C[1],O[1]) and
V[1] >= 5000 and
C[0] < C[1] Then
exitlong("매수분청산");
if L[1] == Lowest(L,5)[1] and
H[1] > max(C[1],O[1]) and
V[1] >= 5000 and
C[0] > C[1] Then
ExitShort("매도분청산");
if H[2] == highest(H,5)[1] and
H[2] > max(C[2],O[2]) and
V[2] >= 5000 and
C[0] < C[2] Then
exitlong("매수분올청산");
if L[2] == Lowest(L,5)[1] and
H[1] > max(C[1],O[1]) and
V[1] >= 5000 and
C[0] > C[1] Then
ExitShort("매도분올청산");
Input : length(10),종가사용여부(0),수치표시(0),표시(0);
input : 추세두께(1),추세상승색(red),추세하락색(blue);
input : 고점연결두께(2),고점연결색상(LGREEN);
input : 저점연결두께(2),저점연결색상(MAGENTA);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),TL11(0),TL12(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부==1,C,H);
LL = IFF(종가사용여부==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = Highest(HH,length) == HH and 최종고가 <> HH;
Condition2 = Lowest (LL,length) == LL and 최종저가 <> LL;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종꼭지점 == "저점" Then
{
If 저[1,1] > LL Then 처리구분 = "저점처리";
Else 처리구분 = "고점처리";
}
Else If 최종꼭지점 == "고점" Then
{
If 고[1,1] < HH Then 처리구분 = "고점처리";
Else 처리구분 = "저점처리";
}
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,추세두께);
TL_SetColor(TL1,추세상승색);
if 저[1,1] > 저[2,1] Then
{
if 표시 == 0 Then
TL_Delete(TL11);
TL11 = TL_New(저[2,3],저[2,4],저[2,1],저[1,3],저[1,4],저[1,1]);
TL_SetExtRight(TL11,true);
TL_SetColor(TL11,저점연결색상);
TL_SetSize(TL11,저점연결두께);
}
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2)+NewLine+"+"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
Text_SetStyle(Text1, 2, 1);
}
if value1 >= 3 then
buy("추세매수");
}
Else If 고[1,1] < HH Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2)+NewLine+"+"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,추세두께);
TL_SetColor(TL1,추세하락색);
if 고[1,1] < 고[2,1] Then
{
if 표시 == 0 Then
TL_Delete(TL12);
TL12 = TL_New(고[2,3],고[2,4],고[2,1],고[1,3],고[1,4],고[1,1]);
TL_SetExtRight(TL12,true);
TL_SetColor(TL12,고점연결색상);
TL_SetSize(TL12,고점연결두께);
}
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2)+NewLine+"-"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
Text_SetStyle(Text1, 2, 0);
}
if value3 >= 3 then
sell("추세매도");
}
Else If 저[1,1] > LL then
{
저[1,1] = LL;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2)+NewLine+"-"+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+"틱");
}
}
최종꼭지점 = "저점";
}
---------------------------------------------
또 다른시스템인데요
매수 신호만 나오게 되어 있는데 매수신호의 수식의 반대 일때 매도 신호 나오게 수정부탁드려요
추가적으로 이것도 8시40분에 해서 새벽 5시에 끝나개 설정했는데 안되서 이것도 수정부탁드립니다
input :신고가평균봉수(100);
input : 신고가거래제한봉수(50);
input : 거래량(1000);
input : StartTime(83500),EndTime(50000);
#청산 조건
input : 청산이평(50);
input : 손절이평(100);
input : 터치익절(1.5),즉시손절(0.7);
var : hi1(0),hi2(0),mav1(0),mav2(0);
var : mav11(0),mav21(0), Tcond(false);
mav1 = ma(C,청산이평);
mav2 = ma(C,손절이평);
Condition1 = C > highest(H,신고가평균봉수)[1];
#지정한 StartTime 시간봉이 발생하면 Tcond는 true
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime) Then
Tcond = true;
#지정한 EndTime 시간봉이 발생하면 Tcond는 false
if (sdate != sdate[1] and stime >= EndTime) or
(sdate == sdate[1] and stime >= EndTime and stime[1] < EndTime) Then
Tcond = False;
#지정한 시간대이면
if Tcond == true then
{
if Condition1 == true Then
{
hi1 = index;
hi2 = hi1[1];
if (hi2 == 0 or (hi2 > 0 and hi1 > hi2+신고가거래제한봉수)) and V >= 거래량 Then
buy("매수진입",AtMarket);
}
if MarketPosition == 1 then
{
if c < EntryPrice and CrossDown(c,mav2) Then
exitlong("손절");
if c > EntryPrice and CrossDown(c,mav1) Then
exitlong("이익실현");
}
}
SetStopLoss(즉시손절 , PercentStop);
SetStopProfittarget(터치익절 , PercentStop);
2020-06-14
1774
글번호 139825
2wnwn 님에 의해서 삭제되었습니다.
2020-06-14
312
글번호 139824
답변완료
수식문의드립니다
1. 특정 기간동안의 최고점, 최저점을 구하고 그 지점에서의 봉 번호를 변수로 지정하고싶습니다.
Input : Navg(3);
Var : HighIdx(0), HighValue(0), LowIdx(0), LowValue(0), Length(0), Height(0);
HighValue = 0;
HighValue = Highest(High, Navg);
LowValue = 0;
LowValue = Lowest(Low, Navg);
If High == HighValue Then HighIdx = Index;
If Low == LowValue Then LowIdx = Index;
plot으로 일일이 확인해보았는데 HighIdx는 제대로 작동을 하는데 LowIdx가 작동에 오류가 있는듯 합니다.
제가 수식작성에 어떤 부분을 잘못하였을까요?
2. RSI지표가 15, 85인 지점들을 찾고 85 -> 85 연속으로 나오면 매수 진입, 15 -> 15 연속으로 나오면 매도 진입하는 시스템식을 작성하고 싶습니다. Array 기능을 활용해야 하는지.. 어렵네요
2020-06-14
1631
글번호 139823
답변완료
문의드립니다.
아래수식을 예스로 부탁드립니다.
// Base line_VX1
source2 = close
short = sma(close, 7)
long = sma(close, 25)
plot(short, color=red, linewidth=2)
plot(long, color=navy, linewidth=4)
plot(cross(long, short) ? long : na, style = circles, color=blue, linewidth = 9)
OutputSignal = long >= short ? 1 : 0
bgcolor(OutputSignal>0?red:gray, transp=100)
//=======================================================
//Vdub_Tetris_V2
LRG_Channel_TF_mins_D_W_M = input("30")
Range2 = input(1)
SELL = security(tickerid, LRG_Channel_TF_mins_D_W_M, highest(Range2))
BUY = security(tickerid, LRG_Channel_TF_mins_D_W_M, lowest(Range2))
HI = plot(SELL, color=SELL!=SELL[1]?na:red,linewidth=2 )
LO = plot(BUY, color=BUY!=BUY[1]?na:green,linewidth=2 )
fill(HI, LO, color=#E3CAF1, transp=100)
Hcon = high >= SELL
Lcon = low <= BUY
plotshape(Hcon, style=shape.triangledown, color=maroon, location=location.abovebar)
plotshape(Lcon, style=shape.triangleup, color=green, location=location.belowbar)
range2 = SELL-BUY
//--------------------------------------------------
SML_Channel_TF_mins_D_W_M = input('240')
M_HIGH = security(tickerid, SML_Channel_TF_mins_D_W_M, high)
M_LOW = security(tickerid, SML_Channel_TF_mins_D_W_M, low)
plot(M_HIGH, color=M_HIGH != M_HIGH[1] ?na:fuchsia, style=line, linewidth=2)
plot(M_LOW, color=M_LOW != M_LOW[1] ?na:fuchsia, style=line, linewidth=2)
2020-06-14
1939
글번호 139822