답변완료
property erro 0
안녕하세요?
질의드립니다
1. 프라퍼티 에러0 가 발생합니다.
2. 수식에는 잔고가 있을시 진입이 안되게 되어있습니다만, 유첨 이미지처럼 계속 추가 진입이 되고 있습니다. 차트속성에서도 피라미딩은 허용안함으로 세팅해놨습니다.
문제가 무엇인지요??
var SK,BuyID,BuyNum,SellID,SellNum;
function Main_OnStart()
{
Main.MessageList("Start");
Main.SetTimer(99, 10000);//99번 타이머 10초 셋팅(동시호가 시간 체크 위해)
}
//차트에서 미완성 시호가 신호발생 하면
function Chart1_OnRiseIncompleteSignal(Signal)// 요거만 바꿈
{
SK = Signal.signalKind;
Main.MessageList("신호발생 : 신호종류", SK,"신호가격",Signal.price,"신호수량",Signal.count);
//매수신호 발생
if (SK == 1) // 메수 신호면이면
{
//종목잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0);
//종목잔고가 없으면
if (Account1.Balance.count == 0)
{
//매도3호가로 1계약 매수주문 ==>3호가 위로 매수할꺼야
BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0);//종목, 계약수, 3호가위로,지정가로
}
//잔고에 매도포지션이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)// 1은 매도 2는 매수야 ==> 매도보유하고 있으면 5초 딜레이야?
{
//1번 타이머 5초 셋팅(N초지연주문을 위해)
Main.SetTimer(1, 5000);
}
}
//매수청산신호 발생
if (SK == 2)// 매수청산신호면
{
//매수진입주문 번호로 미체결 객체 셋팅
Account1.SetUnfill(BuyNum);
//미체결이 잇으면 ==>청산신호가 나왔는데 이전에 주문 들어간게 있으면 취소하자
if (Account1.Unfill.count > 0)
{
//취소주문
Account1.OrderCancel(BuyNum);
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0);
//잔고에 매수포지션이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)// 매수포지션을 가지고 있으면,(1은 매도 2는 매수)
{
//전량 매수3호가로 매도주문 ==>3호가 아래로 매도
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0);
}
}
//매도진입신호발생
if (SK == 3) // 매도신호 바생하면
{
//신호수량
SP = Signal.count;//???????
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0);
//잔고가 없으면
if (Account1.Balance.count == 0)
{
//매수3호가로 1계약 매도주문 ==>3혹 아래로 매도
SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0);
}
//잔고에 매수포지션이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)// 매수 포지션이 있으면 5초 딜레이
{
//2번 타이머 5초 셋팅(N초지연주문을 위해)
Main.SetTimer(1, 5000);
}
}
//매도청산신호 발생
if (SK == 4) // ==>매도청산하자
{
//매도진입주문번호로 미체결 객체 셋팅
Account1.SetUnfill(SellNum);
//미체결이 잇으면
if (Account1.Unfill.count > 0)
{
//취소주문
Account1.OrderCancel(SellNum);
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0);
//잔고에 매도포지션이 있으면 청산
if (Account1.Balance.count > 0 && Account1.Balance.position == 1) //매도포지션이 있으면
{
//전량 매도3호가로 매수주문 ==>3호가 위로 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0);
}
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//1번 타이머가 동작하면
if (nEventID == 1) // 매수를 해야하는데 매도를 가지고 있었으면 1계약 청산 후 5초 딜레이후 매수 진입(증거금문제로 2계약 안됨)
{
//매도3호가로 1계약 매수주문
BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0);
//1번 타이머 종료
Main.KillTimer(1);
}
//2번 타이머가 동작하면 // 매도를 해야하는데 수도를 가지고 있었으면 1계약 청산 후 5초 딜레이후 매도 진입(증거금문제로 2계약 안됨)
if (nEventID == 2)
{
//매수3호가로 1계약 매도주문
SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0);
//2번 타이머 종료
Main.KillTimer(2);
}
//99번 타이머 동작하고 15시36분 이후이면 ==> 동시호가에 미완성신호 발생시 들어갈 것인가 말 것인가 문제
if (nEventID == 99 && HHMMSS >= 153600)
{
//99q번 타이머 종료
Main.KillTimer(99);
//마지막봉 미완성 신호정보 셋팅
var Incom = Chart1.GetIncompleteSignal();
//매수진입 미완성 신호가 발생해 있다면
if (Incom[0].signalKind == 1)
{
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0);
//잔고가 없으면
if (Account1.Balance.count == 0)
{
//매도3호가로 1계약 매수주문
BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0);
}
//잔고에 매도포지션이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
//직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅
Account1.SetUnfill(SellNum);
//미체결이 잇으면
if (Account1.Unfill.count > 0)
{
//취소주문
Account1.OrderCancel(SellNum);
}
//청산
//잔고전량 매수3호가로 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0);
//진입주문 위해 1번 타이머 5초 셋팅(N초지연주문을 위해)
Main.SetTimer(1, 5000);
}
}
//매수청산 미완성 신호가 발생해 있다면
if (Incom[0].signalKind == 2)
{
//직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅
Account1.SetUnfill(BuyNum);
//미체결이 잇으면
if (Account1.Unfill.count > 0)
{
//취소주문
Account1.OrderCancel(BuyNum);
}
//청산
//잔고전량 매수3호가로 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0);
}
//매도진입 미완성 신호가 발생해 있다면
if (Incom[0].signalKind == 3)
{
//잔고가 없으면
if (Account1.Balance.count == 0)
{
//매수3호가로 1계약 매도주문
SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0);
}
//잔고에 매수포지션이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
//직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅
Account1.SetUnfill(BuyNum);
//미체결이 잇으면
if (Account1.Unfill.count > 0)
{
//취소주문
Account1.OrderCancel(BuyNum);
}
//청산
//잔고전량 매수3호가로 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0);
//진입주문 위해 2번 타이머 5초 셋팅(N초지연주문을 위해)
Main.SetTimer(1, 5000);
}
}
//매도청산 미완성 신호가 발생해 있다면
if (Incom[0].signalKind == 2)
{
//직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅
Account1.SetUnfill(SellNum);
//미체결이 잇으면
if (Account1.Unfill.count > 0)
{
//취소주문
Account1.OrderCancel(SellNum);
}
//청산
//잔고전량 매수3호가로 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0);
}
}
}
//각 진입주문 후 주문번호 저장
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BuyID)
{
BuyNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SellID)
{
SellNum = OrderResponse.orderNum;
2020-01-31
3636
글번호 225151
답변완료
코드가 잘 실행이 안되는데, 수정 및 주석추가 부탁드려요
Re : 코스피200 선물 장종료 5분전 전량 청산
안녕하세요
예스스탁입니다.
문의하신 내용은 수식의 내용은 동일합니다.
특정시간을 선물에 대해 청산하는 내용이므로
아래식에서 시간(xtime)만 별도로 지정해 사용하시면 됩니다.
스크립트 객체설정
계좌객체 추가 --> 속성에서 객체명은 Account1, 주문계좌지정
종목객체 추가 --> 속성에서 객체명은 MarketData1, 연결선물로 지정
var xtime = 153000;//동시호가는 154000
function Main_OnStart()
{
Main.SetTimer(1, 5000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= xtime)
{
Main.KillTimer(1);
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
}
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
즐거운 하루되세요
> 퀀트드래곤 님이 쓴 글입니다.
> 제목 : 코스피200 선물 장종료 5분전 전량 청산
> 코스피200 선물 장종료 5분전 전량 청산 로직 부탁드립니다.
혹시몰라서 두개로 나눠서 부탁드릴게요
1) 코스피 장종료 5분전 시장가로 전량 청산
2) 코스피 장종료 후 동시호가 때 시장가로 전량 청산
2020-01-17
3514
글번호 225147