커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
3150
글번호 230811
답변완료
문의1
아래수식은 주차트에 사용하는 buy 수식입니다.
1. 보조차트2와 보조차트3을 이용해서 양합을 구합니다.
var : sum(0,Data1);
sum = Data2(c)+data3(c);
2. 구한 양합을 아래 수식에 따라 진입과 청산에 사용하고 싶습니다.
***************************************************************************
input : b1(28),b2(28),X1(28),X2(28),ER(8),EF(8),CR(8),CF(8),거래횟수(20),시작시간(090000) ;
var : T1(0),entry(0),LL(0),EH(0),E1(0),H1(0),i1(0),S1(0),L1(0),V1(0);
if (sdate != sdate[1] and stime >= 시작시간) or
(sdate == sdate[1] and stime >= 시작시간 and stime[1] < 시작시간) Then{
T1 = TotalTrades;
E1 = 0;
LL = L;
}
if stime >= 시작시간 then{
if L < LL Then
LL = L;
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
if MarketPosition == 0 and entry == 0 Then{
if E1 == 0 and C >= LL+PriceScale*B1 and C[1] < LL+PriceScale*B1 Then{
E1 = 1;
H1 = H;
i1 = index;
V1 = LL; //시작점 종가
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*ER Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*EF Then{
buy("b1");
}
}
if TotalTrades > TotalTrades[1] Then{
E1 = 0;
LL = L;
}
if L < LL Then
LL = L;
if MarketPosition == 0 and entry >= 1 and entry < 거래횟수 Then{
if E1 == 0 and C >= LL+PriceScale*B2 and C[1] < LL+PriceScale*B2 Then{
E1 = 1;
H1 = H;
i1 = index;
V1 = LL; //시작점 종가
}
if E1 == 1 and index > i1 then{
if H > H1 Then
H1 = H;
#저가가 시작봉종가보다 클때만 눌림체크
if L >= V1 and L <= H1-PriceScale*ER Then{
E1 = 2;
i1 = index;
S1 = H1;
}
}
//시작점 종가보다 낮은 가격이 발생하면 초기화
if E1 >= 1 and L < V1 Then{
E1 = 0;
LL = L;
}
if E1 == 2 and index > i1 and C >= S1+PriceScale*EF Then{
buy("b2");
}
}
if MarketPosition == 1 Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EH = H;
E1 = 0;
}
if H > EH Then{
EH = H;
E1 = 0;
}
if E1 == 0 and C <= EH-PriceScale*X1 Then{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 Then{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*CR Then{
E1 = 2;
I1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*CF Then{
exitlong("bx1");
E1 = 0;
}
}
}
if MarketPosition == 1 Then{
if entry >= 1 then{
if CurrentContracts > CurrentContracts[1] Then{
EH = H;
E1 = 0;
}
if H > EH Then{
EH = H;
E1 = 0;
}
if E1 == 0 and C <= EH-PriceScale*X2 Then{
E1 = 1;
L1 = L;
i1 = index;
}
if E1 == 1 and index > i1 Then{
if L < L1 Then
L1 = L;
if H >= L1+PriceScale*CR Then{
E1 = 2;
I1 = index;
S1 = L1;
}
}
if E1 == 2 and index > i1 and C <= S1-PriceScale*CF Then{
exitlong("bx2");
E1 = 0;
}
}
}
}
2020-09-16
933
글번호 142428
답변완료
수정 부탁드립니다.
안녕하세요?
아래 수식에서 두가지 수정할 부분이 있어서 부탁드립니다.
1) 봉완성전에 매매가이루어지는지는 잘 모르겠으나, 현재는 설정한 기준선에 딱맞춰서
거래가 이루어지고 있습니다.
--> 기준선에서 한틱큰 양봉에 매수진입, 기준선에서 한틱큰 음봉에 매도진입
이 되게 하고싶습니다.
2) 매수진입을하면 사자말자 바로 청산이되고, 곧바로 매도진입이 되고 있습니다.
매도진입을하게되면 진입후 그러진않습니다.
부탁드립니다.
감사합니다.
input : 기준선(0.15),n(3);
var : entry(0);
if Bdate != Bdate[1] Then
entry = 0;
var1 = C%1;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if entry < n Then
{
if MarketPosition == 0 and var1 == 기준선 then
Buy();
if MarketPosition == 0 and var1 == 기준선 then
Sell();
}
input : 익절틱수(50),손절틱수(50);
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
2020-09-16
919
글번호 142427
답변완료
틱차트에서 분봉지표를 같이 볼수 있는 수식을 문의드리고자 합니다.
예스트레이더를 처음 사용하다보니 뭐가 뭔지 도통 감이 안잡혀서
문의드리게 되었습니다.
제가 표현하고자 하는것은
120 틱 차트에서 3분봉과 5분봉의 SROC 지표를 같이 볼수 있는가 입니다.
- 120틱 차트에서 ( 3분 SROC 지표 + 5분 SROC 지표 ) 를 같이 겹쳐서 보기
가능하다면 수식 좀 부탁드리겠습니다.
고맙습니다.
2020-09-16
1168
글번호 142424
답변완료
수식좀 부탁드립니다
1) 시스템과 지표수식 두개씩 부탁드립니다.
1 매수 : 50개봉중 5일 평균 최저가
2 매도 : 50개봉중 5일 평균 최고가
2)시스템과 지표수식 두개씩 부탁드립니다.
1 매수 : 5일 평균 최저가 / 하락하다가 상승할때
2 매도 : 5일 평균 최고가 / 상승하다가 하락할때
3) 아래의 수식에서 그림처럼 직전 파동의 고점 혹은 저점기준 피보나치 수치라인을 추가 부탁드립니다.
4) 아래의 수식에서 가장최근 파동의 고점 혹은 저점기준 피보나치 수치라인을 추가 부탁드립니다.(이경우 최근 파동이 늦어지기에 피보나치도 늦게서야 나오겠지요)
Input:전환가격(10),종가사용여부(1),파동선두께(2),수치표시(1),소수(0);
Var:j(0),jj(0),HH(0),LL(0),hiBar(0),loBar(0),최종꼭지점(""),처리구분(""),
TL1(0),Text1(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
#==========================================#
HH = IFF(종가사용여부 == 1,C,H);
LL = IFF(종가사용여부 == 1,C,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;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(고[1,3],고[1,4],고[1,1],
NumToStr(고[1,1],소수)+"("+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+","+
NumToStr((고[1,1]-고[2,1])/PriceScale,0)+","+
NumToStr((고[1,1]-저[1,1])/abs(고[2,1]-저[1,1])*100,2)+"%)");
Text_SetStyle(Text1, 2, 1);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,Red);
}
Else If 고[1,1] < HH[hiBar] Then // 1번 고점보다 높은 고가 출현
{
고[1,1] = HH[hiBar];
고[1,2] = Index - hiBar;
고[1,3] = sDate[hiBar];
고[1,4] = sTime[hiBar];
hiBar = -1;
loBar = -1;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,고[1,3],고[1,4],고[1,1]);
Text_SetString(Text1,
NumToStr(고[1,1],소수)+"("+NumToStr((고[1,1]-저[1,1])/PriceScale,0)+","+
NumToStr((고[1,1]-고[2,1])/PriceScale,0)+","+
NumToStr((고[1,1]-저[1,1])/abs(고[2,1]-저[1,1])*100,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;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text1 = Text_New(저[1,3],저[1,4],저[1,1],
NumToStr(저[1,1],소수)+"("+NumToStr((저[1,1]-고[1,1])/PriceScale,0)+","+
NumToStr((저[1,1]-저[2,1])/PriceScale,0)+","+
NumToStr((저[1,1]-고[1,1])/abs(고[1,1]-저[2,1])*100,2)+"%)");
Text_SetStyle(Text1, 2, 0);
}
TL_SetSize(TL1,파동선두께);
TL_SetColor(TL1,Blue);
}
Else 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(TL1,저[1,3],저[1,4],저[1,1]);
If 수치표시 == 1 Then
{
Text_SetLocation(Text1,저[1,3],저[1,4],저[1,1]);
Text_SetString(Text1,
NumToStr(저[1,1],소수)+"("+NumToStr(abs(저[1,1]-고[1,1])/PriceScale,0)+","+
NumToStr((고[1,1]-고[2,1])/PriceScale,0)+","+
NumToStr((저[1,1]-고[1,1])/abs(고[1,1]-저[2,1])*100,2)+"%)");
}
}
최종꼭지점 = "저점";
}
2020-09-17
895
글번호 142421
답변완료
지표 문의 드립니다.
* 좋은 하루 되십시요.
* 아래 수식에서 마이너스가 나오는데 외그렇죠?
제 의도는 5봉 기준으로 현재가격이 몇 퍼센트에 위치 하느냐 를 보고 싶은데 잘 안되네요.
즉 현재가(c[1])가 5봉 최하단이면 0 이고 현재가(c[1])가 최상단이면 100 입니다.
어느부분이 잘못 되었나요?
<아래수식>
var1 = max(c[1],c[2],c[3],c[4],c[5]) ;
var2 = Min(c[1],c[2],c[3],c[4],c[5]) ;
var3 = (var1+var2) / 2 ;
var4 = (C[1]-var3)/var3[1]*100;
Plot1(var4) ;
* 매번 고맙습니다. 수고하십시요.
2020-09-16
750
글번호 142411
답변완료
문의 드립니다
당일중간값을 현재값이 터치했을때 선그래프로 나타나게 할수는 있나요?
수식을 알고 싶습니다
2020-09-16
838
글번호 142410
답변완료
부탁드립니다.
-현재 파라볼릭 최고점과 전 최고점이 아니라 전전 최고점과 현재 시점의 최고점을 서로 연결하는 추세선을 구현해 주세요(바로 앞전 파라볼릭을 하나 건네 뛰는 형식입니다)
- 물론 현재 파라볼릭 최저점과 전 최저점이 아니라 전전 최저점과 현재 시점의 최저점을 서로 연결하는 추세선을 구현해 주세요
2020-09-16
836
글번호 142409
답변완료
문의 드립니다
첨부 사진처럼 매 추세선 전고저점에서 한번씩 진입청산이 되어야하는데 드문드문 가끔 한번씩만 실행이 되고 있어 개선부탁드립니다.
정말 감사합니다.
Input:length(12);
input : 익절틱수(27),손절틱수(25),진입횟수(1);
Var : j(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL1(0),TL2(0),TL3(0),Text1(0);
var : 처리구분(""),TL_Val1(0),TL_Val2(0),color(0),T(0);
Array:고점[10,2](0),저점[10,2](0);
var : entry(0);
if Bdate != Bdate[1] Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then 처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then 처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
T = 1;
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j = 10 DownTo 2
{
고점[j,1] = 고점[j-1,1];
고점[j,2] = 고점[j-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 고점[3,1][1] < 고점[2,1][1] and 고점[2,1][1] > 고점[1,1][1] and 저점[2,1][1] < 저점[1,1][1] Then
TL_Delete(TL2);
}
if 고점[1,1] > 고점[2,1] or 고점[2,1] == 0 Then{
color = RED;
//buy("b");
}
TL1 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],sDate[eBar],sTime[eBar],고점[1,1]);
TL_SetColor(TL1,color);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
If 고점[3,1] < 고점[2,1] and 고점[2,1] > 고점[1,1] and 저점[2,1] < 저점[1,1] Then
{
sBar = Index - 저점[2,2];
eBar = Index - 저점[1,2];
}
}
}
If 처리구분 == "저점처리" Then
{
T = -1;
lastLoVal = L;
If 저점[1,2] < 고점[1,2] Then
{
For j = 10 DownTo 2
{
저점[j,1] = 저점[j-1,1];
저점[j,2] = 저점[j-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L Then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL1) == sDate[sBar] and TL_GetBeginTime(TL1) == sTime[sBar] Then
{
TL_Delete(TL1);
Text_Delete(Text1);
If 저점[2,1][1] < 저점[1,1][1] and 저점[2,1][1] < 저점[3,1][1] and 고점[2,1][1] > 고점[1,1][1] Then
TL_Delete(TL3);
}
if 저점[1,1] < 저점[2,1] or 저점[2,1] == 0 Then{
color = blue;
//sell("s");
}
TL1 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],sDate[eBar],sTime[eBar],저점[1,1]);
TL_SetColor(TL1,color);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],NumToStr(abs(고점[1,1]-저점[1,1])/PriceScale,0)+NewLine+NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
If 저점[2,1] < 저점[1,1] and 저점[2,1] < 저점[3,1] and 고점[2,1] > 고점[1,1] Then
{
sBar = Index - 고점[2,2];
eBar = Index - 고점[1,2];
}
}
}
TL_SetSize(TL1,3);
if T == 1 and CrossUp(C,고점[2,1]) Then
{
if entry < 진입횟수 Then
Buy("b");
Else
ExitShort("sx");
}
if T == -1 and CrossUp(C,저점[2,1]) Then
{
if entry < 진입횟수 Then
Sell("s");
Else
ExitLong("bx");
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
2020-09-16
939
글번호 142408
답변완료
문의드립니다
항상 도움을 주셔서 감사합니다
아래의 수식에서 BuySetup = false가 되는조건으로
ADXv가 20이하에서 50캔들이상 머무르면 false가 되는 수식을 부탁드립니다.
input : Period(14);
var : BuySetup1(true),ADXv(0),DP(0),DM(0);
ADXv = ADX(Period);
DP = DiPlus(Period);
DM = DiMinus(Period);
if BuySetup == false and CrossUp(ADXv,30)
Then Buysetup = True;
if ADXv가 20이하에서 50캔들이상 머무르면 Then
BuySetup = false;
2020-09-15
903
글번호 142407