커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
1544
글번호 230811
답변완료
문의합니다.
바쁜 업무에 항상 빠른 대응 감사합니다.
아래 지표식을 부탁합니다.
1) 일봉에서 월봉의 시가/저가/고가
2) 임의의 변수 AA,BB가 있으며 아래의 수식을 지표식으로 부탁합니다.
LowestSince(1, CrossDown(BB,20), AA);
3) 임의의 변수 AA,BB가 있으며 아래의 수식을 지표식으로 부탁합니다.
HighestSince(1, CrossUp(BB,20), AA);
■ LowestSince(n,condition,data)
=> condition이 n번째 만족된이후data의 최저가
■ HighestSince(n,condition,data)
=> condition이 n번째 만족된이후data의 최고가
감사합니다.~~^^
2023-03-28
1084
글번호 167617
답변완료
수식 문의 드립니다
매수: 5이평선 상향시 매수
매도 : RSI(9) 가 60 이상이고 매수 가격보다 당일 1415시 가격이 + 가격이면 아침 시가 즉시 매도
매도 : RSI(9) 가 60 이하이고 매수 가격보다 당일 1415시 가격이 - 가격이면 당일 1415시 즉시매도
2023-03-28
1178
글번호 167611
고성 님에 의해서 삭제되었습니다.
2023-03-28
12
글번호 167610
답변완료
수식작성 부탁드립니다.
안녕하세요. 운영자님
아래와 같은 트레이딩뷰 수식을 예스트레이더 수식으로 변환 부탁드립니다.
감사합니다.
//@version=4
study("Mobo Bands", overlay=false)
price = input(hl2, "Price")
colorNormLength = input(3, "colorNormLength", input.integer)
dpoLength = input(13, "dpoLength", input.integer)
moboDisplace = input(0, "moboDisplace", input.integer)
moboLength = input(10, "moboLength", input.integer)
numDevDn = input(-0.8, "numDevDn", input.float)
numDevUp = input(0.8, "numDevUp", input.float)
coloredMobo = input(true, "coloredMobo")
coloredFill = input(true, "coloredFill")
breakArrows = input(true, "breakArrows")
moboShowMid = input(true, "moboShowMid")
//def DPO = price - Average(price[DPO_length / 2 + 1], DPO_length);
xsma = sma(price[dpoLength / 2 + 1], dpoLength)
//xsma = sma(price, dpoLength)
DPO = price - xsma
Midline = sma(DPO, moboLength)
sDev = stdev(DPO, moboLength)
LowerBand = Midline + numDevDn * sDev
UpperBand = Midline + numDevUp * sDev
plot(DPO, color=color.yellow,linewidth=2)
plot(Midline, color=Midline > Midline[1] ? color.lime : color.red,linewidth=2)
Upper = plot(UpperBand, color=color.black,linewidth=1)
Lower = plot(LowerBand, color=color.black,linewidth=1)
plot(0, color=color.white,linewidth=1)
Signal1 = DPO > UpperBand and DPO[1] < UpperBand[1]
Signal2 = DPO < LowerBand and DPO[1] > LowerBand[1]
wasUp = 1
wasDn = 1
wasUp := Signal1 ? 1 : (Signal2 ? 0 : nz(wasUp[1]))
wasDn := Signal2 ? 1 : (Signal1 ? 0 : nz(wasDn[1]))
//plotshape(Signal1 and wasDn[1] ? UpperBand : na, style=shape.arrowup, location=location.absolute, size=size.normal, color=color.red)
//plotshape(Signal2 and wasUp[1] ? LowerBand : na, style=shape.arrowdown, location=location.absolute, size=size.normal, color=color.green)
plotshape(Signal1 and wasDn[1] ? UpperBand : na, style=shape.labelup, location=location.absolute, size=size.normal, color=color.green, text="Buy",textcolor=color.white)
plotshape(Signal2 and wasUp[1] ? LowerBand : na, style=shape.labeldown, location=location.absolute, size=size.normal, color=color.red, text="Sell",textcolor=color.white)
fill(Upper, Lower, color=color.purple)
alertcondition(Signal1 and wasDn[1], "Break Out Arrow", "Break Out Arrow")
alertcondition(Signal2 and wasUp[1], "Break Down Arrow", "Break Down Arrow")
2023-03-28
1133
글번호 167609
답변완료
문의 드립니다.
아래에서 수량 추가 할 수 있도록 부탁드립니다.
input : 익절틱수(20);
var1 = BollBandUp(20,2);
Var2 = BollBandDown(20,2);
if CrossUp(c,var1) Then
Buy();
if CrossDown(c,var1) Then
ExitLong();
if CrossDown(c,var2) Then
Sell();
if CrossUp(c,var2) Then
ExitShort();
SetStopProfittarget(PriceScale*익절틱수,PointStop);
2023-03-28
1353
글번호 167608
답변완료
질문이 많아 죄송합니다.
밑에 식의 문제가 이익볼때는 몇번이고 계속 이익보고 손실볼때는 몇번이고 계속 손실보는데요.
이번 매매 손실보면 다음번 매매부터 매수매도를 토글 시킬는 시스템을 구현할수 도 있나요?(손실 청산하고 조금 텀을 주더라도)
항상 감사드립니다.
항상 행복하고 건강하시길 바랍니다~^^
↓↓##전번에 알려주신 지그재그식 ##↓↓
input : Period(5);
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);
var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0);
HPrice = H;
LPrice = L;
if Index == 0 Then
{
//초기 최고값
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//초기 최저값
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
}
Else
{
UpTrend = HPrice >= Highest(HPrice,Period)[1];
DownTrend = LPrice <= Lowest(LPrice,Period)[1];
//상승추세 전환
if trend <= 0 and UpTrend == true Then
{
//추세구분 1
trend = 1;
Buy();
//과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
HD[cnt] = HD[cnt-1];
HT[cnt] = HT[cnt-1];
HV[cnt] = HV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//직전 저점에서 현재 고점까지 연결선 출력
ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]);
//색상은 Red
TL_SetColor(ZigZagTL,Gray);
//추세선 굵기는 1
TL_SetSize(ZigZagTL,1);
HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]);
TL_SetColor(HTL,Red);
HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2));
Text_SetStyle(HTX,2,1);
}
Else if trend >= 0 and DownTrend Then//하락추세 전환
{
//추세구분은 -1
trend = -1;
Sell();
//과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
LD[cnt] = LD[cnt-1];
LT[cnt] = LT[cnt-1];
LV[cnt] = LV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
//직전 고점에서 현재 저점까지 연결선 출력
ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]);
//색상은 Blue
TL_SetColor(ZigZagTL,Gray);
//굴긱는 1
TL_SetSize(ZigZagTL,1);
LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]);
TL_SetColor(LTL,Blue);
LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2));
Text_SetStyle(LTX,2,0);
}
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]);
//고점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(HTL,HD[0],HT[0],HV[0]);
Text_SetString(HTX,NumToStr(HV[0],2));
Text_SetLocation(HTX,HD[0],HT[0],HV[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]);
//저점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(LTL,LD[0],LT[0],LV[0]);
Text_SetString(LTX,NumToStr(LV[0],2));
Text_SetLocation(LTX,LD[0],LT[0],LV[0]);
}
}
TL_SetEnd(HTL,sDate,sTime,HV[0]);
TL_SetEnd(LTL,sDate,sTime,LV[0]);
}
}
2023-03-28
1681
글번호 167601
답변완료
문의
안녕하세요.
직전봉에 "A" 라는 신호로 매수를 정리 하였을때,
이번봉에서 매도를 하려면 간단히 수식을 어떻게 만들어야 할까요?
if ~~~~ Then EXITLONG("A");
다음봉에서 매도 신호,,
부탁 드립니다.
2023-03-28
1626
글번호 167600
답변완료
이것도 부탁드립니다^^
항상 감사드립니다^^
앞전 n30개의 봉의 최저점과 최고점의 차이가 x30포인트 이상이면
지그재그(전번에 작성해 주셨던식)로 매매
앞전 n30개의 봉의 최저점과 최고접의 차이가 x30보인트 이하이면
이동평균 y20과 y60의 이동평균 골든 크로스시 매수
이동평균 y20과 y60의 이동평균 데드 크로스시 매도
미리 감사드립니다^^
↓↓##전번에 알려주신 지그재그식 ##↓↓
input : Period(5);
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);
var : ZigZagTL(0),HTL(0),LTL(0),HTX(0),LTX(0);
HPrice = H;
LPrice = L;
if Index == 0 Then
{
//초기 최고값
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//초기 최저값
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
}
Else
{
UpTrend = HPrice >= Highest(HPrice,Period)[1];
DownTrend = LPrice <= Lowest(LPrice,Period)[1];
//상승추세 전환
if trend <= 0 and UpTrend == true Then
{
//추세구분 1
trend = 1;
Buy();
//과거 고점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
HD[cnt] = HD[cnt-1];
HT[cnt] = HT[cnt-1];
HV[cnt] = HV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
HD[0] = sDate;
HT[0] = sTime;
HV[0] = HPrice;
//직전 저점에서 현재 고점까지 연결선 출력
ZigZagTL = TL_New(LD[0],LT[0],LV[0],HD[0],HT[0],HV[0]);
//색상은 Red
TL_SetColor(ZigZagTL,Gray);
//추세선 굵기는 1
TL_SetSize(ZigZagTL,1);
HTL = TL_New(HD[0],HT[0],HV[0],NextBarSdate,NextBarStime,HV[0]);
TL_SetColor(HTL,Red);
HTX = text_new(HD[0],HT[0],HV[0],NumToStr(HV[0],2));
Text_SetStyle(HTX,2,1);
}
Else if trend >= 0 and DownTrend Then//하락추세 전환
{
//추세구분은 -1
trend = -1;
Sell();
//과거 저점의 날짜, 시간, 값을 다음 배열방으로 이동
For cnt = 9 DownTo 1
{
LD[cnt] = LD[cnt-1];
LT[cnt] = LT[cnt-1];
LV[cnt] = LV[cnt-1];
}
//0번방에 날짜, 시간, 가격 저장
LD[0] = sDate;
LT[0] = sTime;
LV[0] = LPrice;
//직전 고점에서 현재 저점까지 연결선 출력
ZigZagTL = TL_New(HD[0],HT[0],HV[0],LD[0],LT[0],LV[0]);
//색상은 Blue
TL_SetColor(ZigZagTL,Gray);
//굴긱는 1
TL_SetSize(ZigZagTL,1);
LTL = TL_New(LD[0],LT[0],LV[0],NextBarSdate,NextBarStime,LV[0]);
TL_SetColor(LTL,Blue);
LTX = text_new(LD[0],LT[0],LV[0],NumToStr(LV[0],2));
Text_SetStyle(LTX,2,0);
}
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]);
//고점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(HTL,HD[0],HT[0],HV[0]);
Text_SetString(HTX,NumToStr(HV[0],2));
Text_SetLocation(HTX,HD[0],HT[0],HV[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]);
//저점 수평 추세선의 끝점을 현재봉으로 이동
TL_SetBegin(LTL,LD[0],LT[0],LV[0]);
Text_SetString(LTX,NumToStr(LV[0],2));
Text_SetLocation(LTX,LD[0],LT[0],LV[0]);
}
}
TL_SetEnd(HTL,sDate,sTime,HV[0]);
TL_SetEnd(LTL,sDate,sTime,LV[0]);
}
}
2023-03-28
1766
글번호 167599
답변완료
시스템식 부탁드립니다^^
앞전 n20개의 봉중 양봉이 음봉보다 많고, 이동평균 x20과 x100가 골든크로스면
(이평 y5와 y20의 골든크로스시 매도
이평 y5와 y20의 데드크로스시 청산)
앞전 n20개의 봉중 음봉이 양봉보다 많고, 이동평균 x20과 x100가 데드크로스면
(이평 y5와 y20의 데드크로스시 매도
이평 y5와 y20의 콜든크로스시 청산)
괄호부분이 첨부파일 식이였으면 좋겠는데.
공개 차트쉐어라 제 능력으로는 해석이 안되서요^^
정보가 부족해서 안되면 괄호안에 것으로 해주셔도 됩니다^^
부탁드립니다^^
항상 감사드립니다^^
2023-03-28
1171
글번호 167598