커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4416
글번호 230811
답변완료
문의드립니다.
안녕하세요.
노고에 항상 감사드립니다.
청산 후 재매수 식을 생각하고 있는데,
"마지막 청산 후 현재 봉까지 한 번도 저가가 60일선 아래로 내려가지 않은 경우"
이걸 어떻게 수식으로 표현할 수 있을지 문의드립니다.
감사합니다.
2018-07-19
192
글번호 120717
답변완료
수정부탁합니다.
수고하십니다.
해선 추세선 수식입니다.
아래 수식에서 빨강 파랑색 두가지 색상 추세선을 지울수 없을까요?
시스템이 아닌 지표수식으로 바꿔주시고 녹색추세선만 나오게 부탁합니다.
Input:length(10),추세선연장(5);
#ssssssssssssssssssssssssssssssssss
Input:진입횟수제한(1);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Var:최종고가(0),최종저가(0),최종변곡점(""),처리구분(""),
sBar(0),TL1(0),TL2(0),TL3(0),
고추세기울기(0),고추세봉개수(0),고추세시작(0),고추세시작IDX(0),고추세최종(0),
저추세기울기(0),저추세봉개수(0),저추세시작(0),저추세시작IDX(0),저추세최종(0);
#ssssssssssssssssssssssssssssssssss
Var:진입횟수(0);
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Var:고1(0),고2(0),고3(0),고4(0),고5(0),고6(0),고7(0),고8(0),고9(0),고10(0),
저1(0),저2(0),저3(0),저4(0),저5(0),저6(0),저7(0),저8(0),저9(0),저10(0),
고1IDX(0),고2IDX(0),고3IDX(0),고4IDX(0),고5IDX(0),
고6IDX(0),고7IDX(0),고8IDX(0),고9IDX(0),고10IDX(0),
저1IDX(0),저2IDX(0),저3IDX(0),저4IDX(0),저5IDX(0),
저6IDX(0),저7IDX(0),저8IDX(0),저9IDX(0),저10IDX(0);
#==========================================#
Condition1 = Highest(C,length) == C and 최종고가 <> C;
Condition2 = Lowest (C,length) == C and 최종저가 <> C;
처리구분 = "";
If Condition1 and Condition2 Then // 기간고점과 기간저점 동시 발생
{
If 최종변곡점 == "저점" Then 처리구분 = "고점처리"; // 저 - 고 순으로 처리
Else 처리구분 = "저점처리"; // 고 - 저 순으로 처리
}
Else If Condition1 Then 처리구분 = "고점처리";
Else If Condition2 Then 처리구분 = "저점처리";
#==========================================#
If 처리구분 == "고점처리" Then
{
최종고가 = C; // 신규고점을 체크하기 위해 저장
If 최종변곡점 == "저점" Then
{
#ssssssssssssssssssssssssssssssssss
진입횟수 = 0;
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
고9 = 고8; 고9IDX = 고8IDX;
고8 = 고7; 고8IDX = 고7IDX;
고7 = 고6; 고7IDX = 고6IDX;
고6 = 고5; 고6IDX = 고5IDX;
고5 = 고4; 고5IDX = 고4IDX;
고4 = 고3; 고4IDX = 고3IDX;
고3 = 고2; 고3IDX = 고2IDX;
고2 = 고1; 고2IDX = 고1IDX;
고1 = C; 고1IDX = Index;
sBar = Index - 저1IDX; // 추세선 시작점의 위치, n봉전으로 표시
TL1 = TL_New(sDate[sBar],sTime[sBar],저1,sDate[0],sTime[0],고1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,GREEN);
}
Else If 고1 < C Then // 1번 고점보다 높은 고가 출현
{
고1 = C; 고1IDX = Index;
TL_SetEnd(TL1,sDate[0],sTime[0],고1);
// 시작점은 변동없고 끝점의 위치가 현재 봉으로 연장된 것임
}
/* 고점추세선 */
If 고2IDX[1] <> 고2IDX Then // 고2의 Index값이 변동 없음 즉, 새로운 고점이 생기지 않았음
{
고추세최종 = 0; 고추세기울기 = 0; 고추세시작 = 0; 고추세봉개수 = 0;
If 고2 < 고3 Then
{
고추세기울기 = (고2 - 고3)/(고2IDX - 고3IDX);
고추세시작 = 고3;
고추세시작IDX = 고3IDX;
}
Else If 고2 < 고4 Then
{
고추세기울기 = (고2 - 고4)/(고2IDX - 고4IDX);
고추세시작 = 고4;
고추세시작IDX = 고4IDX;
}
Else If 고2 < 고5 Then
{
고추세기울기 = (고2 - 고5)/(고2IDX - 고5IDX);
고추세시작 = 고5;
고추세시작IDX = 고5IDX;
}
Else If 고2 < 고6 Then
{
고추세기울기 = (고2 - 고6)/(고2IDX - 고6IDX);
고추세시작 = 고6;
고추세시작IDX = 고6IDX;
}
Else If 고2 < 고7 Then
{
고추세기울기 = (고2 - 고7)/(고2IDX - 고7IDX);
고추세시작 = 고7;
고추세시작IDX = 고7IDX;
}
Else If 고2 < 고8 Then
{
고추세기울기 = (고2 - 고8)/(고2IDX - 고8IDX);
고추세시작 = 고8;
고추세시작IDX = 고8IDX;
}
Else If 고2 < 고9 Then
{
고추세기울기 = (고2 - 고9)/(고2IDX - 고9IDX);
고추세시작 = 고9;
고추세시작IDX = 고9IDX;
}
고추세봉개수 = Index - 고추세시작IDX;
고추세최종 = 고추세기울기 * 고추세봉개수 + 고추세시작;
If 고추세최종 > 0 Then
{
TL2 = TL_New(sDate[고추세봉개수],sTime[고추세봉개수],고추세시작,sDate[0],sTime[0],고추세최종);
TL_SetSize(TL2,1);
TL_SetColor(TL2,RED);
}
}
Else If 고추세최종[1] > 0 Then
{
고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
TL_SetEnd(TL2,sDate[0],sTime[0],고추세최종);
}
If 저추세최종[1] > 0 Then
{
저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
TL_SetEnd(TL3,sDate[0],sTime[0],저추세최종);
}
최종변곡점 = "고점";
#ssssssssssssssssssssssssssssssssss
If 진입횟수 < 진입횟수제한 and
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
고추세최종 > 0 and 고추세최종 < C Then
{
Buy();
}
}
#==========================================#
If 처리구분 == "저점처리" Then
{
최종저가 = C;
If 최종변곡점 == "고점" then
{
#ssssssssssssssssssssssssssssssssss
진입횟수 = 0;
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
저9 = 저8; 저9IDX = 저8IDX;
저8 = 저7; 저8IDX = 저7IDX;
저7 = 저6; 저7IDX = 저6IDX;
저6 = 저5; 저6IDX = 저5IDX;
저5 = 저4; 저5IDX = 저4IDX;
저4 = 저3; 저4IDX = 저3IDX;
저3 = 저2; 저3IDX = 저2IDX;
저2 = 저1; 저2IDX = 저1IDX;
저1 = C; 저1IDX = Index;
sBar = Index - 고1IDX;
TL1 = TL_New(sDate[sBar],sTime[sBar],고1,sDate[0],sTime[0],저1);
TL_SetSize(TL1,2);
TL_SetColor(TL1,GREEN);
}
Else If 저1 > C then
{
저1 = C; 저1IDX = Index;
TL_SetEnd(TL1,sDate[0],sTime[0],저1);
}
/* 저점추세선 */
If 저2IDX[1] <> 저2IDX Then
{
저추세최종 = 0; 저추세기울기 = 0; 저추세시작 = 0; 저추세봉개수 = 0;
If 저2 > 저3 and 저3 > 0 Then
{
저추세기울기 = (저2 - 저3)/(저2IDX - 저3IDX);
저추세시작 = 저3;
저추세시작IDX = 저3IDX;
}
Else If 저2 > 저4 and 저4 > 0 Then
{
저추세기울기 = (저2 - 저4)/(저2IDX - 저4IDX);
저추세시작 = 저4;
저추세시작IDX = 저4IDX;
}
Else If 저2 > 저5 and 저5 > 0 Then
{
저추세기울기 = (저2 - 저5)/(저2IDX - 저5IDX);
저추세시작 = 저5;
저추세시작IDX = 저5IDX;
}
Else If 저2 > 저6 and 저6 > 0 Then
{
저추세기울기 = (저2 - 저6)/(저2IDX - 저6IDX);
저추세시작 = 저6;
저추세시작IDX = 저6IDX;
}
Else If 저2 > 저7 and 저7 > 0 Then
{
저추세기울기 = (저2 - 저7)/(저2IDX - 저7IDX);
저추세시작 = 저7;
저추세시작IDX = 저7IDX;
}
Else If 저2 > 저8 and 저8 > 0 Then
{
저추세기울기 = (저2 - 저8)/(저2IDX - 저8IDX);
저추세시작 = 저8;
저추세시작IDX = 저8IDX;
}
Else If 저2 > 저9 and 저9 > 0 Then
{
저추세기울기 = (저2 - 저9)/(저2IDX - 저9IDX);
저추세시작 = 저9;
저추세시작IDX = 저9IDX;
}
저추세봉개수 = Index - 저추세시작IDX;
저추세최종 = 저추세기울기 * 저추세봉개수 + 저추세시작;
If 저추세최종 > 0 Then
{
TL3 = TL_New(sDate[저추세봉개수],sTime[저추세봉개수],저추세시작,sDate[0],sTime[0],저추세최종);
TL_SetSize(TL3,1);
TL_SetColor(TL3,BLUE);
}
}
Else If 저추세최종[1] > 0 Then
{
저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
TL_SetEnd(TL3,sDate[0],sTime[0],저추세최종);
}
If 고추세최종[1] > 0 Then
{
고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
TL_SetEnd(TL2,sDate[0],sTime[0],고추세최종);
}
최종변곡점 = "저점";
#ssssssssssssssssssssssssssssssssss
If 진입횟수 < 진입횟수제한 and
#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
저추세최종 > 0 and 저추세최종 > C Then
{
Sell();
}
}
#==========================================#
If 처리구분 == "" Then
{
If Index - 고1IDX <= 추세선연장 Then
{
If 고추세최종[1] > 0 Then
{
고추세최종 = 고추세기울기 * (Index - 고추세시작IDX) + 고추세시작;
TL_SetEnd(TL2,sDate[0],sTime[0],고추세최종);
}
}
Else
{
고추세최종 = 0;
}
If Index - 저1IDX <= 추세선연장 Then
{
If 저추세최종[1] > 0 Then
{
저추세최종 = 저추세기울기 * (Index - 저추세시작IDX) + 저추세시작;
TL_SetEnd(TL3,sDate[0],sTime[0],저추세최종);
}
}
Else
{
저추세최종 = 0;
}
If MarketPosition > 0 and TL2[1] == TL2 and
고추세최종 > 0 and 고추세최종[1] <= C[1] and 고추세최종 > C Then
ExitLong();
If MarketPosition < 0 and TL3[1] == TL3 and
저추세최종 > 0 and 저추세최종[1] >= C[1] and 저추세최종 < C Then
ExitShort();
}
#ssssssssssssssssssssssssssssssssss
If ((최종변곡점 == "고점" and MarketPosition == 1) or
(최종변곡점 == "저점" and MarketPosition == -1)) and
MarketPosition[1] != MarketPosition Then
{
진입횟수 = 진입횟수 + 1;
}
2018-07-19
208
글번호 120716
답변완료
문의
해외선물에서
2018년 동안
CME 크루드오일 8월물 일봉 종가와
ICE 브렌트오일 9월물 일봉종가와 차이(크루드오일 - 브렌트오일)를
선차트로 구현하는 식은 어떻게 하면 될까요?
초보라서 열심히 공부중인데 감이 안잡히네요^^
2018-07-18
213
글번호 120715
답변완료
엑셀과 연동지표
엑셀과 연동해서 챠트에 자동 으로 수평바를 표시할려고 합니다
주어진 고점 지수a 와 저점 지수 b 를 넣으면 그 차이만큼 아래위로 자동으로 챠트에 생기게하는겁니다
예를 들어 고점a는 300 저점b는 290이면 300-290=10 입니다
a=300
a1=310,
a2=320
a3=330
a4=340
a5=350
아래로
b=290
b1=280
b2=270
b3=260
b4=250
b5=240 이수지가 챠트에 그날그날 볼수있게 하려는데요 가능 한지요? 감사합니다
2018-07-18
210
글번호 120714
답변완료
매매시스탬 구현 요청
* 항상 많은 도움에 고맙 습니다.
input : 시스템적용일(20180409) , 시스템적용시간(090000) ;
VAR1 = MA(C,5);
VAR2 = MA(C,20);
IF VAR1 > VAR2 Then buy(); SetStopProfittarget(PriceScale*30,PointStop);
VAR1 < VAR2 Then Sell(); SetStopProfittarget(PriceScale*30,PointStop);
이것을 하나로 합처서 같이 운영 할수는 없나요?
즉 매수후 자동 손절매도는 없습니다.
포지션이 0 일때만 진입하는것입니다.
* 매수후 100틱 이상 반대 가 나타나면 1개 추가 로직좀 부탁 드립니다.
즉 매수 포지션으로 매수 했는데 반대로 매수딕 보다 100딕이 떨어지면 1개 매수
즉 매도 포지션으로 매수 했는데 반대로 매수딕 보다 100딕이 올라가면 1개 매도
ex)if MarketPosition == 1 and MaxEntries >= 1 and MaxEntries <= 1 and Ecnt <= 1
and Xcnt <= 1 and C <= LatestEntryPrice(0)*0.90 Then buy("하추");
2018-07-18
205
글번호 120713
답변완료
종목검색이 안됩니다. 한번 봐주세요!
수고하십니다.
javascript:OnWrite();
하기로 검색하면 하나두 없다고 나옵니다.
각기 Stoch RSI || 전일 거래금액 비교 하면 검색이 되는데
하기와 같이 하면 검색 자체가 안됩니다.
#=========================================================#
# Stoch RSI
#=========================================================#
var: RSIPeriod(14),sto1(14);
var: Sma1(0),Sma2(0),Sma3(0),StochRSI(0);
Var: RSIcount(0),DownAmt(0),UpAmt(0),UpSum(0),DownSum(0),UpAvg(0),DownAvg(0),RSIv(0);
var: sumGap(0),gap(0),GO(0),GH(0),GL(0),GC(0);
if date!=date[1] then {
gap = Open-Close[1];
sumGap = sumGap+gap;
}
GO = O - sumGap;
GH = H - sumGap;
GL = L - sumGap;
GC = C - sumGap;
If CurrentBar == 1 and RSIPeriod > 0 Then Begin
UpSum = 0;
DownSum = 0;
For RSIcount = 0 To RSIPeriod - 1 Begin
UpAmt = GC[RSIcount] - GC[RSIcount+1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
End;
UpAvg = UpSum / RSIPeriod;
DownAvg = DownSum / RSIPeriod;
End
Else
If CurrentBar > 1 and RSIPeriod > 0 Then Begin
UpAmt = GC[0] - GC[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpAvg = (UpAvg[1] * (RSIPeriod - 1) + UpAmt) / RSIPeriod;
DownAvg = (DownAvg[1] * (RSIPeriod - 1) + DownAmt) / RSIPeriod;
End;
If UpAvg + DownAvg <> 0 Then
RSIv = 100 * UpAvg / (UpAvg + DownAvg);
Else
RSIv = 0;
Sma1 = RSIV;
Sma2 = lowest(Sma1,sto1);
Sma3 = Highest(Sma1,sto1);
StochRSI = ((Sma1-Sma2)/(Sma3-Sma2))*100;
#=========================================================#
# 전일동시간 거래대금 비교
#=========================================================#
var : cntm(0),PreDate(0),idx(0),idx1(0),MM(0),MM1(0);
if sdate != sdate[1] Then{
var1 = sdate;
var2 = var1[1];
idx = 0;
idx1 = idx[1];
MM = 0;
var3 = dayindex()[1];
}
idx = idx+1;
MM = MM+M;
var5 = Bids[var3+1]*O[var3+1]/10000; //전일 동시간 매수잔량금액
var6 = Asks[var3+1]*O[var3+1]/10000; //전일 동시간 매도잔량금액
if var2 > 0 then
{
for cntm = idx to idx+idx1
{
if stime[cntm] <= stime and sdate[cntm] == var2 then
{
MM1 = MM[cntm];
cntm = idx+idx1+1;
}
}
}
if MM > MM1*0.8 and StochRSI >= 50 Then
find(1);
2018-07-18
241
글번호 120711
답변완료
문의 드려요
캔들 아랫꼬리가 0.3 이상이면 빨간색 점을
캔들 윗꼬리가 0.3 이상이면 파란색 점을 캔들에 찍어 주세요
감사합니다
2018-07-18
208
글번호 120707
답변완료
문의드립니다.
문의 드립니다.
현재봉의 양봉 시가가 바로 직전에 발생한 양봉의 시가보다 낮은것을 찾아 번호를 표시하는 수식을 부탁 드립니다.
직전 발생한 양봉과 현재봉 사이에 음봉이 몇개있는지는 모르는 상황이라 가정합니다.
발생하는 현재봉 양봉이 바로 직전 발생한 양봉 시가보다 낮으면 번호가 매겨 지는데 계속 낮은 양봉이 발생되는대로 번호가 늘어나는 식입니다.
1.2.3.4....
반대의 경우도 부탁 드립니다.
감사합니다.
2018-07-18
208
글번호 120705
관리자에 의해 프로그램 사용법 QnA로 이동되었습니다
2018-07-18
7
글번호 120704