Sunday 25 March 2018

고주파 거래 시스템 설계


한 걸음 더 나아가.
lightspeed에 액세스하려면 보안 점검을 완료하십시오.
왜 CAPTCHA를 완료해야합니까?
보안 문자를 작성하면 귀하가 사람임을 증명하고 웹 사이트에 일시적으로 액세스 할 수 있습니다.
앞으로이를 방지하기 위해 무엇을 할 수 있습니까?
집과 같이 개인적인 연결을 사용하는 경우 장치에서 안티 바이러스 검사를 실행하여 맬웨어에 감염되지 않았는지 확인할 수 있습니다.
사무실 또는 공유 네트워크에있는 경우 네트워크 관리자에게 네트워크를 통해 잘못 구성된 장치 또는 감염된 장치를 검색하도록 요청할 수 있습니다.
Cloudflare Ray ID : 3ccd4e8918c159f6 & 황소; 귀하의 IP 주소 : 78.109.24.111 & bull; 실적 & amp; Cloudflare의 보안.

고주파수 거래 시스템 설계
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
오늘날 첨단 HFT 거래 시스템의 상태는 얼마나 빠릅니까?
항상 고주파 거래 (HFT)에 대해 듣고 알고리즘이 얼마나 지독한 지 알아 봅니다. 하지만 나는 궁금해합니다. 요즘은 무엇이 빠릅니까?
나는 교환기와 거래 응용 프로그램을 실행하는 서버 사이의 물리적 인 거리에 의해 야기 된 지연에 대해 생각하지 않지만 프로그램 자체에 의해 도입 된 지연에 대해 생각하고 있습니다.
보다 구체적으로 말하자면, 애플리케이션의 와이어에 도착한 이벤트가 해당 애플리케이션으로 넘어가면서 와이어의 주문 / 가격이 출력되는 시간은? 나는. tick-to-trade 시간.
잠깐 얘기하고 있니? 아니면 서브 마이크로 초입니까?
사람들은 어떻게 이러한 대기 시간을 달성합니까? 어셈블리 코딩? FPGA? 낡은 C ++ 코드?
최근 ACM에 관한 흥미로운 기사가 ​​게재되어 오늘날의 HFT 기술에 대한 많은 정보를 제공합니다.
당신은 아주 좋은 답변을 받았습니다. 한 가지 문제가 있습니다. 대부분의 algotrading은 비밀입니다. 얼마나 빠를 지 간단히 알 수 없습니다. 이것은 양방향으로 진행됩니다. 원하지 않기 때문에 일부는 얼마나 빨리 작동 하는지를 알려주지 못할 수도 있습니다. 다른 사람들은 여러 가지 이유에서 (투자자 또는 고객 유치) "과장"이라고 말하려합니다.
예를 들어, 피코 초에 관한 소문은 다소 터무니 없습니다. 10 나노초와 0.1 나노초는 정확히 똑같습니다. 주문이 거래 서버에 도달하는 데 걸리는 시간이 그 이상입니다.
가장 중요한 것은, 비록 당신이 물어 보지 않았지만, 알고리즘 적으로 거래하려한다면, 더 빨리하려고하지 말고 더 똑똑해 지도록 노력하십시오. 나는 수초의 대기 시간을 다룰 수 있고 많은 돈을 벌 수있는 아주 좋은 알고리즘을 보았습니다.
저는 FPGA 기반 HFT 시스템을 제조하고 판매하는 소규모 회사의 CTO입니다. Solarflare Application Onload Engine (AOE)의 최상위 시스템을 구축하면서 우리는 유선 (ICE 또는 CME의 10Gb / S UDP 시장 데이터 피드)에서 "흥미로운"시장 이벤트에서 대기 시간을 지속적으로 제공 해왔다. 결과 주문 메시지는 750 ~ 800 나노초 범위의 와이어에 부딪칩니다 (예, 서브 마이크로 초). 우리는 다음 버전 시스템이 704 ~ 710 나노초 범위에이를 것으로 예상합니다. 어떤 사람들은 약간은 적다고 주장했지만, 그것은 실험실 환경에 있으며 시카고의 COLO에 실제로 앉아 있지 않고 명령을 정리하지 않았습니다.
물리학 및 "빛의 속도"에 대한 의견은 유효하지만 관련이 없습니다. HFT에 대해 진지한 사람들은 교환 서버 옆의 방에있는 COLO에서 서버를 보유하고 있습니다.
이 서브 마이크로 초 도메인을 이용하려면 커널 바이 패스와 같은 기술을 사용하더라도 FPGA에 대한 피드 전략 구현 명령을 제외하고는 호스트 CPU에서 그다지 많은 일을 할 수 없습니다. 1.5 밀리 초의 피할 수없는 오버 헤드가 있습니다. 그래서이 영역에서는 모든 것이 FPGA로 진행됩니다.
다른 답변들 중 하나는 매우 비밀스러운 시장에서 그들이 사용하는 도구 또는 성능에 대해 이야기하는 사람이 거의 없다는 점에서 매우 정직합니다. 모든 고객은 우리가 도구를 사용한다고 말하지도 않고 사용 방법에 대해 공개하지 않기를 요구합니다. 이것은 마케팅을 어렵게 만들뿐만 아니라 동료 간의 기술적 지식의 흐름을 방해합니다.
시장의 "사악한 빠른"부분을 위해 이국적인 시스템에 들어갈 필요가 있기 때문에 퀀트 (우리가 빠르게 만드는 알고리즘을 생각하는 사람들)는 알 고리를 이벤트 - 투 - 응답 시간 계층. 기술 힙의 맨 위에는 서브 마이크로 초 (우리와 같은) 시스템이 있습니다. 다음 단계는 커널 바이 패스를 많이 사용하는 사용자 정의 C ++ 시스템이며 3-5 마이크로 초 범위입니다. 다음 계층은 10Gb / S 회선에있는 "교환기"에서 단 하나의 라우터 홉이 될 여유가없는 사람들입니다. 그들은 COLO에서 여전히있을 수 있지만 불쾌한 게임 때문에 우리는 "포트 룰렛"이라고 부릅니다. 수십에서 수백 마이크로 초 도메인. 밀리 초 안에 들어가면 더 이상 HFT가 거의 없습니다.
나스닥과 계속 일하기를 원한다면 "40 마이크로 초 이하". 이 수치는 nasdaqomx / technology /
HFT의 상태 (2011 년)가 무엇인지 설명하고 나노 초를 달성 할 수있는 하드웨어 솔루션의 샘플을 제공하는 좋은 기사 : Wall Street Need for Trading Speed ​​: Nanosecond 시대.
가장 낮은 "대기 시간"에 대한 경쟁이 계속되면서 일부 시장 참여자는 심지어 1 초의 피코 초 (picoseconds)에 대해서도 이야기하고 있습니다.
편집 : 니콜라스 친절하게 언급 :
링크에는 740ns (즉, 입력 이벤트 발생에서 주문 전송까지의 시간)에 "거래 준비"할 수있는 회사 인 Fixnetix가 나와 있습니다.
TIBCO의 FTL 메시징 제품은 한 대의 컴퓨터 (공유 메모리)에서 500 ns 미만이고 데이터 센터에서 RDMA (원격 직접 메모리 액세스)를 사용하는 데 몇 초가 걸립니다. 그 후에 물리학이 방정식의 주요 부분이됩니다.
이것이 데이터를 피드에서 앱으로 가져 와서 결정을 내리는 속도입니다.
적어도 하나의 시스템이 주장했다.
30ns interthread 메시징, 아마도 벤치 마크가 조정 된 것입니다. 따라서 낮은 숫자에 대해 이야기하는 사람은 어떤 종류의 마법 CPU를 사용하고 있습니다.
일단 앱에 들어가면 프로그램이 얼마나 빨리 결정을 내릴 수 있는지에 대한 질문 일뿐입니다.
요즘 마이크로 시컨스 (microseconds) 단위의 한 마디 진드기 (tick-to-trade)는 경쟁력있는 HFT 기업의 기준입니다. 소프트웨어 만 사용하면 한 자리 숫자를 높일 수 있어야합니다. 그런 다음 추가 하드웨어로 <5 usec.
고주파 거래는 1998 년 미국 증권 거래위원회 (SEC)가 전자 거래소를 승인 한 후 1999 년 이래로 이루어졌습니다. 21 세기가되면 HFT 거래는 수초의 실행 시간을 갖지만 2010 년까지는 밀리 초 및 심지어 마이크로 초로 감소했습니다.
광속 제한으로 인해 수 마이크로 초가 안되며 운 좋게도 몇 킬로미터 밖에 안되며 그와 가까운 거리까지 꿈틀 수 있습니다.
또한, 코딩을하지 않아도 물리적으로 이동해야합니다. (300ns 스위치가 달린 기사를 가지고있는 사람은 그 스위치의 대기 시간이 길어집니다!) 구리에서)

고주파수 거래 시스템 설계
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
요즘 HFT 시스템은 FPGA에서 어떻게 구현되고 있습니까?
FPGA에서 HFT 시스템의 다양한 구현에 대해 읽었습니다.
내 질문은 HFT 시스템의 어떤 부분이 요즘 FPGA에서 주로 구현 되는가하는 점이다. FPGA는 여전히 인기가 있습니까? 피드 처리기 만 FPGA에 구현됩니까? 전술 한 시스템 중 일부는 FPGA에서 구현 된 피드 핸들러 만 가지고 있기 때문에 전략이 너무 많이 변경되거나 FPGA에서 구현하기가 너무 어렵 기 때문에. 다른 이들은 FPGA 대신 거래 전략을 구현하거나 HFT 시스템을 구축하기 위해 FPGA 대신 고성능 NIC를 사용한다고 주장합니다. 다른 접근 방식에 대해 읽었지 만 대부분의 결과가 다른 입력 세트에서 테스트되므로 비교하기가 어렵습니다.
생각해 볼 수있는 방법이 있습니다. ASIC에서 (즉, 하드웨어에서 직접) 뭔가를 할 수 있다고 상상해보십시오. 그러나 제작 과정 자체가 비용이 많이 들며 나중에 변경할 수없는 디자인을 얻게됩니다. ASIC은 Bitcoin 마이닝, 잘 알려진 데이터 처리 알고리즘 등과 같은 사전 정의 된 태스크에 대해 의미가 있습니다.
반면에 우리는 범용적인 CPU (코 프로세서 CPU와 GPU는 물론 일반 CPU)를 가지고 있지만, 매우 빠른 속도로 작은 명령어 세트를 처리합니다.
FPGA가 중용 영역입니다. 그것들은 '하드웨어 에뮬레이터'이므로 실제 하드웨어보다 10 배 느리지 만 CPU를 사용하는 동시 작업에 비해 성능이 뛰어납니다. 따라서 다이를 사용하여 그에 따라 논리를 분산시킬 수 있습니다.
FPGA의 일부 용도는 다음과 같습니다.
다양한 데이터 수집 보드뿐만 아니라 비디오 트랜스 코딩 (예 : TV의 HD 비디오 디코딩) 고정 데이터 구조 파싱 (Regex 파싱) 이산 시스템 시뮬레이션 (예 : 카드 게임의 결과 시뮬레이션) 항공 우주 또는 과학 연구에서.
퀀트 용 FPGA의 문제점은 부동 소수점 계산에 그리 좋지 않다는 것입니다. 특히 일반 CPU가 이미 SIMD와 같은 것으로 최적화되어 있기 때문에 그렇습니다. 그러나 고정 소수점 또는 고정 크기 데이터 구조의 경우 FPGA 디자인을 사용하면 동시에 많은 처리를 수행하도록 장치를 구성 할 수 있습니다.
거래에서 수행 된 몇 가지 작업은 피드 처리기 (네트워크 스트림에서 직접 구문 분석)에 대한 FPGA 사용뿐만 아니라 하드웨어의 거래 구조 (예 : 주문서)의 특정 부분을 구축하여 급속하게 변화하는 데이터 구조를 처리 할 수 ​​있습니다. CPU를로드합니다.
FPGA는 전파 비용을 지불하지 않고도 데이터를 신속하게 처리해야하는 문제를 주로 해결하는 것을 목표로합니다. 이는 GPGPU (또는 Xeon Phi와 같은 PCI - 주거 카드)와 같은 장치와는 달리 장치와 데이터를주고받는 데 성능상의 불이익을줍니다. 즉, 이와 관련하여 DMA 옵션도 개선되고 있습니다.
FPGA는 실제로 로직 블록을 서로 연결하는 구성 가능한 스위치와 함께 실리콘 전체에 걸쳐 반복적으로 반복되는 동일한 로직 블록 이상일뿐입니다. 이로 인해 FPGA는 작동 중에 변경되지 않는 하드웨어 회로에서 설명 할 수있는 반복적 인 문제를 처리 할 때 매우 빠르고 효율적입니다. 그리고 말 그대로 수천 또는 수만 개의 이러한 회로를 하나의 FPGA에서 동시에 병렬로 처리 할 수 ​​있습니다.
반면에 CPU는 명령을로드하고 데이터를로드하며 데이터를 처리하고 결과를 저장 한 다음 다시 수행하는 ALU를 기반으로합니다. CPU는 크기와 범위 모두에서 지속적으로 변화하는 문제를 처리하고 다른 작업 사이를 전환 할 때 매우 빠르고 능률적입니다. 오늘날의 CPU 나 코어는 데이터와 명령어를위한 병렬 파이프 라인을 갖춘 수십에서 수백 개의 ALU를 가지므로 병렬로 처리 할 수있는 복잡한 문제에서 매우 빠르게 처리 할 수 ​​있습니다.
이러한 설계는 FPGA가 초고속, 전선 대 전선 (wire-to-wire) 미만의 다중 데이터 피드를 집약하거나 사전 계산 된 구매, 판매 또는 취소를 트리거하는 것과 같은 방대한 병렬 아키텍처로 공격받을 수있는 더 간단한 문제 특정 패턴과 일치하는 가격. CPU는 구매 바구니 계산, 포트폴리오 위험 조정을 유지하는 데 필요한 판매 및 취소 또는 다양한 연령 및 품질의 가격 및 뉴스 소스를 사용되는 거래 지표로 통합하는 것과 같이 병렬 처리가 덜 필요한 복잡한 문제에서는 빠릅니다. 거래자 및 경영진이 거래 시스템에 대해 어떤 조정을 할 것인지 결정할 수 있습니다.
FPGA가 HFT에서 사용되는 곳은 특정 상점의 아키텍처에 크게 의존합니다. 이들은 단순하고 반복적이며 광범위한 작업을 수행하고 신속하게 수행하는 데 가장 잘 사용됩니다. CPU는 대부분의 작업을 수행 할 수있는 스위스 나이프입니다. 특히 요구 사항이 변하고 문제의 크기가 처음부터 완전히 이해되지 않은 경우에 특히 그렇습니다.
귀하의 질문은별로 의미가 없습니다. 그것은 거래 인프라의 배선이 광섬유를 얼마나 많이 사용하는지 그리고 구리를 얼마나 많이 사용하는지 묻는 것과 같습니다. 우리가 당신에게 줄 수있는 가장 좋은 대답은 FPGA가 마법의 총알이 아니라는 것입니다.
이는 시스코 백서의 잘못된 해석입니다. 스위칭 패브릭의 사용 사례와 FPGA의 사용 사례는 거의 겹치지 않습니다.
HFT 시스템의 어떤 부분이 요즘 FPGA에서 대부분 구현됩니까?
현재 FPGA는 프린터 및 TV 셋톱 박스에서 자주 사용됩니다.
나는 ALU가있는 "디지털 신호 처리"(DSP) 블록을 강조하고 싶다. 오늘날의 FPGA에는 수백 가지의 프로그래머블 DSP 블록이있다.
이제 갑자기 수천 개의 작은 프로세서를 처리 할 수있게되었습니다. 모두 병렬로 계산을 수행 할 수 있습니다. 이는 제온 파이 또는 GPU에서 제공하는 병렬 처리를 훨씬 능가합니다. 사실 FPGA에서 옵션 가격 모델링 또는 확률 론적 위험 모델링을 수행하는 경우 최신 GPU에 비해 ​​성능이 100 배 이상 향상되고 최신 CPU에 비해 ​​훨씬 더 많은 성능을 얻을 수 있습니다.
DSP 블록과 함께이 성능 향상의 다른 주요 요인은 메모리 캐시입니다. FPGA에는 매우 빠른 분산 RAM이 내장되어있어 데이터 경로 수준에서 100TB / s의 대역폭을 달성 할 수 있습니다.
algo 전략에 대해 오늘날의 FPGA를 사용하면 GPU 나 CPU에 비해 ​​성능이 100 ~ 1000 배 증가 할 수있는 대용량 동시 컴퓨팅 리소스가 제공됩니다. 주요주의 사항은 Verilog 또는 VHDL로 글쓰기에 능숙해야한다는 것입니다. :)
Sanjay Shah CTO Nanospeed.
이전에는 FPGA가 완전히 소유하고 있던 하드웨어 가속 공간에 다양한 강력한 코어 코어 프로세서가 사용되기 시작했습니다. Tilera, Adapteva 및 Coherent Logix와 같은 회사는 모두 미국에서 이러한 프로세서를 제공하고 프랑스에서 온 Enyx 또한 진출합니다.
이 대규모 병렬 프로세서의 효과를 측정 한 진정한 방법은 소프트웨어 도구의 성숙입니다. 그것은 잠재 고객이주의를 집중해야하는 곳입니다. 어느 누구도 수동 기술을 사용하여 수십 또는 수백 개의 코어를 프로그래밍하거나 디버그하려고하지 않습니다. 물론 I / O 대역폭이 중요하다는 것은 말할 필요도 없습니다.
이 공간에서의 개인적인 경험으로 코 히어 런트 Logix 프로세서를 C 언어 알 고 가속을위한 코 프로세서 또는 하드웨어 가속기로 채택하는 것을 보았습니다. algo 프로그래머는 C 기반 환경의 신속한 설계주기를 즐기면서 코드를 마음 속의 내용에 맞게 조정할 수 있으며 FPGA를위한 값 비싸고 시간이 많이 소요되는 HDL 코딩에 대해 걱정할 필요가 없습니다.
최적의 파티셔닝은 반복적 인 운영을 고정시키고 가장 잘하는 일을 FPGA가하도록하는 것입니다. 그리고 많은 코어 프로세서가 알기 개발자의 생산성과 실행 속도를 가속화하는 데 최선을 다하도록합니다.
Coherent Logix, Inc. 의 비즈니스 개발 관리자 인 John Irza
거의 모든 HFT 매장은 FPGA 아키텍처를 사용합니다. 이러한 장치는 속도, 파이프 라인, 병렬 처리 등의 최신 향상으로 빠르게 앞서 가기 때문에 자주 교체해야합니다. 2M 달러를 투자 할 준비가되어 있지 않으면 다른 전략을 찾아야합니다. 펜과 종이로 매일 가격을 내고있는 많은 사람들이 오마하 (NB)에서 수십억 달러를 벌어들입니다.

기술 & amp; 양적 금융.
무역 시스템 소프트웨어 개발자 | 고주파 거래 | 낮은 대기 시간 시스템 | 시장 만들기 모델 | C / C ++
고주파 거래 시스템과 그 아키텍처를 어떻게 설계 할 것인가? 1 부.
이 기사에서는 저 대기 시간 시스템, 필요한 모듈 및 해당 시스템 아키텍처를 구현하고 소프트웨어 개발 측면에 초점을 맞추는 방법에 대해 이야기하고자합니다.
완전한 시스템을 갖추려면 커버해야 할 부분이 있으며, 네트워크 통신, 스위치 / 라우터, 특수 서버, FPGA, 커널 작동과 같은 시스템 작동 조정 등이있을 수 있습니다. 그러나 이 기사에서 나는 소프트웨어 디자인과 아키텍처에 더 중점을 둘 것이라고 말했다.
이것은 기본적인 접근 방식으로, 이 종류의 거래 시스템에 대한 모범 사례를 고려합니다. 다른 요인, 시장, 규정에 따라 다르지만 일부 기본은 모든 거래 시스템에서 동일하게 유지됩니다.
물론 중요한 요소는 들어오는 정보, 외부 이벤트에 대한 응답 시간, 내부 응답 시간 및 가장 높은 처리량과 최저 대기 시간을 제공하는 기능을 처리 할 수 ​​있다는 것입니다.
저 지연 시스템을 설계 할 때 항상 다음과 같은 문제점을 발견했습니다.
시스템은 여러 전략을 처리 할 수 ​​있어야하며 더 많은 전략을 추가 할 때 시스템 성능이 저조하지 않도록해야합니다. 다른 장소에서 주문 도서 재구성. 우리가 forex 시장 같이보기를 가지고가는 경우에, 다른 개최지 및 ECNs의 톤이, 전부 그들있다 다른 API 및 연결 기준을 사용하는. 시스템은 이러한 여러 소스를 처리하고이를 내부적이고 잘 정의 된 데이터 구조로 모을 수 있어야합니다.
피드 처리기는 알고리즘 거래 시스템의 가장 중요한 구성 요소 중 하나입니다. 정확한 시장 데이터가 없으면 모든 고주파수 또는 알고리즘 전략이 올바른 결정을 내릴 수 없습니다. 따라서이 모듈의 아이디어는 다양한 장소에서 시장 데이터를 수집하고, 전략을 수립하고, 올바른 결정을 내리고, 장소의 제한 주문서를 유지하는 것입니다.
각 시장 장소마다 많은 양의 시장 업데이트가 초당 수신 될 수 있으므로 각 제한 주문서의 내부 표시가 그에 따라 변경되어야합니다.
이 과정은 다음과 같이 진행됩니다.
개최지와 당신의 체계 사이 연결은 보통 FIX 의정서를 사용하여한다, 그래서 나는 그들과 교통하고 (메시지를 보내고 보내기 위하여) FIX 엔진을 두어야하고 사용하는 개최지로 연결성을 연결하고 관리하는 중핵 기반을 제공해야한다 고정 프로토콜.
메시지 수신은 시장 업데이트를 수신하고, 보내는 것은 내 전략에 의해 생성 된 주문을 전송합니다.
FIX 엔진을 구현하는 데는 두 가지 옵션이 있습니다. 맞춤형 또는 상업용 옵션입니다. 사용자 지정 FIX 엔진을 구현하려면 너무 많은 작업 시간이 필요하며 대기 시간이 짧은 환경에서 통신을 최적화해야합니다. 대형 은행 및 기관과 같은 회사는 자체 코드를 소유 할 수 있도록 자체 FIX 엔진을 선호합니다.
나는 상업 옵션을 선호하는데 거기에는 좋은 옵션이 너무 많기 때문에 라이브러리를 연결하기 만하면 바로 사용할 수 있습니다.
네트워크 및 통신 대기 시간 외에도 디코드 / 구문 분석 대기 시간이 있기 때문에이를 처리해야합니다. 구문 분석은 문자열 조작이므로 CPU주기 및 메모리 관리 측면에서 매우 비쌉니다.
FIX가 요즘 알고리즘에서는 너무 느려지므로 더 새롭고 더 나은 프로토콜을 통해 연결성을 제공하기 시작한 장소가 있습니다. FAST, ITCH / OUTCH는 바이너리 프로토콜이며 항상 사용할 수있는 한 오래 사용하려고합니다. 그들은 다른 엔진을 사용하여 통신하지만 개념은 동일하게 유지됩니다.
일단 시스템이 경기장 사이에 연결성을 갖게되면 그들에 의해보고 된 모든 이벤트를 업데이트해야합니다 : 주문 업데이트 / 추가 또는 삭제 (필요한 경우 거래).
접수 된 각 이벤트에 대해 내 내부 주문서에 가서 변경해야합니다.
일반적으로 모든 개최지는 고유 한 식별자 (EntryID)와 업데이트 유형 (업데이트가 삽입, 업데이트 또는 삭제)을 사용하여 이러한 업데이트를 전송하므로 제한 주문서를 정확하게 복제 할 수 있습니다.
다음은 한계 주문 도서 재구성의 작동 방식을 보여줍니다.
여기서 유의해야 할 중요한 점은 주문서 데이터를 보관하는 데 사용할 데이터 구조의 유형입니다. 초당 수 백만 건의 업데이트를 얻을 수 있으므로 데이터 구조가 항목을 찾거나 삭제하기에 충분히 빠를 수 있어야합니다.
이전 권장 사항에서 최고의 데이터 구조는 일반 배열을 사용하는 것입니다. 하나는 입찰가 용이고 하나는 요청 용입니다. 최상의 성능을 제공합니다.
또한 가능한 한 많은 메모리를 미리 할당하십시오.
동적 할당은 비용이 많이 들며 제한 주문 서적 데이터 구조를 업데이트하는 것과 같은 중요한 경로에 사용하면 안되며 결국 할당 당 많은 양의 오버 헤드가 발생하게됩니다.
그러나 우리는 지연 시간이 짧은 시스템을 구축하고 있으므로 데이터 구조를 미리 할당해야합니다. 또한 사전 할당과 동적 할당의 차이점과 성능에 미치는 영향을 보여 드리겠습니다.
시스템 초기화 단계에서 bidsArray와 askArrays 배열을 미리 할당하고 책의 10 단계 깊이를 저장한다고 가정 해 봅시다. 따라서 10 요소 bid / ask 배열을 미리 할당해야합니다. 그리고 우리는 할당 프로세스가 너무 많은 시간을 소비 할 것이므로 제거 및 생성하지 않고 요소를 이동 / 대체하려고합니다.
다음 코드는 동적 할당의 작동 방식을 보여줍니다.
보시다시피, 우리는 추가 또는 삭제 한 다음 전체 배열을 정렬하므로 정렬 된 구조를 유지할 수 있습니다.
다음 섹션에서는 사전 할당 및 재사용 방법을 보여줍니다.
배열에 10 개의 요소가있는 배열을 정의하면 모든 요소를 ​​다시 사용하게됩니다. 요소를 삭제하는 대신 해당 값을 삭제하고 배열 된 후에 배열의 시작 부분에 보낸다는 것을 알 수 있습니다.
성능 테스트를 한 번 해본 결과, 100,000 회 샘플에서 각 경우에 대해 수행 된 CPU주기를 계산하면 다음과 같은 결과가 나타납니다.
와우, 60 % 차이. 놀랍지 만, 할당 / 할당 해제는 비용이 많이 든다. 그리고 이것은 매우 기본적인 / 간단한 예제였습니다.
내 코드 저장소 gist. github / silahian에서이 코드 예제를 확인할 수 있습니다.
계속하려면 & # 8230;
키워드 : #hft #quants #forex #fx #risk $ EURUSD $ EURGBP EURJPY.
이 공유:
소식 탐색.
HFT & # 8217;의 복귀를 목격했습니다.
고주파 거래 시스템과 그 아키텍처를 어떻게 설계 할 것인가? 파트 II.
회신을 남겨주 답장을 취소하십시오.
최근 게시물.
최근 댓글.
카테고리.
거래 시스템, 양적 금융, 고주파 거래, HFT, 저 대기 시간 시스템, 전자 시장 만들기.

No comments:

Post a Comment