새해 복 많이 받으세요, spot 주식선물 오류에 대한 문의입니다.
아래의 함수로 손절값에 도달한 경우 주식선물을 매도청산(매수)하던 중에 계좌객체 A2.Balance.count의 값이 실제 매도 수량과 다른 값으로 나와 매수가 무한 반복 되었습니다.
스팟을 중단하고 재시작하니 A2.Balance.count가 제대로 된 값을 보여주는것을 Messagelog로 확인했습니다.
오류에 관련된 두가지 문의사항(요청) 드립니다.
1. 주식선물 매매시 계좌객체 Balance.count의 오류 가능성 확인 요청(드물게 발생함)
2. 주식 선물의 작은 거래량에 따른 미체결이 항시 발생함 이에 체결잔량을 확인하여 모두 처리하려는 목적에 부합하는 방법으로 아래 함수 SellOrder에 Balance.count 오류발생시 무한매수 방지를 위한 방어 코드를 함수에 추가.
1번을 100%보장한다면 요청2는 필요없겠지요 ^^
함수첨부드립니다.
=================================================================================
function SellOrder(종목명,목표가,손절가)
{
// 계좌확인을 매도갯수로 확인하게 설정.
A2.SetBalanceItem(종목명.code, 1);
// 손절
if (A2.Balance.count >0)
{
if ( 현재가>=손절가 && A2.Balance.count >0 )
{
IDB = Main.OrderBuy(A2.number, 종목명.code ,A2.Balance.count,종목명.Ask(1), 0);
Main.MessageLog("손절종목명= "+종목명.code+"손절가="+손절가+";"+A2.Balance.count+"주");
}
// 목표가 청산
if ( 현재가<=목표가 && A2.Balance.count >0 )
{
IDB = Main.OrderBuy(A2.number, 종목명.code ,A2.Balance.count,종목명.Ask(1),0);
}
}
답변 1
꼭 수정해야할 내용같은데 아직 검토되지 않았나요?
직접 확인해보니 원인은 아래로 보입니다.
A2.SetBalanceItem(종목명.code, 1);
Main.MessageLog(종목명.name+"SellYes= "+SellYes +"매도 A2.Balance.count="+A2.Balance.count);
A2.SetBalanceItem(종목명.code, 2);
Main.MessageLog(종목명.name+"SellYes= "+SellYes +"매수 A2.Balance.count="+A2.Balance.count);
위의 코드로 확인해보면 매수량과 매도량이 같습니다. 실계좌에는 매도 1계약인데 매수 매도 모두 1계약으로 나와 인버스가 무한 반복된것으로 보입니다.
수정부탁드립니다.
> 지현아빠 님이 쓴 글입니다.
> 제목 : spot 주식선물 매매 오류(Balance.count)에 대한 문의
> 새해 복 많이 받으세요, spot 주식선물 오류에 대한 문의입니다.
아래의 함수로 손절값에 도달한 경우 주식선물을 매도청산(매수)하던 중에 계좌객체 A2.Balance.count의 값이 실제 매도 수량과 다른 값으로 나와 매수가 무한 반복 되었습니다.
스팟을 중단하고 재시작하니 A2.Balance.count가 제대로 된 값을 보여주는것을 Messagelog로 확인했습니다.
오류에 관련된 두가지 문의사항(요청) 드립니다.
1. 주식선물 매매시 계좌객체 Balance.count의 오류 가능성 확인 요청(드물게 발생함)
2. 주식 선물의 작은 거래량에 따른 미체결이 항시 발생함 이에 체결잔량을 확인하여 모두 처리하려는 목적에 부합하는 방법으로 아래 함수 SellOrder에 Balance.count 오류발생시 무한매수 방지를 위한 방어 코드를 함수에 추가.
1번을 100%보장한다면 요청2는 필요없겠지요 ^^
함수첨부드립니다.
=================================================================================
function SellOrder(종목명,목표가,손절가)
{
// 계좌확인을 매도갯수로 확인하게 설정.
A2.SetBalanceItem(종목명.code, 1);
// 손절
if (A2.Balance.count >0)
{
if ( 현재가>=손절가 && A2.Balance.count >0 )
{
IDB = Main.OrderBuy(A2.number, 종목명.code ,A2.Balance.count,종목명.Ask(1), 0);
Main.MessageLog("손절종목명= "+종목명.code+"손절가="+손절가+";"+A2.Balance.count+"주");
}
// 목표가 청산
if ( 현재가<=목표가 && A2.Balance.count >0 )
{
IDB = Main.OrderBuy(A2.number, 종목명.code ,A2.Balance.count,종목명.Ask(1),0);
}
}