답변완료
체결내역 데이터베이스 저장 관련 문의
질문 있습니다.
for 문을 돌아가면서 분할매수한 종목들을 데이터베이스에 저장하는 코드를 작성했는데, 각 분할 차수의 마지막 종목만 들어가네요?
for (var i = 1 ; i < buycount+1 ; i++)
{
ID = A1.OrderBuy(Main.GetOrderCode(ItemCode[i]), Math.floor(EachBal/ItemPrice[i]/InputVar1)- Math.floor((EachBal/ItemPrice[i])/InputVar1)%ItemUnits[i],Item[i].Bid(1),0);
Main.MessageLog("ID: "+ ID +" 분할 매수 종목 : "+ Item[i].code + " 매수가: " + Item[i].Bid(1));
}
위와 같이 for문 돌면서 주문을 내고요, ID 정상적으로 찍히는 것은 로그로 확인했습니다.
한 종목 주문이 들어갈 때마다 주문응답객체가 생성되고, 체결되면 체결통보객체가 생성되므로,
아래 코드처럼 처리하면 데이터베이스에 순차적으로 저장될 것이라고 생각했습니다.
function Main_OnOrderResponse(OrderResponse)
{
if(OrderResponse.orderID == ID && OrderResponse.orderKind == 1)
{
OrderNum_s.push(OrderResponse.orderNum); //매도주문 목록에 주문번호 저장
}
else if(OrderResponse.orderID == ID && OrderResponse.orderKind == 2)
{
OrderNum_b.push(OrderResponse.orderNum); //매수주문 목록에 주문번호 저장
}
}
function Main_OnNotifyFill(NotifyFill)
{
var checkOrderBuy = OrderNum_b.indexOf(NotifyFill.orderNum);
var checkOrderSell = OrderNum_s.indexOf(NotifyFill.orderNum);
if( checkOrderSell != -1 && NotifyFill.orderKind == 1) //주문번호가 매도주문목록에 있으면 진행
{
var stockcode = NotifyFill.code;
var sellcount = NotifyFill.fillCount;
var sellprice = NotifyFill.fillPrice;
var orderkind = 1;
var ordernumber = NotifyFill.orderNum;
D1.Inse rt("db_fill VALUES (" + y_date + ", '"+ stockcode +"', 'A" + stockcode +"', "+ sellcount +", "+ sellprice +", " + orderkind + ", "+ ordernumber +")");
}
else if(checkOrderBuy != -1 && NotifyFill.orderKind == 2) //주문번호가 매수주문목록에 있으면 진행
{
var stockcode = NotifyFill.code;
var buycount = NotifyFill.fillCount;
var buyprice = NotifyFill.fillPrice;
var orderkind = 2;
var ordernumber = NotifyFill.orderNum;
D1.Inse rt("db_fill VALUES (" + logdate + ", '"+ stockcode +"', 'A" + stockcode +"', "+ buycount +", "+ buyprice +", " + orderkind + ", "+ ordernumber +")");
}
}
실제로 돌려보니까 각 회차 마지막 종목만 기록이 됩니다.
질문 1) 마지막 회차만 기록되는 원인이 혹시 for 문을 다 돌고 나서야 Main_OnOrderResponse가 작동하기 때문인가요?
질문 2) 주문응답객체와 체결통보객체는 새로운 주문/체결이 나올 때마다 기존의 것이 삭제되고 갱신되나요? 아니면 스팟 종료 시까지 축적되나요?
질문 3) 위의 경우처럼 for 문을 돌면서 주문이 들어가는 경우, 구동되는 다른 스팟 전략과 구별해서 이 스팟에서 체결된 주문만 데이터베이스에 기록되게 하려면, 어떤 방법을 추천하시나요?
질문 4) 혹시 OrderReplace로 정정 주문이 들어간 경우에도 주문응답객체가 생성되나요?
2019-09-23
3566
글번호 225005