커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
4719
글번호 230811
답변완료
주문에 관해 질문 드립니다.
랭귀지에서 1계약 수준의 증거금만으로 러버셜을 원활히 진행하는 방법에 대한 질문입니다. 기존에 매도 포지션을 가지고 있을때 매수 신호가 발생하여 buy 함수를 실행하게 되면 청산 주문과 본진입 주문이 동시에 나가게 되어 2배의 증거금이 필요한 것으로 알고 있습니다.
1. 이때 시스템 트레이딩 설정창의 부가기능에 진입주문지연기능을 5초라고 했다고 칩시다. 그런데 그 5초 내에 또 다른 신호가 발생하면 어떻게 되나요? 차트는 저 멀리 진행되는데 주문이 누적된 대로 5초가 지난 후에 또 다른 신호를 처리하게 되나요?
2. 항상 시장가로 함을 전제로 합시다. 이런걸 방지하기 위해 그냥 buy(); 말고 exitshort(); buy(); 으로 수식을 작성했을때 0.001초차라도 청산 주문과 본진입 주문 사이의 간격이 존재하므로 거래소에서 문제없이 체결이 되나요?
3. 위와 같이 했을때도 2배 수준의 증거금이 필요한가요? 혹시 이론상으로는 1계약 증거금으로도 되는데 실제로는 데이터 전송 지연 같은 문제 때문에 안되나요?
<여기서부터 전략 차트 관련 질문입니다>
4. 전략 차트에서 봉 5000개를 조회할 수 있는 걸로 알고 있습니다. 그런데 시스템을 최초 실행시킬 때 기존에 조회된 봉들이 상관이 있나요? 시스템은 무조건 실행한 시점부터 들어오는 데이터만을 사용하는게 아닌가요?
5. 만약 시스템을 "최근 100봉 중에서 얼마 이상을 넘는 봉이 10개째 나올 때 매수하라"라고 작성했다면, 4번이 중요할텐데요. 전략 차트가 과거 조회된 봉들을 처음부터 따지는 방식인지, 조회된 봉수가 몇개이든 실행 시점부터 들어오는 데이터부터 따지는 방식인지 궁금합니다.
번호를 통합하여 답변 주셔도 됩니다.
항상 친절한 답변 감사합니다.
2015-12-02
112
글번호 92965
답변완료
문의드립니다
안녕하세요
1분봉으로 거래조건이 충족시 9시 1분 첫봉에 진입하게 만들고 싶은데
몇개가 9시 1분에 진입하지 않고 9시 2분에 진입을 하고 있어서
여쭤봅니다
어떻게 해야 첫봉에 진입하게 만들 수 있을까요?
var : cnt(0),count(0);
count = 0;
for cnt = 0 to 20{
if sdate == EntryDate(cnt) Then
count = count+1;
}
if stime >= 090000 and count < 1 and stime < 143000 Then{
if MarketPosition == 0 Then{
buy("b",AtStop,DayOpen +0.5);
sell("s",AtStop,DayOpen -0.5);
}
}
}
SetStopProfittarget(0.5,PointStop);
SetStopLoss(0.5,PointStop);
SetStopEndofday(145900);
2015-12-01
107
글번호 92964
답변완료
감사합니다.
if MarketPosition == 1 Then{
//최대수익포인트를 0.5로 나누어
//진입이후 0.5 단위로 몇개의 폭인지 갯수를 산출(소숫점 제외하고 정수만 취함)
var1 = int((highest(h,BarsSinceEntry)-EntryPrice)/0.5);
//객수에 0.5를 곱해 몇 포인트인지 환산
var2 = var1*0.5;
#폭이 0(0.5이상 수익발생하지 못했음)이면 진입가-0.5에 손절
if var1 == 0 Then
exitlong("bx1",AtStop,EntryPrice-0.5);
#폭이 1이상(0.5단위로 최소 1폭이상 수익발생)이면
#최종 폭에-0.2값으로 손절 설정
if var1 >= 1 Then
exitlong("bx2",AtStop,EntryPrice+var2-0.2);
}
if MarketPosition == -1 Then{
var3 = int((EntryPrice-lowest(l,BarsSinceEntry))/0.5);
var4 = var3*0.5;
if var1 == 0 Then
ExitShort("sx1",AtStop,EntryPrice-0.5);
if var1 >= 1 Then
ExitShort("sx2",AtStop,EntryPrice-var4+0.2);
}
반갑습니다. 위 함수는 예전에 답변 받았던 수식입니다.
이 수식을 0.05 즉 한틱단위로 제가 가공해서 쓰려면 어찌 해야할 지 여쭤봅니다.
매번 감사드립니다.
2015-12-01
109
글번호 92963
답변완료
부탁 드립니다.
항상 도움 주셔서 감사 드립니다.
45234번 수정 질문 부탁 드립니다.
미리 감사 드립니다.
2015-12-02
120
글번호 92962
답변완료
문의드립니다
17시에서 다음날 05 시까지
매매횟수 제한 조건식을 넣고 싶습니다
2015-12-01
106
글번호 92948
답변완료
지표 문의
Input: period1(5);
Var : CATM(0),PATM(0);
Var : SUMATM(0),AVGATM(0);
CATM = Data1("C");
PATM = Data2("C");
SUMATM = CATM+PATM;
plot7(SUMATM);
Plot8(ma(SUMATM,Period1), "이평");
위와 같은 수식을 사용 하고 있습니다
여기서 전일 종가의 SUMATM 보다 값이 크면 빨간색 작으면 파란색으로 선으로 표시하고 싶습니다. 어려워서 문의 드립니다.
2015-12-01
121
글번호 92947
답변완료
수식 부탁드립니다
수고하십니다.
첨부 파일에서
참조데이터 2개의 차이(data2 - data3)를
차트 또는 보조차트에 그래프로 나타낼수 있나요
감사합니다
2015-12-01
127
글번호 92946
답변완료
수식수정
안녕하세요
아래는 수식지왕님의 마켓프로파일수식인데요 이게 날짜변경에 맞춰서 새로
작성되는지라 해외선물에 쓰려고 하니 맞질않네요. 해선에 맞게 장시작시
새로 작성되게 해주십시요.
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;
}
}
plot1(중심가격[0],"중심가격");
plot2(가치영역상[0],"가치영역(상)",RED); //선그래프,채우기
plot3(가치영역하[0],"가치영역(하)",RED);
if 위꼬리상한 <= 위꼬리하한 then
{
plot4(가격대[위꼬리상한],"위꼬리상단",BLACK); //점그래프,채우기
plot5(가격대[위꼬리하한],"위꼬리하단",BLACK);
}
if 아래꼬리상한 <= 아래꼬리하한 then
{
plot6(가격대[아래꼬리상한],"아래꼬리상단",BLACK); //점그래프,채우기
plot7(가격대[아래꼬리하한],"아래꼬리하단",BLACK);
}
if 시초범위상 > 0 then plot8(시초범위상,"시초범위(상)",GREEN); //점그래프,채우기
if 시초범위하 > 0 then plot9(시초범위하,"시초범위(하)",GREEN);
수고하세요.
2015-12-01
198
글번호 92945
답변완료
각 옵션의 당일 고가 저가 표시
data1=c247, data2=p247일 경우
옵션의 당일 고가 및 저가를 표시할려고 합니다
dayhigh, daylow를 사용하여 표시는 했는데, 날짜가 변경될 경우 당일에 한해서먼 선을 표시하고 싶습니다.
물론 점선으로 표시하면 가능하지만, 차트에 설정된 지표들이 많아 보기가 불편합니다
각 옵션의 당일 고가 및 저가를 어제꺼는 표시되지 않고, 당일에만 표시되는 수식 부탁드립니다...
2015-12-01
130
글번호 92944