9시 10분에 차트 A 에서 매수 신호가 발생하면
스팟에서 1분 간격으로 60계약을 1개씩 매수하게 하고,
9시 30분에 차트 B 에서 매도 신호가 발생하면
A는 매수 B는 매도이니 A에서 발생한 30계약을 1분 간격으로 매도하게 하고 싶습니다.
차트 A에서 매수 발생한 이후 차트 B에서 매도가 발생할 수도 있고,
발생하지 않을 수도 있기 때문에 B에서 매도가 발생하지 않으면 60계약을 계속
매수해야하고 B에서 매도가 발생하면 매수 주문을 멈추고
합산해서 지금까지 들어간 매수 계약을 청산해야 하는 것을 표현하는 것이 어렵습니다.
감사합니다.
답변 1
예스스탁
예스스탁 답변
2019-09-05 16:34:41
안녕하세요
예스스탁입니다.
스팟수식의 답변은 식작성의 가이드입니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
스크립트객체설정
차트객체추가 --> 속성에서 객체명은 Chart1, 매수신호 발생하는 차트와 아이디 연결
차트객체추가 --> 속성에서 객체명은 Chart2, 매도신호 발생하는 차트와 아이디 연결
종목객체추가 --> 속성에서 객체명은 MarketData1, 매수하는 종목으로 설정
계좌객체추가 --> 속성에서 객체명은 Account1, 주문낼 계좌번호 지정
var Bcnt,Scnt,BuyCount;
//차트1에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
//Buy신호이면
if (Signal.signalKind == 1)
{
//1계약 매도3호가로 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
//매수카운트 초기값은 1
Bcnt = 1;
//60초 타이머 설정(타이머아이디는 1)
Main.SetTimer(1, 60000);
}
}
//차트2에서 신호발생
function Chart2_OnRiseSignal(Signal)
{
//Sell신호이면(exitlong신호이면 2)
if (Signal.signalKind == 3)
{
//1번 타이머 종료
Main.KillTimer(1);
//미체결주문 갯수
num = Account1.GetTheNumberOfUnfills()
//전체 미체결중에
for (var i = 0; i < num; i++)
{
//MarketData1.code코드이고 매수포지션인 미체결주문은 모두 취소
Account1.SetUnfill(i);
if (Account1.Unfill.code == Main.GetOrderCode(MarketData1.code) && Account1.Unfill.position == 2)
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
//MarketData1.code 종목 잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 매수포지션이면
if (Account1.Balance.position == 2)
{
//잔고갯수 저장
BuyCount = Account1.Balance.count;
}
else //매수포지션이 아니면 0
BuyCount = 0;
//잔고가 1개 이상이면
if (BuyCount >= 1)
{
//매수3호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
//매도카운트 초기값은 1
Scnt = 1;
//잔고갯수가 2개 이상이면
if (BuyCount >= 2)
{
//60초 타이머 설정(타이머아이디는 2)
Main.SetTimer(2, 60000);
}
}
}
}
//타이머동작
function Main_OnTimer(nEventID)
{
//1번 타이머 동작
if (nEventID == 1)
{
//매수카운트 1씩 증가
Bcnt = Bcnt+1;
//1계약 매도3호가로 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(3), 0);
//카운트가 60이 되면
if (Bcnt == 60)
{
//1번 타이머 종료
Main.KillTimer(1);
}
}
if (nEventID == 2)
{
//매도카운트 1씩 증가
Scnt = Scnt+1;
//매수3호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(3), 0);
//매도카운트가 잔고수량과 같게되면
if (Scnt == BuyCount)
{
//2번 타이머 종료
Main.KillTimer(2)
}
}
}
즐거운 하루되세요
> spotyt 님이 쓴 글입니다.
> 제목 : 수식 작성 부탁드립니다.
> 9시 10분에 차트 A 에서 매수 신호가 발생하면
스팟에서 1분 간격으로 60계약을 1개씩 매수하게 하고,
9시 30분에 차트 B 에서 매도 신호가 발생하면
A는 매수 B는 매도이니 A에서 발생한 30계약을 1분 간격으로 매도하게 하고 싶습니다.
차트 A에서 매수 발생한 이후 차트 B에서 매도가 발생할 수도 있고,
발생하지 않을 수도 있기 때문에 B에서 매도가 발생하지 않으면 60계약을 계속
매수해야하고 B에서 매도가 발생하면 매수 주문을 멈추고
합산해서 지금까지 들어간 매수 계약을 청산해야 하는 것을 표현하는 것이 어렵습니다.
감사합니다.