BLOG main image
ddd (50)
CUDA programming (0)
알고리즘 트레이딩 (5)
Cherry Picker 개발 (23)
TSimulator 개발(종료) (11)
IT 노트 (1)
잡동사니 (2)
사진 (4)
일기 (4)
이력서 (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2018. 1. 10. 09:44

2014년 4월부터 제도권에서 트레이딩을 한지 5년이 다돼간다. 최근에는 벗어났지만 그 동안 박스권에 갇혀있던 어려운 시장에서도 마이너스 분기실적 없이 잘 견뎌냈다.


현재 사용중인 CherryPicker 는 최초에 개발했던 방향과는 많이 달라졌다(좋은쪽으로). 역시 첫 설계에서 생각했던거와 사용하면서 필요해지는 부분의 차이는 작지 않았다. 아마 이런 툴개발 경험이 없어서인거 같다. 이제는 나뿐만이 아닌 회사 동료분들의 전략 자동화에도 협조하고 있고 그 분들의 요구사항을 반영하면서 기능이 더욱 늘어났다. 특히 수동개입쪽 기능이 많이 추가됐다. 기존의 나는 수동개입은 불허하는 입장이지만 특수한 상황에서는 필요할것 같아 적극 반영을 했다.


사실 트레이딩툴 기본기능은 3년전에 거의 완성됐고 그 이후부터 최근까지는 거의 백테스트에 올인했다고 봐도 좋다. 그 중 분석하기 편하게 GUI 툴 개발과 병렬화에 집중했다. 그래서 테스트 결과를 비쥬얼하게 보여주는 Efreet 가 탄생했고, Efreet 는 결과 분석외에도 테스트 스크립트 기능도 있어서 테스트 설정 및 스케줄이 기록된 스크립트 파일을 읽어서 전략의 백테스트를 진행한다. Efreet 의 백테스트는 복수의 CPU 에 테스트 분량을 분산해서 병렬로 진행하는 기능도 있다. CPU 개수에 따라 테스트에 걸리는 시간이 대폭 줄어든다. 마지막으로 Efreet 의 중요한 기능은 백테스트에서 도출된 경우의수에서 가장 이상적인 경우의수 및 그것들의 조합을 추출하는것이다.. 이 작업 또한 백테스트만큼의 오랜 시간이 소요되는데 역시 CPU 병렬처리를 이용해서 그 시간을 단축시킬 수 있다.


CPU 병렬화는 시뮬레이션의 시간을 단축시켜준다. 위 문단에서 설명한것처럼 CPU개수분의 1의 수준으로 단축된다. 그래도 4코어 CPU 로 많으면 1주일이상의 시간이 소요되는 테스트를 3, 4일로 줄여줄 뿐이다. 물론 이것만으로도 엄청나지만 그래도 목이 마른 법. 며칠이 아닌 1,2 시간 내로 끝내고 싶었다. 언젠가는 계획하고 있지만 당장은 20코어 4프로레서보드 같은 서버를 장만할 수도 없다. 가격도 가격이거니와 최근에 터진 인텔 CPU 보안패치문제 때문에라도 지금은 별 계획이 없다. 그래서 주목하게 된것이 GPU 다.


CPU 보다 훨씬 많은 작은 코어들을 가지고 있는 GPU 의 병렬연산은 알파고의 등장하면서 주목받기 시작했다고 봐도 과언이 아니다. 그래서 나는 약 2년 전부터 이전 증권사에서 연을 맺게 된 분과 CUDA(NVIDIA 에서 개발한 GPU 병렬연산을 쉽게 해주는 언어시스템) 스터디를 시작했다.(현재는 CUDA 스터디를 어느정도 마치고 딥러닝 스터디로 전환) 이 CUDA 가 얼마나 Efreet 의 시뮬레이션 성능을 높혀줄지는 모르겠지만 알파고에서 대량으로 GPU가 운용되는것을 보면 가능성이 있어보인다. 그래서 당분간은 CUDA 프로그래밍에 집중해보려고 한다. 카테고리를 추가해서 관리하고자 한다.


추가로 예전에 올렸다가 지운 CherryPicker 엔진을 사용한 Gaia 의 스냅샷과 Efreet 의 백테스트 결과 분석화면을 올려본다.




Gaia(트레이딩툴) 운용화면






Efreet 백테스트 결과 분석화면(개인적인 부분은 책으로 가림)



2016. 3. 29. 07:03

무언가가 썩은 냄새는 왜 고약하게 느껴질까.

원래 고약한건지 내가 고약하게 느끼는건지. 인간이 진화함에 있어 썩은것은 몸에 나쁘니까 고약하게 느껴지게 변한것이 아닐까.

똥파리를 생각해보면 가정한것이 이해가 된다. 똥차리에게는 썩은 것들이 생존에 필요하니 그들에게는 썩은냄새가 고소하고 맛있게 느껴지겠지?

원래 그런것은 없다. 모든것들은 자기를 중심으로 그것의 좋고 나쁨이 결정될 뿐.

'일기' 카테고리의 다른 글

꿈을 향한 설국열차  (0) 2013.09.24
새로운 소식  (0) 2012.03.02
뻔한 시작  (0) 2012.02.10
2016. 3. 10. 11:10

작은 프로젝트에서는 큰 의미가 없지만 파일수가 많은 큰 프로젝트에서는 컴파일 시간이 지루하기만 하다.

내가 개발하고 있는 트레이딩툴 역시 파일수가 100개를 넘어가면서 컴파일 시간이 5분 이상 걸린다.

cpp 파일 하나하나를 obj 파일로 변경하는 것이므로 멀티코어 CPU 에서는 각각의 CPU 에 하나씩 파일을 할당해주는 방식으로 컴파일을 진행하면 코어수에 비례해서(이론적으로) 컴파일 속도가 빨라진다. 단 링크작업은 하나의 CPU 에서 수행하므로 이런 효과를 낼 수는 없다.


VS2005 sp1 과 VS2008 이상부터는 이런방식의 멀티코어 활용 컴파일을 지원한다.


내가 쓰고있는 VS2008 한글판을 기준으로는 몇 가지 간단한 설정으로 실현시킬 수 있다.


1. 프로젝트의 속성 -> 구성 속성 -> C/C++ -> 코드 생성 -> 최소 다시 빌드 기능 -> 아니오

2. 프로젝트의 속성 -> 구성 속성 -> C/C++ -> 미리 컴파일된 헤더 -> 미리 컴파일된 헤더 만들기/사용 -> 미리 컴파일된 헤더 사용

3. 프로젝트의 속성 -> 구성 속성 -> C/C++ -> 명령줄 -> 추가 옵션 -> '/MP' 추가


이렇게 설정 후 컴파일을 진행하면 현재 CPU 의 코어를 모두 활용한 컴파일이 가능하다.

잘 되는지 확인은 작업관리자의 프로세스에서 cl 프로세스가 코어수만큼 떠있는지 체크하면 된다.