네트워크 설치, 마케팅, 게임 운영자, 스쿠버 강사, 개발자.
이것저것 힘 쓰는 알바도, 머리 쓰는 알바도 다 해봤지만 개발자가 제일 잘 맞는 일 같다.
어제 못 해결한 문제를 꿈에서 고민하다가 아침에 눈 뜨자마자 입력하고 해결하면 짜릿하다.
그래도 1인 개발을 하면서 나름 고충도 있고 장단점이 있다.
장점은 짐 되는 사람이 없고, 단점은 힘 되는 사람이 없다.
요즘 에러가 안 풀리고 벽에 막히니 진전이 없어 살짝 지친다...
어느 시점 이후로 백테스팅에 시간이 너무 소요된다. (3시간)
수익률/승률이 낮아진 것은 최적화, 로직 업데이트로 개선할 수 있지만
개선에 핵심이 되는 백테스팅에 시간이 너무 오래걸리면 곤란하다.
그래서 성능이 왜 떨어졌는지 분석하려고 삽집을 매우 매우 많이 했다.
코드 업데이트를 한 문제인지, DB를 업데이트 한 문제인지, 아니면 그냥 네트워크 문제인지...
걸리는 지점을 하나씩 고민해봤다..
1. system.buckets.* collection 실수로 제거 & 복구
- 분봉 / 일봉에서 불필요한 데이터를 제거하기 위해, collection list를 조회해서 제거하는 작업을 진행했다.
그 과정에서 system.buckets.* 컬렉션을 제거했는데, 이건 Time Series collection과 관련된 내부 컬렉션으로 삭제하면 시계열 컬렉션을 사용하는 의미가 없어진다.
- 무료 mognoDB를 사용 중이라 backup 기능이 없어, DB를 밀어버리고 컬렉션 재생성 / 데이터 추가를 진행했다.
2. jupyter lab을 powershell, cmd에서 실행하는 것에 차이가 없을까?
3. mongoDB를 atlas를 사용하는 것과 localhost를 사용하는 것에 차이가 있을까?
오.. 시도해볼만하다
테스트 하려면 로컬로 데이터 migration도 해야된다.
1) 툴 다운로드 : https://www.mongodb.com/try/download/shell
2) Window 환경이니 Path에 압축 파일 푼 bin 추가
3) 명령어 입력
복
mongodump --uri "mongodb+srv://***:***@*****/?authSource=admin" --archive=all_dbs.archive --gzip
붙
mongorestore --uri "mongodb://localhost:27017" --drop --archive=all_dbs.archive --gzip
4) 컬렉션 확인
세팅을 하고 돌릴 준비를 했는데, 이전에 돌렸던게 똑바로 나왔다... 뭐지...
동일한 코드. 동일한 환경인데, 다른 결과가 나온건 외부 모듈에 의한 영향 밖에 없다.
Working Days: 43
Total Trades: 109
Winning Trades: 58
Win Rate: 53.21%
Total Profit: 124.80%
Duration : 0:26:53.702191
그래도, localhost로 mongoUri를 변경하고 다시 돌려보니
시간대가 26분에서 3분대 줄었다. 근데 동일한 백테스팅인데 왜 결과가 다르지...
자세히 보니 매매 1건이 다른데, 이걸 좀 자세히 봐야겠다.
Working Days: 43
Total Trades: 109
Winning Trades: 57
Win Rate: 52.29%
Total Profit: 117.46%
Duration :0:03:01.642889
4. python함수에서 default 값을 정한 paramter를 제거하면 속도가 개선될까?
- 마이크로벤치마크를 해보니 큰 차이가 없다
5. dataframe에서 timestamp 기준으로 정렬 / index를 설정해야 하는가?
- 이미 정렬되어 있다면 sort_values() 함수는 O(log n) 시간 복잡도를 가지므로 sorting은 불필요하다
- 다만, timestamp 기준으로 index를 설정한다면 슬라이딩, 검색, 리샘플링 작업은 효율적일듯
- DAO에서 1회만 sort
- index 수정 시, 수정해야 할 함수 많음 (TODO)
6. jupyter lab 실행 시 CPU, RAM 할당에 따라 달라지지 않을까?
- 아니. jupyter lab은 단순히 웹 인터페이스고 코드는 커널 프로세스에서 이루어지므로 그런거 없다. gpt가 말을 이랬다 저랬다 한다.
7. 저장을 할 때 정렬을 해서 insert_many를 호출해야 하나?
- 아니. 인덱스가 설정되어 있다면, 정렬되어 있든 아니든 성능은 거의 동일하다.
8. 코드 문제가 있는 거 아닌가?
- 업데이트 하기 전 코드로 rollback 하고 백테스팅 돌렸는데도 소요 시간이 동일함.
- 코드 문제가 아니다. DB or 네트워크 문제로 사료됨
주말에도 평일에도 새벽2시까지 스트레스 받으며 삽질했는데 해결해서 짜릿하다.. 주화입마에 빠질 뻔 했다..
mognoDB 네트워크에 문제가 있었고, 이 때문에 백테스팅이 30분~3시간까지 차이가 난다.
TODO
1. 백테스팅 시에는 mognoUri를 localhost로 설정하기
2. 당일 데이터 수집 완료 시에는, Atlas -> localhost로 데이터 복제하는 스케줄러 등록하기
- 백테스팅 속도도 빨라지고. 백테스팅 UseCase에서 외부 의존성도 정리하고. 좋은 방법이다.
'Quant' 카테고리의 다른 글
시스템 안정화 (2) (0) | 2025.03.16 |
---|---|
시스템 안정화 (1) (0) | 2025.03.15 |
Sorting과 성능 최적화 (0) | 2025.03.09 |
돈 파쇄기 개발 성공 (0) | 2025.03.07 |
대체거래소 첫날과 매매 시간 최적화 (0) | 2025.03.05 |