커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8140
글번호 230811
답변완료
시간별 주문
국내선물에서
매수 또는 매도
9시가 되어서 매수조건 A를 만족되면 매매를 하고 2번 연속으로
손실이 나면 매매을 중단한 후 2시 까지 매매가 중단되고 2시가 되면 매매를 다시
재개하고 싶습니다
청산
잔량이 있을때 시간에 따라 다른 청산 전략을 구현하는 수식을 부탁드립니다.
11시 이전에 잔량이 있으면 오전 이익 청산전략 A
11시 2시까지 잔량이 있으면 점심 이익 청산전략 B
2시 이후 장이 끝날 때까지 오후 이익 청산전략 C
종가청산
종가전봉이나 또는 종가전에
잔량이 있으면 청산합니다.
2020-04-23
1056
글번호 138279
종호 님에 의해서 삭제되었습니다.
2020-04-23
0
글번호 138278
답변완료
수식
안녕하세요.
하기 조건에 준한 매수/매도 각각 2가지 수식 부탁드립니다.
# 20개 봉 최저가 발생 후 다음봉에서....
1. 최저가봉의 고가돌파 매수
2. 연속 2양봉 매수
# 20개 봉 최고가 발생 후 다음봉에서....
1. 최고가봉의 저가이탈 매도
2. 연속 2음봉 매도
항상 도움 주시니 감사 인사드립니다.
2020-04-23
1118
글번호 138277
답변완료
신호발생시기와 주문발생시기 일치 방법문의
신호발생시기와 주문발생시기 일치 방법문의
상기 제목과 관련하여, 다른사람이 문의한 Q&A를 뒤져봐도, Yes Language 메뉴얼을 읽어봐도
<신호발생시기=주문발생시기 >
의 방법은 없어보이네요.
제가 이해한바는 아래와 같습니다.
onclose는 신호 다음봉 시가주문
atstop은 신호발생전 가격기준 주문(신호와 불일치한 주문)
그래도
" CCI 가 0선 돌파한 가격(close)이 발생한 봉에 진입(즉 신호 발생지점=매수주문)"
이라는 주문을 한다고, 할때, 아래의 물음표 부분에 어떤 수식이 들어가야 할까요?
(아니면 다른 방법이라도) 완전히 일치는 못시키더라도, 비슷하게 주문낼 방법이 있을지요.
일봉 기준, 1분봉기준으로 나눠서 대답 부탁드립니다.
Input : Period(9) ; Var : value(0);
value = CCI(Period);
If CrossUp(value, 0) Then
{ Buy("b",atstop, ???????); }
2020-04-23
1258
글번호 138276
답변완료
답변식에서 궁금한게 있습니다.
아래 답변주신 식에서 stime[1] < 140000 부분은 무슨 뜻 인가요?
또 140000에 생성된 봉의 종가에 주문이 들어가게 할수는 없을까요?
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 급하게 수식 질문드립니다.
>
안녕하세요
예스스탁입니다.
var : sumi(0),sumC(0),mav(0);
if bdate != bdate[1] Then
{
sumC = 0;
sumi = 0;
}
if stime < 120000 then
{
sumC = sumC+c;
sumi = sumi+1;
mav = sumC/sumi;
}
if stime >= 140000 and stime[1] < 140000 then
{
if c > mav Then
buy();
if c < mav Then
sell();
}
SetStopEndofday(153000);
즐거운 하루되세요
> 명왕 님이 쓴 글입니다.
> 제목 : 급하게 수식 질문드립니다.
> 1. 5분봉 차트에서 장시작 후 12:00까지의 5분봉 차트들의 종가를 구하고
그 종가의 평균을 구하는 법
2. 14:00의 5분봉 종가가 1번에서 구한 5분봉 평균값 이상이면 매수 진입,
이하면 매도진입.
3. 3:30분에 기존 포지션 청산
위 3개의 로직을 짜고 싶습니다.
1번부터 막혀서요.. 부탁드리겠습니다.
2020-04-23
1168
글번호 138275
답변완료
문의드립니다. 예스 랭귀지화
Var :
Sp(0),
TickSize( 0 );
TickSize = OneTick * PriceScale; // 호가 단위
SP = SignalPosition;
If CrossUp(C, V1) Then Buy("매수", DEF, DEF, 2);
If CrossDown(C, V2) Then Sell("매도", DEF, DEF, 2);
If CurrContracts = 2 Then
Begin
If SP = 1 Then ExitLong("1차매수익절", atlimit, EntryPrice + (35 * TickSize), "매수", 1);
If SP = -1 Then ExitShort("1차매도익절", Atlimit, entryPrice - (35 * TIckSIze), "매도", 1);
End;
If CurrContracts = 1 Then SetStopTrailing(32 * TickSIze * CurrContracts, 35* TIckSize * CurrContracts)
Else SetStopTrailing(0, 0);
// 익절 과 손절 설정 영역
Params :
Profit_Target( 0 ), // 익절 ( 단위 : 틱 )
Stop_Loss( 247 ); // 손절 ( 단위 : 틱 )
SetStopProfitTarget( Profit_Target * TickSize );
SetStopLoss( Stop_Loss * TickSize );
예스랭귀지로 변경부탁드립니다.
2020-04-24
1185
글번호 138274
답변완료
부탁합니다.
당일 9시15분으로 시가 기준을 잡고 강조가 표현 되었으면 좋겠습니다.
가능 하다면 부탁합니다.
수고하세요.
2020-04-23
979
글번호 138273
답변완료
문의드립니다
1. 검색봉수가 10,000봉이 최대네요
그럼 그동안의 데이터로 20봉 평균 가격을 현재가가 돌파해서 0.50포인트에 터치 한 횟수와
0.50포인트를 터치못하고 실패해서 다시 20봉평균가격을 현재가가 터치한 횟수를 텍스트로 나타내고 싶습니다
2. 오전7시부터 익일 6시까지 양봉의갯수와 음봉의갯수를 알고싶습니다
2020-04-23
959
글번호 138271
답변완료
종목검색
마켓 프로 파일에 대한 시스템 식으로 구동하니 잘 돼는데 검색식으로 변경해서 검색을하니 검색이 안되는데 일봉 과 30분봉에서 검색 가능하도록 부탁합니다. 좋은 하루되세요
<오래전에 수식지왕이라는 분이 만든겁니다>
Var:j(0),행번호(0),단위가격(0),추가행(0),알파벳(0),최대개수(0),총개수(0),봉개수(0),
추정거래량(0),cnt(0),중앙가격(0),최대행(0),중심행(0),상위개수(0),
하위개수(0),시초범위상(0),시초범위하(0),가치영역상한(0),가치영역하한(0),누적개수(0),
위꼬리상한(0),위꼬리하한(0),아래꼬리상한(0),아래꼬리하한(0);
Array:가격대[500](0),거래량[500](0),개수[500](0),프로파일[500](0),
중심가격[50](0),가치영역상[50](0),가치영역하[50](0);
단위가격 = PriceScale;
if DayIndex()==0 then //날짜 변경시점에
{
for j = 48 downto 0
{
중심가격[j+1] = 중심가격[j]; //전일 중심가격과
가치영역상[j+1] = 가치영역상[j]; //전일 가치영역 관리
가치영역하[j+1] = 가치영역하[j];
}
for 행번호 = 0 to 499 //0값으로 초기화
{
거래량[행번호] = 0;
개수[행번호] = 0;
프로파일[행번호] = 0;
}
최대개수 = 0;
총개수 = 0;
시초범위상 = 0; //장 개시 후 1시간내의 가격범위
시초범위하 = 0;
가격대[0] = H + 단위가격 * 100; //100호가의 여유를 둠
for 행번호 = 0 to 498
{
가격대[행번호+1] = 가격대[행번호] - 단위가격; //가격대 배열에 가격 대입
}
}
if 가격대[0] <= H then //고가가 가격대 배열 이상이 되면
{
추가행 = ceiling((H-가격대[0])/단위가격) + 20; //고가에 20호가 여유를 더 두어 재설정
for 행번호 = (499 - 추가행) downto 0
{
가격대[행번호+추가행] = 가격대[행번호]; //추가행만큼 뒤로 옮긴다
거래량[행번호+추가행] = 거래량[행번호];
개수[행번호+추가행] = 개수[행번호];
프로파일[행번호+추가행] = 프로파일[행번호];
}
가격대[0] = 가격대[0] + 단위가격 * 추가행; //추가된 행에 가격 재설정
for 행번호 = 0 to (추가행-1)
{
가격대[행번호+1] = 가격대[행번호] - 단위가격;
}
for 행번호 = 0 to 추가행 //추가된 행의 나머지 항목은
{
거래량[행번호] = 0; //0값으로 초기화
개수[행번호] = 0;
프로파일[행번호] = 0;
}
중심행 = 중심행 + 추가행; //중심가격의 행번호도 뒤로 밀린다
}
알파벳 = DayIndex() + 1; //알파벳 대신 숫자 사용
중앙가격 = (DayHigh()+Daylow())/2; //전체가격폭의 중앙
if DayIndex() == 60/BarInterval-1 then //장 개시 후 1시간내의 가격범위
{
시초범위상 = DayHigh();
시초범위하 = DayLow();
}
cnt = 0;
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then //현재 봉 가격대가 몇가격대
cnt = cnt + 1; //걸쳐져 있는지 계산
}
추정거래량 = V/cnt; //가격대별 배분할 거래량
for 행번호 = 0 to 499
{
if L <= 가격대[행번호] and 가격대[행번호] <= H then
{
거래량[행번호] = 거래량[행번호] + 추정거래량;
개수[행번호] = 개수[행번호] + 1;
프로파일[행번호] = 알파벳;
총개수 = 총개수 + 1;
if 최대개수 < 개수[행번호] then //신규 최빈값 나왔을 때
{
최대개수 = 개수[행번호];
중심행 = 행번호;
}
else if 최대개수 == 개수[행번호] then //최빈값과 동일하다면
{
if 거래량[중심행] < 거래량[행번호] then //거래량 많은 가격대를
중심행 = 행번호;
else if 거래량[중심행] == 거래량[행번호] and //거래량도 동일하면
abs(중앙가격-가격대[중심행]) > //전체가격폭 중앙에
abs(중앙가격-가격대[행번호]) then //가까운 가격으로
중심행 = 행번호;
}
}
}
중심가격[0] = 가격대[중심행]; //알파벳 개수가 가장 많은 가격
가치영역상한 = 중심행; //중심가격을 중심으로 위, 아래 70% 해당하는
가치영역하한 = 중심행; //행을 찾기 위해 시작 행을 중심행으로 함
누적개수 = 개수[중심행]; //가치영역을 찾기 위해 알파벳 개수 누적
for j = 0 to 499
{
var2 = 개수[가치영역상한-1]; //가치영역상한선은 1행씩 위로(-1)
var3 = 개수[가치영역하한+1]; //가치영역하한선은 1행씩 아래로(+1)
if var2 > var3 then //개수가 많은 쪽의 개수를 먼저 누적한다
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
else if var2 < var3 then
{
누적개수 = 누적개수 + var3;
가치영역하한 = 가치영역하한 + 1;
}
else if var2 == var3 and var2 > 0 and var3 > 0 then
{
누적개수 = 누적개수 + var2;
가치영역상한 = 가치영역상한 - 1;
}
if 누적개수 >= 총개수 * 0.7 or var2 + var3 == 0 then
j = 499;
}
가치영역상[0] = 가격대[가치영역상한];
가치영역하[0] = 가격대[가치영역하한];
상위개수 = 0; 하위개수 = 0; 위꼬리상한 = 499; 위꼬리하한 = 0; 아래꼬리상한 = 499;
if 개수[499] == 1 then 아래꼬리하한 = 499;
else 아래꼬리하한 = 0;
for 행번호 = 0 to 중심행-1
{
if 개수[행번호] > 1 then
상위개수 = 상위개수 + 개수[행번호];
if 개수[행번호] == 0 and 개수[행번호+1] == 1 then
위꼬리상한 = 행번호 + 1;
if 개수[행번호] == 1 and 개수[행번호+1] > 1 and 위꼬리하한 == 0 then
위꼬리하한 = 행번호;
}
for 행번호 = 499 downto 중심행+1
{
if 개수[행번호] > 1 then
하위개수 = 하위개수 + 개수[행번호];
if 개수[행번호] == 1 and 개수[행번호-1] > 1 and 아래꼬리상한 == 499 then
아래꼬리상한 = 행번호;
if 개수[행번호] == 0 and 개수[행번호-1] == 1 then
아래꼬리하한 = 행번호 - 1;
}
봉개수 = 0; //단봉, 쌍봉, 삼봉 등 패턴파악용
for 행번호 = 1 to 499
{
if 개수[행번호-1] < 개수[행번호] then //개수가 올라가면
{
if 봉개수 == 0 then 봉개수 = 0.3; //x.3
else if 봉개수 == 1 then 봉개수 = 1.3;
else if 봉개수 == 2 then 봉개수 = 2.3;
else if 봉개수 == 3 then 봉개수 = 3.3;
else if 봉개수 == 4 then 봉개수 = 4.3;
}
if 최대개수 * 0.8 < 개수[행번호] then //꼭지에 도달하면
{
if 봉개수 == 0.3 then 봉개수 = 0.7; //x.7
else if 봉개수 == 1.3 then 봉개수 = 1.7; //낮은 봉은 배제하려고
else if 봉개수 == 2.3 then 봉개수 = 2.7; //최대개수의 80% 수준으로 설정
else if 봉개수 == 3.3 then 봉개수 = 3.7;
else if 봉개수 == 4.3 then 봉개수 = 4.7;
}
if 개수[행번호-1] > 개수[행번호] then //개수가 떨어지는데
{
if 봉개수 == 0.7 then 봉개수 = 1; //꼭지 찍고 내려오는 것은
else if 봉개수 == 1.7 then 봉개수 = 2; //1.0
else if 봉개수 == 2.7 then 봉개수 = 3;
else if 봉개수 == 3.7 then 봉개수 = 4;
else if 봉개수 == 4.7 then 봉개수 = 5;
else if 봉개수 == 0.3 then 봉개수 = 0; //꼭지 못찍고 내려오면
else if 봉개수 == 1.3 then 봉개수 = 1; //원위치
else if 봉개수 == 2.3 then 봉개수 = 2;
else if 봉개수 == 3.3 then 봉개수 = 3;
else if 봉개수 == 4.3 then 봉개수 = 4;
}
}
if DayIndex() == 60/BarInterval - 1 then
if 중심가격[0] < C and 최대개수 <= 4 and
시초범위상 - 3*단위가격 < C and
봉개수 == 1 then
Buy();
if C[1] >= 중심가격[0] and 중심가격[0] > C then
ExitLong();
2020-04-23
1264
글번호 138270