커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
6362
글번호 230811
답변완료
함수요청
안녕하세요?
국내선물 일봉으로 포지션 거래를 하고자 합니다.
아래 전략에 대해 스크립트 작성 부탁드립니다.
투자심리선 + 신심리도 < -50이되 두 값 모두 음일 때 완성 익봉 시가에 매수 진입
투자심리선 + 신심리도 > 100이되 두 값 모두 양일 때 완성 익봉 시가에 매도 진입
투자심리선 혹은 신심리도가 둘 중 하나가 음수가 되면 익봉 시가에 매도청산
투자심리선 혹은 신심리도가 둘 중 하나가 양수가 되면 익봉 시가에 매수청산
2024-03-06
940
글번호 177207
답변완료
피보나치 중간선 박스
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),TL3(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,1);
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);
Condition4 = 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 Condition4 == False and abs(저[1,1]-고[1,1]) >= 0.9 Then
{
Condition4 = true;
TL1 = TL_New_Self(고[1,3],고[1,4],(고[1,1]+저[1,1])/2,저[1,3],저[1,4],(고[1,1]+저[1,1])/2);
TL_SetColor(TL1,Magenta);
TL_SetSize(TL1,0.5);
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);
TL_SetColor(TL2,Orange);
TL_SetSize(TL2,0.5);
TL3 = TL_New_Self(고[1,3],고[1,4],저[1,1] + abs(고[1,1]-저[1,1])*0.382,저[1,3],저[1,4],저[1,1] + abs(고[1,1]-저[1,1])*0.382);
TL_SetColor(TL3,Orange);
TL_SetSize(TL3,0.5);
}
if Condition4 == 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);
TL_SetBegin(TL3,고[1,3],고[1,4],저[1,1] + abs(고[1,1]-저[1,1])*0.382);
TL_SetEnd(TL3,저[1,3],저[1,4],저[1,1] + abs(고[1,1]-저[1,1])*0.382);
}
최종꼭지점 = "고점";
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,1);
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);
Condition3 = 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 Condition3 == False and abs(고[1,1]-저[1,1]) >= 0.9 Then
{
Condition3 = true;
TL1 = TL_New_Self(고[1,3],고[1,4],(고[1,1]+저[1,1])/2,저[1,3],저[1,4],(고[1,1]+저[1,1])/2);
TL_SetColor(TL1,Magenta);
TL_SetSize(TL1,0.5);
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);
TL_SetColor(TL2,Orange);
TL_SetSize(TL2,0.5);
TL3 = TL_New_Self(고[1,3],고[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.382,저[1,3],저[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.382);
TL_SetColor(TL3,Orange);
TL_SetSize(TL3,0.5);
}
if Condition3 == 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);
TL_SetBegin(TL3,고[1,3],고[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.382);
TL_SetEnd(TL3,저[1,3],저[1,4],고[1,1] - abs(고[1,1]-저[1,1])*0.382);
}
최종꼭지점 = "저점";
Plot2(저[1,1]);
NoPlot(1);
}
피보나치 38.2부터 50까지, 50부터 61.8까지 박스.
현재 수식과 같이, 설정한 크기에 도달할 때부터 박스. 감사합니다.
2024-03-06
770
글번호 177205
답변완료
사용자 함수 문의
안녕하세요 항상 건강하십쇼!
저번에 여쭤본 86029 게시글에 이어서 계속 질문 드립니다.
말씀주신 PercentRankArray의 결과값을 사용자 함수로 불러와서 쓰고싶은데 안됩니다 ㅠㅠ
동일한 코드로 지표를 만들어서 plot하면 값이 잘 불러와지는데, 사용자 함수로 넣어서 해당 사용자 함수를 불러와서 plot하면 값이 n/a로 뜹니다. 안뜹니다.
고쳐주세요 (__)
사용자함수명 : PRATest
/////////
var:
vari1(0),
Vari2(0)
;
Array : cc[10000](0)
;
///
Vari1 = Close;
Ins*ertArray(cc, 0, Vari1);
Vari2 = PercentRankArray(C,cc,index);
#대상값은 종가, 대상배열은 cc, 사이즈는 Array에 저장된 값의 수. 즉 Array에 방이 하나씩 채워질때마다 해당 값도 늘어나야합니다. 어떻게 해야하나요? Index를 넣으면 되나요?
PRATest = Vari2;
//////////
2024-03-06
675
글번호 177204
답변완료
피보나치 전환 박스
input : 전환포인트(0.7);
Array : HD[10](0),HT[10](0),HV[10](0);
Array : LD[10](0),LT[10](0),LV[10](0);
var : cnt(0),Hprice(0),Lprice(0);
var : UpTrend(false),DownTrend(False),Trend(0),ZigZagTL(0),TX(0);
var : TL1(0),TL2(0),TL3(0),TL4(0),TL5(0);
Plot1 (c);
HPrice = H;
LPrice = L;
if Index == 0 or Bdate != Bdate[1] Then
{
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
trend = 0;
}
Else
{
UpTrend = HPrice >= LV[0]+전환포인트;
DownTrend = LPrice <= HV[0]-전환포인트;
if trend <= 0 and UpTrend == true Then
{
trend = 1;
For cnt = 9 DownTo 1
{
HD[cnt] = HD[cnt-1];
HT[cnt] = HT[cnt-1];
HV[cnt] = HV[cnt-1];
}
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]);
TL_SetColor(ZigZagTL,Red);
TL_SetSize(ZigZagTL,1);
TX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0]-LV[0],2)+" ");
Text_SetStyle(TX,1,1);
Text_SetColor(TX,Black);
Text_SetSize(tx,25);
Text_SetBold(tx,1);
var2 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(38.2/100));
var3 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(50/100));
var4 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(61.8/100));
TL1 = TL_New(LD[0],LT[0],HV[0],NextBarSdate,NextBarStime,HV[0]);
TL2 = TL_New(LD[0],LT[0],var2,NextBarSdate,NextBarStime,var2);
TL3 = TL_New(LD[0],LT[0],var3,NextBarSdate,NextBarStime,var3);
TL4 = TL_New(LD[0],LT[0],var4,NextBarSdate,NextBarStime,var4);
TL5 = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]);
TL_SetColor(TL1,Magenta);
TL_SetColor(TL2,Orange);
TL_SetColor(TL3,Green);
TL_SetColor(TL4,Orange);
TL_SetColor(TL5,Green);
}
Else if trend >= 0 and DownTrend Then//하락추세 전환
{
trend = -1;
For cnt = 9 DownTo 1
{
LD[cnt] = LD[cnt-1];
LT[cnt] = LT[cnt-1];
LV[cnt] = LV[cnt-1];
}
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]);
TL_SetColor(ZigZagTL,Blue);
TL_SetSize(ZigZagTL,1);
TX = text_new(LD[0],LT[0],LV[0],NumToStr(HV[0]-LV[0],2)+" ");
Text_SetStyle(TX,1,0);
Text_SetColor(TX,Black);
Text_SetSize(tx,25);
Text_SetBold(tx,1);
var2 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(38.2/100));
var3 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(50/100));
var4 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(61.8/100));
TL1 = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]);
TL2 = TL_New(HD[0],HT[0],var2,NextBarSdate,NextBarStime,var2);
TL3 = TL_New(HD[0],HT[0],var3,NextBarSdate,NextBarStime,var3);
TL4 = TL_New(HD[0],HT[0],var4,NextBarSdate,NextBarStime,var4);
TL5 = TL_New(HD[0],HT[0],LV[0],NextBarSdate,NextBarStime,LV[0]);
TL_SetColor(TL1,Magenta);
TL_SetColor(TL2,Orange);
TL_SetColor(TL3,Green);
TL_SetColor(TL4,Orange);
TL_SetColor(TL5,Green);
}
Else
{
if trend == 1 Then
{
if HPrice > HV[0] Then
{
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
TL_SetEnd(ZigZagTL,HD[0],HT[0],HV[0]);
Text_SetLocation(TX,HD[0],HT[0],HV[0]);
Text_SetString(TX,NumToStr(HV[0]-LV[0],2)+" ");
var2 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(38.2/100));
var3 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(50/100));
var4 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(61.8/100));
TL_SetBegin(TL1,LD[0],LT[0],HV[0]);
TL_SetBegin(TL2,LD[0],LT[0],Var2);
TL_SetBegin(TL3,LD[0],LT[0],Var3);
TL_SetBegin(TL4,LD[0],LT[0],Var4);
TL_SetBegin(TL5,LD[0],LT[0],LV[0]);
TL_SetEnd(TL1,Sdate,Stime,HV[0]);
TL_SetEnd(TL2,Sdate,Stime,Var2);
TL_SetEnd(TL3,Sdate,Stime,Var3);
TL_SetEnd(TL4,Sdate,Stime,Var4);
TL_SetEnd(TL5,Sdate,Stime,LV[0]);
}
}
if trend == -1 Then
{
if LPrice < LV[0] Then
{
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
TL_SetEnd(ZigZagTL,LD[0],LT[0],LV[0]);
Text_SetLocation(TX,LD[0],LT[0],LV[0]);
Text_SetString(TX,NumToStr(HV[0]-LV[0],2)+" ");
var2 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(38.2/100));
var3 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(50/100));
var4 = 10^(LOG10(HV[0])-(LOG10(HV[0])-LOG10(LV[0]))*(61.8/100));
TL_SetBegin(TL1,HD[0],HT[0],HV[0]);
TL_SetBegin(TL2,HD[0],HT[0],Var2);
TL_SetBegin(TL3,HD[0],HT[0],Var3);
TL_SetBegin(TL4,HD[0],HT[0],Var4);
TL_SetBegin(TL5,HD[0],HT[0],LV[0]);
TL_SetEnd(TL1,Sdate,Stime,HV[0]);
TL_SetEnd(TL2,Sdate,Stime,Var2);
TL_SetEnd(TL3,Sdate,Stime,Var3);
TL_SetEnd(TL4,Sdate,Stime,Var4);
TL_SetEnd(TL5,Sdate,Stime,LV[0]);
}
}
}
}
피보나치 38.2부터 50까지 박스. 50부터 61.8까지 박스. 감사합니다.
2024-03-06
656
글번호 177202
2wnwn 님에 의해서 삭제되었습니다.
2024-03-06
12
글번호 177201
답변완료
변환 부탁드려요
늘 감사드리며 신호수식을 종목검색식으로 부탁드립니다
AA=dayhigh()>daylow()*1.07;
BB=dayhigh()-daylow();
상단=Valuewhen(1,AA,BB*상단비율/100+daylow());
하단=Valuewhen(1,AA,BB*하단비율/100+daylow());
M5=ma(c,5);
KK5=M5>M5(1) && M5(1)<M5(2);
q=valuewhen(1,KK5,M5);
M20=ma(c,20);
M60=ma(c,60);
KK5 && c> 0 && crossup(C,상단) && q>하단 &&
(M5>M20 or M5>M60)
지표설정:
상단비율:65
하단비율;50
2024-03-06
543
글번호 177195
nicebs 님에 의해서 삭제되었습니다.
2024-03-06
101
글번호 177194
답변완료
시스템식 요청드립니다.
위의 그림을 확인해보시면,
아래의 수식에 의해서 타점 1이 매수되어야 하는데, 매수가 안되었습니다.
If c >= HH*1.005 AND LatestEntryName(0) == "타점" AND LatestExitName(1) == "5%익절" AND LatestExitName(0) == "P5청산" TheN
Buy("타점1",AtLimit,타점,Floor((베팅금)/타점)*0.6);
혹시 왜 매수가 안되었는지 알수가 있을까요???
예상하기로는 돌파매수타점인데, 고점이 갱신되면서 매수가 안된건가 싶기도 하고, 그렇게 되면 HH(1)을 적용 해야 하나 싶기도 하고
확인이 어려워 요청드립니다.
---------------------------------------------------------------------------------------------
input : 베팅금(1000000);
input : 시작날짜 (20240113),Xtime(110000) ;
input : 타점(5000),손절(1000);
var : P618(0),P5(0),P382(0),HH(0),LL(0);
Var : day(0),EntryDay(0),entry(False),dd(0),ED(0);
if sDate >= 시작날짜 Then
{
if Bdate != Bdate[1] Then
{
entry = true;
day = day+1;
dd = dd+1;
}
if HH == 0 or (HH > 0 and H > HH) Then
HH = H;
if LL == 0 or (LL > 0 and L < LL) Then
LL = L;
}
P618 = LL+(HH-LL)*0.618;
P5 = LL+(HH-LL)*0.5;
P382 = LL+(HH-LL)*0.382;
if TotalTrades > TotalTrades[1] Then
entry = False;
if MarketPosition == 0 and entry == true and c > 타점 Then
Buy("타점",AtLimit,타점,Floor((베팅금)/타점));
If c >= HH*1.005 AND LatestEntryName(0) == "타점" AND LatestExitName(1) == "5%익절" AND LatestExitName(0) == "P5청산" TheN
Buy("타점1",AtLimit,타점,Floor((베팅금)/타점)*0.6);
if ((LatestEntryName(0) == "타점") )Then
ExitLong("5%익절",AtLimit,AvgEntryPrice*1.05,"",Floor((베팅금)/타점)*0.3);
if((LatestEntryName(0) == "타점") ) Then
ExitLong("20%익절",AtLimit,AvgEntryPrice*1.2,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "5%익절") and c <= P5 Then
ExitLong("P5청산",AtLimit,P5,"",Floor((베팅금)/타점)*0.3);
if (LatestExitName(0) == "5%익절") and c <= P382 Then
ExitLong("P382청산",AtLimit,P382,"",Floor((베팅금)/타점)*0.4);
if MarketPosition == 1 and sTime > xtime and 손절 >= c Then
ExitLong("손절");
2024-03-06
956
글번호 177193
답변완료
키움수식으로 종목 검색
안녕하세요? 아래 키움증권 수식1, 수식2는 조건을 만족하는 종목에 일봉상 라인을 표시하는 수식인데 예스트레이더로 수식에 맞는 종목만 검색하고 싶습니다. 종목검색식으로 변환 가능할까요? 부탁드립니다.^^
요청검색식은 2가지 입니다.
1. 아래 수식1 또는 수식2를 기간내에 만족하는 종목들을 검색하고 싶습니다.
예) 기간값 15일 이내 이면 15일 이내에 수식1이나 수식2를 만족하는 종목들 검색
2. 기간값 이내에 수식1과 수식 2를 만족하는 종목들 중에 수식1과 수식2를 재돌파하는 종목검색
이 두가지 종목검색식 요청 드립니다.
* 키움수식은 아래와 같습니다.
수식1
A=crossup(C*V,100000000000);
B=countsince(date!=date(1),A)==1;
valuewhen(1,B&&!B(1),종가)
수식2
A=crossup(C*V,50000000000);
B=countsince(date!=date(1)==1,A);
valuewhen(1,B&&!B(1),종가)
2024-03-06
1275
글번호 177192