커뮤니티
예스스팟수식 문의
2013-05-03 11:12:27
179
글번호 62753
아래와 같이 예스스팟 샘플을 가져다가 예스트레이더에서 전략을 구성한 챠트를
미완성 신호에서만 진입하도록 하고 싶습니다
챠트에 지표 및 전략이 모두 구현이 되어 있습니다
그래서 챠트 1만 가져다가 미완성 신호에 주문이 나오도록 구성하고 싶습니다
1. 아래의 수식을 수정 부탁드립니다
2. 그리고 스크립트 객체에 메인, 종목, 계좌, 챠트 이렇게 삽입을 하고 시험가동을 하였으나.실행이 되지 않는거 같습니다
미완성 진입신호가 나오는 챠트는 어디서 볼수 있나요?
- 아래-
//차트객체명 Chart1 --> 속성에서 차트아이디 연결 했습니다
//계좌객체명 Account1 --> 속성에서 계좌선택 연결했습니다
//09시 01분이후에 미완성신호가 발생하면 주문발생합니다.
//단 4분이후 미완성신호가 변경이 발생하면 로직대로 신호가 발생하지 않음에 유의하셔야합니다.
//즉 4분이후 미완성 신호를 확인하고 주문이 시장가로 나갔는데 그 이후 신호가 없어지거나 변경될수 있음
//매수진입미완성신호 --> 매수주문
//매도진입미완성신호 --> 매도주문
//매수청산미완성신호 --> 매도주문
//매도청산미완성신호 --> 매수주문
//수량은 1로 설정이 되어 있고 시장가로 작성되어 있습니다.
//수량과 주문가격은 따로 조절하셔야 합니다.
var cnt;
function Main_OnStart()
{
cnt = 0;
}
function Chart1_OnRiseIncompleteSignal(IncompleteSignal)
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//타이머 아이디가 1이고 09시01분 00초 이후이면
if (HHMMDD >= 090100 && cnt == 0)
{
if (IncompleteSignal.signalKind == 1)
{
Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
if (IncompleteSignal.signalKind == 2)
{
Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
if (IncompleteSignal.signalKind == 3)
{
Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
if (IncompleteSignal.signalKind == 4)
{
Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
}
}
답변 1
예스스탁 예스스탁 답변
2013-05-03 17:20:04
안녕하세요
예스스탁입니다.
미완성신호는 예스랭귀지로 작성한 시스템식안에
진입이나 청산함수의 신호타입이 onclose일때만 발생합니다.
진입이나 청산함수의 신호타입이 atmarket이나 atstop, atlimit이면 미완성신호가 발생하지 않습니다.
강제청산도 마찬가지로 조건만족즉시는 atstop과 atlimit 타입입니다.
그러므로 차트에서 atmarket이나 atlimit, atstop으로 신호가 발생하는 것은
완성신호 이벤트로 받아서 처리하셔야 하며 미완성 신호로는 처리가 되지 않습니다.
시스템식을 onclose타입으로 작성하셨을 때
미완성신호가 발생하고 해당 미완성신호에 대한 정보가 예스스팟으로 전달이 됩니다.
미완성 신호는 if조건이 만족하면 현재 포지션 상태를 감안하지 않고
단지 if조건이 만족한것을 속이 빈화살표로 보여주는 것이므로
실제 봉완성시에 발생한 신호와 미완성시에 발생한 주문간에 포지션 차이가
발생할수도 있습니다.
현재 매수포지션 상태에서도 매수 미완성신호가 발생하고
하나의 봉에서 동시에 매수와 매도가 발생하기도 합니다.
실제로 미완성 신호와 봉완선시의 포지션과 다를수 있으므로
미완성신호를 이용하실 때는 굉장한 주의가 필요합니다.
예스스팟은 저희쪽에서 완성된 수식을 작성해 드리기 어렵습니다.
기본틀정도만 작성해 드리므로 사용자분께서 차트에 적용된 시스템과
미완성신호의 발생원칙 감안하셔서식 작성해 가셔야 합니다.
아래식은 봉이 시가 수신후에 첫번째 발생하는 미완성신호대로 주문이 발생합니다.
var cnt;
function Main_OnStart()
{
cnt = 0;
}
//봉완성(시가수신) 카운트 0로 초기화
function Chart1_OnBarAppended(nData)
{
cnt = 0;
}
function Chart1_OnRiseIncompleteSignal(IncompleteSignal)
{
//Buy미완성신호 발생
if (IncompleteSignal.signalKind == 1)
{
//미완성신호 발생 카운트
cnt = cnt+1;
//현재봉에서 첫번째 발생한 미완성 신호이고 차트 포지션이 무포지션이나 매도포지션일때
if cnt == 1 && Chart1.GetOpenContracts() <= 0 then
Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
}
//Exitlong미완성신호 발생
if (IncompleteSignal.signalKind == 2)
{
//미완성신호 발생 카운트
cnt = cnt+1;
//현재봉에서 첫번째 발생한 미완성 신호이고 차트 포지션이 매수포지션일때
if cnt == 1 && Chart1.GetOpenContracts() >= 1 then
Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
}
//Sell미완성신호 발생
if (IncompleteSignal.signalKind == 3)
{
//미완성신호 발생 카운트
cnt = cnt+1;
//현재봉에서 첫번째 발생한 미완성 신호이고 차트 포지션이 무포지션이나 매수포지션일때
if cnt == 1 && Chart1.GetOpenContracts() >= 0 then
Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
}
//ExitShort미완성신호 발생
if (IncompleteSignal.signalKind == 4)
{
//미완성신호 발생 카운트
cnt = cnt+1;
//현재봉에서 첫번째 발생한 미완성 신호이고 차트 포지션이 매도포지션일때
if cnt == 1 && Chart1.GetOpenContracts() <= -1 then
Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
}
}
즐거운 하루되세요
> HI_cbk4610 님이 쓴 글입니다.
> 제목 : 예스스팟수식 문의
> 아래와 같이 예스스팟 샘플을 가져다가 예스트레이더에서 전략을 구성한 챠트를
미완성 신호에서만 진입하도록 하고 싶습니다
챠트에 지표 및 전략이 모두 구현이 되어 있습니다
그래서 챠트 1만 가져다가 미완성 신호에 주문이 나오도록 구성하고 싶습니다
1. 아래의 수식을 수정 부탁드립니다
2. 그리고 스크립트 객체에 메인, 종목, 계좌, 챠트 이렇게 삽입을 하고 시험가동을 하였으나.실행이 되지 않는거 같습니다
미완성 진입신호가 나오는 챠트는 어디서 볼수 있나요?
- 아래-
//차트객체명 Chart1 --> 속성에서 차트아이디 연결 했습니다
//계좌객체명 Account1 --> 속성에서 계좌선택 연결했습니다
//09시 01분이후에 미완성신호가 발생하면 주문발생합니다.
//단 4분이후 미완성신호가 변경이 발생하면 로직대로 신호가 발생하지 않음에 유의하셔야합니다.
//즉 4분이후 미완성 신호를 확인하고 주문이 시장가로 나갔는데 그 이후 신호가 없어지거나 변경될수 있음
//매수진입미완성신호 --> 매수주문
//매도진입미완성신호 --> 매도주문
//매수청산미완성신호 --> 매도주문
//매도청산미완성신호 --> 매수주문
//수량은 1로 설정이 되어 있고 시장가로 작성되어 있습니다.
//수량과 주문가격은 따로 조절하셔야 합니다.
var cnt;
function Main_OnStart()
{
cnt = 0;
}
function Chart1_OnRiseIncompleteSignal(IncompleteSignal)
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//타이머 아이디가 1이고 09시01분 00초 이후이면
if (HHMMDD >= 090100 && cnt == 0)
{
if (IncompleteSignal.signalKind == 1)
{
Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
if (IncompleteSignal.signalKind == 2)
{
Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
if (IncompleteSignal.signalKind == 3)
{
Account1.OrderSell(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
if (IncompleteSignal.signalKind == 4)
{
Account1.OrderBuy(Main.GetOrderCode(IncompleteSignal.code), 1, 0, 1);
cnt = 1;
}
}
}