본문 바로가기

backup

HFT와 프로그래밍 언어

HFT를 하려면 무조건 Linux에 C로 프로그래밍을 해야할까요?


먼저 단순하게 프로그램의 실행 속도만을 생각한다면 linux에 c를 하는 것이 Java나 c#을 쓰는 것 보다 유리합니다.

문제는 거래로직입니다.


HFT라고 뭉둥그려서 이야기 하지만, HFT는 짧은 시간 동안 유지되는 거래를 자주 한다는 것 밖에 없습니다.

그 안에는 차익거래 로직도 있을 수 있고, 마켓메이킹류의 로직도 있을 수 있고, 선행지표를 이용한 informed trading도 있을 수 있고, limit order book의 패턴을 찾아내어서 거래하는 등의 무수하게 다양한 로직이 있습니다.


위의 각 로직들은 서로 필요로하는 빠르기가 다 다릅니다. 절대적 차익거래는 무조건 빠른게 이기겠지만, 어떤 로직들은 몇 ms 정도의 차이는 아무렇지도 않는 경우도 있습니다. 거래 속도가 어느 수준 이상으로 올라가면 latency로 인해서 수익을 못 내는 것보다는 로직의 부재로 인해 수익을 못 내는 경우가 더 많습니다. 또한 어느 정도 속도가 뒤떨어지는 것도 더 정교한 거래로직이 보충을 해주기도 합니다.


그리고 남들보다 유리한 정보를 빠르게 받는다면 몇 ms이 더 느린 것은 큰 문제가 되지 않습니다.

모두에게 알려진 절대적인 차익거래는 거기에 수십억, 수백억 쏟아부은 대형기관에게 넘기더라도,

다른 HFT 로직들 전부가 속도 때문에 대형기관에게 밀리고 그러지는 않습니다.


유사로직을 쓰더라도, 정보를 어디에서 받느냐에 따라서도 다르고, 정보를 가공하고, 연산을 하는 방식에서도 차이가 납니다.

그래서 무조건 linux에 c를 써야 되는 것은 아닙니다.

오히려 손에 더 익숙하고, 개발하기가 빠른 java나 C#으로 프로그램하는 것이 생산성이 더 좋을 수도 있습니다.


단 java나 c#으로 HFT 프로그램을 짤 때에는 garbage collector에 주의를 하셔야 합니다.

1~2ms 이내에 동작을 하여야 하는 거래 로직을 돌릴때 결정적인 순간 garbage collector가 돌면 몇 백 ms에서 몇 초까지 delay가 발생할 수 있습니다. 


이를 위해서는 garbage collector가 돌지 않도록 프로그램 하시는게 중요합니다. 물론 이를 위해서는 메모리 관리 부터 주의를 하셔야 합니다.