BLOG main image
ddd (50)
CUDA programming (0)
알고리즘 트레이딩 (5)
Cherry Picker 개발 (23)
Cherry Picker 소개 (3)
일정(종료) (7)
개발노트(종료) (13)
TSimulator 개발(종료) (11)
IT 노트 (1)
잡동사니 (2)
사진 (4)
일기 (4)
이력서 (0)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
'Cherry Picker 개발/Cherry Picker 소개'에 해당되는 글 3건
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 백테스트 결과 분석화면(개인적인 부분은 책으로 가림)



2013. 12. 16. 13:36

2011 년 3월..  TradeStation 이 아닌 자기만의 트레이딩툴을 만들고 싶었던 그 때 증권 API 의 존재를 우연히 알게되고, 하루라도 빨리 화면으로 뭔가 표현해보고 싶은 마음에 급조한 프로그램이 있다. 시스템 트레이딩툴은 아니고 종목, 주문 수량,  주문 가격, 주문 타입 등을 선택하고 거래할 수 있는 수동매매툴이다. 지금은 모든 프로젝트가 Cherry Picker 라는 이름으로 통합됐고 더 이상 GUI 는 채용하고 있지 않지만 그 당시에는 TTrader 라는 이름을 지어줬었고, 허접하지만 아래 그림과 같이 GUI 로 정보를 표현할 수 있게 했다. 이 프로그램은 증권 API 테스트를 위해 급조된것에다가 시스템 전략의 수행도 불가능하므로 당연히 현재는 사용하지 않는다. 그래도 묻혀지는 것이 아쉬워 수행되는 모습을 남겨보고자 한다.



( 참고로 현재 운용중인 트레이딩 툴인 Cherry Picker 는 GUI 가 아닌 CUI 방식이며, 로그파일에 현 상황들이 실시간으로 기록이 된다. GUI 가 있으면 화려해보이고 프로그램다운 모습이지만 데이터를 보여주기 위해 필요한 리소스(CPU 등 컴퓨터 자원)가 결코 적지 않으며 무엇보다 시스템 전략은 전적으로 미리 코딩된 로직에 의해서만 운용되어야 함으로 GUI 에 의한 조작이 애초에 필요가 없기 때문이다. 시스템 트레이딩에 특화된 헤지펀드(특히 르네상스 테크놀로지)는 트레이딩룸 자체가 없고 오직 서버실과 전략개발을 위한 회의실, 그리고 개인 사무공간만 존재한다고 어디선가 읽은 기억이 있다. ) -> 이상 GUI 를 안만들어도 된다는 변명 ;;;



사진 2 장과 시연 동영상 1 개를 만들어봤다. 수행 프로그램 이름은 Cherry Picker 로 되어있는데, 이는 어느 시점에서 진행중인 모든 프로젝트 이름을 Cherry Picker 로 통합했기 때문이다. 



서버 접속 직전의 모습 (화면을 클릭하면 크게 볼 수 있습니다.)



첫 번째 사진은 프로그램이 증권사 서버에 접속하기 이전인 프로그램 수행 직후의 모습이다. 왼쪽 검은 화면은 각종 정보메세지를 출력하는 부분이고, 오른쪽 화면이 프로그램을 조작하거나 가격, 계좌정보, 잔고 등을 표현하는 GUI 부분이다.



서버 접속 후의 프로그램 수행중인 모습 (화면을 클릭하면 크게 볼 수 있습니다.)



두 번째 사진은 증권사 서버 접속 직후의 모습이다. 직관적으로 각 버튼 또는 창들이 의미하는바를 쉽게 알 수 있다.



증권사 서버 접속 후 간단한 거래를 하는 모습 (플레이 버튼을 누르면 재생됩니다.)



위 영상은 서버에 접속을 하고 간단한 선물거래를 하는 영상이다. 시계를 보면 9시 직전에 서버에 접속을 했으며 9시00분00초가 되자 수신되기 시작한 실시간 데이터들이 화면에 보여지며, 매수 또는 매도거래가 행해지고 계좌 및 잔고상태를 확인하는 버튼을 누르면 해당 정보가 갱신됨을 알 수 있다. 보다시피 시스템전략과는 무관한 프로그램이며 그냥 편한 수동거래툴(?) 정도로 인식하는것이 좋겠다.


다음 포스팅에서는 본격 시스템 트레이딩툴인 Cherry Picker 의 수행모습을 화면에 담아볼 것이다. (이미 이전 몇몇 포스팅에서 캡쳐사진을 올린바 있지만...) GUI 가 없기 때문에 뭔가 굉장히 단순해 보일지 모르겠지만 그 내부에서는 아주 나이스하게 시스템 전략들이 관리 및 운용되고 있다.

'Cherry Picker 개발 > Cherry Picker 소개' 카테고리의 다른 글

근황  (2) 2018.01.10
Cherry Picker 와 이 블로그에 대한 설명  (0) 2013.09.27
2013. 9. 27. 07:58

Cherry Picker 란?


정의 :

'증권 API 를 이용한 실시간 알고리즘 트레이딩' 및 '과거 틱데이터, 분데이터를 이용한 알고리즘 전략 시뮬레이션'을 수행하기 위해 개발된 라이브러리 (LIB 또는 DLL 형태)


이해하기 쉬운 정의 :

전략 아이디어만 몇 줄의 코드로 작성하면 나머지 모든 귀찮고 복잡한 처리들을 알아서 수행시켜주는 똘똘한 녀석. 여기서 말하는 '나머지' 일들이란...

(1) 증권사에 접속

(2) 전략에서 요구하는 어떠한 데이터든지 수량에 관계없이 실시간으로 자동연결

(3) 전략을 실시간으로 감시하다가 주문조건이 맞으면 자동으로 증권사에 주문

(4) 포지션 관리는 물론 복수의 전략을 포트폴리오로 단위로 묶어서 관리가 가능

(5) 실제 운용뿐 아니라 과거의 성과를 알아보기 위한 가상테스트가 가능

정도...


개발 시작 날짜 :

2011년 2월부터 현재까지


개발 언어 :

첫 반 년은 Java 로 개발하다가 그 후로 C++ 로 전환


기능(2013년 12월 12일 현재) :

* 데이터

    * 증권사 API 에서 제공하는 모든 실시간 정보 이용 가능 (알고리즘 트레이딩 카테고리의 '심볼리스트' 참조)

    * 과거데이터를 이용한 가상거래에서도 모든 데이터를 사용 가능

    * 전략에 사용되는 데이터 형태는 틱, 분, 시간, 일 등 모든 형태로 가공이 가능

* 함수

    * 모든 금융공학 관련 함수 이용 가능

    * 사용자 정의함수 추가 기능

    * 함수 내부에서 과거데이터 참조기능(average(close, 5) 형태)

    * 함수 내부에서 다른 함수의 재귀호출 가능

* 전략

    * 전략이란 전략에 사용되는 정보가 갱신될 때마다 수행되는 부분을 의미(TradeStation 과 동일한 형태)

    * 전략의 기본형태는 데이터 처리 -> 조건분석 -> 진입 or 청산

    * 같은 포트폴리오에 포함된 전략끼리는 포트폴리오 정보를 공유

    * 복수의, 다양한 형태(틱, 분 등)의 데이터를 하나의 전략에서 사용 가능

* 주문

    * 증권사 API 를 통해 복수의 종목을 동시에 주문 가능

    * 과거데이터를 이용한 가상거래시에는 프로그램 내부에서 주문 및 체결을 가정함

    * 포트폴리오 내부의 전략들의 주문이 상쇄되는 주문일 경우 무효처리되도록 감지

* 조회 및 전략 모니터링

    * CUI 형태로 전략 및 포트폴리오 상황 모니터링이 가능

    * CUI 형태로 체결, 미체결, 잔고, 손익결과 조회 가능


사용자 인터페이스 :

아래 5 개의 클래스가 사용자가 취급해야하는 클래스의 전부다.


Symbol : 이 클래스에 데이터를 등록한다.

Strategy : 이 클래스를 파생시킨 후 'run' 함수를 재정의 하면 재정의된 함수는 특정 타이밍마다 수행된다.

SymbolMgr : Symbol 과 Strategy 를 이 클래스에 등록시켜 관리한다.

TFile : 백테스트시 과거데이터 파일의 경로를 이 클래스에 세팅 후, Symbol 에 등록한다.

XingManager : 증권사와 데이터 통신을 담당한다.


블로그를 만든 이유


이 블로그는 제가 현재 개발하고 있는 Cherry Picker 라는 트레이딩 및 분석툴의 개발과정과 Cherry Picker 를 이용한 시장분석 및 트레이딩 성과 등을 포스팅하므로서 저와 같이 시스템 트레이딩 및 트레이딩툴 개발에 관심이 있는분들과 정보를 공유하는 목적을 가지고 있습니다.


블로그 메뉴 소개


* 알고리즘 트레이딩 -> Cherry Picker 를 이용한 알고리즘 트레이딩 및 분석 예제

    * 전략구현 프로세스 -> 빠른 전략 구현을 위한 전략구현 프레임(전략 구현 가이드)

    * 심볼 리스트 -> 현재 Cherry Picker 에서 전략 구현 시 사용 가능한 심볼 정보

    * (1) 알고리즘 트레이딩 전략 1

    * (2) 알고리즘 트레이딩 전략 2

    * (3) ...

* Cherry Picker 란? -> Cherry Picker 에 대한 설명

    * Cherry Picker 소개 -> Cherry Picker 및 블로그에 대한 소개

    * Cherry Picker 샘플 -> Cherry Picker 의 사용 예

* Cherry Picker 개발 -> Cherry Picker 개발 정보

    * 일정 -> Cherry Picker 의 개발 일정

    * 개발노트 -> Cherry Picker 개발에 관련된 내용

* TSimulator 개발 -> Cherry Picker 이전명칭으로 그에 대한 개발 정보 (업데이트 종료)

    * TSimulator 소개 -> TSimulator 에 대한 설명

    * 일정 -> TSimulator 의 개발 일정 (업데이트 종료)

    * 개발노트 -> TSimulator 개발에 관련된 내용 (업데이트 종료)

* 전략 시스템 성과 -> TradeStation 및 Cherry Picker 를 이용하여 테스트한 실제 운용전략 성과

    * 전략 pool -> 수익여부와 관계없이 백테스트한 모든 전략들의 특징과 성과를 모아뒀다.

    * 실거래를 위한 성과기준 -> 전략 pool 에서 실거래 가능한 전략을 추출하기 위한 성과기준

    * 실거래 전략 xxx -> 실거래를 위한 성과기준을 통과한 전략들의 상세 성과를 보고

    * 실거래 전략 포트폴리오 -> 실거래 전략들로 구성된 포트폴리오의 성과

* 일기 -> 가끔 생각하는 이야기들

* 잡동사니 -> 개인적인 관심사

    * 기타 -> 기타정보

prev"" #1 next