안녕하세요, 인텔리퀀트 덕분에 많은 도움을 얻고 있음에 먼저 감사드립니다.
과거 주가를 이용한 시뮬레이션을 하던 중 이상한 점이 있어 문의 드립니다.
아래 코드를 개별적으로 사용하여 과거 DATA를 로드 하는 경우에는 문제가 없으나,
filter 안에서 사용하는 경우, 일부 DATA가 제대로 loading 되지 않는 것 같습니다.
stock.loadPrevData(0, 15, 0);
(filter에서 먼저 과거 데이터를 로딩한 후 다시 개별적으로 로딩하는 경우에도 마찬가지로 일부 DATA가 누락되는 듯 합니다.)
제가 과거 데이터 로딩하는 방법에 문제가 있는지, 혹은 다른 고려사항이 필요한지 궁금합니다.
- TEST 결과중 일부...
[2017-02-01] month:0::8260
[2017-02-01] month:0::14300
[2017-02-01] month:21::0
[2017-02-01] month:21::0
[2017-02-01] month:42::7680
[2017-02-01] month:42::17400
[2017-02-01] month:63::7380
[2017-02-01] month:63::16200
- TEST용 코드..
var account1, basket1;
function initialize() {
IQEnvironment.stockTax = 0.013; // 세금 0.3 %, 슬리피지 1%
account1 = IQAccount.getDefaultAccount();
account1.accountName = "BASE";
}
var lastRebalMonth1 = -1;
var cutline = 6;
//필터에서 과거 데이터 로딩
function stockFilter(stock) {
stock.loadPrevData(0, 15, 0);
return true;
}
//함수로 로딩
function load(stock){
stock.loadPrevData(0,15,0);
}
function onDayClose(now) {
if ((now.getMonth() != lastRebalMonth1 && now.getDate() >= 1)) {
// 기본비중정의
var universe = IQStock.filter(stockFilter);
var st = IQStock.getStock('A000020');
// load(st);
// load(universe[3]);
for (var i = 0 ; i < 13 ; i++){
logger.debug("month:" + i*21 +"::"+st.getAdjClose(i*21));
logger.debug("month:" + i*21 +"::"+universe[3].getAdjClose(i*21));}
// account1.buy("A000020", 1);
lastRebalMonth1 = now.getMonth();
}
}