커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
7442
글번호 230811
답변완료
수식문의드립니다
아래수직선식을 항셍에 적용하니 두줄이나오는데 10시 장시잗봉에 한줄만나오게부탁드립니다,가능하다면 10시봉에그어지지않고 10시전봉과 10시봉사이에 그어지게부탁합니다.
if dayindex == 0 Then{
Condition1 = false;
TL_New(sdate,stime,9999999,sdate,stime,0);
}
if Condition1 == false and stime >= 93000 then{
Condition1 = true;
TL_New(sdate,stime,9999999,sdate,stime,0);
}
2015-11-17
186
글번호 92494
답변완료
재문의드립니다.
일봉 80bbup이 주봉 240bbupcrossup입니다.
수정부탁드립니다.
감사합니다.
input : N(10),P1(20),dv1(2),P2(80),dv2(2);
var1 = BollBandUp(P1,dv1);
var2 = BollBandUp(P2,dv2);
if countif(crossuP(var1,var2),N) >= 1 Then
find(1);
즐거운 하루되세요
> 부양가족 님이 쓴 글입니다.
> 제목 : 검색식 부탁드립니다
> 검색식입니다.
일봉주기에서 n봉기간내 (일봉)20bbup이 (주봉)80bbup을 crossup한 종목검색식 부탁드립니다.
감사합니다.
2015-11-17
201
글번호 92493
답변완료
수식요청 드립니다.
안녕하세요.
1. 2. 3. 수식요청 드립니다.
1. 당일청산 기존시스템의 매도 매수신호 진입 1PT 이상 수익발생 후 부터 적용
-> 매수진입, 1PT이상 수익발생 후, 10개 전봉의 고가부터 ~ 직전봉 고가 까지의 평균고가의 상승이 없고
평균 고가대비, 현재봉의 종가가 -0.5PT 하락시 수익보존 조건만족 청산.
-> 매도진입, 1PT이상 수익발생 후, 10개 전봉의 저가부터 ~ 직전봉 저가 까지의 평균저가의 하락이 없고
평균 저가대비, 현재봉의 종가가 +0.5PT 상승시 수익보존 조건만족 청산.
---------------------------------------------------------------------------------
2. 아래 당일손실제한 청산될 경우, 다음봉 시가에 동일한 방향으로 매도, 매수 진입하고, 1.0PT 익절청산,
0.5PT 손절청산, 기존수식에 추가하여 사용하는 수식
2.당일손실제한
if MarketPosition == 1 Then{ // Exitlong Sell
ExitLong("당일손실제한bx3",AtStop,avgEntryPrice-(당일손실+(dayPL-v1))/CurrentContracts);
}
if MarketPosition == -1 Then{ // ExitShort Buy
ExitShort("당일손실제한sx3",AtStop,avgEntryPrice+(당일손실+(dayPL-v1))/CurrentContracts);
}
----------------------------------------------------------------------------------
3. 아래 코스피 200 연결선물 다수(5개이상)의 시스템을 예스스팟을 이용 미니선물로
운용 진입 청산하는 수식에, 동일계좌내 다수의 손익의 합이 목표수익 50만원 달성시
일괄청산 당일 매매종료 수식추가, 내용설명 요청 드립니다.
//차트에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1)
{
//MarketData1종목을 매도5호가로 1계약 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
//매수포지션 청산신호 발생
if (Signal.signalKind == 2)
{
//MarketData1종목을 매수5호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0);
}
//매도 진입신호 발생
if (Signal.signalKind == 3)
{
//MarketData1종목을 매수5호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0);
}
//매도 포지션 청산신호 발생
if (Signal.signalKind == 4)
{
//MarketData1종목을 매도5호가로 1계약 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
}
감사합니다.
2015-11-18
214
글번호 92492
답변완료
정률배팅식 부탁드립니다
주가와 20일이평선 교차전략에서 진입시 항상 계좌평가금액의
50% 배팅이 되는 정률배팅 전략식을 부탁드립니다.
2015-11-17
180
글번호 92491
답변완료
문의드립니다
Input:barCnt(5);
Var:j(0),turnPntBit(""),TL1(0),TL2(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
// 봉이 새로 생겼으므로 봉개수 관리하는 변수들의 봉개수 값 1씩 증가
For j = 0 To 9 {
barArr[j] = barArr[j] + 1;
}
// 고점조건 = 5-1-5에서 가운데 고가가 좌측 5봉과 우측 5봉 고가보다 높다
// 저점조건 = 5-1-5에서 가운데 저가가 좌측 5봉과 우측 5봉 저가보다 낮다
Condition1 = Highest(H,barCnt)[barCnt+1] <= H[barCnt] and H[barCnt] > Highest(H,barCnt);
Condition2 = Lowest(L,barCnt)[barCnt+1] >= L[barCnt] and L[barCnt] < Lowest(L,barCnt);
// 전환점구분 null값으로 초기화;
// if 고점조건, 저점조건 동시 만족시 then
// if 이전 고점,저점 범위를 모두 벗어났을 때
// 전환점구분 = 고저점;
// else if 이전 고점을 갱신했다면 전환점구분 = 고점;
// else if 이전 저점을 갱신했다면 전환점구분 = 저점;
// else if 전환점배열의 현재(배열상 1번째)값이 고점이면 전환점구분 = 저점;
// else if 전환점배열의 현재 값이 저점이면 전환점구분 = 고점;
// else if 고점조건 만족하면 전환점구분 = 고점;
// else if 저점조건 만족하면 전환전구분 = 저점;
turnPntBit = "";
If Condition1 and Condition2 Then {
If Max(valArr[1],valArr[2]) < H[barCnt] and Min(valArr[1],valArr[2]) > L[barCnt] Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H[barCnt] Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L[barCnt] Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Hi" Then turnPntBit = "Lo";
Else If turnPntArr[1] == "Lo" Then turnPntBit = "Hi";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
// if 전환점구분에 값이 있을 때만 아래 실행, 없으면 통과
If turnPntBit <> "" Then
{
// if 전환점구분이 고저점이면 then
// 이전 파동은 연장시키고 아래에서 새로이 파동선을 추가토록 한다.
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
// if 신규 전환점구분이 현재(전환점배열 1번째)와 다르면 then
// 배열값들을 이전값으로 Move;
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
// if 전환점구분이 바뀌었거나 또는
// (전환점구분은 안바뀌었는데
// (이전 고점보다 높은 고점이 발생했거나 또는
// 이전 저점보다 낮은 저점이 발생했으면)) then
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H[barCnt]) or
(turnPntBit == "Lo" and valArr[1] > L[barCnt]))) Then {
// 값 배열에는 고점 또는 저점을 대입;
// 봉개수 배열에는 입력변수의 봉개수 대입;
// 전환점 배열에 전환점구분값을 대입;
valArr[1] = IFF(turnPntBit == "Hi",H[barCnt],L[barCnt]);
barArr[1] = barCnt;
turnPntArr[1] = turnPntBit;
// if 이전봉대비 전환점구분이 바뀌었다면 추세선 새로 그리고;
// else 전환점구분이 안바뀌었으면 값만 바뀐거므로 추세선 연장;
If turnPntArr[1][1] <> turnPntArr[1][0] Then
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],
sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
Else
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
TL_SetSize(TL1,2);
TL_SetColor(TL1,GREEN);
문의드립니다
첨부파일보시면
상승시
상승시
1번고전이3번고점보다 크다면
1번-3번=값을2번값에+ 할때0.0002더하여 값을할당하고십습니다
예로1번값이1.0720 -3번값1.0710= 10 2번값 1.0705 이면여기에10+2=1.0717이런식 입니다
하락시
1번저점이3번저점보다 작다면
1번-3번=값을 2번에-하고십습니다
예로1번-3번=값을
2번값에-할때0.0002를 - 기하는것입니다
부탁드립니다 감사합니다
2015-11-17
325
글번호 92490
답변완료
문의
창을 여러개로 분할해서 챠트를 보고 있읍니다.
분할된 여러창의 지표값을 사용하여 시스템 신호를 만들수는 없나요 ?
2015-11-17
173
글번호 92489
답변완료
부탁 드립니다.
항상 도움 주셔서 감사 합니다.
그림과 같이
수식1을 대륙별 기준 수평선을 계단식(흑색선과 같이)으로
그을수 있겠는지요?
*수식2는 참고용 지표 입니다.
미리 감사드립니다.
수식1)
input:Sstime(080000),Eetime(070000);
If stime == Sstime or (stime > Sstime and stime[1] < Sstime) Then
{
Var1 = 0;
Var2 = Var1[1];
}
if (stime >= Sstime or stime <= Eetime) and C>O Then var3 = Var3+v;
if (stime >= Sstime or stime <= Eetime) and C<O Then var4 = var4+v;
var1=var3-var4;
plot1(Var1,"지표");
plot2(Var2,"이전지표_수평선");
수식2)
***참고지표****
input:p14(14);
input : 아시아시작(08000),아시아종료(15300);
input : 유럽시작(153000),유럽종료(213000);
input : 미국시작(21300),미국종료(07000);
var : Tcond1(false),Tcond2(false),Tcond3(false);
var : V1(0),V2(0),V3(0);
Var1 =ma( rsi(p14),5);
If stime == 아시아시작 or (stime > 아시아시작 and stime[1] < 아시아시작) Then
{
Tcond1 = true;
V1 = Var1;
}
If stime == 아시아종료 or (stime > 아시아종료 and stime[1] < 아시아종료) Then
{
Tcond1 = false;
}
If stime == 유럽시작 or (stime > 유럽시작 and stime[1] < 유럽시작) Then
{
Tcond2 = true;
V2 = Var1;
}
If stime == 유럽종료 or (stime > 유럽종료 and stime[1] < 유럽종료) Then
{
Tcond2 = false;
}
If stime == 미국시작 or (stime > 미국시작 and stime[1] < 미국시작) Then
{
Tcond3 = true;
V3 = Var1;
}
If stime == 미국종료 or (stime > 미국종료 and stime[1] < 미국종료) Then
{
Tcond3 = false;
}
plot1(var1,"RSI");//속성에서 그래프종류는 선그래프
if Tcond1 == true Then
plot2(V1,"아시아기준");//속성에서 그래프종류는 일자그래프
if Tcond2 == true Then
plot3(V2,"유럽기준");//속성에서 그래프종류는 일자그래프
if Tcond3 == true Then
plot4(V3,"미국기준");//속성에서 그래프종류는 일자그래프
PlotBaseLine1(30,"30");
plotbaseline2(50,"50");
PlotBaseLine3(70,"70");
2015-11-17
261
글번호 92488
답변완료
수식문의 드립니다
안녕하세요.
질문이 있어서 글 올립니다.
1.현재로부터 몇봉전 시간을 알고 싶은데 stime[xx] 이런식으로 하면 안되는데 어떻게 하면 알수 있나요?
2.아래 지표가 검증은 되는데 실행시키면 컴이 다운됩니다.어디가 잘못되었을나요?
===========================================================
Input : MarketCloseTime(150500), StartIndex(120),Period(300);
var : cnt(0), curFtr(0),MaxFtr(0), MinFtr(0),Upftr(0), Downftr(0),period2(0);
curFtr=0;
MaxFtr = 0;
MinFtr = 0;
if dayindex > StartIndex and sTime <= (MarketCloseTime-5500) Then {
if dayindex > (StartIndex+period) Then {
For cnt=0 to period-1 {
Var5=data1(h)-data1(h[cnt]);
Var6=data1(L)-data1(L[cnt]);
If var5 > MaxFtr Then MaxFtr=Var5;
If Var6 < MinFtr Then MinFtr=Var6;
}
}
else {
For cnt=0 to dayindex-StartIndex {
Var5=data1(h)-data1(h[cnt]);
Var6=data1(L)-data1(L[cnt]);
If var5 > MaxFtr Then MaxFtr=Var5;
If Var6 < MinFtr Then MinFtr=Var6;
}
}
}
UpFtr=CurFtr-MinFtr;
Downftr=MaxFtr-CurFtr;
Var2=Upftr+Downftr;
Plot1(-var2, "MinMaxFtr");
===============================================================
수고하세요
2015-11-17
196
글번호 92485
답변완료
45033번 글에 대한 재문의
감사합니다. 큰 도움이 되었습니다.
그런데, 2015년 6월 15일 부터인, '상한가가 30퍼센트로 확대되었을 때 이후' 부터의 데이터만 얻고 싶다면 어떻게 해야 하나요?
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다-2
> 안녕하세요
예스스탁입니다.
input : N(3);
var : 상한가(0), UpLimit(0);
var : up1(0), up2(0), up3(0), up4(0), up5(0),up6(0),Up7(0);
if date >= 19981207 then {
if date < 20050328 && CodeCategory() == 2 then
UpLimit = (BP[0] * 1.12);
Else if date >= 20050328 and date < 20150615 Then
UpLimit = (BP[0] * 1.15);
Else
UpLimit = (BP[0] * 1.30);
if CodeCategory() == 2 then {
if date >= 20030721 then {
up1 = int(UpLimit/100+0.00001)*100;
up2 = int(UpLimit/100+0.00001)*100;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/10+0.00001)*10;
up7 = int(UpLimit/1+0.00001)*1;
}
}
Else {
up1 = int(UpLimit/1000+0.00001)*1000;
up2 = int(UpLimit/500+0.00001)*500;
up3 = int(UpLimit/100+0.00001)*100;
up4 = int(UpLimit/50+0.00001)*50;
up5 = int(UpLimit/10+0.00001)*10;
up6 = int(UpLimit/5+0.00001)*5;
up7 = int(UpLimit/1+0.00001)*1;
}
if CodeCategory() == 1 || CodeCategory() == 2 then {
if sdate < 20101004 Then{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up6);
}
Else{
If BP >= 500000 Then
상한가 = up1;
Else If BP >= 100000 Then
상한가 = iff(up2>=500000, up1, up2);
Else If BP >= 50000 Then
상한가 = iff(up3>=100000, up2, up3);
Else If BP >= 10000 Then
상한가 = iff(up4>=50000, up3, up4);
Else If BP >= 5000 Then
상한가 = iff(up5>=10000, up4, up5);
Else If BP >= 1000 Then
상한가 = iff(up5>=5000, up5, up6);
Else
상한가 = iff(up6>=1000, up6, up7);
}
}
else if CodeCategory() == 8 || CodeCategory() == 9 then { // ETF
상한가 = up6;
}
}
upLimit[0] = 상한가;
if date != date[1] Then{
for cnt = 1 to 19{
upLimit[cnt] = upLimit[cnt-1][1];
}
}
if upLimit[n] > 0 and DayClose(N) >= DayClose(N+1)*1.15 and DayHigh(N) < upLimit[n] Then
find(1);
즐거운 하루되세요
> rayleigh 님이 쓴 글입니다.
> 제목 : 문의드립니다-2
> N+1일 전 종가대비 N일의 종가가 15퍼센트이상 오른 종목중, '상한가가 아닌' 종목을 찾고 싶습니다.
'상한가가 아닌' 종목을 찾는게 굉장히 복잡해보이는데, 왜냐하면 가격에 따라 호가단위가 달라지기 때문입니다. 저는 50만원 미만 종목만 거래할 것이라는 것도 혹시 도움이 됬으면 합니다.
감사합니다.
2015-11-17
208
글번호 92484