2010-06-13 2 views
6

저는 고 빈도 거래 포트폴리오 (틱 데이터가 아닌 1 분 또는 3 분간의 데이터 바를 다루는)의 생산, 최적화 및 시뮬레이션을 담당하는 거래 포트폴리오 관리 시스템을 구축 중입니다.계산 중심의 거래 포트폴리오 시뮬레이션을위한 프로그래밍 언어는 무엇입니까?

Amazon 웹 서비스를 사용하여 응용 프로그램의 전체로드를 사용할 계획입니다.

나는 언어로서 고려하고있는 4 가지 선택 사항이있다. 여기에 자바

  • C++
  • C#
  • 파이썬
    1. 는 프로젝트 범위의 극단의 범위이다. 이것은 어쩌면 그럴 수는 없지만 요구 사항의 범위 내에 있습니다 :

      • 주간 10,000,000 개의 거래 시스템 시뮬레이션.
      • (각 거래 시스템에는 계산 비용이 많이 드는 기능 선택 알고리즘을 포함하여 자체 데이터 마이닝 방법이 있어야합니다.) 래퍼를 사용하여 500-5000 기능을 상상해보십시오.이 방법은 자주 실행되지는 않지만 여전히 고려 사항입니다.) 10 만/거래 전략 지구 (약 100,000) 100,000와 포트폴리오
      • 포트폴리오 최적화 주위에 모든 재고/선물 시장에서 1 분 또는 3 개 데이터에 촬영
      • 와트 포트폴리오의
      • 실시간 생산 전략. (다소 집중적 인 알고리즘)

      속도는 걱정이지만 Java가 부하를 처리 할 수 ​​있다고 생각합니다.

      Java CAN이 위의 요구 사항을 편안하게 처리 할 수 ​​있도록하려는 것입니다. C++로 프로젝트를하고 싶지는 않지만 필요하다면 그렇게 할 것입니다.

      C#이있는 이유는 Java를 사용하는 것이 좋지 않다고 생각했기 때문입니다. Windows가 전혀 마음에 들지 않아 모든 것이 동일하면 Java를 선호한다고해도 마찬가지입니다.

      파이썬 - 저는 python이 파이썬이 거의 C와 비슷한 속도로 실행되도록 컴파일 할 수있는 JIT 컴파일러로 최적화 될 수 있다고 PyPy와 pyscho에서 한 번 읽었습니다 ... 사실 그 외에도이 목록에있는 유일한 이유입니다 Python은 훌륭한 언어이며 아마도이 프로젝트에서 전혀 중요한 요소가 아니라 코드에서 가장 즐거운 언어가 될 것입니다.

      요약하면 :

      • 실시간 생산
      • 연결
      • 많은 수의
      • 에서 데이터를 수집하는 포트폴리오의
      • 주간/월간 최적화 많은 수의 시스템
      • 매주 시뮬레이션

      밀리 초 또는 2 차 기반 거래에 대한 처리가 없습니다.유일한 고려 사항은 필요한 양의 EC2 서버에서 Java가 확산 될 때 이러한 종류의 부하를 처리 할 수 ​​있는지 여부입니다.

      여러분의 지혜에 감사드립니다.

    +0

    C++이 Java보다 빠를 것이라고 추측 할 이유는 없습니다 (항상 가정하는 것처럼 보입니다). 항상 그런 것은 아니기 때문입니다. – Jesper

    +0

    좋아, 찍은 포인트 Jesper. 나는 C++을 간신히 알고있다. 나는 방향을 선택하고 그것에 충실하려고 노력하고있다. 파이썬을 옹호하는 사람들에게 ... 파이썬 사용의 명백한 이점 외에도 자바와 파이썬의 성능에는 차이가 있습니까? 이것이 결국 실제 거래에 사용될 것이라고 생각합니다. 파이썬이 Java보다 훨씬 느린 지 또는 내 결정을 방해하는 속도가 더 빠르면 ("C와 유사한 속도"근처) 솔직하게 말할 수 없습니다. 나는 내가 자바에 가고있는 줄 알았다. 그러나 아직 돌에 놓여 있지 않다. 감사합니다. – Bijan

    +0

    자바 (언어)와 함께 JVM에서 자이 썬을 사용할 수 있다는 것을 알아 두십시오. 자이 썬이 얼마나 성숙한 것인지 잘 모르겠다. 파이썬을 잘 모르는 사람이라면 Java를 사용합니다. –

    답변

    4

    이 작업을 위해 Java를 선택합니다. RAM의 관점에서 Java와 C++의 차이점은 Java에서 각 Object는 8 바이트의 오버 헤드 (Sun 32 비트 JVM 또는 압축 된 포인터가있는 Sun 64 비트 JVM 사용)입니다. 따라서 수백만 개의 물체가 날아 다니면 다른 점이 있습니다. 속도면에서 Java와 C++은 거의 비슷한 수준입니다.

    나를 위해 더 중요한 것은 개발 시간입니다. C++에서 실수를하면 세그먼테이션 결함이 생기고 (때로는 이해하지 못하는 경우도 있습니다), Java에서는 스택 추적으로 좋은 예외를 얻습니다. 나는 항상 이것을 선호했다.

    C++에서 Java에는없는 기본 유형의 콜렉션을 가질 수 있습니다. 외부 라이브러리를 사용해야 만 얻을 수 있습니다.

    실시간 요구 사항이있는 경우 Java 가비지 수집기는 24 코어가있는 시스템에서도 20GB 힙을 수집하는 데 몇 분이 걸리기 때문에 불편할 수 있습니다. 그러나 런타임 중에 너무 많은 임시 객체를 만들지 않으면 괜찮습니다. 프로그램이 예상하지 못했을 때마다 가비지 콜렉션을 일시 중지시킬 수 있습니다.

    +0

    감사합니다. 나는 자바와 함께 갈 것이라고 생각한다. – Bijan

    +0

    이 동일한 인수를 C#/.NET에 적용 할 수 있습니까? –

    5

    가장 익숙한 언어를 선택하십시오. 그들 모두를 똑같이 알고 속도가 진짜 문제라면 C를 선택하십시오.

    +1

    솔직히 말해서 : 만약 그가 모두 똑같이 잘 알고 있었다면 아마 여기서 물어볼 필요가 없을 것입니다. –

    +0

    맞습니다. 나는 자바 만 알고있다. 나머지는 단지 피상적 인 이해가 있습니다. – Bijan

    4

    원하는 언어로 씁니다. 파이썬처럼 들리 네. 시스템을 실행하기 시작하면 시스템을 프로파일 링하고 병목 현상이 발생한 위치를 확인할 수 있습니다. 여전히 기본 최적화를 수행 한 후에도 C로 부분을 다시 작성할 수 있습니다.

    .net에서 clr 및 dlr를 활용하려면 철 python에이 점을 고려해야합니다. 그런 다음 .net 4 및 병렬 확장을 활용할 수 있습니다. 뭐라해도 성능이 향상된다면 .net이 매우 잘하는 스레딩의 맛이 될 것입니다.

    편집 :

    이 부분을 명확하게 나타내려고합니다. 설명에서 보면 병렬 처리/멀티 스레딩은 성능 향상의 대부분이 발생하는 곳입니다.

    +1

    +1, 멋진 의견, Jython은 Java 공간에서 특별히 필요한 것이 있으면 JVM에서 Python을위한 옵션입니다. –

    +0

    파이썬은이 세상의 모든 것에 대한 해답이 아닙니다. 그의 경우에는 Java/C++이 훨씬 더 나은 선택이라고 확신합니다. –

    +0

    나는 C++이 OP의 요구 사항을 기반으로 한 끔찍한 선택이라는 말로 자신을 매달려 갈 것입니다. 속도가 빠르면 C를 사용하십시오. C++은 잘 모르는 경우에는 너무 많은 기회를 제공합니다. Java는 훌륭한 선택이 될 수 있습니다. 그러나 OP가 파이썬을 좋아하고 잘 사용할 수 있다면 인프라가 성능 목표를 지원한다면 왜 이런 상황에 대한 선택이되지 않을까요? –

    3

    왜 시스템 언어가 하나입니까? 내가 너라면 파이썬으로 전체 시스템을 만들 겠지만 C 또는 C++는 성능에 중요한 구성 요소로 사용될 것이다. 이런 식으로, 당신은 매우 빠른 성능으로 매우 유연하고 확장 가능한 시스템을 갖게 될 것입니다. 자동으로 래퍼를 생성하는 도구 (예 : SWIG, Cython)도 있습니다. 파이썬과 C/C++/자바/포트란은 서로 경쟁하지 않습니다. 그들은 보완하고 있습니다.

    5

    나는 파이썬과 개인적으로 큰 팬이다. 나는 자바의 위대한 애호가는 아니다. 나는이 자바가 올바른 방향이라는 것을 인정해야한다.

    많은 프로젝트에서 파이썬의 성능은 문제가되지 않지만, 경우에 따라 약간의 성능 저하가있을 수 있습니다. 저는 이것이 실시간 시뮬레이션이 아니라는 것을 알고 있습니다. 그러나 배치 프로세싱이라 할지라도 여전히 고려해야 할 요소입니다. 로드가 하나의 가상 서버에 비해 너무 큰 경우, 구현 속도가 두 배 빨라지므로 가상 서버 비용이 절반으로 줄어 듭니다.

    많은 프로젝트에서 나는 파이썬이 당신이 더 빨리 솔루션을 개발할 수 있다고 주장 할 것이지만, 여기에서는 그럴 것이라고 확신하지 못한다. Java는 병렬 처리 및 교차 서버 배포를위한 세계 수준의 개발 도구와 최상위 수준의 엔터프라이즈 급 프레임 워크를 제공하며 Python에는이 분야의 솔루션이 있지만 Java는 분명히 우위를 점하고 있습니다. Javascaces와 같이 Python이 일치시킬 수없는 Java의 아키텍처 옵션도 있습니다.

    나는 C와 C++가 이와 같은 프로젝트에 너무 많은 개발 오버 헤드를 부과한다고 주장한다. 당신이 내가 할 수있을 것이라고 확신하는 언어에 매우 익숙하다면 그것들은 실행 가능합니다. 그러나 더 높은 성능을위한 가능성 이외에 그들은 테이블에 가져올 다른 것을 가지고 있지 않습니다.

    C#은 Java를 다시 작성한 것입니다. 당신이 Windows 개발자이고 Windows를 선호한다면 Java가 아닌 C#을 사용할 것이지만 Windows를 신경 쓰지 않는다면 C#을 신경 쓰지 않아도됩니다.

    0

    숫자 코드의 내부 루프를 보면 유용합니다. 결국이 루프 내에서 대부분의 CPU 시간을 소비하게됩니다.

    내부 루프가 행렬 연산 인 경우 Python과 Scipy를 제안하지만 행렬 연산이 아닌 경우 내부 루프의 경우 Python이 느리다는 점에 대해 걱정할 것입니다. (또는 어쩌면 나는 파이썬에서 swig 또는 boost :: python을 사용하여 C++을 랩핑합니다)

    파이썬의 장점은 디버깅하기 쉽고 항상 컴파일 할 필요가 없기 때문에 많은 시간을 절약 할 수 있다는 것입니다. 이것은 특히 깊은 내부 프로그램을 프로그래밍하는 데 많은 시간을 소비하는 프로젝트에 유용합니다.

    관련 문제