답변완료
체결내역 데이터베이스 저장 관련 문의
질문 있습니다.
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
3557
글번호 225005
답변완료
ChartEx 정보 property 요청
function Main_OnStart()
{
var chartItem = new ReqChartItem("00000000", 30, CHART_PERIOD_SECOND, 5000,
CHART_REQCOUNT_BAR, false, false);
Main.ReqChartEx(chartItem, sysInfo);
}
function Main_OnRcvChartEx(ChartEx)
{
// 여기서 ChartEx 의 정보를 얻고 싶다.
}
이런 수식에서... ChartEx의 주기 등을 얻을 수 있었으면 좋겠습니다.
지금은 ChartEx.GetCode(1) 외에는 정보를 얻을 수 있는 게 없습니다.
2019-09-17
3529
글번호 224999
답변완료
ReqChartItem 초 설정 제약 완화 요청
var sysInfo = new SystemInfo(systemName,YL_TYPE_NORMAL);
var chartItem30 = new ReqChartItem("00000000", 30, CHART_PERIOD_SECOND, 5000, CHART_REQCOUNT_BAR, false, false);
var chartItem90 = new ReqChartItem("00000000", 90, CHART_PERIOD_SECOND, 5000, CHART_REQCOUNT_BAR, false, false);
Main.ReqChartEx(chartItem30, sysInfo);
Main.ReqChartEx(chartItem90, sysInfo);
위에 30초 차트는 정상 생성되고, 아시겠지만 아래 90초 차트는 60초가 넘는다고 에러 메시지가 뜹니다.
그냥 예스트레이더에서의 차트 설정과 마찬가지로, 60초가 넘어도 허용해주시면 안되나요?
2019-09-17
3610
글번호 224998