BarsMonster: pude ver, aunque para cosas como pilas de redes, que son completamente dependientes de la plataforma, requeriría algún cuerpo de conocimiento antes de poder cambiar de plataforma. Plus cosas como tenedor que son comunes en el mundo POSIX, pero no son posibles en un entorno Windows. Creo it39s una respuesta razonable. ndash Billy ONeal Ago 29 de las 10 de la doce y cincuenta y cinco Linux / UNIX son mucho más fácil de usar para los usuarios remotos simultáneos, lo que facilita la escritura en torno a los sistemas, herramientas de normas como grep / sed / awk / Perl / Ruby / menos de los registros. ssh / scp. todo lo que le llena justo allí. También hay cuestiones técnicas, por ejemplo: para medir el tiempo transcurrido en Windows se puede elegir entre un conjunto de funciones basadas en el impulso del reloj de Windows, y el QueryPerformanceCounter basada en hardware (). El primero es incrementos cada 10 a 16 milisegundos (nota: algunos documentos implica una mayor precisión - por ejemplo, los valores de GetSystemTimeAsFileTime () medida a 100 ns, pero ellos mismos informan el borde 100ns del impulso del reloj hasta que se cumple una vez más). Este último - QueryPerformanceCounter () - tiene problemas de show-stopping donde los diferentes núcleos / CPU puede informar relojes-Since de inicio que se diferencian por varios segundos debido a ser calentado en diferentes momentos durante el arranque del sistema. MSDN documenta esto como un posible error del BIOS, pero su común. Entonces, ¿quién quiere desarrollar sistemas de comercio de baja latencia en una plataforma que no puede ser debidamente instrumentado (Hay soluciones, pero usted no buscar cualquier software que se sientan cómodamente en realce o ACE). Muchos Linux / Unix variantes tienen una gran cantidad de parámetros fácilmente modificables para el comercio de latencia para un solo evento contra la latencia promedio bajo carga, el tamaño de la porción temporal, políticas de planificación, etc. En los sistemas operativos de código abierto, theres también la seguridad de que viene con ser capaz de hacer referencia al código cuando se piensa en algo que debería ser más rápido de lo que es, y el conocimiento de que un (potencialmente enorme) comunidad de personas que han sido y están haciendo tan críticamente - con Windows es obviamente sobre todo va a ser la gente PUTA asignado a mirarlo . En el lado FUD / reputación - algo intangible, pero una parte importante de las razones para la selección OS - Creo que la mayoría de los programadores de la industria serían simplemente confiar en Linux / UNIX más para proporcionar la programación y el comportamiento fiable. Además, Linux / UNIX tiene una reputación de estrellarse menos, de que Windows es bastante fiable en estos días, y Linux tiene una base de código mucho más volátiles que Solaris o FreeBSD. respondido Ago 29 de las 10 de la 0:42 sistemas operativos de cliente de Windows sólo permiten a una persona para utilizar RDP a la vez. Sin embargo Windows Terminal Server ha existido siempre (que era, de hecho, el uso original de RDP) y permite el mayor número de conexiones que tiene licencias de acceso de cliente. Sistemas operativos Windows Server vienen con la capacidad de tener más de un usuario remoto por defecto. Si se pudiera fuente el comentario acerca de la programación entonces yo aquí 1 - esa parte de la respuesta parece ser FUD en este momento para mí (el resto de la respuesta es buena). Tu caso es distinto. ndash Billy ONeal Ago 29 de las 10 de la doce y cincuenta No hay programación UNIX / Linux. It39s una de las áreas en las que las implementaciones difieren. Y Linux, de hecho, ha tenido más de una opción planificador (google Completamente Feria Programador de Linux para el fondo), por lo que incluso decir can39t quotLinux programación es reliablequot. ndash MSalters Ago 30 de 10 en el segundo 11:37 Me las opiniones de histórico y el acceso al kernel manipulación. Aparte de estas razones también creo que al igual que la forma en que se apagan de recolección de basura y el mecanismo similar en Java utilizando estas tecnologías en un tiempo de latencia baja. Podrían evitar de Windows debido a las API de alto nivel que interactúan con un bajo nivel de sistema operativo y luego el núcleo. Por lo que el núcleo es, por supuesto, el núcleo que se puede interactuar con el uso del sistema operativo de bajo nivel. Las API de alto nivel se proporcionan sólo para hacer la vida común de los usuarios más fácil. Sin embargo, en caso de baja latencia esto resulta ser una pérdida capa de grasa y el segundo de la fracción alrededor de cada operación. Por lo que una opción rentable para ganar unos segundos fracción por llamada. Aparte de esto otra cosa a considerar es la integración. La mayor parte de los servidores, centros de datos, intercambio de usar UNIX no ventanas por lo que usar los clientes de una misma familia hace que la integración y la comunicación más fácil. Entonces usted tiene problemas de seguridad (mucha gente por ahí no estén de acuerdo con este punto, sin embargo) la piratería UNIX no es fácil en comparación con la piratería de Windows. No me acuerdo de licencia debe ser el problema para los bancos porque se duchan dinero en cada pieza de hardware y software y las personas que los personalizan, por lo que la compra de licencias no será tan grande es el problema cuando se considera lo que ganan con la compra. contestada 21 de Dic 12 años en 20:05 Su respuesta 2016 Pila de Exchange, IncJOB DESCRIPCIÓN ¿Quieres trabajar en el diseño y desarrollo de alta frecuencia, las estrategias de negociación de baja latencia y sistemas en C SIG es un líder del mercado y entiende la importancia de la tecnología para su negocio. El comercio es una carrera, y se impone el sistema más rápido y más inteligente. La construcción de estos sistemas implica algunos de los problemas de rendimiento más exigentes en cualquier industria y wersquore dispuestos a utilizar cualquier tecnología que nos darán una ventaja. En este papel tendrá la oportunidad de trabajar en estrecha colaboración con los comerciantes y los firmrsquos principales tecnólogos. Lo ideal es que tenga un fondo en los sistemas de comercio y / o la optimización del rendimiento y quieren la oportunidad de competir contra los mejores sistemas en el mundo. Desarrollar y mejorar las aplicaciones comerciales mediante el diseño, aplicación y ejecución de sistemas de software complejos que cumplen con las necesidades del negocio. Resolver problemas complejos, proporcionando soluciones innovadoras y escalables con un enfoque de alta frecuencia y de comercio automatizado de baja latencia. Llevar / obtener un conocimiento profundo del dominio de negocio (comerciales, estrategias de creación de mercado, datos de mercado y baja latencia). Esta es una función práctica en donde se nutren de los desafíos tecnológicos. Verá sus ideas y el trabajo duro utilizado por los operadores con experiencia en una amplia gama de instrumentos y mercados. Cualificaciones una licenciatura (o superior) en una disciplina técnica o relacionada con un mínimo de cinco (5) años de experiencia diseñando y desarrollando aplicaciones que utilizan la programación orientada a objetos en un entorno técnico heterogénea usando C en Linux Un nivel experto desarrollador de C / Linux con conocimiento de - diseño, perfilado, la optimización del rendimiento, OO, la programación genérica, STL, impulso, tomas de corriente, multi-threading y el IPC Excelente atención al detalle, precisión y un conocimiento profundo de desarrollo del ciclo de vida completo y metodologías de reducción de la latencia de optimización del rendimiento /. Un historial demostrado de éxito la entrega de aplicaciones complejas que satisfacen los exigentes objetivos de rendimiento y escalabilidad. Un historial demostrado en el desarrollo del sistema de comercio automatizado tales como la creación de mercado, u otras estrategias Algo gestión de pedidos en el mercado. El conocimiento de valoración de opciones y griegos opción sería muy apreciada. Lo ideal sería tener experiencia previa escribir la lógica de los sistemas de comercio que administra las órdenes / cotizaciones en el mercado. ¿Por qué quieres trabajar para nosotros: Estamos orgullosos de nuestro compromiso con nuestra gente, y está constantemente trabajando para hacer SIG un lugar donde todo el mundo se despierta muy contentos de contribuir a la empresa. Estamos constantemente desafiar el status quo, para garantizar que ofrecemos un ambiente donde se puede prosperar. Nuestros valores fundamentales son la innovación, colaboración, aprendizaje, responsabilidad e integridad. Innovación: Porque siempre queremos a desafiar el status quo, y llevar, nuevas ideas interesantes, innovadoras a la mesa. Colaboración: Porque queremos que amas lo que haces, y el amor con quién trabajar. Así que salir y colaborar con sus colegas trabajamos con personas inteligentes - asociarse con ellos y llevar sus ideas al aprendizaje: Siempre estamos buscando en el edificio y el intercambio de nuevas habilidades, conocimientos y capacidades, y le queremos, así Queremos a ser el mejor en lo que haces, y nunca deja de aprender. Responsabilidad: Usted es el que llevar sus ideas a la vida, ya se trate de una nueva estrategia comercial, tecnología de punta o una nueva forma de hacer las cosas aquí. Estos son sus ideas, y que son responsables de la entrega. Se realiza la entrega, y celebramos su éxito. Integridad: Todo el mundo, la vida cotidiana y respira un conjunto de principios basados en la corrección ética y moral. Por lo tanto, si usted piensa que nuestros valores se alinean con los suyos, a continuación, estaban seguros encajan perfectamente en interminables en SIG SIG no está aceptando hojas de vida no solicitados de empresas de búsqueda. Todas las hojas de vida presentadas por firmas de búsqueda de cualquier empleado de SIG a través de e-mail, Internet o directamente sin un acuerdo de búsqueda válida por escrito serán considerados propiedad exclusiva de SIG, y ninguna tarifa se pagarán en caso de que el candidato es contratado por SIG. el mejor lenguaje de programación para sistemas de comercio algorítmico por Michael Salas-Moore el 26 de julio 2013 Una de las preguntas más frecuentes que recibo en la carpeta de correo QS es ¿Cuál es el mejor lenguaje de programación para el comercio algorítmico. La respuesta corta es que no hay mejor lenguaje. parámetros de la estrategia, el rendimiento, modularidad, el desarrollo, la capacidad de recuperación y el costo de todo deben ser considerados. Este artículo se describen los componentes necesarios de una arquitectura de sistema de negociación algorítmica y cómo las decisiones relativas a la aplicación afectará a la elección de la lengua. En primer lugar, se tendrán en cuenta los principales componentes de un sistema de comercio algorítmico, tales como las herramientas de investigación, optimizador de la cartera, gestor de riesgos y el motor de ejecución. Posteriormente, se examinarán diferentes estrategias de negociación y cómo afectan al diseño del sistema. En particular, será tanto se discutirá la frecuencia de la negociación y el volumen de operaciones probable. Una vez que la estrategia de negociación ha sido seleccionado, es necesario arquitecto todo el sistema. Esto incluye elección del hardware, el sistema operativo (s) y la resistencia del sistema contra eventos raros, potencialmente catastróficas. Mientras se está considerando la arquitectura, debe prestarse la debida atención a rendimiento - tanto a las herramientas de investigación, así como el entorno de ejecución en vivo. ¿Cuál es el sistema de comercio tratando de realizar antes de decidir sobre el mejor lenguaje para escribir un sistema de comercio automatizado es necesario definir los requisitos. Es el sistema va a ser puramente de ejecución basado ¿El sistema requiere la construcción de un módulo de gestión de riesgos o de la cartera ¿El sistema requiere una backtester de alto rendimiento para la mayoría de las estrategias del sistema de comercio se pueden dividir en dos categorías: Investigación y generación de señales. La investigación se refiere a la evaluación de una estrategia de actuación a través de datos históricos. El proceso de evaluación de una estrategia de negociación sobre los datos de mercado antes de que se conoce como backtesting. El tamaño de los datos y la complejidad algorítmica tendrán un gran impacto en la intensidad computacional de la backtester. velocidad de la CPU y la concurrencia a menudo son los factores limitantes en la optimización de la velocidad de ejecución de la investigación. La generación de señales se ocupa de generar un conjunto de señales de operación de un algoritmo y el envío de este tipo de órdenes al mercado, por lo general a través de una casa de valores. Para ciertas estrategias se requiere un alto nivel de rendimiento. E / S de cuestiones tales como ancho de banda y latencia son a menudo el factor limitante en la optimización de los sistemas de ejecución. Por lo tanto la elección de idiomas para cada componente de todo el sistema puede ser muy diferente. El tipo, frecuencia y volumen de Estrategia El tipo de estrategia algorítmica empleado tendrá un impacto sustancial en el diseño del sistema. Será necesario tener en cuenta los mercados se comercializan, la conectividad a los proveedores de datos externos, la frecuencia y el volumen de la estrategia, el equilibrio entre la facilidad de desarrollo y la optimización del rendimiento, así como cualquier hardware personalizado, incluida la costumbre de ubicación conjunta servidores, GPU o FPGAs que podrían ser necesarios. Las opciones de tecnología para una estrategia de renta variable de Estados Unidos de baja frecuencia serán muy diferentes de las de una alta frecuencia de arbitraje estadístico de comercio estrategia en el mercado de futuros. Antes de la elección de la lengua muchos proveedores de datos deben ser evaluados que pertenecen a una estrategia de la que nos ocupa. Será necesario tener en cuenta la conectividad con el proveedor, la estructura de cualquier API, la puntualidad de los datos, los requisitos de almacenamiento y capacidad de recuperación en la cara de un proveedor de desconectarse. También es aconsejable poseer un acceso rápido a múltiples proveedores diversos instrumentos, todos tienen sus propias peculiaridades de almacenamiento, ejemplos de los cuales incluyen múltiples símbolos de cotización de las acciones y las fechas de vencimiento de futuros (por no hablar de todos los datos específicos de venta libre). Esto debe tenerse en cuenta en el diseño de la plataforma. Frecuencia de la estrategia es probable que sea uno de los mayores impulsores de la forma en que se define el conjunto de tecnología. Las estrategias que emplean datos con mayor frecuencia que las barras minúsculas o en segundo lugar requieren una consideración importante en cuanto a rendimiento. Una estrategia superior en segundo bares (es decir, los datos tick) conduce a un diseño basado en el rendimiento como la exigencia principal. Para las estrategias de alta frecuencia tendrá que ser almacenado y evaluado una cantidad sustancial de datos de mercado. Software como HDF5 o kdb se utilizan comúnmente para estas funciones. Con el fin de procesar los amplios volúmenes de datos necesarios para las aplicaciones de HFT, se debe utilizar un sistema de backtester y ejecución ampliamente optimizado. C / C (posiblemente con algún ensamblador) es probable que el candidato lenguaje más fuerte. estrategias de ultra-alta frecuencia es casi seguro que requieren hardware personalizado tales como FPGAs, cambio de ubicación conjunta y puesta a punto de interfaz de kernel / red. Sistemas de investigación de los sistemas de investigación suelen incluir una mezcla de desarrollo interactivo y secuencias de comandos automatizadas. La primera a menudo se lleva a cabo dentro de un entorno de desarrollo como Visual Studio, MatLab o R Studio. Este último implica extensos cálculos numéricos más numerosos parámetros y puntos de datos. Esto lleva a una elección de idioma proporcionar un entorno fácil de código de prueba, sino que también proporciona suficiente rendimiento para evaluar las estrategias más de múltiples dimensiones de parámetros. IDE típicas en este espacio incluyen Microsoft Visual descripciones sencillas de toda la pila de proyecto (a través del ORM base de datos, LINQ) MatLab C / C, que contiene utilidades de depuración extensa, las capacidades de finalización de código (a través de Intellisense) y. los cuales está diseñado para una amplia álgebra lineal numérica y operaciones vectorizados, pero de una manera interactiva consola de R-Studio. que envuelve la consola lenguaje estadístico R en una de pleno derecho IDE Eclipse IDE para Linux Java y C y entornos de desarrollo semi-propietarios como Enthought Toldo para Python, que incluyen bibliotecas de análisis de datos, tales como NumPy. SciPy. scikit-learn y pandas en un único entorno interactivo (consola). Para backtesting numérica, todos los idiomas antes mencionados son adecuados, aunque no es necesario utilizar una interfaz gráfica de usuario / IDE como el código se ejecuta en segundo plano. La consideración principal en esta etapa es la de la velocidad de ejecución. Un lenguaje compilado (como C) es a menudo útil si las dimensiones de parámetros backtesting son grandes. Recuerde que es necesario tener cuidado con este tipo de sistemas si ese es el idioma de caso interpretado como Python a menudo hacen uso de las bibliotecas de alto rendimiento, tales como NumPy / pandas para la etapa de backtesting, con el fin de mantener un grado razonable de competitividad con el compilado equivalentes. En última instancia el idioma elegido para la backtesting será determinado por las necesidades de algoritmos específicos, así como la gama de bibliotecas disponibles en el idioma (más sobre esto más adelante). Sin embargo, el idioma utilizado en los entornos Backtester y de investigación puede ser completamente independientes de los utilizados en los componentes de la construcción de la cartera, gestión de riesgos y de ejecución, como se verá. Cartera de construcción y gestión de riesgo Los componentes de la construcción de la cartera y de gestión de riesgos son a menudo pasados por alto por los comerciantes minoristas algorítmicos. Esto es casi siempre un error. Estas herramientas proporcionan el mecanismo por el cual se conservará capital. No sólo intentan aliviar el número de apuestas arriesgadas, sino también minimizar la rotación de los oficios a sí mismos, lo que reduce los costos de transacción. versiones sofisticadas de estos componentes pueden tener un efecto significativo en la calidad y consistentcy de la rentabilidad. Es sencillo crear un establo de estrategias como el mecanismo de construcción de la cartera y gestor de riesgos puede ser fácilmente modificado para manejar múltiples sistemas. Por lo tanto deben ser considerados componentes esenciales desde el principio del diseño de un sistema de comercio algorítmico. El trabajo del sistema de construcción de la cartera es tomar un conjunto de operaciones deseadas y producir el conjunto de las operaciones reales que reduzcan al mínimo la rotación, mantener la exposición a diversos factores (por ejemplo, sectores, clases de activos, volatilidad, etc.) y optimizar la asignación de capital para varios estrategias en una cartera. construcción de la cartera reduce a menudo a un problema de álgebra lineal (tal como una matriz de factorización) y por lo tanto el rendimiento es altamente dependiente de la eficacia de la aplicación de álgebra lineal numérica disponible. bibliotecas comunes incluyen uBLAS. LAPACK y NAG para C. MatLab también posee operaciones con matrices ampliamente optimizadas. Python utiliza NumPy / SciPy para tales cálculos. Una cartera reequilibrado con frecuencia requerirá una biblioteca compilada matriz (y bien optimizado) para llevar a cabo este paso, a fin de no cuello de botella en el sistema de comercio. La gestión de riesgos es otra parte muy importante de un sistema de comercio algorítmico. El riesgo puede ser de muchas formas: aumento de la volatilidad (aunque esto puede ser visto como deseable para ciertas estrategias), el aumento de las correlaciones entre las clases de activos, por defecto de contraparte, las interrupciones del servidor, eventos cisne negro y errores no detectados en el código de comercio, por nombrar pocos. Componentes de la gestión del riesgo Trata de anticipar los efectos de la excesiva volatilidad y correlación entre las clases de activos y su posterior efecto (s) en la capital comercial. A menudo, esto se reduce a un conjunto de cálculos estadísticos, como las pruebas de tensión de Monte Carlo. Esto es muy similar a las necesidades computacionales de un derivado de motor de precios y como tal será CPU-bound. Estas simulaciones son altamente parallelisable (ver abajo) y, en cierta medida, es posible tirar de hardware en el problema. Sistemas de Ejecución El trabajo del sistema de ejecución es para recibir las señales de comercio filtrados a partir de los componentes de la construcción de la cartera y de gestión de riesgos y enviarlos a una casa de valores u otros medios de acceso a los mercados. Para la mayoría de las estrategias de negociación algorítmica minoristas esto implica una conexión API o FIX para una casa de valores tales como Interactive Brokers. Las principales consideraciones al decidir sobre un lenguaje incluyen la calidad de la API, la disponibilidad de idiomas-envoltura para un API, frecuencia de ejecución y el deslizamiento esperado. La calidad de la API se refiere a qué tan bien documentado que es, qué tipo de prestaciones que ofrece, si se necesita software independiente que se acceda o si una puerta de entrada se puede establecer de una manera sin cabeza (es decir, sin interfaz gráfica de usuario). En el caso de Interactive Brokers, la herramienta de Trader Workstation debe estar en ejecución en un entorno de interfaz gráfica de usuario con el fin de tener acceso a su API. Una vez tuve que instalar una edición de escritorio Ubuntu en un servidor de la nube de Amazon para acceder de forma remota Interactive Brokers, puramente por esta razón mayoría de las API proporcionarán una C y / o interfaz Java. Por lo general, corresponde a la comunidad para desarrollar envoltorios específicos del idioma para C, Python, R, Excel y MATLAB. Tenga en cuenta que con cada plug-in adicional utilizada (especialmente las envolturas de la API) existe la posibilidad de errores se deslicen en el sistema. Pruebe siempre los plugins de este tipo y garantizar que se mantienen de forma activa. Un indicador de que vale la pena es ver cómo se han hecho muchos nuevos cambios a una base de código en los últimos meses. frecuencia de ejecución es de suma importancia en el algoritmo de ejecución. Tenga en cuenta que cientos de órdenes se pueden enviar cada minuto y, como tal, el rendimiento es crítico. El deslizamiento se haya incurrido a través de un sistema de ejecución de mal rendimiento y esto tendrá un impacto dramático en la rentabilidad. lenguajes de tipo estático (véase más adelante), tales como C / Java son generalmente óptimos para su ejecución, pero hay una compensación en tiempo de desarrollo, prueba y facilidad de mantenimiento. lenguajes de tipo dinámico, como Python y Perl son ahora generalmente lo suficientemente rápido. Siempre que los componentes están diseñados de forma modular (véase más adelante) de manera que se pueden intercambiar como las escalas del sistema. Planificación y Desarrollo Arquitectónico de proceso Los componentes de un sistema de comercio, sus requisitos de frecuencia y volumen se han discutido anteriormente, pero la infraestructura del sistema aún no se ha cubierto. Aquellos que actúan como un comerciante minorista o trabajar en un pequeño fondo probablemente serán diferentes papeles. Será necesario estar cubriendo los parámetros del modelo alfa, gestión del riesgo y de ejecución, así como la aplicación final del sistema. Antes de ahondar en los lenguajes específicos se discutirá el diseño de una arquitectura óptima del sistema. La separación de preocupaciones Una de las decisiones más importantes que se deben hacer al principio es cómo separar las preocupaciones de un sistema de comercio. En el desarrollo de software, esto significa esencialmente cómo dividir los diferentes aspectos del sistema de comercio en componentes modulares independientes. Al exponer las interfaces en cada uno de los componentes es fácil de intercambiar partes del sistema para otras versiones de que la ayuda de rendimiento, fiabilidad y mantenimiento, sin modificar ningún código dependencia externa. Esta es la mejor práctica para este tipo de sistemas. Para que las estrategias a frecuencias más bajas se aconsejará a tales prácticas. Para la negociación de alta frecuencia ultra el libro de reglas podría tener que ser ignorado a expensas de ajustar el sistema para un rendimiento aún más. Un sistema acoplado con más fuerza puede ser deseable. Crear un mapa componente de un sistema de comercio algorítmico vale un artículo en sí mismo. Sin embargo, un enfoque óptimo es para asegurarse de que son componentes separados para las entradas de datos de mercado históricos y en tiempo real, almacenamiento de datos, la API de acceso a datos, Backtester, parámetros de la estrategia, la construcción de carteras, gestión de riesgos y sistemas de ejecución automatizados. Por ejemplo, si el almacén de datos que se utiliza actualmente es de bajo rendimiento, incluso a niveles significativos de optimización, puede cambiarse por reescrituras mínimos en la ingestión de datos o acceso a los datos API. En la medida de la que la backtester y los componentes posteriores se refiere, no hay diferencia. Otro de los beneficios de los componentes separados es que permite que una variedad de lenguajes de programación para ser utilizado en el sistema general. No hay necesidad de limitarse a un solo idioma, si el método de comunicación de los componentes es independiente del lenguaje. Este será el caso si se están comunicando a través de TCP / IP, ZeroMQ o algún otro protocolo independiente del lenguaje. Como ejemplo concreto, consideremos el caso de un sistema de pruebas retrospectivas siendo escrito en C para procesamiento de números de rendimiento, mientras que los sistemas y gestor de la cartera de ejecución están escritos en Python usando SciPy y IBPy. Consideraciones de rendimiento El rendimiento es una consideración importante para la mayoría de las estrategias de negociación. Para las estrategias de frecuencia más alta es el factor más importante. Rendimiento cubre una amplia gama de temas, tales como la velocidad de ejecución algorítmica, la latencia de red, ancho de banda, los datos de E / S, la concurrencia / paralelismo y escalamiento. Cada uno de estos elementos se encuentran en forma individual por los grandes libros de texto, por lo que este artículo sólo pueden rayar la superficie de cada tema. Arquitectura y la elección de idioma seleccionado, se discuten en términos de sus efectos sobre el rendimiento. La idea predominante según lo declarado por Donald Knuth. uno de los padres de la informática, es que la optimización prematura es la raíz de todos los males. Esto es casi siempre el caso -, excepto cuando se construye un algoritmo de negociación de alta frecuencia Para aquellos que están interesados en las estrategias de frecuencias más bajas, un enfoque común es la construcción de un sistema de la manera más simple posible y sólo optimizar los cuellos de botella que comienzan a aparecer. Herramienta básica se utilizan para determinar dónde surgen cuellos de botella. Los perfiles pueden ser hechas para todos los factores mencionados anteriormente, ya sea en un entorno MS Windows o Linux. Hay muchas herramientas del sistema operativo y de idioma disponibles para hacerlo, así como utilidades de terceros. la elección del idioma se discutirá ahora en el contexto de rendimiento. C, Java, Python, R y MATLAB contiene todas las bibliotecas de alto rendimiento (ya sea como parte de su norma o externamente) para la estructura de datos básica y la algorítmica. barcos C con la Biblioteca de plantillas estándar, mientras que Python contiene NumPy / SciPy. tareas matemáticas comunes se encuentran en estas bibliotecas y rara vez es beneficioso para escribir una nueva aplicación. Una excepción es si se requiere una arquitectura de hardware altamente personalizado y un algoritmo está haciendo un amplio uso de extensiones propietarias (como cachés personalizados). Sin embargo, a menudo la reinvención de la rueda que pierde el tiempo podría ser mejor gastado desarrollo y optimización de otras partes de la infraestructura de negociación. El tiempo de desarrollo es extremadamente valioso, especialmente en el contexto de los desarrolladores individuales. Latencia a menudo es un problema del sistema de ejecución como las herramientas de investigación, generalmente situados en la misma máquina. En el primer caso, la latencia puede ocurrir en varios puntos a lo largo de la ruta de ejecución. Las bases de datos deben ser consultados (latencia de disco / red), las señales deben ser generados (syste operativo, la latencia de mensajes de kernel), las señales enviadas comerciales (NIC) de latencia y las órdenes procesadas (sistemas de intercambio de latencia interna). Para las operaciones de mayor frecuencia es necesario estar íntimamente familiarizado con la optimización kernal así como la optimización de transmisión de la red. Esta es una zona profunda y es significativamente más allá del alcance de este artículo, pero si se desea un algoritmo UHFT a continuación, ser consciente de la profundidad de los conocimientos necesarios de caché es muy útil en el kit de herramientas de desarrollador de comercio cuantitativo. El almacenamiento en caché se refiere al concepto de almacenamiento de datos de acceso frecuente en una manera que permite el acceso de mayor rendimiento, a expensas de potencial estancamiento de los datos. Un caso de uso común se produce en el desarrollo web al tomar datos de una base de datos relacional de disco con respaldo y ponerlo en la memoria. Toda solicitud posterior de los datos no tienen que golpear la base de datos y así mejoras de rendimiento pueden ser significativos. Para situaciones comerciales de almacenamiento en caché puede ser muy beneficioso. Por ejemplo, el estado actual de una cartera estrategia se puede almacenar en una memoria caché hasta que se reequilibra, de manera que la lista doesnt necesita ser regenerado en cada bucle del algoritmo de negociación. Dicha regeneración es probable que sea una operación de la CPU o el disco I / O. Sin embargo, el almacenamiento en caché no es sin sus propios problemas. La regeneración de datos de la caché a la vez, debido a la naturaleza volatilie de almacenamiento de memoria caché, puede colocar una demanda significativa en la infraestructura. Otra cuestión es el perro con pilotes. donde varias generaciones de una nueva copia caché se realizan bajo carga extremadamente alta, lo que conduce a la cascada fracaso. Asignación dinámica de memoria es una operación costosa en la ejecución de software. Por lo tanto, es imperativo para las aplicaciones comerciales de mayor rendimiento para estar bien conscientes de cómo se asigna y desasigna durante el desarrollo del programa de memoria. normas lingüísticas más recientes, como Java, C y Python todos realizan la recolección de basura automático. lo que se refiere a la cancelación de asignación de memoria asignada dinámicamente cuando los objetos salen de su alcance. La recolección de basura es extremadamente útil durante el desarrollo, ya que reduce los errores y las ayudas para mejorar la legibilidad. Sin embargo, con frecuencia es subóptima para ciertas estrategias de negociación de alta frecuencia. A menudo se desea la recogida de basura a medida para estos casos. En Java, por ejemplo, sintonizando el recolector de basura y la configuración del montón, es posible obtener un alto rendimiento para las estrategias de HFT. C doesnt proporcionar un recolector de basura nativo y lo que es necesario para manejar toda la asignación de memoria / desasignación como parte de una implementación de objetos. Mientras que potencialmente propenso a errores (que puede conducir a la referencia colgante) es extremadamente útil tener un control detallado de la forma en que los objetos aparecen en el montón para ciertas aplicaciones. Al elegir un idioma asegúrese de estudiar cómo funciona el recolector de basura y si puede ser modificado para optimizar para un caso en particular. Muchas operaciones en los sistemas de negociación algorítmica son susceptibles de paralelización. Esto se refiere al concepto de la realización de múltiples operaciones de programación al mismo tiempo, es decir en paralelo. Los llamados algoritmos embarazosamente paralelos incluyen pasos que se pueden calcular de forma totalmente independiente de otras medidas. Ciertas operaciones estadísticas, tales como simulaciones de Monte Carlo, son un buen ejemplo de algoritmos embarazosamente paralelos como cada sorteo y posterior operación de trazado se puede calcular sin el conocimiento de otros caminos. Otros algoritmos son sólo parcialmente parallelisable. dinámica de fluidos simulaciones son un ejemplo tal, en el que el dominio de cálculo se puede subdividir, pero en última instancia, estos dominios deben comunicarse entre sí y por lo tanto las operaciones son parcialmente secuencial. Parallelisable algoritmos están sujetos a la Ley de Amdahl. que proporciona un límite superior teórico para el aumento de rendimiento de un algoritmo paralelizada cuando se somete a N procesos separados (por ejemplo, sobre un núcleo de CPU o hilo). Paralelización se ha vuelto cada vez más importante como medio de optimización desde el procesador velocidades de reloj se han estancado, como nuevos procesadores contienen muchos núcleos con el que realizar cálculos paralelos. El ascenso de hardware de gráficos de consumo (predominantemente para videojuegos) ha dado lugar al desarrollo de unidades de procesamiento gráfico (GPU), que contienen cientos de núcleos para las operaciones altamente concurrentes. Tales GPU son ahora muy asequible. marcos de alto nivel, tales como Nvidia CUDA han conducido a la adopción generalizada en el mundo académico y las finanzas. Tal hardware de la GPU es por lo general sólo es adecuado para el aspecto de la investigación de las finanzas cuantitativas, mientras que el otro hardware más especializado (incluyendo campo-matrices de puertas programables - FPGAs) se utilizan para (U) HFT. Hoy en día, la mayoría de langauges actuales son compatibles con un grado de concurrencia / multihilo. Por lo tanto, es sencillo para optimizar un backtester, ya que todos los cálculos son generalmente independientes de los otros. Incrustaciones en ingeniería de software y las operaciones se refiere a la capacidad del sistema para manejar cargas crecientes constantemente en forma de mayores solicitudes, el uso del procesador mayor y más asignación de memoria. En el comercio algorítmico es una estrategia capaz de escalar si se puede aceptar grandes cantidades de capital y aún producir retornos consistentes. La pila de tecnología de operaciones escalas si puede soportar volúmenes comerciales más grandes y mayor latencia, sin cuellos de botella. Mientras que los sistemas deben ser diseñados a escala, a menudo es difícil predecir de antemano dónde se producirá un cuello de botella. registro riguroso, las pruebas, el perfilado y el seguimiento serán de gran ayuda en un sistema que permite a escala. lenguas mismas se describen a menudo como no escalable. Este suele ser el resultado de la información falsa, en lugar de hecho duro. Es la tecnología de pila total que debería determinarse para la escalabilidad, no el lenguaje. Somos expertos en el empleo de carrera tecnología. Somos una igualdad de oportunidades Tecnología Servicio de Empleo Este sitio web es mantenido por Next Step Sistemas Empleo en Chicago - Trabajo en Nueva York - Servicios en New Jersey - Trabajo en Filadelfia - Trabajos en Connecticut - Trabajo en Denver - Trabajo en Dallas - Trabajo en Houston - Empleo en Phoenix - trabajo en Silicon Valley - Y muchos más zonas C - C - - Java - Oracle - SQL Server - Unix - Linux - redes - almacenamiento - Systems - Soporte - ventas - Plus Más programador - Software - Desarrollador - ingeniero de la red - analista de base de datos - Sistemas de administrador - Ingeniero de Sistemas - Managed Hosting - Gerente - director - VP - CIO - CTO - Plus Más Ejecutivo firma de búsqueda con especializados reclutadores técnicos o de TI reclutadores servicio a los clientes de todos los tamaños a nivel nacional desde el año 1995. las empresas de reclutamiento, TI Agencias de Empleo , headhunters y empresas de reclutamiento ejecutivo. La experiencia con la información Empleos de Equipo de Tecnología de la programación o de TI Tech Empleo Empleo Sistemas.
No comments:
Post a Comment