스쿠버 동아리 신입생 환영회에 진호가 오라고 해서 애들 술 사주러 갔다.
재학생 떄 매년하던 신입생인척 하기를 또 했는데, 애들이 잘 속아주더라.
어느새 신입생이랑 10살 차이라서 이제 이짓도 그만해야 될 거 같다...
백테스팅 시, 시스템 또는 로직을 변경할 때마다 에러 / 차이가 발생한게 이상하다.
그래서 데이터 조회/저장에 Validation logic을 추가해 시스템 안정성을 재고하려 한다.
데이터 조회에 Validation 로직을 추가하고, 관련 함수를 호출할 때 Error handling을 통해 시스템을 안정적으로 구축하려 한다.
@staticmethod
def get_minute_ohlcv_data(code, time: datetime):
data_list = FiveMinuteOhlcvDAO().get_minute_ohlcv_data(code, time)
df = create_dataframe(data_list)
# New Logic
validate_time_df(df)
return df
Get Data 외에도 Validation 로직이 필요할 수도 있으니, 확장성을 염두해두고 util 패키지에 해당 내용을 추가한다.
def validate_transaction_df(df: pd.DataFrame):
if df.shape[0] != 30:
raise ValueError("Data size is not 30")
sorted_df = df.sort_values(by="trade_value", ascending=False)
if not df.equals(sorted_df):
raise ValueError("Data is not sorted by trade_value")
def validate_time_df(df: pd.DataFrame):
if not df["timestamp"].is_monotonic_increasing:
raise ValueError("Data is not sorted by timestamp")
if df["timestamp"].duplicated().any():
raise ValueError("Data contains duplicate timestamps")
이제 백테스팅에서 데이터를 조회하는 지점에서 에러가 발생하면 적절하게 handling을 해준다.
빵꾸가 발생하는 지점을 눈으로 훑고 적용하고, 에러가 발생하는 지점은 계속 백테스팅을 반복해 예외 처리를 해준다.
if문으로 땜빵질했던 코드를 try except문을 활용해 처리해준다.
앞으로 예외 처리 / 유지보수가 쉬워질 거 같아서 푸근하다.
지금까지 했던 백테스팅은 잘못된 데이터로 수익률 뻥튀기를 하고 이걸 보고 좋아했었다.
결국 깔끔하게 정리된 데이터로 다시 했던 것을 반복해야 하지만, 이미 해봤던 것인게 귀찮은게 대수인가.
허상이었음을 인정하고 다시 도전한다.
728x90
'Quant' 카테고리의 다른 글
퀀트 전략 업데이트 (2) : chatGPT DeepResearch (0) | 2025.03.19 |
---|---|
퀀트 전략 업데이트 (1) (0) | 2025.03.17 |
시스템 안정화 (1) (0) | 2025.03.15 |
Sorting과 성능 최적화 (2) (0) | 2025.03.13 |
Sorting과 성능 최적화 (0) | 2025.03.09 |