엑셀 32bit VS 엑셀 64bit버전
엑셀 VBA를 이용하여 시스템트레이딩을 하다 보면, 어느 수준을 넘는 순간 엑셀의 속도의 한계를 체감 할 것이다.
즉 실시간으로 엄청나게 많은 정보를 피딩하여 연산 하고 주문을 넣고 하는 중 엑셀이 멈춰버리는 상황이 발생한다.
그렇게 되었을 때 대처 방안은
1. 컴파일된 C++ 펑션을 DLL로연결하여 Single Thread인 VBA의 연산을 보조하는 경우.
2. VBA는 Single Thread이나 엑셀프로그렘 자체는 Multithread 임으로 XLL을 이용하여 멀티스레딩을 최대한 이용하는 경우.[1]
3. 트레이딩플랫폼을 C++/JAVA/Python/기타 플랫폼 제공 벤더의 제품으로 바꾸는 경우.
하지만 위 사항 중에서 두번째와 세번째 방법을 구현하기 위해서는 해당방법을 이해하려는 노력이 많이 필요하다.
소프트웨어 속도 및 안정성이 생명인 HFT 전략이 아니고, 간단하게 자동 트레이딩을 테스트해보고 싶은 사람들 혹은 기존 엑셀VBA사용자들은, 엑셀 VBA가 제공하는 기능을 최대한 누릴 필요가 있다. 그렇기 때문에 64bit의 엑셀을 설치함으로써 32bit 버전 보다는 조금이나마 연산의과 부화를 덜 수 있다.
문제는 이트레이드의 Xing-API는 32비트 밖에 호환이 안된다. 즉 엑셀 64비트를 깔면 이 트레이드 API는 실행이 안된다.
따라서 64bit API를 지원하는 증권사가 있다면 엑셀도 64비트로 맞춰 주는게 좋다.
엑셀 64bit의 장단점
- 장점: 64bit 버전을 쓰는 이유는 단 하나다. 32비트 엑셀이 제한 하던 2 GB 메모리를 넘어 더 많은 데이터를 다룰 때 더 유용한 것이다. 당연히 물리적 메모리 처리 속도도 빨라지면서 연산속도, 처리가능 데이터도 기존 32 bit 버전 보다 훨씬 빠르고, 크다.
- 단점: 기존 32 bit에서 구현된 타 소프트웨어 벤더들의 Add-in들이 호환이 안된다는 것이다. 해당 Add-in이 64 bit 버전으로존재하지 않는다면 직접 툴을 만들거나, 아니면 기존 32 bit 버전을 계속 써야 할 수 밖에 없다.
엑셀 64bit를 쓸때 유의사항
기존 32 bit Excel VBA 코드를 64 bit Excel 에서 돌리면 가끔 컴파일 에러가뜰 때가 있다.
특히 “User32.dll”을 쓸때 이런 현상이 나타난다.
MS Office가 2010 버전 이후로는 32/64 bit 버전으로 나뉘게 되고, VBA 7의 출현으로 인해 엑셀의 상호 호환성 문제가 발생하게 되어서 이런 에러 메세지가 뜨게된 것이다.[2]
즉 VBA 7에서는 기존 API Declare Statement를 업데이트 해야지만 64bit 버전에서도 문제 없이 돌아 간다.
방법은 간단하다. 기존에 Declare되어 있던 Function 이나 Sub앞에 “PtrSafe” 를 넣어 주면 문제 없이 돌아 간다.
예를 들어, 시스템트레이딩을 할 때 주로 쓰는 윈도우 타임 라이브러리들은
- user32
- kernel32
인데, 32 Bit과 64 Bit 코드를 참조 하면 아래와 같다.

이 외에 32 bit에서 작성된 윈도우 라이브러리를 부를 경우의 Syntax를 살펴 보려면, Win32API_PtrSafe 64bit Support파일을 마이크로소프트 웹 사이트에서 받은 후 그안에 있는 해당 API Declaration을 찾은 후, 해당 VBA 모듈에 Copy & Paste를 하면 이와 같은 문제는 해결된다.[3]
시스템 트레이딩과 별개로, 엑셀 VBA를 단순 분석 용도로만 사용 한다면 당연히 64비트로 설치하고 사용하여야 할 것이다.
참고로 국내서적중 엑셀 VBA 자동화 트레이딩에 관련해서 볼만한 책은 아래와 같다. [저자/출판사와 본인과의 관계는 없음]
엑셀 자동 트레이딩 시스템
http://book.naver.com/bookdb/book_detail.nhn?bid=7171536
[1] MS Office 2010년 이후 기준.
[2] http://msdn.microsoft.com/en-us/library/ee691831(office.14).aspx
[3] http://www.microsoft.com/en-us/download/confirmation.aspx?id=9970