단일 주식의 일간기준 백테스트 결과를 하루 단위로 업데이트하는 함수
backtest_update_stock_daily(
symbol: 'str',
order: 'int'=0,
date: 'DATE_IN'=None,
df_result: 'Optional[pd.DataFrame]'=None,
df_position: 'Optional[pd.DataFrame]'=None,
init_cash: 'int'=0,
trade_close: 'bool'=False,
allow_loan: 'bool'=False,
broker_fee_percent: 'float'=0.0,
exchange_fee_percent: 'float'=0.0,
trade_tax_percent: 'float'=0.0,
slippage_tick: 'int'=0,
use_notadj: 'bool'=False,
logger: 'Optional[logging.Logger]'=None,
logname: 'Optional[str]'=None,
logpath: 'Optional[str]'=None,
loglevel: 'Optional[int]'=None,
return_logger: 'Optional[bool]'=False,
) -> tuple[pd.DataFrame, pd.DataFrame] | tuple[pd.DataFrame, pd.DataFrame, logging.Logger]
symbol
(str
): 주식 종목단축코드 문자열
order
(int
): 해당 날짜, 해당 주식의 주문수량, 양수는 매수, 음수는 매도. 디폴트 0
date
(DATE_IN
): 주문이 발생한 날짜 문자열
df_result
(Optional[pd.DataFrame]
): 과거의 백테스트 매매결과 데이터프레임
df_position
(Optional[pd.DataFrame]
): 과거의 백테스트 포지션 데이터프레임
init_cash
(int
): 초기 보유현금. 디폴트 0원 만약 df_result 인수가 주어지면 init_cash 인수를 무시하고 df_result 인수로부터 계산
trade_close
(bool
): True면 매매정보를 무시하고 보유잔고 정리. 디폴트 False
allow_loan
(bool
): 융자가능여부 즉, 음수인 보유현금 허용 설정값. 디폴트 False
broker_fee_percent
(float
): 증권사 수수료(%). 디폴트 0
exchange_fee_percent
(float
): 유관기관 수수료(%). 디폴트 0
trade_tax_percent
(float
): 매도시 주식양도세(%). 디폴트 0
slippage_tick
(int
): 거래시 발생하는 슬리피지(slippage)틱(호가가격단위). 디폴트 0
df_order_date_col
(str
): 날짜 열의 이름. 디폴트 “DATE”
symbol_col
(str
): 종가 열의 이름. 디폴트 “SYMBOL”
order_col
(str
): 주문수량 열의 이름. 디폴트 “ORDER”
return_position
(bool
): 포지션 정보 데이터프레임을 반환할지의 여부. 디폴트 False
use_notadj
(bool
): 수정주가가 아닌 원주가 사용. 디폴트 False
logger
(Optional[logging.Logger]
): 로거 객체. None이면 자동생성
logname
(Optional[str]
): 로거 이름. 로거 객체 logger가 None이면 이 이름으로 생성
logpath
(Optional[str]
): 로그파일 경로 문자열. None이 아니면 로그파일 생성
loglevel
(Optional[int]
): 로그레벨. 디폴트 logging.INFO :param Optional[bool] return logger: True이면 로거 객체를 추가적으로 반환 :return tuple[pd.DataFrame,pd.DataFrame] | tuple[pd.DataFrame,pd.DataFrame,logging.Logger]: 백테스트 매매결과 및 포지션 데이터프레임
예제 코드
df_result, df_position = kq.backtest_update_stock_daily(
"005930", 1, "20230102")
[2023-01-02] <KQuantNotAllowLoan> 융자 금지 오류: 매매가능 현금 미보유
[2023-01-02] 종목: 005930, 주문전 보유수량: 0 주문수량: 1, 매매수량: 0, 주문후 보유수량: 0
0 |
2023-01-02 |
005930 |
55,500 |
1 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
df_result, df_position = kq.backtest_update_stock_daily(
"005930", -1, "20230111", df_result, df_position)
[2023-01-03] 종목: 005930, 주문전 보유수량: 0 주문수량: 0, 매매수량: 0, 주문후 보유수량: 0
[2023-01-04] 종목: 005930, 주문전 보유수량: 0 주문수량: 0, 매매수량: 0, 주문후 보유수량: 0
[2023-01-05] 종목: 005930, 주문전 보유수량: 0 주문수량: 0, 매매수량: 0, 주문후 보유수량: 0
[2023-01-06] 종목: 005930, 주문전 보유수량: 0 주문수량: 0, 매매수량: 0, 주문후 보유수량: 0
[2023-01-09] 종목: 005930, 주문전 보유수량: 0 주문수량: 0, 매매수량: 0, 주문후 보유수량: 0
[2023-01-10] 종목: 005930, 주문전 보유수량: 0 주문수량: 0, 매매수량: 0, 주문후 보유수량: 0
[2023-01-11] <KQuantNotAllowShort> 공매도 금지 오류: 매도 수량이 현재 보유수량보다 큼
[2023-01-11] 종목: 005930, 주문전 보유수량: 0 주문수량: -1, 매매수량: 0, 주문후 보유수량: 0
0 |
2023-01-02 |
005930 |
55,500 |
1 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2023-01-03 |
005930 |
55,400 |
0 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2 |
2023-01-04 |
005930 |
57,800 |
0 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
3 |
2023-01-05 |
005930 |
58,200 |
0 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
4 |
2023-01-06 |
005930 |
59,000 |
0 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
5 |
2023-01-09 |
005930 |
60,700 |
0 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
6 |
2023-01-10 |
005930 |
60,400 |
0 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
7 |
2023-01-11 |
005930 |
60,500 |
-1 |
0 |
0 |
0 |
0.0000 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |