예스스탁
예스스탁 답변
2014-12-05 18:56:29
안녕하세요
예스스탁입니다.
아래 내용 참고하시기 바랍니다.
58초 이후 미완성신호상태 체크해서 주문발생하게 작성된 식입니다.
1.
주의하실 부분은 아래와 같이 리버스 신호일 경우
if 매수조건 then
buy();
if 매도조건 then
sell();
완성신호는 Signal.signalKind가 4,1(매도청산/매수) 와 2,3(매수청산/매도)이 순서대로 같이 이벤트 발생하지만
미완성 신호는 단순 if문 하단의 신호 종류를 리턴하므로 3만 리턴하게 됩니다.
그러므로 차트상에서 미완성 신호 발생할때 포지션 상태 확인 해서
무포지션 상태에서 발생한 buy나 sell일경우와 반대포지션에서 발생하는 buy와 sell을 구분하셔야 합니다.
2.
수식중 게시판 금칙어가 있어
영문 업데이트가 Up*date 로 중간에 *이 추가가 되어 있습니다.
해당 * 제거하시기 바랍니다.
3.
스크립트 객체 설정
계좌객체 추가 --> 객체명 Account1
차트객체 추가 --> 객체명 Chart1
종목객체 추가 --> 객체명 MarketData1, 차트와 같은종목으로 설정
##수식에서 시간은 종목객체에 수신되는 데이터의 시간으로 판단합니다.
var cond = false;
var tempSig = 0;
//차트에 새로운 봉시작
function Chart1_OnBarAppended(nData)
{
//false로 초기화(58초이후 한번만 동작하기 위한 변수)
cond = false;
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거
{
Main.MessageList(MarketData1.time,MarketData1.time%1000000);
//cond가 false이고 58초 이후이면
if (cond == false && MarketData1.time%1000000 >= 580000)
{
//cond는 true로 변경
cond = true;
//미완성 신호 객체 저장
var Isignal = Chart1.GetIncompleteSignal();
//신호가 있으면
//미완성 신호종류 저장할 변수는 0으로 초기화
tempSig = 0;
if (Isignal != null)
{
//출력
Main.MessageList(MarketData1.time,MarketData1.time%1000000,"미완성신호0",Isignal[0]);
Main.MessageList(MarketData1.time,MarketData1.time%1000000,"미완성신호1",Isignal[1]);
//[0]번방의 미완성 신호종류 저장
tempSig = Isignal[0].signalKind;
//차트가 무포지션 미완성 Buy이면
if (Chart1.GetOpenContracts() == 0 && tempSig == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
}
//차트가 매도포지션이고 미완성 Buy이면 (매도청산도 같이 해야 하므로 수량2배)
if (Chart1.GetOpenContracts() < 0 && tempSig == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 2, MarketData1.Ask(3), 0);
}
//차트가 매수포지션상태이고 미완성exitlong이면
if (Chart1.GetOpenContracts() == 1 && tempSig == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
}
//차트가 무포지션이고 완성 Sell이면
if (Chart1.GetOpenContracts() >= 0 && tempSig == 3)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
}
//차트가 매수포지션이고 미완성 Sell이면(매수청산도 같이 해야 하므로 수량2배)
if (Chart1.GetOpenContracts() >= 0 && tempSig == 3)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 2, MarketData1.Bid(3), 0);
}
//차트가 매도포지션 상태이고 미완성exitshort이면
if (Chart1.GetOpenContracts() < 0 && tempSig == 4)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
}
//미완성 객체 사용후에는 다음사용을 위해 내용 삭제
Main.RemoveIncompleteSignal(Isignal[0]);
}
}
}
즐거운 하루되세요
> 뚱띵 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다.
> 선물 1분봉을 통한 매매로 전략실행차트의 신호를 받아서 스팟으로 주문을 내는 것입니다.
슬리피지를 줄이기 위해서 예비신호가 나온 상태에서 시간이 58초를 넘어가는 상황이면 바로
스팟을 통해 주문을 내는 식을 구현하고 싶습니다.
만일 나중에 1분에 진짜신호가 발생하지 않으면 바로 청산하구요(이거는 구현하기 어려우면 하지 않아도 됩니다.)
이것외에도 아예 전략실행차트의 봉의 완성시간을 1초~2초정도 당기는 방법은 없나요.
과거 이런 서비스를 제공하는 회사들이 있었던거 같은데.
예쓰는 분단위로 봉의 완성을 당기는 것밖에 없어서.
부탁드립니다.