커뮤니티
예스랭귀지 Q&A
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1412
글번호 230811
답변완료
문의드립니다.
늘 고맙습니다.
1. 나스닥에서 시간을 정해놓고 진입과 청산을 하려는데요.
stime을 다음과같이 사용해도 되는지 문의드립니다.
if (sTime>180000 or sTime<73000) and 조건1 Then
신호가 나오면 선을 긋게 해놓으니 선은 나옵니다.
나스닥은 장시작시간이 17시부터라서 or 대신에 and를 쓰면 안되더군요.
2. 거래량 막대차트에 1000 자리에 수평선을 그으려면 어떻게 해야 하나요?
2024-05-27
823
글번호 179946
답변완료
검색식 부탁 드려요
* 5가지 검색식 부탁드려요
1. 볼린저밴드가(20,2) 수축되었을때 Band width(20, 2) 종목을 검색하고 싶습니다.
단, Band width가 침체 0.10 이하 일때
2. ADX (14) signal (9) 일때,
2-1) ADX가 signal 을 돌파할때
2-2) ADX가 signal선을 돌파후 signal근처까지 내려 왔다가 다시 올라갈때
(signal 선 기준 위쪽으로 0.5% )
종목을 예스트레이더로 검색하고 싶습니다.
단,0봉전-5봉전 까지의 종목을 모두검색하고 싶습니다
3. 캔들이 60 이평(단순)을 돌파 하는 종목
4. 캔들이 60 이평 (단순)보다 위에 있는 종목
2024-05-27
869
글번호 179945
답변완료
SAR 매매 문의
안녕하세요. 아래 매매식을 부탁드릴 수 있을까요?
5분봉 기준으로,
매수 진입: 종가가 20 이평선을 상향돌파하는 경우,
청산: SAR 하락 전환시
감사합니다.
2024-05-24
674
글번호 179944
답변완료
궁금한점이 있어 이렇게 글을 남깁니다.
안녕하세요 매매 설정에 대해 궁금한게 있어 글을 남깁니다.
보시면 아시겠지만
진입 에서 현재가 +-1 이라고 되어있는데....
진입을 현재가 -1호가에서 하고 싶은데 저기 설정창에서는 불가능 한가요??
2024-05-24
613
글번호 179943
답변완료
질문 요청 드립니다. (강조지표)
* 좋은 주말 되십시요.
* 아래 수식에서 0선을 기준으로 싸이클이 형성 되는데
사이클 기준으로 중심선좀 부탁 드립니다.
즉 싸이클 처음부터 마지막 봉 사이를 중심값 수평선으로 표시 OR 강조봉지표
혹시 싸이클 이 작을 수 있으니 싸이클 봉이 최소 10개 이상인 싸이클만
표시 부탁 드립니다.
즉 0 보다 클 경우 0 ~ 최대값 까지 중심값 수평선으로 표시 or 강조 형식으로
0 보다 작을경우 0 ~ 최소값 까지 중심값 수평선으로 표시 or 강조 형식으로
안녕하세요
예스스탁입니다.
input:P1(5),P2(10),N(10);
Var:j(0),jj(0),HH(0),LL(0),최종고가(0),최종저가(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0),TL2(0),TL3(0),TL4(0),TL5(0),TL12(0),TL13(0),TL14(0),TL15(0),T(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
var : TL24(0),TL25(0);
var : mav1(0),mav2(0);
#==========================================#
mav1 = ma(C,P1);
mav2 = ma(C,P2);
Plot1(mav1);
plot2(mav2);
HH = IFF(0==1,C,H);
LL = IFF(0==1,C,L);
If Index == 0 Then
{
고[1,1] = HH;
저[1,1] = LL;
}
Condition1 = CrossDown(mav1,mav2) and 최종고가 <> HH;
Condition2 = CrossUp(mav1,mav2) 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
{
T = 1;
최종고가 = HH; // 신규고점을 체크하기 위해 저장
If 최종꼭지점 == "저점" Then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = highest(H,N);
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 1 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],NumToStr(고[1,1],2));
Text_SetStyle(Text1, 0, 1);
Text_SetColor(Text1,WHITE);
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,WHITE);
}
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 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,NumToStr(고[1,1],2));
}
}
최종꼭지점 = "고점";
}
#==========================================#
If 처리구분 == "저점처리" Then
{
T = -1;
최종저가 = LL;
If 최종꼭지점 == "고점" then
{
For j = 10 DownTo 2
{
For jj = 1 To 4
{
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = Lowest(L,N);
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 1 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],NumToStr(저[1,1],2));
Text_SetStyle(Text1, 0, 0);
Text_SetColor(Text1,WHITE);
}
TL_SetSize(TL1,1);
TL_SetColor(TL1,WHITE);
}
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 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,NumToStr(저[1,1],2));
}
}
최종꼭지점 = "저점";
}
if T == 1 and T[1] != T Then
{
TL2 = TL_New(고[2,3],고[2,4],고[2,1],NextBarSdate,NextBarStime,고[2,1]);
TL12 = TL_New(고[2,3],고[2,4],고[2,1],NextBarSdate,NextBarStime,고[2,1]);
TL_SetSize(TL2,3);
TL_SetColor(TL2,RED);
TL_SetSize(TL12,1);
TL_SetColor(TL12,RED);
if min(C,mav1,mav2) > 고[2,1] Then
{
TL_SetColor(TL2,pink);
TL_SetColor(TL12,pink);
}
TL_Delete(TL24);
TL_Delete(TL25);
TL24 = TL_New(저[1,3],저[1,4],저[1,1]+abs(고[2,1]-저[2,1]),sdate,stime,저[1,1]+abs(고[2,1]-저[2,1]));
TL25 = TL_New(저[1,3],저[1,4],저[1,1]+abs(고[3,1]-저[3,1]),sdate,stime,저[1,1]+abs(고[3,1]-저[3,1]));
TL_SetExtRight(TL24,true);
TL_SetExtRight(TL25,true);
TL_SetSize(TL24,0);
TL_SetStyle(TL24,3);
TL_SetColor(TL24,Red);
TL_SetSize(TL25,0);
TL_SetStyle(TL25,3);
TL_SetColor(TL25,Red);
}
Else
{
TL_SetEnd(TL2,sDate,sTime,고[2,1]);
TL_SetEnd(TL12,sDate,sTime,고[2,1]);
if min(C,mav1,mav2) > 고[2,1] Then
{
TL_SetColor(TL2,pink);
TL_SetColor(TL12,pink);
}
}
if T == -1 and T[1] != T Then
{
TL3 = TL_New(저[2,3],저[2,4],저[2,1],NextBarSdate,NextBarStime,저[2,1]);
TL13 = TL_New(저[2,3],저[2,4],저[2,1],NextBarSdate,NextBarStime,저[2,1]);
TL_SetSize(TL3,3);
TL_SetColor(TL3,RED);
TL_SetSize(TL13,1);
TL_SetColor(TL13,RED);
if max(c,mav1,mav2) < 저[2,1] Then
{
TL_SetColor(TL3,pink);
TL_SetColor(TL13,pink);
}
TL_Delete(TL24);
TL_Delete(TL25);
TL24 = TL_New(고[1,3],고[1,4],고[1,1]-abs(고[2,1]-저[2,1]),sdate,stime,고[1,1]-abs(고[2,1]-저[2,1]));
TL25 = TL_New(고[1,3],고[1,4],고[1,1]-abs(고[3,1]-저[3,1]),sdate,stime,고[1,1]-abs(고[3,1]-저[3,1]));
TL_SetExtRight(TL24,true);
TL_SetExtRight(TL25,true);
TL_SetSize(TL24,0);
TL_SetStyle(TL24,3);
TL_SetColor(TL24,blue);
TL_SetSize(TL25,0);
TL_SetStyle(TL25,3);
TL_SetColor(TL25,blue);
}
Else
{
TL_SetEnd(TL3,sDate,sTime,저[2,1]);
TL_SetEnd(TL13,sDate,sTime,저[2,1]);
if max(c,mav1,mav2) < 저[2,1] Then
{
TL_SetColor(TL3,Brown);
TL_SetColor(TL13,Brown);
}
}
즐거운 하루되세요
안녕하세요
예스스탁입니다.
소리를 출력하는 playsound함수는 if조건이 만족하면 계속 소리가 출력이 됩니다.
초단위로 소리를 제어하지는 못합니다.
아래 내용으로만 작성이 가능합니다.
정배열 첫봉, 역배열 첫봉에서만 소리출력
정배열 모든봉, 역배열 모든봉에서만 소리출력
소리출력함수(playsound)는 함수내에 지정한 경로의 wav파일이 구동됩니다.
아래는 예스트레이더에 기본으로 제공되는 wav파일을 지정했습니다.
원하시는 wav파일의 경로와 이름으로 수정하시기 바랍니다.
게시판에서 식을 복사할 경우 경로명 중 ₩의 폰트가 깨질수 있으므로
₩는 다시 타이핑하시기 바랍니다.
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
PlaySound("C:₩예스트레이더₩data₩Sound₩stop.wav");
1
input : P1(5),P2(10),P3(20),P4(30),P5(40),P6(50),P7(60),P8(120),P9(240);
var1 = ma(c,P1);
var2 = ma(c,P2);
var3 = ma(c,P3);
var4 = ma(c,P4);
var5 = ma(c,P5);
var6 = ma(c,P6);
var7 = ma(c,P7);
var8 = ma(c,P8);
var9 = ma(c,P9);
Condition1 = var1 > Var2 and Var2 > Var3 and Var3 > Var4 and Var4 > Var5 and Var5 > Var6 and Var6 > Var7 and Var7 < Var8 and Var8 > Var9;
Condition2 = var1 < Var2 and Var2 < Var3 and Var3 < Var4 and Var4 < Var5 and Var5 < Var6 and Var6 < Var7 and Var7 < Var8 and Var8 < Var9;
if Condition1 == true and Condition1 == False Then
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
if Condition2 == true and Condition2 == False Then
PlaySound("C:₩예스트레이더₩data₩Sound₩stop.wav");
2
input : P1(5),P2(10),P3(20),P4(30),P5(40),P6(50),P7(60),P8(120),P9(240);
var1 = ma(c,P1);
var2 = ma(c,P2);
var3 = ma(c,P3);
var4 = ma(c,P4);
var5 = ma(c,P5);
var6 = ma(c,P6);
var7 = ma(c,P7);
var8 = ma(c,P8);
var9 = ma(c,P9);
Condition1 = var1 > Var2 and Var2 > Var3 and Var3 > Var4 and Var4 > Var5 and Var5 > Var6 and Var6 > Var7 and Var7 < Var8 and Var8 > Var9;
Condition2 = var1 < Var2 and Var2 < Var3 and Var3 < Var4 and Var4 < Var5 and Var5 < Var6 and Var6 < Var7 and Var7 < Var8 and Var8 < Var9;
if Condition1 == true Then
PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav");
if Condition2 == true Then
PlaySound("C:₩예스트레이더₩data₩Sound₩stop.wav");
즐거운 하루되세요
2024-10-05
881
글번호 179942
답변완료
수식 질문합니다.
안녕하세요.
아래 수식을 만족한 후 첫 양봉이 출현하는 종목.
var : count(-1);
if O[3]>C[3] and O[2]>C[2] and O[1]>C[1] and O<C and
V[2]*1.1<V[1] and V[1]<V Then
{
count = 0;
}
Else
{
if count >= 0 Then
{
if C <= O Then
{
count = count+1;
}
if count == 3 Then
Find(1);
}
}
첨부한 사진 참조하세요.
감사합니다.
2024-05-23
896
글번호 179941
답변완료
문의드립니다.
1. 87137번 질에서
2번째 항목에 대해 아래와 같이 답해주셨습니다.
-----------------------------------------------------------------
2) 매수든 매도든 신호가 발생하면 신호발생봉 이후 3개 봉까지 같은 방향 신호가 발생하지 않았으면 합니다.
아예 신호발생없이 끝나는게 아니라 진입조건 만족상태라면 3개봉 이후에 신호가 발생하길 원합니다.
-----------------------------------------------------------------
ar : ii(0);
#진입발생 봉번호
if CurrentContracts > CurrentContracts[1] Then
ii = Index;
if 매수진입조건 Then
{
if (ii == 0) or (ii > 0 and Index >= ii+3) Then
Buy();
}
if 매도진입조건 Then
{
if (ii == 0) or (ii > 0 and Index >= ii+3) Then
Sell();
}
-----------------------------------------------------------------
동일방향 신호가 3개봉까지 안나오게 제어하는 것은 잘 작동됩니다.
그런데 1) 동일방향 신호, 2) 청산 신호 둘 다 3개봉 까지 신호가 안나오게 하고 싶습니다.
(즉, 동일방향 신호 제어에 추가로 손절이든 익절이든 시간청이든 청산 신호로 무포지션이 된 후 3개봉까지는 신호가 안나오게 하고 싶습니다)
※ 이렇게 3개봉 이내 신호가 안나오게 제어가 되어도 3개봉 이후에도 진입조건이 만족한 상태면 신호가 나오는지요? 그렇게 만들고 싶습니다.
2. 1번 문의와는 별개로
매수/매도 진입후 100틱 이상 상승/하락한 이후에 되돌림이 나와 진입가의 10틱 위/아래에서 즉시 청산하는 청산식도 부탁드립니다. (즉 10틱 수익이 됩니다)
미리 노고에 감사드립니다.
2024-05-25
731
글번호 179940
성은김 님에 의해서 삭제되었습니다.
2024-05-23
0
글번호 179939
답변완료
함수 작성
다음의 수식을 yesstock에 맞게 작성해 주시면 고맙겠습니다.
Wavg(Wavg(가격,기간/2)*2-Wavg(가격,기간),floor(sqrt(기간)));
wavg는 키움증권사에서 가중평균으로 알고있습니다.
2024-05-23
937
글번호 179925