커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6041
글번호 230811
답변완료
종목 검색식
종목 검색식 부탁 드립니다.
*당일 최고점 15프로 이상 찍은 종목
*오후 3시 부터 3시 20분까지 매수 체결량이 매도 체결량 보다 1.5배 이상 많은 종목.감사합니다
2019-01-23
153
글번호 125502
답변완료
문의드립니다.
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 기타
어제 만들어주신 시스템을 약간 수정했는데요. 일목기간이란 게 선행스팬 수평 이동이라고 보시면 되고 수직퍼센트가 수직 이동이라고 보시면 됩니다. 그런데 일목균형표 기본으로 제공돼 있는 거로 실제 모의 매매를 몇번 해봤는데요. 수평 이동 이건 그려진 것과 동일하게 문제없이 청산이 되는데요.
저 수직퍼센트 외부변수를 추가해서 수직 이동과 관련된 수식을 추가하자 이상하게 일목균형표 선행스팬과 안 맞습니다. 가령 설정창에서 0.04%인 선행스팬을 그린 뒤 시스템에서도 0.04% 더한 값을 추가해줬는데요. 그 부분에서 청산이 안됩니다. 뭐가 잘못된 걸까요. 값을 찍어보진 않았지만 설정창에서 쓴 값(0.04%)보다 더 큰 값이 들어가는 것 같습니다.
input :
진입시간(100000),
진입날짜(20190122),
수량(1),
청산방법(0),
일목기간(15),
수직퍼센트(0.1)
;
var : 전환선(0),기준선(0),후행스팬(0),선행스팬1(0),선행스팬2(0),구름상단(0),구름하단(0);
전환선 = (highest(H,9)+lowest(L,9))/2;
기준선 = (highest(H,26)+lowest(L,26))/2;
후행스팬 = C;
선행스팬1 = (전환선+기준선)/2;
선행스팬2 = (highest(H,52)+lowest(L,52))/2;
var1 = max(선행스팬1[일목기간],선행스팬2[일목기간]);
구름상단 = max(선행스팬1[일목기간],선행스팬2[일목기간]) + (var1 * 수직퍼센트);
구름하단 = min(선행스팬1[일목기간],선행스팬2[일목기간]) + (var1 * 수직퍼센트);
if sdate == 진입날짜 and
((sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간)) Then
{
if 청산방법 == 0 Then
buy("b",OnClose,def,수량);
if 청산방법 == 1 Then
sell("s",OnClose,def,수량);
}
if sdate == 진입날짜 and
((sdate != sdate[1] and stime >=진입시간 + 100) or
(sdate == sdate[1] and stime >= 진입시간+100 and stime[1] < 진입시간 + 100)) Then
Condition1 = true;
if Condition1 == true then
{
if MarketPosition == 1 Then
ExitLong("bx",AtStop,구름상단);
if MarketPosition == -1 Then
ExitShort("sx",AtStop,구름하단);
}
2. 해선 이 수식 왜 이렇게 쓰는 지 좀 설명 좀 부탁드립니다.
if (sdate != sdate[1] and stime >= 진입시간) or
(sdate == sdate[1] and stime >= 진입시간 and stime[1] < 진입시간) then
{
3. 기타
이거 지표가 안나오는데 이유를 모르겠습니다. S&P emini 30분봉
아래 변수로 실험해봤습니다.
input : starttime(70000),endtime(200000);
var : Tcond(false),hh(0),ll(0);
if (sdate != sdate[1] and stime >= starttime) or
(sdate == sdate[1] and stime >= starttime and stime[1] < starttime) then
{
Tcond = true;
hh = h;
ll = l;
}
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 h > hh Then
hh = h;
if l < ll Then
ll = l;
var1 = (hh-ll)/PriceScale;
}
2019-01-23
166
글번호 125501
답변완료
수식작성 부탁드립니다.
안녕하세요~
첨부 파일과 같이....
-. 기본적으로 두개의캔들의 고점과 저점을 기준으로 상향 돌파시 매수 신호, 하향 돌파시 매도 신호
-. 신호가 나왔을 시 반대 신호가 나올때까지 같은방향은 안나옴
-. ex)고점봉의 고점, -1봉의 저점을 박스권으로 이후 캔들의 종가가 저점 이탈시 매도신호발생
-. 단, -1봉의 저점이 고점봉보다 높을시에는 -2봉의 저점을 취함
꼭 필요합니다~~부탁드릴께요~~~^^
2019-01-23
187
글번호 125500
답변완료
수식 부탁드립니다.
전에 만들어주신건데 잘 사용중입니다.
감사하구요. 여기에 추가적으로 위아래로 3줄더 부탁드립니다.
var14-(var13-var14)*2,3,4
var24+(var24-var23)*2,3,4
input : len(11), period(200);
var : Lbar1(0), Lbar2(0), Lval1(0), Lval2(0), Hbar1(0), Hbar2(0), Hval1(0), Hval2(0);
var : UpTrend(0), DnTrend(0),TL1(0),TL2(0),TL3(0);
Lbar1 = swinglowbar(1, low, len, len, period);
Lbar2 = swinglowbar(2, low, len, len, period);
Lval1 = swinglow(1, low, len, len, period);
Lval2 = swinglow(2, low, len, len, period);
Hbar1 = swinghighbar(1, high, len, len, period);
Hbar2 = swinghighbar(2, high, len, len, period);
Hval1 = swinghigh(1, high, len, len, period);
Hval2 = swinghigh(2, high, len, len, period);
If Lval1 > Lval2 Then
{
var1 = 1;
UpTrend = (Lval1 - Lval2)/(Lbar2 - Lbar1)*Lbar1 + Lval1;
plot1(UpTrend, "상승추세선");
}
Else
var1 = 0;
If Hval1 < Hval2 Then
{
var2 = 1;
DnTrend = (Hval1 - Hval2)/(Hbar2 - Hbar1)*Hbar1 + Hval1 ;
plot2(DnTrend, "하락추세선");
}
Else
var2 = 0;
if var1 == 1 and var1[1] != 1 or (Lbar1 < Lbar1[1]) Then
{
var11 = sdate;
var12 = stime;
var13 = H;
Condition1 = false;
}
if var1 == 1 then
{
if H > var13 Then
var13 = H;
if var1[1] == 1 and Condition1 == false and CrossDown(L,UpTrend) Then
{
Condition1 = true;
var14 = UpTrend;
var15 = var14-(var13-var14);
TL1 = TL_New(var11,var12,var15,sdate,stime,var15);
TL_SetColor(TL1,CYAN);
}
if Condition1 == true then
{
TL_SetEnd(TL1,sdate,stime,var15);
}
}
if var2 == 1 and var2[1] != 1 or (Hbar1 < Hbar1[1]) Then
{
var21 = sdate;
var22 = stime;
var23 = L;
Condition2 = false;
}
if var2 == 1 then
{
if L < var23 Then
var23 = L;
if var2[1] == 1 and Condition2 == false and CrossDown(H,DnTrend) Then
{
Condition2 = true;
var24 = DnTrend;
var25 = var24+(var24-var23);
TL2 = TL_New(var21,var22,var25,sdate,stime,var25);
TL_SetColor(TL2,MAGENTA);
}
if Condition2 == true then
{
TL_SetEnd(TL2,sdate,stime,var25);
}
}
2019-01-23
193
글번호 125499
샤프헤드기어 님에 의해서 삭제되었습니다.
2019-01-23
18
글번호 125498
답변완료
수식부탁드립니다
$,안녕하세요~
아래수식은 전봉기준으로 텍스트함수가 출력되고 있습니다, 이수식을 현재봉 기준으로
텍스트함수가 출력되게 수정 부탁드립니다.
Input:length(10),기준일(20190115),기준시간(100000),파동선두께(2);
Var:j(0),jj(0),jjj(0),최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),
TL1(0);
Array:고[5,4](0),저[5,4](0), // 1:가격, 2:Index, 3:sDate, 4:sTime
역사적고점[5](0),역사적저점[5](0); // 1:가격, 2:Index, 3:sDate, 4:sTime
var : Tcond(false);
if sdate >= 기준일 and stime >= 기준시간 Then
Tcond = true;
#==========================================#
If Index == 0 Then
{
고[1,1] = H;
저[1,1] = L;
}
Condition1 = Highest(H,length) == H and 최종고가 <> H;
Condition2 = Lowest (L,length) == L and 최종저가 <> L;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종변곡점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리
Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = H; // 신규고점을 체크하기 위해 저장
If 최종변곡점 == "저점" Then
{
For j = 5 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = H;
고[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,GREEN);
}
Else If 고[1,1] < H Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
}
If 기준일 <= Date and 역사적고점[1] < 고[1,1] Then
{
For jjj = 1 To 4 // 1:가격, 2:Index, 3:sDate, 4:sTime
{
역사적고점[jjj] = 고[1,jjj];
}
}
최종변곡점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = L;
If 최종변곡점 == "고점" then
{
For j = 5 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = L;
저[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,GREEN);
}
Else If 저[1,1] > L then
{
저[1,1] = L;
저[1,3] = sDate;
저[1,4] = sTime;
저[1,2] = Index;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
If 기준일 <= Date and ( 역사적저점[1] > 저[1,1] or 역사적저점[1] == 0 ) Then
{
For jjj = 1 To 4
{
역사적저점[jjj] = 저[1,jjj];
역사적고점[jjj] = 0; // 역사적 고점 초기화
}
}
최종변곡점 = "저점";
}
#==========================================#
Var:기울기(0);
Array:fr[7,4](0); // 1:비율, 2:값, 3:라인번호, 4:텍스트번호
If Index == 0 Then
{
fr[1,1] = 0;
fr[2,1] = 0.236;
fr[3,1] = 0.382;
fr[4,1] = 0.50;
fr[5,1] = 0.618;
fr[6,1] = 0.764;
fr[7,1] = 1;
}
If 역사적고점[1] > 0 and 역사적저점[1] > 0 Then
{
If 역사적고점[1][1] != 역사적고점[1] or 역사적저점[1][1] != 역사적저점[1] Then
{
기울기 = (역사적고점[1] - 역사적저점[1]) / (역사적고점[2] - 역사적저점[2]);
for j = 1 to 7
{
If fr[j,3] > 0 Then TL_Delete(fr[j,3]); // 기존의 라인은 지우고
fr[j,2] = 기울기 * fr[j,1] * (index - 역사적저점[2]) + 역사적저점[1]; // 피보나치 비율을 곱해서 계산
fr[j,3] = TL_New(역사적저점[3],역사적저점[4],역사적저점[1],sDate,sTime,fr[j,2]); // 라인을 생성
TL_SetColor(fr[j,3],BLUE);
TL_SetStyle(fr[j,3],1.0);
TL_SetExtRight(fr[j,3],true);
}
}
Else
{
for j = 1 to 7
{
fr[j,2] = 기울기 * fr[j,1] * (index - 역사적저점[2]) + 역사적저점[1];
TL_SetEnd(fr[j,3],sDate,sTime,fr[j,2]);
}
}
}
Text_Delete(var1);
var1 = Text_New(sdate,stime,fr[1,2],NumToStr(fr[1,1]*100,1)+"% : "+NumToStr(fr[1,2],2));
Text_Delete(var2);
var2 = Text_New(sdate,stime,fr[2,2],NumToStr(fr[2,1]*100,1)+"% : "+NumToStr(fr[2,2],2));
Text_Delete(var3);
var3 = Text_New(sdate,stime,fr[3,2],NumToStr(fr[3,1]*100,1)+"% : "+NumToStr(fr[3,2],2));
Text_Delete(var4);
var4 = Text_New(sdate,stime,fr[4,2],NumToStr(fr[4,1]*100,1)+"% : "+NumToStr(fr[4,2],2));
Text_Delete(var5);
var5 = Text_New(sdate,stime,fr[5,2],NumToStr(fr[5,1]*100,1)+"% : "+NumToStr(fr[5,2],2));
Text_Delete(var6);
var6 = Text_New(sdate,stime,fr[6,2],NumToStr(fr[6,1]*100,1)+"% : "+NumToStr(fr[6,2],2));
Text_Delete(var7);
var7 = Text_New(sdate,stime,fr[7,2],NumToStr(fr[7,1]*100,1)+"% : "+NumToStr(fr[7,2],2));
Text_SetStyle(var1,5,2);
Text_SetStyle(var2,5,2);
Text_SetStyle(var3,5,2);
Text_SetStyle(var4,5,2);
Text_SetStyle(var5,5,2);
Text_SetStyle(var6,5,2);
Text_SetStyle(var7,5,2);
Text_SetColor(var1,BLUE);
Text_SetColor(var2,BLUE);
Text_SetColor(var3,BLUE);
Text_SetColor(var4,BLUE);
Text_SetColor(var5,BLUE);
Text_SetColor(var6,BLUE);
Text_SetColor(var7,BLUE);
2019-01-22
198
글번호 125497
답변완료
문의드립니다.
아래식 #지정시간 청산# 에서 지정시간(220000~230000) 청산식 수정부탁드립니다.
진입이후 지정시간이 되면 max 수익(20~29 틱) 대비 0.1(10%)이상 하락하면 청산하고 싶습니다.
아래식에서는 지정시간 전에 이미 진입이 있는 경우에는 max 수익을 인식하지 못합니다.
1.2.번이 가능하도록 부탁드립니다. 가능하시면 식 간결화도 부탁드리겠습니다.
1. 해당시간 전에 이미 진입이 있는 경우
- 지정시간에 지정시간 전 Max수익 포함하여 Max수익 대비 0.1(10%) 이상 하락 청산
예)해당시간 전 진입 max수익 21틱, 지정시간에 10틱 수익중, 0.1(10%)이상 하락이므로 바로 청산
예)해당시간 전 진입 max수익 21틱, 지정시간에 25틱 수익중 25틱대비 0.1(10%)하락시 청산
- 진입후 max 수익이 20이 안넘었다면 지정시간에 20틱이상 도달시 Max수익 대비 0.1(10%) 이상 하락 청산
예)해당시간 전 진입 max 수익 19틱, 지정시간에 20틱 수익중 20틱대비 0.1(10%)하락시 청산
2. 해당시간에 신규 진입이 되는경우
- 20틱이상 수익이면 Max수익 대비 0.1(10%) 이상 하락 청산
var : BH(0),SL(0),HE(0),LE(0);
# 청산1 #
if MarketPosition == 1 then {
SetStopTrailing(0,30,PointStop);
SetStopLoss(30,PointStop);
}
if Marketposition == -1 Then {
SetStopTrailing(0,30,PointStop);
SetStopLoss(30,PointStop);
}
# 지정시간 청산 #
if ((sdate != sdate[1] and stime > 220000) or
(sdate == sdate[1] and stime > 220000 and stime[1] <230000)) Then {
if MarketPosition == 1 Then {
BH = highest(H,BarsSinceEntry);
if MaxEntries == 1 Then
HE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) > HE Then
HE = LatestEntryPrice(0);
if BH >= EntryPrice+PriceScale*20 then{
ExitLong("T4",AtStop,BH-(BH-EntryPrice)*0.1); }
}
if MarketPosition == -1 Then {
SL = Lowest(L,BarsSinceEntry);
if MaxEntries == 1 Then
LE = LatestEntryPrice(0);
if MaxEntries >= 2 and LatestEntryPrice(0) < LE Then
LE = LatestEntryPrice(0);
if SL <= EntryPrice-PriceScale*20 then{
ExitShort(" T4",AtStop,SL+(EntryPrice-SL)*0.1); }
}
}
2019-01-22
158
글번호 125496
답변완료
문의드립니다.
안녕하세요.
if H > lowest(C[1],3)*1.15 && # 고가가 15% 이상 상승함
H == highest(H,20) &&
v== highest(v,10)
Then {
Condition1 = true;
value1 = H;
value3 = v / ( (1-L/h)*100 ); # 최고점일 -1% 하락 시 거래량
value5 = index;
value11 = H;
value12 = L;
var7 = 0; //초기값 0
}
var21 = v / ( (1-L/h)*100 ); # 당일 -1% 하락 시 거래량
var24 = var21/value3;
if Condition1 == true Then {
if H > value11 Then
value11 = H;
if L < value12 Then
value12 = L;
# 카운트 : 최고가 이후 전일대비 -6%,. var24<0.6 를 만족하는 봉 횟수를 카운팅
if C<O && c<c[1]*0.94 && var24<0.6 Then
var7 = var7+1;
}
if Condition1 == true and
index >= value5+1 and index <= value5+15 and
value1 >= value11 and
L==value12 &&
var7 >= 1
Then
find(1);
위 종목검색식을 검색기간 100, 기준봉 10 (10일전 검색)
으로 설정한 후 검색하면
위 식의 조건을 만족하는 종목인 넷게임즈(1월8일) 가 검색되지 않습니다.
위 식으로 지표를 만들어서
1월8일의 넷게임즈의 지표값을 보면
var24는 0.46 이고 종가는 -9.5% 로 위 조건식을 만족합니다.
넷게임즈가 검색될 수 있도록 수식 수정 부탁드립니다.
수고하세요.
2019-01-22
173
글번호 125495
답변완료
돌파 전략 수식을 부탁드립니다.
저는 나이 들어서 시스템 트레이딩를 처음 시도하는 초보자라 시스템 트레이딩 프로그래밍에 난관이 많군요. 다음 사항에 대하여 수식 부탁드립니다.
저의 투자대상은 주식 개별 종목이고요
개별종목에 대하여
NS=(전일고가-전일종가)/(전일고가-전일저가)
라고 정의하면
NS가 0.5이상이면 하기와 같이 매매를 실행하고
NS가 0.5미만이면 매매를 실행하지 않습니다.
(물론 0.5는 종목에 따라 다른 숫자로 변경할 수도 있습니다.)
매매는
당일 현재가가 당일 시가+(전일고가-전일종가)를 돌파하면
매수하여 보유하였다가 당일 종가에 전량을 매도합니다.
만약 돌파하지 못하면 당일 매매는 장마감시에 종료됩니다.
다음날에도 위와 같은 매매전략이 되풀이 됩니다.
잘 부탁드립니다.
2019-01-22
206
글번호 125494