커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4797
글번호 230811
답변완료
시스템 문의
현대중공업 30분 시스템 트레이딩중입니다.
volatility percent 사용중입니다.
그런데, 위 시스템을 거꾸로 매매하고 싶은데, 가능한가요?
예로, 단순이동평균을 사용할때 시스템수식에서 sell을 buy로,
buy를 sell로 단순히 바꿔서 새 시스템을 작성하고(일명, 단순이동평균_거꾸로)
현대중공업에 적용하면, 실제로 시스템에서
반대로 매매가 일어납니다.
(단순이동평균 sell은 단순이동평균_거꾸로 시스템에서는buy 로,
매매패턴이 바뀝니다. )
그런데, volatility percent는 시스템 로직에서 sell-> buy, buy->sell
바꿔도 반대로 매매가 안 일어납니다.
방법이 없을까요?
2015-07-20
107
글번호 88689
답변완료
부탁 드립니다.
안녕 하신지요?
수식1(주가 파동선-흑색)
수식2(지표 파동선-흑색)에서
그림1과 같이(유로화)
고점과 전고점-적색선
저점과 전저점-녹색선의 연결선을
그을수 있겠는지요?
가능 하다면 부탁 드리겠습니다.
미리 감사 드리오며 경배 올립니다.
//수식1-주가 파동선//
Input:Period(48),Rsi변동폭(10);
Var:j(0),상승(100),하락(-100),양방향(2),추세(0),
파동선(0),Rsi파동선(0),방향(0),RsiV(0),추세선(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0),
Rsi고[20](0),Rsi저[20](0),Rsi고Bar[20](0),Rsi저Bar[20](0);
RsiV = RSI(Period);
#==========================================#
# 전고점,전저점 index 증가
#==========================================#
For j = 1 To 19
{
Rsi고Bar[j] = Rsi고Bar[j] + 1;
Rsi저Bar[j] = Rsi저Bar[j] + 1;
저Bar[j] = 저Bar[j] + 1;
고Bar[j] = 고Bar[j] + 1;
}
#==========================================#
# 최근 고,저 갱신
#==========================================#
If Rsi고[0] <= RsiV || Rsi고[0] == 0 || IsNaN(Rsi고[0]) == True Then
{
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
}
Else
Rsi고Bar[0] = Rsi고Bar[0] + 1;
If Rsi저[0] >= RsiV || Rsi저[0] == 0 || IsNaN(Rsi저[0]) == True Then
{
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
}
Else
Rsi저Bar[0] = Rsi저Bar[0] + 1;
If 고[0] <= H || 고[0] == 0 || IsNaN(고[0]) == True Then
{
고[0] = H;
고Bar[0] = 0;
}
Else
고Bar[0] = 고Bar[0] + 1;
If 저[0] >= L || 저[0] == 0 || IsNaN(저[0]) == True Then
{
저[0] = L;
저Bar[0] = 0;
}
Else
저Bar[0] = 저Bar[0] + 1;
#==========================================#
# 추세방향 결정
#==========================================#
If Rsi저[0][1] + Rsi변동폭 > RsiV[1] &&
Rsi저[0][1] + Rsi변동폭 <= RsiV Then 방향 = 상승;
If Rsi고[0][1] - Rsi변동폭 < RsiV[1] &&
Rsi고[0][1] - Rsi변동폭 >= RsiV Then 방향 = 하락;
#==========================================#
# 추세변화에 따른 변곡점 처리
#==========================================#
If 방향[1] == 하락 && 방향 == 상승 Then
{
For j = 18 DownTo 1
{
Rsi저[j+1] = Rsi저[j];
Rsi저Bar[j+1] = Rsi저Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
Rsi저[1] = Rsi저[0];
Rsi저Bar[1] = Rsi저Bar[0];
Rsi파동선 = Rsi저[0];
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
저[1] = 저[0];
저Bar[1] = 저Bar[0];
파동선 = 저[0];
저[0] = L;
저Bar[0] = 0;
고[0] = H;
고Bar[0] = 0;
}
Else If 방향[1] == 상승 && 방향 == 하락 Then
{
For j = 18 DownTo 1
{
Rsi고[j+1] = Rsi고[j];
Rsi고Bar[j+1] = Rsi고Bar[j];
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
}
Rsi고[1] = Rsi고[0];
Rsi고Bar[1] = Rsi고Bar[0];
Rsi파동선 = Rsi고[0];
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
고[1] = 고[0];
고Bar[1] = 고Bar[0];
파동선 = 고[0];
고[0] = H;
고Bar[0] = 0;
저[0] = L;
저Bar[0] = 0;
}
Else If 방향[1] == 하락 && 방향 == 하락 Then
{
If Rsi고[1] < Rsi고[0] &&
Rsi고[0][1] - Rsi변동폭 <= RsiV[1] &&
Rsi고[0][1] - Rsi변동폭 > RsiV Then
{
Rsi고[1] = Rsi고[0];
Rsi고Bar[1] = Rsi고Bar[0];
Rsi파동선 = Rsi고[0];
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
}
If 고[1] < 고[0] &&
고[0] > H Then
{
고[1] = 고[0];
고Bar[1] = 고Bar[0];
파동선 = 고[0];
고[0] = H;
고Bar[0] = 0;
}
}
Else If 방향[1] == 상승 && 방향 == 상승 Then
{
If Rsi저[1] > Rsi저[0] &&
Rsi저[0][1] + Rsi변동폭 >= RsiV[1] &&
Rsi저[0][1] + Rsi변동폭 < RsiV Then
{
Rsi저[1] = Rsi저[0];
Rsi저Bar[1] = Rsi저Bar[0];
Rsi파동선 = Rsi저[0];
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
}
If 저[1] > 저[0] &&
저[0] < L Then
{
저[1] = 저[0];
저Bar[1] = 저Bar[0];
파동선 = 저[0];
저[0] = L;
저Bar[0] = 0;
}
}
#==========================================#
# 지표식 출력
#==========================================#
If Rsi파동선[1] != Rsi파동선 Then Plot1(파동선,"주가파동선"); //적당껏 수평이동
Else If LastBarOnChart == 1 Then plot1(Iff(방향 == 상승,고[0],저[0]));
//수식2-지표 파동선//
Input:Period(48),Rsi변동폭(10);
Var:j(0),상승(100),하락(-100),양방향(2),추세(0),
파동선(0),Rsi파동선(0),방향(0),RsiV(0),Rsi추세선(0);
Array:고[20](0),저[20](0),고Bar[20](0),저Bar[20](0),
Rsi고[20](0),Rsi저[20](0),Rsi고Bar[20](0),Rsi저Bar[20](0);
RsiV = RSI(Period);
#==========================================#
# 전고점,전저점 index 증가
#==========================================#
For j = 1 To 19
{
Rsi고Bar[j] = Rsi고Bar[j] + 1;
Rsi저Bar[j] = Rsi저Bar[j] + 1;
저Bar[j] = 저Bar[j] + 1;
고Bar[j] = 고Bar[j] + 1;
}
#==========================================#
# 최근 고,저 갱신
#==========================================#
If Rsi고[0] <= RsiV || Rsi고[0] == 0 || IsNaN(Rsi고[0]) == True Then
{
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
}
Else
Rsi고Bar[0] = Rsi고Bar[0] + 1;
If Rsi저[0] >= RsiV || Rsi저[0] == 0 || IsNaN(Rsi저[0]) == True Then
{
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
}
Else
Rsi저Bar[0] = Rsi저Bar[0] + 1;
If 고[0] <= H || 고[0] == 0 || IsNaN(고[0]) == True Then
{
고[0] = H;
고Bar[0] = 0;
}
Else
고Bar[0] = 고Bar[0] + 1;
If 저[0] >= L || 저[0] == 0 || IsNaN(저[0]) == True Then
{
저[0] = L;
저Bar[0] = 0;
}
Else
저Bar[0] = 저Bar[0] + 1;
#==========================================#
# 추세방향 결정
#==========================================#
If Rsi저[0][1] + Rsi변동폭 > RsiV[1] &&
Rsi저[0][1] + Rsi변동폭 <= RsiV Then 방향 = 상승;
If Rsi고[0][1] - Rsi변동폭 < RsiV[1] &&
Rsi고[0][1] - Rsi변동폭 >= RsiV Then 방향 = 하락;
#==========================================#
# 추세변화에 따른 변곡점 처리
#==========================================#
If 방향[1] == 하락 && 방향 == 상승 Then
{
For j = 18 DownTo 1
{
Rsi저[j+1] = Rsi저[j];
Rsi저Bar[j+1] = Rsi저Bar[j];
저[j+1] = 저[j];
저Bar[j+1] = 저Bar[j];
}
Rsi저[1] = Rsi저[0];
Rsi저Bar[1] = Rsi저Bar[0];
Rsi파동선 = Rsi저[0];
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
저[1] = 저[0];
저Bar[1] = 저Bar[0];
파동선 = 저[0];
저[0] = L;
저Bar[0] = 0;
고[0] = H;
고Bar[0] = 0;
}
Else If 방향[1] == 상승 && 방향 == 하락 Then
{
For j = 18 DownTo 1
{
Rsi고[j+1] = Rsi고[j];
Rsi고Bar[j+1] = Rsi고Bar[j];
고[j+1] = 고[j];
고Bar[j+1] = 고Bar[j];
}
Rsi고[1] = Rsi고[0];
Rsi고Bar[1] = Rsi고Bar[0];
Rsi파동선 = Rsi고[0];
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
고[1] = 고[0];
고Bar[1] = 고Bar[0];
파동선 = 고[0];
고[0] = H;
고Bar[0] = 0;
저[0] = L;
저Bar[0] = 0;
}
Else If 방향[1] == 하락 && 방향 == 하락 Then
{
If Rsi고[1] < Rsi고[0] &&
Rsi고[0][1] - Rsi변동폭 <= RsiV[1] &&
Rsi고[0][1] - Rsi변동폭 > RsiV Then
{
Rsi고[1] = Rsi고[0];
Rsi고Bar[1] = Rsi고Bar[0];
Rsi파동선 = Rsi고[0];
Rsi고[0] = RsiV;
Rsi고Bar[0] = 0;
}
If 고[1] < 고[0] &&
고[0] > H Then
{
고[1] = 고[0];
고Bar[1] = 고Bar[0];
파동선 = 고[0];
고[0] = H;
고Bar[0] = 0;
}
}
Else If 방향[1] == 상승 && 방향 == 상승 Then
{
If Rsi저[1] > Rsi저[0] &&
Rsi저[0][1] + Rsi변동폭 >= RsiV[1] &&
Rsi저[0][1] + Rsi변동폭 < RsiV Then
{
Rsi저[1] = Rsi저[0];
Rsi저Bar[1] = Rsi저Bar[0];
Rsi파동선 = Rsi저[0];
Rsi저[0] = RsiV;
Rsi저Bar[0] = 0;
}
If 저[1] > 저[0] &&
저[0] < L Then
{
저[1] = 저[0];
저Bar[1] = 저Bar[0];
파동선 = 저[0];
저[0] = L;
저Bar[0] = 0;
}
}
#==========================================#
# 지표식 출력
#==========================================#
If Rsi파동선[1] != Rsi파동선 Then Plot1(Rsi파동선,"Rsi파동선"); //적당껏 수평이동
Else If LastBarOnChart == 1 Then plot1(Iff(방향 == 상승,Rsi고[0],Rsi저[0]),"Rsi파동선");
2015-07-21
196
글번호 88688
답변완료
재문의드려요.
헤깔려서 그러는데요
골드면 매수 데드면 매도하는 반전(리버스)전략에서 진입주문지연을 안쓰고
진입: 상대1호가
청산: 우선1호가로 지정해주면
1개매수 --> 1개 우선1호가 매수청산주문 and 1개 상대1호가 매도주문 --> 우선1호가 매도청산주문 and 상대1호가 매수주문 ~~~~~~
위에처럼 각각 다른호가로 동시에 주문나가는건가요?
==================================================
안녕하세요
예스스탁입니다.
주문은 동일하게 발생합니다.
시스템은 신호가 발생하면 사용자분이 지정한 가격으로 주문을 내게 됩니다.
직전 주문의 체결/미체결 혹은 주문가격에 따라 주문이 변경되지는 않습니다.
즐거운 하루되세요
> 팽구 님이 쓴 글입니다.
> 제목 : 문의드려요.
> 골드면 매수 데드면 매도하는 반전(리버스)전략인데요.
진입청산에 상대3호가넣은뒤, 진입주문지연을 안쓰면 1개매수 -> 2개매도 -> 2개매수 -> 2개매도 ~~~~ 이렇게 되잖아요.
만약,
hts의 시스템매매설정 -> 매매가격을
진입: 상대1호가
청산: 우선1호가로 한다면 주문은 어떻게 나가나요?
진입주문지연을 쓸때와 안쓸때로 구별해서요..
2015-07-20
97
글번호 88680
답변완료
검토 부탁드립니다.
자주 질문드려서 미안한 마음이 드네요
수직중에서 //옵션종목이고 매도포지션이면//에 당월물 옵션이라는 조건을 추가하려면 어떤 수식을 추가해야 할까요? (계좌잔고에 차월물도 있어서)
항상 답변 감사합니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 수식 문의드립니다.
> 안녕하세요
예스스탁입니다.
1
차트에 적용되는 예스랭귀지에서는
해당 내용 구현되지 않습니다.
예스랭귀지는 차트에서 제공되는 데이터만을 사용해
수식을 구현할때 사용하며 차트 기본종목만 주문이 가능합니다.
옵션의 내재변동성도 차트에는 제공되지 않습니다.
2.
해당 내용 예스스팟으로 구현하셔야 합니다.
아래 기본구조를 올려드립니다.
예스스팟 도움말을 통해서 식작성등 숙지하신 후에
아래 내용 참고하셔서 나머지 내용 구현해서 사용하셔야 합니다.
function 특정 이벤트
{
if (특정조건)
{
var num = Account1.GetTheNumberOfBalances();
var minIV = 9999999;
var Xcode;
for (var i = 0; i < num; i++)
{
Account1.SetBalanceIndex(i);
//옵션종목이고 매도포지션이면 내재변동성 최저가 계산
if ((Account1.Balance.code.substring(0,1) == "2" || Account1.Balance.code.substring(0,1) == "3")
&& Account1.Balance.position == 1)
{
if (Option.GetImpliedVolatility(Account1.Balance.code) < minIV)
{
minIV = Option.GetImpliedVolatility(Account1.Balance.code);
Xcode = Account1.Balance.code;
}
}
}
//최저 내재변동성 종목을 찾았으면 매도5호가로 1계약 청산
if (minIV < 9999999)
{
Account1.OrderBuy(Xcode, 1, Option.GetAsk(Xcode, 5), 0);
}
}
}
즐거운 하루되세요
> 연개소문1004 님이 쓴 글입니다.
> 제목 : 수식 문의드립니다.
> 이제 막공부를 시작해서 어렵내요
아래 수식을 부탁드립니다.
잔고에는 기본적으로 선물매도(매수), 풋매도, 콜매도가 있습니다.(매수옵션은 없음)
if(일정조건을 만족하면)
1. 계좌조회
2. 계좌잔고에서 매도옵션중 iv(내재변동성)이 가장낮고, 당월물 풋옵션 1계약
지정가(+5) 매수청산
2015-07-20
139
글번호 88679
답변완료
파라볼릭중에서...
안녕하세요~~~
1)주가가 파라볼릭 위에 형성되는 시점부터
고점에서 5틱하락하면 1의값
10틱하락하면 2의값
15틱하락하면 3의값을 주고싶습니다..
2)주가가 파라볼릭 위에 형성되는 시점부터
고점에서 5%하락하면 1의값
10%하락하면 2의값
15%하락하면 3의값을 주고싶습니다..
2015-07-20
146
글번호 88678
답변완료
일목균형표
일목균형표에서 선행스팬1과 선행스팬2의 차액을 막대그래프로 표현하고 싶습니다
그 차액이 양수면 적색막대그래프로 음수면 청색막대그래프로 표시하고싶습니다.
물론 기준선은 "0"으로 하고요.
즉, macd oscillator 같이 표현하고자 합니다.
감사합니다
2015-07-20
168
글번호 88677
답변완료
일목균형표
일목균형표에서 선행스팬1과 선행스팬2의 차액을 막대그래프로 표현하고 싶습니다
그 차액이 양수면 적색막대그래프로 음수면 청색막대그래프로 표시하고싶습니다.
물론 기준선은 "0"으로 하고요.
즉, macd oscillator 같이 표현하고자 합니다.
감사합니다
2015-07-20
145
글번호 88676
답변완료
부탁드립니다~~
참조 데이타 에서..
예를들면.. 기관 옵션 매수금액이면 당일 매수금액에
0선 이 가로로 그으져 잇으면 좀 더 편리 할듯 싶어서요..
방법이 없을 까요??
부탁드립니다..구벅~
2015-07-20
84
글번호 88675
답변완료
부탁드립니다.
적용해봤는데 제가 설명을 잘못 드린것 같아 다시 부탁드립니다. ㅈㅅ
매수진입 :
우하향하던 하늘색 라인이 끝나는 지점에서 매수진입합니다. 만약 진입한 가격보다 1틱이라도 내려가면 손절하고 재매수진입합니다.
매도진입 :
우상향 하늘색 라인이 그려지면 매수청산하고 매도진입합니다. 만약 진입한 가격보다 1틱이라도 올라가면 손절하고 재매도진입합니다.
하늘색 라인수식:
Var:j(0),lastHiVal(0),lastLoVal(0),turnPntBit(""),TL1(0),tx(0),T(0),trnd(0);
Array:valArr[10](0),barArr[10](0),turnPntArr[10]("");
For j = 0 To 9
{
barArr[j] = barArr[j] + 1;
}
Condition1 = Highest(H,52) == H and lastHiVal <> H;
Condition2 = Lowest(L,52) == L and lastLoVal <> L;
If Condition1 Then lastHiVal = H;
If Condition2 Then lastLoVal = L;
turnPntBit = "";
If Condition1 and Condition2 Then
{
If Max(valArr[1],valArr[2]) < H and Min(valArr[1],valArr[2]) > L Then
turnPntBit = "HiLo";
Else If Max(valArr[1],valArr[2]) < H Then turnPntBit = "Hi";
Else If Min(valArr[1],valArr[2]) > L Then turnPntBit = "Lo";
}
Else If Condition1 Then turnPntBit = "Hi";
Else If Condition2 Then turnPntBit = "Lo";
If turnPntBit <> "" Then
{
If turnPntBit == "HiLo" Then
{
valArr[1] = IFF(turnPntArr[1] == "Hi",H,L);
barArr[1] = 0;
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
If turnPntArr[1] == "Hi" Then
turnPntBit = "Lo";
Else
turnPntBit = "Hi";
}
If turnPntBit <> turnPntArr[1] Then
{
for j = 8 downto 1
{
valArr[j+1] = valArr[j];
barArr[j+1] = barArr[j];
turnPntArr[j+1] = turnPntArr[j];
}
}
If turnPntBit <> turnPntArr[1] or
(turnPntBit == turnPntArr[1] and
((turnPntBit == "Hi" and valArr[1] < H) or
(turnPntBit == "Lo" and valArr[1] > L))) Then
{
valArr[1] = IFF(turnPntBit == "Hi",H,L);
barArr[1] = 0;
turnPntArr[1] = turnPntBit;
If turnPntArr[1][1] <> turnPntArr[1][0] Then{
Tx = Text_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],NumToStr(valArr[2],2));
Text_SetStyle(tx,2,2);
TL1 = TL_New(sDate[barArr[2]],sTime[barArr[2]],valArr[2],sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
PlaySound("C:₩예스트레이더₩data₩Sound₩a.wav");
}
Else{
TL_SetEnd(TL1,sDate[barArr[1]],sTime[barArr[1]],valArr[1]);
}
}
}
TL_SetSize(TL1[1],3);
TL_SetColor(TL1[1],RGB(20,255,255));
if turnPntArr[1][0] == "Hi" Then
trnd = 1;
if turnPntArr[1][0] == "Lo" Then
trnd = -1;
if Trnd == -1 and Trnd[1] == -1 and L == TL_GetValue(TL1,sdate,stime) and L < L[1] Then
PlaySound("C:₩예스트레이더₩data₩Sound₩a.wav");
if Trnd == 1 and Trnd[1] == 1 and H == TL_GetValue(TL1,sdate,stime) and H > H[1] Then
PlaySound("C:₩예스트레이더₩data₩Sound₩b.wav");
2015-07-20
109
글번호 88674