커뮤니티
예스랭귀지 Q&A
답변완료
[공지] 예스랭귀지 AI 어시스턴트, '예스나 AI' 출시 및 무료 체험 안내
안녕하세요, 예스스탁 입니다.복잡한 수식 공부 없이 여러분의 아이디어를 말하면 시스템 트레이딩 언어 예스랭귀지로 작성해주는 서비스예스나 AI(YesNa AI)가 출시되었습니다.지금 예스나 AI를 직접 경험해 보실 수 있도록 20크레딧(질문권 20회)를 무료로 증정해 드리고 있습니다.바로 여러분의 아이디어를 코드로 변환해보세요.--------------------------------------------------🚀 YesNa AI 핵심 기능- 지표식/전략식/종목검색식 생성: 자연어로 요청하면 예스랭귀지 문법에 맞는 코드를 작성합니다.- 종목검색식 변환 지원: K증권의 종목 검색식을 예스랭귀지로 변환 지원합니다.- 컴파일 검증: 작성된 코드가 실행 가능한지 컴파일러를 통해 문법 검증을 거쳐 결과물을 제공합니다.상세한 서비스 개요 및 활용 방법은 [서비스 소개 페이지]에서 확인하실 수 있습니다.▶ 서비스 소개 페이지: 바로가기서비스 사용 유의사항 및 결제 환불정책은 [이용약관]을 참고 부탁드립니다.▶ 서비스 이용약관: 바로가기💬 이용 문의사용 중 문의사항은 [프로그램 사용법 Q&A] 게시판에서 [예스나 AI] 카테고리를 설정 후 문의해 주시면 상세히 안내해 드리겠습니다.--------------------------------------------------앞으로도 AI를 활용한 다양한 트레이딩 기능들을 지속적으로 선보일 예정입니다.많은 관심과 기대 부탁드립니다.
2026-02-27
8207
글번호 230811
답변완료
문의드립니다.
300틱차트에서 900틱 20선(지수이평)을 표현할 수 있는 수식이 있는지요?
보조차트가 아니라 수식으로 구현할 수 있는지 알고 싶습니다.
2014-01-08
189
글번호 71165
답변완료
질문 드립니다.
항상 감사드립니다.
새해 복 많이 받으세요.
1.
CME 야간장 코스피 200선물 거래만 하는 소스를 만들고자 합니다.
이 경우 거래 시간이 18:00시~05:00시 사이이므로,
05시 직전에, 즉 04:50에 일단 청산하려고 합니다.
SetStopEndofDay(0450); 만 쓰면 당연히 18:00~24:00 시간대에 거래가 안 되게 되므로 이 것을 쓸 수 없겠고요.
18:00~04:50 사이에 거래가 되게 하고,
04:50에 일단 다 청산하고,
04:50~05:00 사이에는 진입이 안 되게 하는 간단한 소스를 부탁드립니다.
2.
위 1번 사항과 거의 대동소이하겠습니다만,
09:00~14:45까지 거래가 되게 하고,
14:45에 일단 청산하고
14:45~15:15에는 진입이 안 되게 하고,
다시
18:00~04:50까지 거래가 되게 하고,
04:50에 일단 청산하고
04:50~05:00에는 진입이 안 되게 하는 식 부탁 드립니다.
2014-01-07
192
글번호 71164
답변완료
검토 부탁드립니다.
아래식을 작성해 주셨는데...
여러 종목을 시스템에 적용 해봤는데...
매수가 하나도 안되네요. 검토 좀 해주세요.
감사합니다.
---------------------------------------
input : P1(5),P2(20);
var : sumV(0), maV(0),sumV1(0), maV1(0), count(0),dis(0),dis1(0),cnt(0),entryCond(false),Daycnt(0);
var : sumv2(0),mav2(0),dis2(0);
var : cond1(false),cond2(false),cond3(false),cond4(false),cond5(false),cond6(false);
var : EP1(0),EP2(0),EP3(0),EP4(0),EP5(0),EP6(0);
sumV1 = 0;
for count = 0 to P2{
if count < P1 Then{
sumV = sumV+DayClose(count);
sumV1 = sumV1+DayClose(count+1);
}
if count < P2 Then
sumV2 = sumV2+DayClose(count);
}
maV = sumV / P1;
maV1 = sumV1 / P1;
maV2 = sumV2 / P2;
dis = C/mav*100;
dis1 = C/mav1*100;
dis2 = C/mav2*100;
if date != date[1] Then{
Daycnt = daycnt+1;
cond1 = false;
cond2 = false;
cond3 = false;
cond4 = false;
cond5 = false;
cond6 = false;
entryCond = false;
}
if MarketPosition == 1 and MarketPosition[1] != MarketPosition Then
entrycond = true;
if ((EntryCond == false and MarketPosition == 0) or
(MarketPosition == 1 and EntryDate == sdate)) and
ExitDate(1) != sdate and
dis1 >= 108 Then{
if cond1 == false and dis >= 104 and dis < 105.5 Then{
buy("b1");
cond1 = true;
}
if cond2 == false and dis >= 102.5 and dis < 104 Then{
buy("b2");
cond2 = true;
}
if cond3 == false and dis >= 101 and dis < 102.5 Then{
buy("b3");
cond3 = true;
}
if cond4 == false and dis2 >= 104 and dis2 < 106 Then{
buy("b4");
cond4 = true;
}
if cond5 == false and dis2 >= 102 and dis2 < 104 Then{
buy("b5");
cond5 = true;
}
if cond6 == false and dis2 >= 100 and dis2 < 102 Then{
buy("b6");
cond6 = true;
}
}
if MarketPosition == 1 Then{
if daycnt == daycnt[BarsSinceEntry] Then{
ExitLong("BP0",atlimit,AvgEntryPrice*1.05);
}
if daycnt == daycnt[BarsSinceEntry]+1 Then{
ExitLong("BP1",atlimit,AvgEntryPrice*1.07);
ExitLong("Bx1",atlimit,daylow*1.10);
}
if daycnt == daycnt[BarsSinceEntry]+2 Then{
ExitLong("BP2",atlimit,AvgEntryPrice*1.08);
ExitLong("Bx2",atlimit,daylow*1.10);
}
if daycnt == daycnt[BarsSinceEntry]+3 Then{
ExitLong("BP3",atlimit,AvgEntryPrice*1.09);
ExitLong("Bx3",atlimit,daylow*1.10);
}
if daycnt == daycnt[BarsSinceEntry]+4 Then{
ExitLong("BP4",atlimit,AvgEntryPrice*1.10);
ExitLong("Bx4",atlimit,daylow*1.10);
if stime == 94500 Then
exitlong("x");
}
}
즐거운 하루되세요
> 쌀사비팔 님이 쓴 글입니다.
> 제목 : 부탁드립니다.
> 현물 1분봉 입니다.
<매수조건>
-전일 종가가 5일선(일봉) 이격도 108 이상이고
-오늘 매수가 한 번이라도 되었다면, 익일부터 매수 금지(모두 청산된 후에 매수 가능)
-오늘 청산이 한 번이라도 되었다면, 오늘 중에는 매수 금지
<매수>
-5일(일봉) 이격도 105.5미만~104이상이면 오늘 1번만 매수
-5일(일봉) 이격도 104미만~102.5이상이면 오늘 1번만 매수
-5일(일봉) 이격도 102.5미만~101이상이면 오늘 1번만 매수
-20일(일봉) 이격도 106미만~104이상이면 오늘 1번만 매수
-20일(일봉) 이격도 104미만~102이상이면 오늘 1번만 매수
-20일(일봉) 이격도 102미만~100이상이면 오늘 1번만 매수
<매수 당일 청산>
-평균매수가 대비 5% 상승시 청산
<매수 +1일 청산>
-평균 매수가 대비 7% 상승시 청산
-당일 저가대비 10% 상승시 청산
<매수 +2일 청산>
-평균 매수가 대비 8% 상승시 청산
-당일 저가대비 10% 상승시 청산
<매수 +3일 청산>
-평균 매수가 대비 9% 상승시 청산
-당일 저가대비 10% 상승시 청산
<매수 +4일 청산>
-평균 매수가 대비 10% 상승시 청산
-당일 저가대비 10% 상승시 청산
-09:45시에 청산
2014-01-07
227
글번호 71163
답변완료
재문의 드립니다
문의번호 34143에 2번 재문의내용입니다
-------------------------------------------------
if sdate == 20140107
or sdate == 20140108
or sdate == 20140109
then var1=1 ; else var1=-1;
if var1==-1 and 조건1 then buy();
var1에 저장된 갑이 -1이다라는 표현은 var1 == -1입니다.
예스랭귀지에서 2개의 값이 같다라는 표현은 A == B 입니다.
-----------------------------------------------------
옵션 만기전 3일동안은 어떤 매수조건이 오더라도 진입이 안되게 하려고
하는데 if var1==-1 and 조건1 then buy();하더라도
매수가 발생되었읍니다
1. 다른 시스템식으로 작성하는 방법은 없는지요?
2. 옵션 만기일 매수진입금지 식을 별도로 알려주시길 바랍니다
감사합니다
2014-01-07
195
글번호 71161
답변완료
외국인 기관 순매수종목 검색
기관외국인이 쌍끌이 매수한종목들 중 종가가 7%이상인
종목을 찾을려면 어떻게해야하나요~
부탁드립니다.
2014-01-07
250
글번호 71157
답변완료
문의드립니다
1.
var1 < 1 then
var2 = (h+l)/2;
plot(var2) 이 출력된후 그다음봉의 평균값이
var2 보다 작을때 봉위에 표시를 하고 싶습니다
그런데 그러게되면 그다음봉부터 계속 표시가 되겠네요
출력된후 5개의 봉까지만 표시되게 해주세요
2.
if V > 1000 Then
if V > V[1] Then{
PlotPaintBar(H,L,"0",RED);
거래량이 1000 개 보다 클때 캔들에 표시하는데 dde서비스로보면 1000 개보다 많은데도
표시가 않되는데요? 왜그러죠?
2014-01-07
200
글번호 71154
답변완료
아래 34225 답변 수정요망 재질의 올립니다.
바쁘신 가운데 신속한 답변 주셔서 감사드리구요 알려주신 내용은 충분히 이해하였습니다.
그런데 위에 주신 답변에서는 게시물 21844번(11.12.02)의 plot1을 추세선함수로 1:1 교체를 해 주셨는데 문의드렸던 내용은 그것을 여쭌 게 아니었는데요, 아마도 질의를 잘 못 드렸던 것이 아닌가 싶습니다.
다시 말씀드리자면 파동선의 고점과 저점을 수평으로 잇는 식 즉 21844번 답변에 추가해 주셨던 plot2 수평선을 추세선함수로 작성하여 아래 '파동 및 추세선'(34184게시물)에 추가해 주실 것과 그에 대한 시스템식을 부탁드렸던 것인데 또 다시 수고를 끼치게 되는 것 같아 송구스럽지만 한 번 더 올리겠습니다.
참고로, 초보 실력으로 위 Plot2를 추세선함수로 작성하여 아래 식에 추가했더니 부정확한 수평선이 나오길래 잘못된 점이 무엇인지 비교하며 추세선함수도 익혀보고 해당 수평선과 지지저항선 비교도 해보고자 합니다.
감사합니다.
######### 이하 34184번(14.01.03) 게시물 ########
#==========================================#
# 지 표 명 : 파동선 및 추세선
# 작 성 자 : 수식지왕
# 블 로 그 : http://yahoosir.blog.me
#==========================================#
Input:atrLength(14),multi(1);
Var:j(0),dayATR(0),sum(0),upTr(100),dnTr(-100),trnd(0),
date11(0),date12(0),time11(0),time12(0),TL1(0),
date21(0),date22(0),time21(0),time22(0),TL2(0),
date31(0),date32(0),time31(0),time32(0),TL3(0);
Array:hiVal[10](0),loVal[10](0),hiBar[10](0),loBar[10](0);
//hiVal[1]은 전고점, hiVal[2]는 전전고점, hiVal[3]은 전전전고점
//hiVal[0]은 변곡점 이후 현재봉까지의 고점. 현재 고점은 진행중이므로 계속 바뀐다.
//loVal[0]은 반대 개념
sum = 0;
for j = 1 to atrLength {
sum = sum + Max(C[j+1],H[j]) - Min(C[j+1],L[j]);
}
dayATR = sum/atrLength; //일봉기준으로 ATR 산출
for j = 1 to 9 { //전고,전저점을 9개까지 보관
loBar[j] = loBar[j] + 1; //전저점의 위치. 현재 봉으로부터 떨어져 있는 거리
hiBar[j] = hiBar[j] + 1; //전고점의 위치
}
if hiVal[0] <= H or hiVal[0] == 0 then { //전고,전저점 이후 현재까지의 고점
hiVal[0] = H; //0을 체크한 이유는 초기에 값이 없는 구간이 생기기 때문
hiBar[0] = 0; //현재 고점의 위치가 0이란 것은 현재봉의 고가가 구간 고점이라는 의미
}
else {
hiBar[0] = hiBar[0] + 1; //현재 고점의 위치
}
if loVal[0] >= L or loVal[0] == 0 then { //전고,전저점 이후 현재까지 저점
loVal[0] = L;
loBar[0] = 0;
}
else {
loBar[0] = loBar[0] + 1; //현재 구간 저점의 위치
}
if trnd != dnTr && hiVal[0] > H && hiVal[0] - (dayATR * multi) > L then trnd = dnTr;
//저가가 고가 대비 변동률보다 밑으로 떨어지면 하락추세로 설정
//단, 현재봉의 고가가 변곡점 이후 최고가이면 상승 추세가 진행중이라고 본다.
//그래서 현재봉의 고가가 hiVal[0]보다 작다는 조건이 추가되었다.
else if trnd != upTr && loVal[0] < L && loVal[0] + (dayATR * multi) < H then trnd = upTr;
//고가가 저가 대비 변동률보다 높으면 상승추세로 설정
if trnd[1] == upTr and trnd == dnTr then { //상승추세였다가 하락추세로 바뀌었다면
for j = 8 downto 1 { //새로운 전고점이 생기는 것이므로
hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다.
hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
}
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
hiVal[0] = H; //전고점이 확정되었으므로 전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = L;
loBar[0] = 0;
//전고점이 새로 생긴 것이니까 전저점에서 전고점까지 추세선을 긋는다.
date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜
time11 = stime[loBar[1]]; //추세선 시작시간
Value11 = loVal[1]; //추세선 시작가격
date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜
time12 = stime[hiBar[1]]; //추세선 종료시간
Value12 = hiVal[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
//TL_New는 신규 추세선을 그려주는 함수
}
if trnd[1] == dnTr and trnd == dnTr and //추세는 하락 상태에서 바뀌지 않았는데
hiVal[1] < hiVal[0] then { //전고점보다 더 높은 고점이 출현했다면
if loVal[1] <= loVal[0] then { //전저점은 갱신되지 않았다면
hiVal[1] = hiVal[0]; //전고점을 현재의 고점으로 바꿔준다.
hiBar[1] = hiBar[0];
hiVal[0] = H;
hiBar[0] = 0;
loVal[0] = L;
loBar[0] = 0;
//전고점이 추가된 게 아니고 바뀐 것이므로 종료일,종료시간,종료가격만 바꿔준다.
date12 = date[hiBar[1]]; //추세선 종료일
time12 = stime[hiBar[1]];
Value12 = hiVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
//TL_SetEnd는 기존추세선의 종료지점을 변경해주는 추세선 함수이다.
//TL_Delete 함수를 써서 직전의 추세선을 지우고 다시 TL_New로 추세선을 추가해도 된다.
}
else { //전저점도 갱신되었다면
for j = 8 downto 1 { //전고점, 전저점을 새로이 추기
hiVal[j+1] = hiVal[j]; //전고점을 하나씩 뒤로 보낸다.
hiBar[j+1] = hiBar[j]; //전고점은 전전고점이 되고, 전전고점은 전전전고점이 된다.
loVal[j+1] = loVal[j]; //전저점을 하나씩 뒤로 보낸다.
loBar[j+1] = loBar[j]; //전저점은 전전저점이 되고, 전전저점은 전전전저점이 된다.
}
hiVal[1] = hiVal[0]; //새로운 전고점에 현재 고점을 대입
hiBar[1] = hiBar[0];
loVal[1] = loVal[0]; //새로운 전저점에 현재 저점을 대입
loBar[1] = loBar[0];
hiVal[0] = H; //전고점 이후 최고가는 현재봉의 고가
hiBar[0] = 0;
loVal[0] = L;
loBar[0] = 0;
//전저,전고점이 새로 생긴 것이니까 전전고점에서 전저점까지
//그리고 전저점에서 전고점까지 추세선 2개를 생성한다.
date11 = date[hiBar[2]]; //추세선 시작일. 전전고점의 날짜
time11 = stime[hiBar[2]]; //추세선 시작시간
Value11 = hiVal[2]; //추세선 시작가격
date12 = date[loBar[1]]; //추세선 종료일. 전저점의 날짜
time12 = stime[loBar[1]]; //추세선 종료시간
Value12 = loVal[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetSize(TL1,2);
date11 = date[loBar[1]]; //추세선 시작일. 전저점의 날짜
time11 = stime[loBar[1]]; //추세선 시작시간
Value11 = loVal[1]; //추세선 시작가격
date12 = date[hiBar[1]]; //추세선 종료일. 전고점의 날짜
time12 = stime[hiBar[1]]; //추세선 종료시간
Value12 = hiVal[1]; //추세선 종료가격
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
}
}
if trnd[1] == dnTr and trnd == upTr then { //추세가 하락에서 상승으로 바뀌었을 경우
for j = 8 downto 1 {
//이전저점은 전전저점으로, 전전저점은 전전전저점으로 번호를 부여
loVal[j+1] = loVal[j];
loBar[j+1] = loBar[j];
}
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date11 = date[hiBar[1]]; //전저점이 새로이 생긴 것이므로 시작점은 전고점이 된다.
time11 = stime[hiBar[1]];
Value11 = hiVal[1];
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
}
if trnd[1] == upTr and trnd == upTr and //추세는 상승을 유지하고 있는데
loVal[1] > loVal[0] then { //전저점보다 낮은 저가가 출현했다면
if hiVal[1] >= hiVal[0] then { //고점 갱신이 되지 않았다면
loVal[1] = loVal[0]; //직전의 전저점만 바꿔준다.
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date12 = date[loBar[1]];
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL_SetEnd(TL1, date12,time12,Value12);
}
else { //고점도 이전고점보다 높다면
for j = 8 downto 1 { //전고점,전저점을 새로이 생성
hiVal[j+1] = hiVal[j];
hiBar[j+1] = hiBar[j];
loVal[j+1] = loVal[j];
loBar[j+1] = loBar[j];
}
hiVal[1] = hiVal[0];
hiBar[1] = hiBar[0];
loVal[1] = loVal[0];
loBar[1] = loBar[0];
loVal[0] = L;
loBar[0] = 0;
hiVal[0] = H;
hiBar[0] = 0;
date11 = date[loBar[2]]; //시작점이 전전저점
time11 = stime[loBar[2]];
Value11 = loVal[2];
date12 = date[hiBar[1]]; //종료는 전고점
time12 = stime[hiBar[1]];
Value12 = hiVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
TL_SetSize(TL1,2);
date11 = date[hiBar[1]]; //2번째 시작은 전고점이 된다.
time11 = stime[hiBar[1]];
Value11 = hiVal[1];
date12 = date[loBar[1]]; //2번째 종료는 전저점
time12 = stime[loBar[1]];
Value12 = loVal[1];
TL1 = TL_New(date11,time11,Value11,date12,time12,Value12);
}
}
if loVal[2] < loVal[1] then {
if loBar[2][1] + 1 != loBar[2][0] then {
date21 = date[loBar[2]];
time21 = stime[loBar[2]];
Value21 = loVal[2];
date22 = date[0]; //추세선이므로 현재 봉까지 그려준다.
time22 = stime[0];
Value22 = (loVal[1]-loVal[2])/(loBar[2]-loBar[1])*loBar[2]+LoVal[2];
//종료시점의 가격은 직선의 기울기와 절편을 계산해서 구한다.
TL2 = TL_New(date21,time21,Value21,date22,time22,Value22);
}
else {
//전전저점이 바뀌지 않았다면 종료시점만 변경하면 된다.
date22 = date[0];
time22 = stime[0];
Value22 = (loVal[1]-loVal[2])/(loBar[2]-loBar[1])*loBar[2]+LoVal[2];
TL_SetEnd(TL2, date22,time22,Value22);
//TL_SetExtRight 함수는 추세선을 오른쪽으로 연장하는 함수인데
//이 함수를 사용하면 모든 추세선이 현재봉까지 연장되어 알아볼 수가 없다.
}
}
if hiVal[2] > hiVal[1] then {
if hiBar[2][1] + 1 != hiBar[2][0] then {
date31 = date[hiBar[2]];
time31 = stime[hiBar[2]];
Value31 = hiVal[2];
date32 = date[0];
time32 = stime[0];
Value32 = (hiVal[1]-hiVal[2])/(hiBar[2]-hiBar[1])*hiBar[2]+hiVal[2];
TL3 = TL_New(date31,time31,Value31,date32,time32,Value32);
}
else {
date32 = date[0];
time32 = stime[0];
Value32 = (hiVal[1]-hiVal[2])/(hiBar[2]-hiBar[1])*hiBar[2]+hiVal[2];
TL_SetEnd(TL3, date32,time32,Value32);
}
}
if trnd == upTr and loVal[2] > loVal[1] then
TL_SetColor(TL1,BLUE);
else if trnd == dnTr and hiVal[2] < hiVal[1] then
TL_SetColor(TL1,RED);
else
TL_SetColor(TL1,BLACK);
TL_SetSize(TL1,2);
TL_SetColor(TL2,RED);
TL_SetColor(TL3,BLUE);
2014-01-07
267
글번호 71153
답변완료
문의드립니다.
예전에 질문드린내용에 다한 답변입니다.
1번답변에서 설정수량을 알수 없다고 하셨는데.. 알수 있는 함수는 없습니까?
있으면 다계약으로도 1계약과 동일하게 신호나오게 변경은 안될까요?
변경가능하면 수식좀 바꿔주시면 감사하겠습니다.
그리고 print관련 질문에서 아래와 같은 답변을 주셨는데요.
실시간에서 해당 봉에서 시세가 들어올때마다 값이 적혀지게 되는데
해당 부분은 수식에서 따로 컨트롤이 되지 않습니다
한번나오게는 전혀 방법이 없는건지요?
----------------------------------------------------------------------------
안녕하세요
예스스탁입니다.
1.
해당식은 수량에 따라 차이가 발생할수 있습니다.
손익함수는 1계약 손익이 리턴되는 것은 아닙니다.
2계약으로 매수진입해서 1포인트 상승했을때 청산이 되면
계약수가 2이므로 2포인트 수익이 됩니다.
목표수익과 손실제한을 계약수에 맞게 배수로 지정해 주셔야 합니다.
해당 부분 수식에서 설정수량을 알수 없으므로
수동으로 지정해 주셔야 합니다.
스탑과 손실제한은 가격이므로 그대로 사용하시면 도비니다.
2.
예 맞습니다.
3
수식 맨 아래에 아래 내용 추가하시면 됩니다.
if BarsSinceExit(1) == 1 Then
Print("exit.txt","청산시간 %.f,청산가격 %.2f",ExitTime(1),ExitPrice(1));
수식에서 위와 같이 작성해 추가하시면
청산후 첫번째 봉일때 출력이 되는데
실시간에서 해당 봉에서 시세가 들어올때마다 값이 적혀지게 되는데
해당 부분은 수식에서 따로 컨트롤이 되지 않습니다
신호발생된 시간과 가격등은 시스템 트레이딩 리포트의
거래내역에 나오게 됩니다.
거래내역 위에서 마우스 우클릭하시면 엑셀로 보내기 기능이 있습니다.
4.
예 버전이 다릅니다.
예스트레이더는 4.0버전이고
우리트레이더와 리딩트레이더는 3.1버전으로 아직 업그레이드가 되지 않습니다.
텍스트,추세선등의 함수는 사용하실 수 없습니다.
수식안에서 버전체크가 되지 않습니다.
사용자분이 따로 구분해 사용하셔야 합니다.
새해 복 많이 받으세요
> 중복필명 님이 쓴 글입니다.
> 제목 : 수정 부탁드립니다.
> 아래 수식 보시고 수정 부탁드리겠습니다.
1. 설정의 비용/수량 부분의 거래수량을 조정하면 1계약일때와 다계약일때 신호가 다르게 나옵니다. 다계약일 경우도 1계약과 신호가 동일하게 나올수 있게 수정부탁드리고.. 이유를 알고 싶습니다.
2. 청산쪽 수식이 맞는지 점검부탁립니다.
3. 청산쪽에 있는 아래부분을 if문으로 바꿔서.. 청산이 되면
print문으로 xx.txt에 가격과 시간이 출력되게 수정 부탁드립니다.
ExitLong("선물매수상한청산",atlimit,int(bp*1.1/0.05+0.00001)*0.05);
ExitLong("선물매수하한청산",AtStop,BP-int(BP*0.1/0.05)*0.05);
ExitLong("목표수익1",AtLimit,EntryPrice+((목표수익)-(PLR)));
ExitLong("손실제한1",AtStop,EntryPrice+((손실제한)-(PLR)));
4. 질문입니다.
우리투자증권, 리딩투자증권은 예스트레이더 버젼이 다릅니까?
text_New 명령이 안되는것 같아서 질문드립니다.
다르다면 수식내에서 버젼체크해서 예스트레이더 4.0 이하에서는 실행이
안되게 하는 방법 있으면 예좀 들어주시면 감사하겠습니다.
새해 복 많이 받으세요..
아래.
----------------------------------------------------------------
input : 목표수익(2);
input : 수익확보(2),스탑(0.5);
input : 손실제한(-2);
var : PLR(0),XCommission(0),XSlippage(0),OpenPL(0),dayPL(0),count(0);
#당일누적손익계산 시작
XCommission = ((C*ExitCommission)/100)*CurrentContracts; #%설정
XSlippage = (ExitSlippage)*CurrentContracts; #Pt설정
PLR = 0;
count = 0;
for var1 = 1 to 20{
if sdate == EntryDate(var1) Then{
count = count+1;
PLR = PLR+PositionProfit(var1);
}
}
if MarketPosition() == 0 Then{
OpenPL = 0;
dayPL = PLR;
}
Else{
OpenPL = (PositionProfit-(XCommission+XSlippage));
dayPL = PLR+OpenPL;
}
var : cnt(0),sh1(0),sh2(0);
sh1 = 0;
sh2 = 0;
for cnt = 1 to 20 {
if ExitDate(cnt) == sdate and PositionProfit(cnt) > 0 Then
sh1 = sh1+1;
if ExitDate(cnt) == sdate and PositionProfit(cnt) < 0 Then
sh2 = sh2+1;
}
if dayPL > 손실제한 and dayPL < 목표수익 then {
if crossup(c,ma(c,60)) Then
buy("b");
if CrossDown(c,ma(c,60)) Then
exitlong("s");
}
if MarketPosition == 1 Then{
var11 = highest(H,BarsSinceEntry+1);#매수 진입이후 최고 수익
If var11 >= EntryPrice+수익확보 Then
ExitLong("수익확보1",AtStop,EntryPrice-스탑);
ExitLong("선물매수상한청산",atlimit,int(bp*1.1/0.05+0.00001)*0.05);
ExitLong("선물매수하한청산",AtStop,BP-int(BP*0.1/0.05)*0.05);
ExitLong("목표수익1",AtLimit,EntryPrice+((목표수익)-(PLR)));
ExitLong("손실제한1",AtStop,EntryPrice+((손실제한)-(PLR)));
}
if MarketPosition == -1 Then{
var12 = Lowest(L,BarsSinceEntry+1);#매도 진입이후 최고 수익
If var12 <= EntryPrice-수익확보 Then
ExitShort("d수익확보",AtStop,EntryPrice+스탑);
ExitShort("선물매도하한청산",atlimit,BP-int(BP*0.1/0.05)*0.05);
ExitShort("선물매도상한청산",AtStop,int(bp*1.1/0.05+0.00001)*0.05);
ExitShort("목표수익2",AtLimit,EntryPrice+(-(목표수익)+(PLR)));
ExitShort("손실제한2",AtStop,EntryPrice+(-(손실제한)+(PLR)));
}
SetStopEndofday;
2014-01-07
355
글번호 71147
답변완료
재질문 3번째 ㅡㅡ;;
벌써 3번째 질문을 올리네요.
제가 질문을 어렵게 하는건지 아니면 관리자님께서 제 질문의 요지를 잘 못이해하고
계신건지 둘중에 하나일거라 생각됩니다.
제 질문의 요지는 3분차트 콜과 풋 양옵션을 서로 겹치기한 상태에서 종가상 합을
2로 나눈값을 당일에 선으로 나타내는것인데 옵션의 합이라는것이 나누든 나누지 않든
양합이라는것이 장중에 계속 변동성이 생겨서 최고점도 찍을테고 최저점도 찍을겁니다.
첨부파일 그림을 보시면 이해가 가실거에요.
첨부파일 보시면 수식을 적용하여 장중 양합/2 의 최저값을 파란선으로 실시간으로 나타내는것인데
여기까지는 수식이 정상입니다. 벌써 몇번째 드리는 제 질문의 요지는 전일에 움직였던
양합나누기 2중 최저값을 당일에 수평직선으로 표현하는겁니다.
전일의 최저값이니 당연히 고정이 될테구요.
근데 제가 올린 질문에 대한 답변으로 올라온 관리자님의 수식은
콜풋 양옵션의 3분차트 마지막봉을 기준으로 차트에 선이 나타납니다.
전날의 양합 나누기 2 최저점이 아닌 종가상 합 나누기 2가 나타난다는거죠.
현재쓰고 있는 수식입니다.
var : Avgv(0,data1),Hest(0,data1),Lest(0,data1),dayO(0,data1),Hest1(0,data1),Lest1(0,data1);
var : Preday1(0,data1),Preday2(0,data1),Preday3(0,data1),Preday4(0,data1),Preday5(0,data1);
Avgv = (data1(c)+data2(c))/2;
if data1(date != date[1]) Then{
Hest = Avgv;
Lest = Avgv;
Hest1 = Avgv[1];
Lest1 = Avgv[1];
dayO = (data1(O)+data2(O))/2;
Preday1 = Avgv[1];
Preday2 = Preday1[1];
Preday3 = Preday2[1];
Preday4 = Preday3[1];
Preday5 = Preday4[1];
}
if Avgv > Hest Then
Hest = Avgv;
if Avgv < Lest Then
Lest = Avgv;
plot1(Avgv,"중간값");
plot2(Hest,"중간값 중 당일 최고값");
plot3(Lest,"중간값 중 당일 최저값");
plot4(Hest1,"중간값 중 전일 최고값");
plot5(Lest1,"중간값 중 전일 최저값");
plot6(DAyO,"당일시초가 합/2");
plot7(Preday1,"1일전 종가합/2");
plot8(Preday2,"2일전 종가합/2");
plot9(Preday3,"3일전 종가합/2");
plot10(Preday4,"4일전 종가합/2");
plot11(Preday5,"5일전 전일종가합/2");
2014-01-07
267
글번호 71146