커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1505
글번호 230811
답변완료
부탁드립니다
1. 종가가 전일 시가보다 높으면 해당 봉에 빨강색으로, 전일 및 전전일 시가보다 높으면 해당 봉에 흰색으로, 전일 시가보다 낮으면 해당 봉에 파란색으로, 전일 및 전전일 시가보다 낮으면 해당 봉에 검정색으로 구현해 주세요
2. 보조차트의 종가가 전일 고가보다 높으면 기본차트 해당 봉에 빨강색으로, 전일 저가보다 낮으면 기본차트 해당 봉에 파란색으로 구현해 주세요
고맙습니다.
2023-09-20
938
글번호 172620
답변완료
거래대금 수식 관련
다음 조건을 만족할 때 매수한다면 어떤 식을 만들면 되나요?
1. 이틀전 거래대금이 1000억원 이상일 때 오늘 시초가에 매수, 혹은 오늘 첫봉에서 매수
2. 당일 거래대금이 500억원 이상일 때 즉시 매수
2023-09-20
839
글번호 172619
답변완료
수식 문의
안녕하세요?
input: 시작(01시), 끝(23시)
var1 = 어제의 시작시각부터 끝시각까지의 중심값 (= 0.5*(최대값 + 최소값))을
오늘 01시부터 내일 01시가 되기 전까지 수평선으로 그려 주세요.
var2 = 위의 var1 을 24시간 빠꾸 시켜서 왼쪽에 그려주세요.
그러니까 어제의 시작시각부터 끝시각까이의 중심값을
어제의 01시(== 시작)부터 오늘 01시가 되기 전까지 수평선으로 그려 주세요.
물론 시작시각은 22시, 끝 시각은 다음날 15시로 인풋을 줄 수도 있습니다.
감사합니다.
2023-09-21
723
글번호 172618
러블리 님에 의해서 삭제되었습니다.
2023-09-20
13
글번호 172617
답변완료
함수요청
안녕하세요?
아래 글번호 83866번 재질문드립니다.
스크립트 검증 부탁드립니다.
작성주신 스크립트를 국내선물 1분봉에 적용해보면
9월 19일은, [1]은 나오나 [2]가 나오지 않습니다. 따라서 [3]으로도 연결이 안됩니다.
해당일은 DayOpen < DayClose(1) and value1 > DayOpen 이고
Var2 = DayHigh = 343.25, Var3 = DayLow = 342.70 입니다.
[1] 09:06에 CrossDown(c=342.65,var3=342.70)을 만족하므로 익봉 시가인 09:07에 342.60으로 "s1" 신호가 생성되어야 합니다.
[2] 그리고 09:27 완성봉 종가가 343.30이므로 CrossUp(c=343.30,var2=343.25)이 되어 익봉 시가인 09:28에 343.30으로 "b2" 신호가 나와야 합니다.
[3] 그리고 11:20에는 CrossDown(c=341.80, var1=341.86)이면서 (var1=341.86) < (var3 =342.70)을 만족하므로 익봉 시가인 11:21에 341.75로 "Cx" 신호가 나와야 합니다.
[4] 아울러 매수, 매도 신호가 최대 1번씩 총 2번이 나와서 당일 추가 신호는 없어야 합니다.
////////////글번호 83866번에서 작성주신 스크립트////////////
var : b(0),s(0);
var1 = ma(c,100);
if Bdate != Bdate[1] Then
{
b = 0;
s = 0;
value1 = var1;
}
if DayIndex < 7 Then
{
Var2 = DayHigh;
Var3 = DayLow;
}
if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then
b = b+1;
if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then
s = s+1;
if MarketPosition >= 0 and DayOpen < DayClose(1) and value1 > DayOpen Then
{
if s < 1 and DayIndex >= 7 and CrossDown(C,Var3) Then
Sell("s1",AtMarket);
if b < 1 and s == 1 and CrossUp(C,Var2) Then
Buy("b2",AtMarket);
if CrossDown(c,var1)and var1 < Var3 Then
ExitLong("Cx",AtMarket);
}
if MarketPosition <= 0 and DayOpen > DayClose(1) and value1 < DayOpen Then
{
if b < 1 and DayIndex >= 7 and CrossUp(C,Var2) Then
Buy("b1",AtMarket);
if s < 1 and b == 1 and CrossDown(C,Var3) Then
Sell("s2",AtMarket);
if CrossUp(c,var1) and var1 > Var2 Then
ExitShort("Px",AtMarket);
}
SetStopEndofday(151900);
////////////스크립트로 작성하고자는 전략////////////
1번 신호는 2번 신호보다 우선하여 나오게 하고 싶습니다.
즉 s1은 b2에 우선합니다. b1은 s2에 우선합니다.
s1이 발생하지 않았는데 b2가 먼저 나오게 하지 않게 하고자 합니다.
s1이 발생된 후에는 b2가 나올 수 있습니다.
b1이 발생하지 않았는데 s2가 먼저 나오게 하지 않게 하고자 합니다.
b1이 발생된 후에는 s2가 나올 수 있습니다.
당일 매수는 최대 1번, 매도도 1번, 도합 2번까지 진입이 가능하게 하고자 합니다.
1 .당일 시초가가 전일 종가대비 하락 출발하되 시초가 당시의 100ma > 시초가일 때
가) 당일 개장 후 7개봉의 고점과 저점을 잡고 저점 이탈시 익봉 시가에 매도(s1) 진입
나) 당일 개장 후 7개봉의 고점과 저점을 잡고 s1인 상태에서 고점 돌파시 익봉 시가에 매수(b2) 진입
다) 분봉의 종가가 100ma를 하향 이탈하되 당시 100ma가 당일 개장 후 7개봉 저점보다 작은 상태이면 b2 청산
2. 당일 시초가가 전일 종가대비 상승 출발하되 시초가 당시의 100ma < 시초가일 때
가) 당일 개장 후 7개봉의 고점과 저점을 잡고 고점 돌파시 익봉 시가에 매수(b1) 진입
나) 당일 개장 후 7개봉의 고점과 저점을 잡고 b1인 상태에서 저점 이탈시 익봉 시가에 매도(s2) 진입
다) 분봉의 종가가 100ma를 상향 돌파하되 당시 100ma가 당일 개장 후 7개봉 고점보다 큰 상태이면 s2 청산
3. 15시 19분 강제청산
*1번 신호는 2번 신호보다 우선하여 나오게 하고 싶습니다.
즉 s1은 b2에 우선합니다. b1은 s2에 우선합니다.
s1이 발생하지 않았는데 b2가 먼저 나오게 하지 않게 하고자 합니다.
s1이 발생된 후에는 b2가 나올 수 있습니다.
b1이 발생하지 않았는데 s2가 먼저 나오게 하지 않게 하고자 합니다.
b1이 발생된 후에는 s2가 나올 수 있습니다.
당일 매수는 최대 1번, 매도도 1번, 도합 2번까지 진입이 가능하게 하고자 합니다.
2023-09-20
577
글번호 172616
예스쟁이 님에 의해서 삭제되었습니다.
2023-09-20
6
글번호 172605
답변완료
전환추세 중간선
Input : 전환(0.7);
Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분("");
Array:고[10,4](0),저[10,4](0);
var : box(0),TX(0),TL(0),T(0),TL1(0),TL2(0);
HH = H;
LL = L;
If Index == 0 Then
{
고[1,1] = HH;
고[1,2] = 0;
고[1,3] = sDate;
고[1,4] = sTime;
저[1,1] = LL;
저[1,2] = 0;
저[1,3] = sDate;
저[1,4] = sTime;
}
If Index > 0 Then
{
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HH[hiBar] < HH Then hiBar = 0;
If LL[loBar] > LL Then loBar = 0;
Condition1 = 저[1,1]+전환 <= HH and hiBar == 0;
Condition2 = 고[1,1]-전환 >= LL and loBar == 0;
처리구분 = "";
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
{
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL = TL_New_Self(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL,2);
TL_SetColor(TL,Red);
TX = Text_New_Self(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetSize(tx,25);
Text_SetColor(tx,Red);
Text_SetStyle(tx,1,1);
Text_SetBold(tx,1);
Condition2 = false;
}
If 고[1,1] < HH[hiBar] Then
{
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL,고[1,3],고[1,4],고[1,1]);
Text_SetString(TX,NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetLocation(TX,고[1,3],고[1,4],고[1,1]);
}
if Condition2 == False and abs(저[1,1]-고[1,1]) >= 0.9 Then
{
Condition2 = true;
TL1 = TL_New_Self(고[1,3],고[1,4],(고[1,1]+저[1,1])/2,저[1,3],저[1,4],(고[1,1]+저[1,1])/2);
TL2 = TL_New_Self(고[1,3],고[1,4],고[1,1] + abs(고[1,1]-저[1,1])*0.618,저[1,3],저[1,4],고[1,1] + abs(고[1,1]-저[1,1])*0.618);
}
if Condition2 == true Then
{
TL_SetBegin(TL1,고[1,3],고[1,4],(고[1,1]+저[1,1])/2);
TL_SetEnd(TL1,저[1,3],저[1,4],(고[1,1]+저[1,1])/2);
TL_SetBegin(TL2,고[1,3],고[1,4],고[1,1] + abs(고[1,1]-저[1,1])*0.618);
TL_SetEnd(TL2,저[1,3],저[1,4],고[1,1] + abs(고[1,1]-저[1,1])*0.618);
}
최종꼭지점 = "고점";
Plot1(고[1,1]);
NoPlot(2);
}
If 처리구분 == "저점처리" Then
{
If 최종꼭지점 == "고점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL = TL_New_Self(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL,2);
TL_SetColor(TL,Blue);
TX = Text_New_Self(저[1,3],저[1,4],저[1,1],NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetSize(tx,25);
Text_SetColor(tx,Blue);
Text_SetStyle(tx,1,0);
Text_SetBold(tx,1);
Condition1 = False;
}
If 저[1,1] > LL[loBar] Then
{
저[1,1] = LL[loBar];
저[1,2] = Index - loBar;
저[1,3] = sDate[loBar];
저[1,4] = sTime[loBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL,저[1,3],저[1,4],저[1,1]);
Text_SetString(TX,NumToStr(고[1,1]-저[1,1],2)+" ");
Text_SetLocation(TX,저[1,3],저[1,4],저[1,1]);
}
if Condition1 == False and abs(고[1,1]-저[1,1]) >= 0.9 Then
{
Condition1 = true;
TL1 = TL_New_Self(고[1,3],고[1,4],(고[1,1]+저[1,1])/2,저[1,3],저[1,4],(고[1,1]+저[1,1])/2);
TL2 = TL_New_Self(고[1,3],고[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.618,저[1,3],저[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.618);
}
if Condition1 == true Then
{
TL_SetBegin(TL1,고[1,3],고[1,4],(고[1,1]+저[1,1])/2);
TL_SetEnd(TL1,저[1,3],저[1,4],(고[1,1]+저[1,1])/2);
TL_SetBegin(TL2,고[1,3],고[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.618);
TL_SetEnd(TL2,저[1,3],저[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.618);
}
최종꼭지점 = "저점";
Plot2(저[1,1]);
NoPlot(1);
}
그림 위와 같이, 추세선 크기가 0.9p 이상일 때,
추세선의 50% 지점과 61.8% 지점에 추세선의 좌우 폭만큼 수평라인.
수정 부탁드립니다.
2023-09-20
942
글번호 172602
답변완료
문의드립니다.
종목검색식을 부탁드립니다.
A=(C+C(9)+C(8)+C(7)+C(6)+C(5)+C(4)+C(3)+C(2)+C(1))/10;
M=ma(A, 기간);
MH=Valuewhen(1, M > M(1), M);
K=HighestSince(1,crossup(C, MH), MH);
CrossUp(C, K)
2023-09-20
751
글번호 172597
러블리 님에 의해서 삭제되었습니다.
2023-09-20
19
글번호 172596