예를 들어 -1.5% 내려갈때 보유수량의 20%를 지정가에 팔고, -3%로 내려갈때 시장가로 전량 판매시 아래의 미체결 함수를 돌려 해당코드의 미체결 내역이 있으면 취소하고, 전량 시장가로 판매하려 합니다.
급 하락시 시장가로 전체 매도하려는 겁니다.
이게 상황이 잘 나오지 않아 확인이 어렵고, 상황이 나오면 전량 판매가 안되면서 손해가 생겨서 곤란 하네요.
메뉴얼도 여러번 봤고, 제가보기엔 문제 없는데.. 가끔식 -5% 이하로 떨어져 있는 주식을 보게 됩니다.
도움 부탁드립니다.
// 미체결 주문 취소 함수
function cancelUnfilledOrders(stockCode) {
var numUnfilled = Account1.GetTheNumberOfUnfills();
for (var i = 0; i < numUnfilled; i++) {
Account1.SetUnfillIndex(i);
if (Account1.Unfill.code == stockCode) {
var cancelResult = Account1.OrderCancel(Account1.Unfill.orderNum);
// 취소 결과에 따른 메시지 출력
if (cancelResult > 0) {
Main.MessageList(getCurrentTime() + " 주문 취소 성공: 주문 번호 " + Account1.Unfill.orderNum);
} else if (cancelResult == 0) {
Main.MessageList(getCurrentTime() + " 주문 취소 실패(사용상 오류): 주문 번호 " + Account1.Unfill.orderNum);
} else if (cancelResult == -1) {
Main.MessageList(getCurrentTime() + " 주문 취소 불가(시간 제한): 주문 번호 " + Account1.Unfill.orderNum);
}
}
}
}
답변 1
예스스탁
예스스탁 답변
2023-12-08 15:30:13.0
안녕하세요
예스스탁입니다.
1
올리신 함수식만으로는 어느부분에 문제가 있는지 파악이 어렵습니다.
함수자체는 종목코드 지정해서 지정한 종목코드의 미체결이 있으면 취소하는 내용은 맞습니다.
2
다만 주문함수 앞에 변수(cancelResult)를 두어 주문함수 발동시 값을 저장하는데
함수자체에서 리턴되는 값은 단순히 해당 주문을 추적하기 위한 주문아이디입니다.
함수자체 사용에 에러만 없으면 동작을 하게 되며 취소주문은 통상 리턴되는 아이디가 음수입니다.
사용하시는 증권사에따라 다를수 있으므로 취소주문시 저장받는 변수를 메시지로 출력해서 확인하시기 바랍니다.
3
취소주문 포함해서 해당 주문이 실제 정상집행되었는지는 혹은 주문거부가 되었는지는
주문응답을 받아야 알 수 있는 부분입니다. 함수자체가 해당 내용을 리턴하지는 않습니다.
아래 주문응답 이벤트에서 리턴이 됩니다.
주문응답이 수신되면 주문응답객체에는 주문아이디를 리턴하는 프로퍼티(orderID)가 있습니다.
확인하고자 하는 주문의 아이디를 저장하는 변수와 orderID를 비교해서
같을 때 주문정상접수여부와 에러코드를 출력해 확인하시기 바랍니다.
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == cancelResult)
{
Main.MessageList(OrderResponse.isNormal,OrderResponse.error );
}
}
즐거운 하루되세요
> 올드송 님이 쓴 글입니다.
> 제목 : 미체결 함수를 만들었는데.. 이상하게 작동하지 않는것 같습니다.
> 예를 들어 -1.5% 내려갈때 보유수량의 20%를 지정가에 팔고, -3%로 내려갈때 시장가로 전량 판매시 아래의 미체결 함수를 돌려 해당코드의 미체결 내역이 있으면 취소하고, 전량 시장가로 판매하려 합니다.
급 하락시 시장가로 전체 매도하려는 겁니다.
이게 상황이 잘 나오지 않아 확인이 어렵고, 상황이 나오면 전량 판매가 안되면서 손해가 생겨서 곤란 하네요.
메뉴얼도 여러번 봤고, 제가보기엔 문제 없는데.. 가끔식 -5% 이하로 떨어져 있는 주식을 보게 됩니다.
도움 부탁드립니다.
// 미체결 주문 취소 함수
function cancelUnfilledOrders(stockCode) {
var numUnfilled = Account1.GetTheNumberOfUnfills();
for (var i = 0; i < numUnfilled; i++) {
Account1.SetUnfillIndex(i);
if (Account1.Unfill.code == stockCode) {
var cancelResult = Account1.OrderCancel(Account1.Unfill.orderNum);
// 취소 결과에 따른 메시지 출력
if (cancelResult > 0) {
Main.MessageList(getCurrentTime() + " 주문 취소 성공: 주문 번호 " + Account1.Unfill.orderNum);
} else if (cancelResult == 0) {
Main.MessageList(getCurrentTime() + " 주문 취소 실패(사용상 오류): 주문 번호 " + Account1.Unfill.orderNum);
} else if (cancelResult == -1) {
Main.MessageList(getCurrentTime() + " 주문 취소 불가(시간 제한): 주문 번호 " + Account1.Unfill.orderNum);
}
}
}
}