Friday, November 4, 2016

F # Trading Systems

Trabajé para un gran banco de inversión hace unos años que anunció que se estaba moviendo todos los modelos cuantitativos de F. El objetivo detrás del interruptor fue que F es un lenguaje de programación funcional y disponible en, ambos de los cuales eran cualidades deseables para esta empresa en particular. Me fui antes de que se inició en la transición, así que no sé lo que salió de ella. En cuanto a la relacionada OCaml, Jane Street utiliza famosa eso. respondió Feb 8 11 a las 21:10 Hubo enorme expectación sobre F en la Ciudad y unos bancos / fondos trataron muy agresivamente para contratar a personas con F conocimiento y experiencia en finanzas. Por ejemplo, Luka boloñesa uno de los autores F se incorporó a Credit Suisse hace casi 2 años. También Don Syme utiliza para llevar a cabo conferencias sobre F que visitan y sus posibles aplicaciones a la financiación en la ciudad. responde a las 8 Feb 11 a las 21:23 Yop también hay unos fondos de cobertura que están al acecho para programadores F en SRKX ndash Ginebra 9830 Sep 9 11 a las 14:50 Todas las versiones de 2015 ndash Nikos Jul 8 15 a las 09:23 No que yo sepa , aunque sé que a veces se utiliza como una plataforma por las compañías de gestión de activos (más grandes), por lo que F parece un buen candidato para paralelizar puestos de trabajo de cálculo intensivo. C39s enfoque (y el enfoque orientado a objetos, en general) a alto nivel de matemáticas es estúpida. Tome delegados, 39callbacks39, y patrones de diseño, por ejemplo. Estos son términos que colgaban alrededor de los círculos OO como son la brujería súper avanzada, cuando en realidad son universalmente tan trivial como pasa g (x) en f () (o, f (g (x))). Cuando la gente matemáticas funcionan en este sentido, es como un ingeniero civil encontrarse con un rascacielos construido a partir de plastilina, goma de mascar y Lincoln-logs. Sus mentes se rompen, y los ángeles mueren. ndash bordeo Dic 6 15 a las 01:00 F es principalmente un lenguaje funcional, pero también es rica en características OO. Esto hace que sea muy adecuado, por ejemplo, para la escritura de un marco de precios y al mismo tiempo hacer que la escritura pagos más sencillo. A la larga, sin duda ahorra mucho tiempo de escritura / depuración y mantenimiento de aplicaciones concurrentes models. Writing usuario de F Agentes aplicaciones concurrentes son las aplicaciones que realizan múltiples tareas al mismo tiempo y controlar la interacción entre estas tareas. Ejemplos de aplicaciones concurrentes incluyen interfaces de usuario, servidores que exponen la funcionalidad a través de la red, las aplicaciones basadas en la nube o sistemas de negociación. Como se discute en el artículo anterior. aplicaciones concurrentes no tienen que ser paralelas. El rendimiento requerido se puede obtener a menudo simplemente por serializar las solicitudes a través de un solo hilo, siempre que las operaciones primitivas no bloquean el hilo por un largo tiempo (son asíncronas). Por ejemplo, las interfaces de usuario a menudo usan el hilo principal de la GUI. El desarrollo de las aplicaciones que realizan múltiples tareas al mismo tiempo que interactúan es difícil cuando se utiliza la arquitectura secuencial o basado en threads tradicional. problemas comunes que surgen de este enfoque son la baja capacidad de ampliación, los puntos muertos o condiciones de carrera. En el artículo anterior. Introduje agentes F, que se pueden utilizar para desarrollar sistemas concurrentes eficientes y escalables. Este artículo analiza la arquitectura basada en agentes para sistemas concurrentes desde una perspectiva de alto nivel. Muestra cómo encapsular agentes en componentes reutilizables y cómo componer agentes para construir un sistema concurrente. En la última parte, así también explorar varios patrones que aparecen a menudo en aplicaciones concurrentes que utilizan agentes. Presentación de Arquitecturas concurrente en contraste con los sistemas secuenciales o incluso paralelos, los patrones de comunicación de un sistema concurrente sobre la base de los agentes pueden ser más complicado. Se puede ver la diferencia en la Figura 1. Los círculos representan objetos o agentes y las flechas representan una llamada a un método o un mensaje. Un programa secuencial tiene una sola entrada y una sola salida produce usando sólo un único flujo de control. Un programa paralelo es similar, pero puede bifurcar y unirse al flujo de control. Por otro lado, los sistemas basados ​​en agentes pueden ser diseñados para tener múltiples entradas y salidas y un agente se puede conectar a varios otros agentes. Figura 1. Diferencia entre secuencial, paralelo y arquitecturas basadas en agentes Como muestra el diagrama, los agentes en un sistema concurrente a menudo están conectados con un gran número de otros agentes. Si un agente hace referencia a otros agentes y enviar mensajes directamente a ellos, sería difícil de entender cómo funciona el sistema, por lo que es difícil de modificar y mantener. En lugar de ello, los agentes son por lo general encapsulados en objetos activos. Los objetos se inicializan y se conectan más tarde, ya sea directamente o mediante un archivo de configuración. Agentes de escritura reutilizables En lugar de mostrar una muestra completa de un agente encapsulado en este artículo, se va a centrar en la interfaz pública de un único agente. Su diseñado de tal manera como para demostrar cómo los diferentes tipos de comunicación están representados en F. Hay dos ventajas principales a los agentes en objetos que hace que la aplicación sea más legible y más fácil de mantener que encapsula. Podemos reutilizar algunos de los agentes a través de múltiples sistemas. Un sistema concurrente por lo general necesita agentes que implementan un comportamiento específico de la aplicación (por ejemplo, la comunicación con la bolsa de valores o un cálculo) y agentes que implementan un comportamiento general (como la puesta en cola de trabajo o grupo de artículos). Agentes de la segunda clase son reutilizables a través de una amplia gama de aplicaciones. El Listado 1 muestra la interfaz pública de un tipo BlockingQueueAgent que implementa una colección similar a la BlockingCollection en 4. La cola tiene una cierta capacidad y cuando está lleno, que bloquea las llamadas que intentan añadir más elementos. Cuando la cola está vacía, que bloquea las llamadas que tratan de obtener elementos de la cola hasta que se añaden algunos elementos. La diferencia clave entre la M y la versión es que la solución basada en agentes F es asíncrona y por lo que en realidad no bloquear las discusiones a la espera de un elemento que esté disponible. La interfaz es una versión extendida de un agente implementado en Cómo crear Agentes reutilizables en MSDN y en el blog de los autores. Listado 1. Interfaz pública de un bloqueo de cola El tipo BlockingQueueAgent agente basado expone un único constructor y cuatro miembros de instancia (definiciones de miembros F leemos de izquierda a derecha). Cuando creado, se necesita un número que indica la capacidad de la colección. La interfaz muestra los siguientes tres tipos de miembros comunes a los agentes F: métodos asincrónicos (TInput - gt AsyncltTResultgt). Probablemente el tipo más común de método es un método que devuelve un flujo de trabajo asíncrono como AsyncEnqueue o AsyncDequeue. Estos métodos envían algún mensaje al agente y luego esperar hasta que el agente responde (es decir, cuando un elemento esté disponible o cuando se agrega a la cola). Estos métodos se denominan normalmente desde el interior de un bloque asíncrono en F o mediante el objeto de tareas de C a asegurarse de que no bloqueen un hilo mientras espera. métodos síncronos (unidad - gt TInput). Las operaciones que no tienen un resultado y se pueden completar de inmediato se exponen como métodos síncronos que devuelven la unidad. En el ejemplo anterior, el método de puesta en cola simplemente envía una solicitud al agente, pero no espera hasta que realmente se añade el elemento. Notificaciones (IObservableltTValuegt). Notificaciones del agente de que se informó que el estado del agente cambia o cuando alguna operación se completa puede ser expuesto como eventos, representado mediante el tipo de IObservableltTValuegt que también es utilizado por extensiones reactivas (Rx) Marco. A diferencia de métodos asincrónicos, los eventos no se activan como respuesta a alguna operación y pueden ser manejados por cualquier número de clientes. agentes reutilizables como BlockingQueueAgent y agentes específicos de la aplicación encapsulados como objetos proporcionan bloques de construcción básicos para aplicaciones concurrentes basados ​​en agentes. Los agentes suelen estar conectados de una manera que está organizado de acuerdo con algún esquema común. Los patrones de aplicaciones basadas en agentes Una duerma aplicación basada en agentes bien escrito típicamente tienen una estructura desorganizada, como se muestra en el diagrama de la Figura 1. Sin embargo, la estructura general es más compleja que en la programación secuencial o en paralelo, ya que los agentes son más flexibles en la forma se comunican. En esta sección, nos fijamos en varios patrones comunes para los agentes de la organización. Los patrones se pueden usar como directrices para la organización de los agentes cuando se escribe un cierto tipo de aplicaciones. La lista no es de ningún modo exhaustiva, pero debe demostrar cómo pensar sobre la organización de los agentes en un sistema concurrente. Una aplicación simultánea puede también compuesta por el uso de múltiples patrones (para diferentes propósitos) al mismo tiempo. Trabajador Agente El patrón agente de trabajo (Figura 2) es útil cuando la aplicación necesita para funcionar algunos cálculos con estado en un estado compartido. El estado compartido está protegido por el agente y las peticiones de entrada que invocan operaciones en el estado son serializados automáticamente utilizando el tampón incorporado que almacena los mensajes entregados al agente. El agente de trabajo También puede acceder de forma segura desde varios subprocesos. Figura 2. Agentes trabajadores comunicarse con otros agentes independientemente El agente de trabajo puede ser utilizado, por ejemplo, cuando una aplicación tiene un estado que se modifica utilizando los comandos de la interfaz de usuario, así como por los mensajes que llegan por la red. Los componentes de interfaz de usuario y de red pueden enviar de forma segura comandos al agente (sin bloquear) y el agente actualiza el estado y desencadena eventos que son manejados por la interfaz de usuario, con el fin de actualizar la vista. Un simple ejemplo del patrón agente de trabajo se puede encontrar en el tutorial de MSDN que muestra cómo implementar un servidor de chat sencilla. La aplicación crea un agente que representa una sala de chat y envía todos los comandos relacionados con la sala de chat para el agente. El patrón de capas Agentes agentes capas (Figura 3) es útil cuando tenemos que realizar algunos pre-procesamiento o control antes de llamar a otro agente para hacer el trabajo real, por ejemplo, a los resultados de caché o controlar los errores. En este patrón, el programa se comunica con la primera capa de agentes, que luego envía comandos a la segunda capa de agentes que hacer más trabajo (y así sucesivamente para las capas de terceros / cuarto etc. según sea necesario). Figura 3. Capas agentes comunicaciones previas a los procesos de otros agentes que utilizan este patrón entonces, al manejar los fallos: Los agentes de la primera capa enviarán el trabajo de los agentes en la segunda capa. Cuando una respuesta no se recibe en un tiempo razonable, el agente de la primera capa puede generar nuevo agente en la segunda capa, o puede intentar enviar el trabajo a otro agente de la segunda capa. Del mismo modo, cuando se implementa el almacenamiento en caché, los agentes de la primera capa puede manejar algunas peticiones usando un resultado almacenado en caché Llama a los agentes en la segunda capa para calcular un resultado si la memoria caché ha sido invalidada o duerma contener el resultado todavía. Canalización de procesamiento El patrón de procesamiento en paralelo (Figura 4) es útil cuando se desea procesar los datos en múltiples pasos. La idea detrás de la pauta es que las entradas se envían al primer agente de la tubería. El primer agente que hace el primer paso de la transformación y envía el resultado al segundo agente en la tubería, y así sucesivamente hasta que se calcula un resultado final. Figura 4. El patrón de procesamiento en paralelo utiliza múltiples agentes para calcular un resultado final El patrón de procesamiento en paralelo se puede implementar utilizando colecciones de bloqueo (por ejemplo, el BlockingQueueAgent hemos utilizado como un ejemplo anterior) y, como era de esperar, por cálculos que pueden tomar un elemento de trabajo de una cola previa de la tubería, realizar el cálculo y colocar la pieza de trabajo a la siguiente cola. En esta forma, el patrón se puede utilizar para paralelizar el de procesamiento de datos, pero limitar la cantidad de paralelismo a un nivel razonable. Cuando se ejecuta, todas las etapas de la tubería se ejecutan en paralelo, pero cada paso está procesando a lo sumo una entrada a la vez. Una colección bloqueando entonces limita el número de artículos que se pueden agregar a la tubería y bloquea la persona que llama que envía entradas a la tubería. El ejemplo de procesamiento en paralelo es quizás el más complejo de los patrones discutidos hasta ahora, por lo que vale la pena considerar una estructura de una posible aplicación concreta. Como es habitual con los patrones, la aplicación puede tener varias formas diferentes, por lo que este es sólo un posible enfoque. No voy a mostrarte un código fuente completo, pero el ejemplo debería ser suficiente para demostrar cómo funciona el patrón. La aplicación utiliza el BlockingQueueAgent discutido en la sección anterior como un buffer intermedio entre las etapas de la tubería. El Listado 2 muestra una tubería de muestra con tres pasos. Listado 2. patrón de procesamiento en paralelo implementa mediante el bloqueo basado en agentes cola Los primeros pasos carga datos de alguna entrada y los últimos informes de los datos procesados ​​a alguna salida, por lo que sólo hay un único paso de procesamiento computacional. Sin embargo, todos los pasos pueden requerir algún tiempo para completar. Tanto la carga y presentación de datos se pueden realizar utilizando algunas caras de E / S. El fragmento inicializa primero en dos colas que se utilizan para conectar los pasos. El primer paso se lleva a cabo por el flujo de trabajo loadData. Obtiene la entrada y luego de forma asíncrona añade a la cola. A medida que la cola es una cola de bloqueo, la llamada puede bloquear si la tubería está aún procesando todas las entradas previamente cargadas. El segundo paso (processData) obtiene el valor de la etapa anterior y luego llama processStep1 para realizar algún cálculo asíncrono. El resultado se almacena en la cola de la etapa 1. El último paso (reportResults) a continuación recoge el resultado de la cola y lo almacena en un archivo o informes a la interfaz de usuario utilizando la función reportResult. Procesamiento de la tubería en la práctica el principal beneficio del patrón de procesamiento en paralelo es que proporciona una forma muy simple de equilibrar el compromiso entre el procesamiento excesivamente secuencial (que puede reducir el rendimiento) y el procesamiento excesivamente paralelo (que puede tener gran sobrecarga). Los pasos individuales de la tubería pueden ejecutar sólo cuando el paso anterior proporciona la entrada y el siguiente paso está dispuesto a aceptar más entradas. Cada paso está procesando sólo una única entrada a la vez, por lo que el número de tareas que se ejecutan en paralelo está limitada por el número de pasos en la tubería. El ejemplo de la Lista 2 se basa en una tubería de procesamiento de imágenes basado en agentes, que se puede encontrar en el blog de los autores. En el mundo real, el mismo patrón se ha utilizado también en un sistema de análisis de mercado para la comercialización de energía a E. ON. El agente proxy patrón de agente proxy (Figura 5) es útil cuando el agente real que implementa la funcionalidad no se puede acceder directamente o tiene que ser protegida de alguna manera. La idea de la pauta es que los mensajes se envían a un agente proxy en lugar del agente real. Los dos agentes tienen la misma interfaz (aceptar el mismo tipo de mensajes) y el agente proxy simplemente reenvía el mensaje al agente real y envía notificaciones del agente real de nuevo a la persona que llama. Este patrón puede ser útil por ejemplo en la aplicación de la comunicación basada en agente través de la red. Esto no es compatible con la biblioteca de la base F, pero se puede aplicar fácilmente un agente proxy que serializar mensajes y transmitirlos al agente real ya sea utilizando sockets TCP o utilizando Windows Communication Foundation. Otra posible aplicación está registrando todos los mensajes que se envían al agente o detectar algunas anomalías en la comunicación. En respuesta a una anomalía, el agente proxy puede decidir reiniciar el agente real. Figura 5. La comunicación inter-agente en el patrón de agente proxy. Resumen aplicaciones concurrentes suelen tener que manejar múltiples entradas o realizar múltiples tareas al mismo tiempo. Los requisitos típicos incluyen ciertos rendimiento, la capacidad de aceptar siempre más entradas y seguridad contra fallos. La consecución de estos objetivos utilizando el enfoque tradicional basado en el roscado explícito es difícil y propenso a errores. En este artículo, nos fijamos en la composición de sistemas concurrentes con los agentes compatibles con el proceso de F. Cuando se combina con mensajes inmutables, esto le da una forma más fácil de construir sistemas concurrentes y sin condiciones de carrera y los puntos muertos. Las aplicaciones suelen constar de varios agentes reutilizables (para poner en práctica, por ejemplo, zonas de separación) y agentes específicos de la aplicación (para ejecutar cálculos, etc.). Estos se pueden implementar de muchas maneras, pero por lo general se comunican entre sí en un puñado de maneras distintas comunes: en la segunda mitad de este artículo, nos fijamos en cuatro de estos patrones de comunicación muy comunes. También puede ser que like. WIN 1,000 para una licencia de por vida MultiCharts Algunos corredores de ofrecer mejores tasas, y algunas fuentes de datos proporcionará más datos históricos. Elegir los que se adapte a sus necesidades. Incluso con una estrategia ganadora, sólo un pequeño retraso en la ejecución de órdenes puede hacer toda la diferencia. El comercio automatizado es mucho más rápido que un ser humano. Conocido como un quotscreenerquot, o boardrdquo ldquoquote, esta herramienta le permite monitorear miles de símbolos en una ventana de mercado para encontrar oportunidades rentables. EasyLanguage es un lenguaje estándar de la industria para las estrategias e indicadores de programación. Fue hecha específicamente para los comerciantes principal ventaja es que puede empezar en cuestión de minutos. Backtesting es la aplicación de una estrategia para los datos históricos para ver ldquohow que tendría donerdquo. Cartera backtesting le permite diseñar y probar estrategias en varios símbolos. 2012 T2W Members39 Choice Award Mejor Software de Análisis de comerciantes Mejor Técnico del Sistema Mecánico Software 2011 T2W Members39 del premio al mejor profesional de comercio Plataforma mejor software para Intradiarias Traders 2013 Análisis técnico de acciones y materias primas Premio Readers39 Choice Semifinalista software independiente analítica 1.000 por encima del promedio 2012 BMT mejor de Trading Premio Plataforma de Operaciones del año negociación de Futuros de Plataforma de la Biblioteca de pruebas YearThe atrás para comercial profesional prueba Estrategia de Desarrolladores de espalda es el proceso de estrategias de negociación de pruebas basadas en los datos históricos del mercado para tratar de simular cómo un sistema de comercio podría llevar a cabo en el futuro. las pruebas de espalda es el desarrollo de estrategias de negociación lo que la investigación y la mejora de la calidad son las industrias de la salud y de transporte. ¿Quién querría probar un monitor cardíaco no probado o automóvil Nadie. Lo mismo es cierto para las estrategias de comercio financiero. Todas las estrategias de operación deben ser probados de nuevo, optimizados y validados antes de ir vivo con dinero real. Casi cualquier estrategia de negociación de análisis técnico puede ser probado. Si bien es cierto que muchas aplicaciones comerciales de nivel intermedio proporcionan lenguajes de script, que permiten a los operadores para desarrollar y estrategias de negociación prueba de nuevo, nos pareció que no había nuevo la prueba bibliotecas disponibles para los desarrolladores de sistemas de comercio avanzados que prefieren programar sus estrategias comerciales en la programación de bajo nivel lenguajes como C, C y Java. Por lo tanto, hemos desarrollado un motor de prueba de nuevo para los desarrolladores de sistemas avanzados. Ahora, los desarrolladores pueden crear estrategias en cualquier lenguaje de programación, a continuación, volver probar y optimizar las estrategias para mejorar el rendimiento. BackTestLib permite a los desarrolladores de nuevo a prueba sus sistemas de comercio en C, C, VB, C, R, IronPython, o cualquier otro idioma, a partir de datos de garrapatas o de barras. Simplemente no importa cómo su sistema de comercio está escrito. Todo lo que tiene que hacer es suministrar una lista de oficios, y la parte posterior de la biblioteca pruebas hace el resto para usted. BackTestLib puede calcular el rendimiento de su sistema de comercio utilizando medidas de riesgo de dos docenas incluyendo ratio de Sharpe, relación de Calmar, relación de Sortino, consumo máximo de Down, Monte Carlo Draw Down total PL, riesgo y recompensa Ratio, mayor beneficio, la pérdida más grande, Normal Número de Operaciones / Mes, los registros comerciales y más. Perfecto para los comerciantes estrategia de optimización profesionales saben todas las cosas buenas llegan a su fin. Incluso los mejores sistemas de comercio con el tiempo se dividen en períodos de perder, lo que requiere la optimización del sistema de comercio o de jubilación. Las razones varían, incluyendo cambios en la liquidez, la volatilidad y la dinámica del mercado subyacentes, así como otros factores. Las salidas BackTestLib resultados que representan una serie de mediciones basadas en la rentabilidad y el riesgo de su sistema de comercio cuando se prueba con los datos con los que se haya facilitado. Ejemplo de código // Crear algunos simulado Lista oficios gt lt Comercio oficios nueva lista lt gt Comercio () trades. Add (nueva Comercio (DateTime. Parse (quot1 / 1/2014 9: 30: 45.422 AMquot), el tipo de señal. buy, 24) ) trades. Add (nueva Comercio (DateTime. Parse (quot1 / 1/2014 9: 32: 33.891 AMquot), el tipo de señal. ExitLong, 24.09)) trades. Add (nueva Comercio (DateTime. Parse (quot1 / 1/2014 9: 37: 12.839 AMquot), el tipo de señal. Sell, 24.07)) trades. Add (nueva Comercio (DateTime. Parse (quot1 / 1/2014 9: 48: 27.488 AMquot), el tipo de señal. Salir, 24.19)) trades. Add (nueva Comercio (DateTime. Parse (quot1 / 1/2014 9: 49: 16.415 AMquot), el tipo de señal. buy, 24)) trades. Add (nueva Comercio (DateTime. Parse (quot1 / 1/2014 9: 50: 45.512 AMquot), el tipo de señal. Salir, 24.09)) trades. Add (nueva Comercio (DateTime. Parse (quot1 / 1/2014 9: 51: 14.212 AMquot), el tipo de señal. buy, 24.01)) // ejecutar el backtest dobles lastPrice 24.03 BacktestResults resultados Backtester. Backtest (comercios, lastPrice) // salida los resultados de la consola. WriteLine (número de operaciones quotTotal: quot results. TotalNumberOfTrades.) Consola. WriteLine (número quotAverage de operaciones por mes: quot. results. AverageTradesPerMonth) Consola. WriteLine (número de operaciones rentables quotTotal: quot results. NumberOfProfitableTrades) número consola. WriteLine (quotTotal de pérdida de los oficios:. quot results. NumberOfLosingTrades) Consola. WriteLine (beneficio quotTotal:. quot results. TotalProfit) consola. (pérdida quotTotal.: quot results. TotalLoss).WriteLine consola. WriteLine (quotPercent operaciones rentables: quot results. PercentProfit.) Consola. WriteLine (quotPercent operaciones rentables: quot results. PercentProfit.) Consola. WriteLine (beneficio quotLargest:. quot resultados. LargestProfit) Consola. WriteLine (pérdida quotLargest:. quot results. LargestLoss) Consola. WriteLine (quotMaximum reducción:. quot results. MaximumDrawDown) Consola. WriteLine (quotMaximum drawdown Monte Carlo:. quot results. MaximumDrawDownMonteCarlo) Consola. WriteLine (desviación quotStandard :. quot results. StandardDeviation) Consola. WriteLine (desviación quotStandard anualizada:. quot results. StandardDeviationAnnualized) Consola. WriteLine (desviación quotDownside (MAR 10): quot. results. DownsideDeviationMar10) Consola. WriteLine (quotValue Índice Mensual Agregado (VAM):. quot results. ValueAddedMonthlyIndex) Consola. WriteLine (relación quotSharpe:. quot results. SharpeRatio) Consola. WriteLine (quotSortino relación:. quot results. SortinoRatioMAR5) consola. (relación quotAnnualized Sortino.: quot results. AnnualizedSortinoRatioMAR5) WriteLine consola. WriteLine (relación quotSterling:. quot results. SterlingRatioMAR5) (relación quotCalmar.: quot results. CalmarRatio) Consola Consola. WriteLine. WriteLine (quotRisk para recompensar relación: quot resultados..RiskRewardRatio) // Mostrar el foreach registro de comercio (comercio en results. Trades) Consola. WriteLine (trade. Date quot: quot trade. Signal. ToString () en quot quot trade. Price. ToString)) F (Sumario Trading Phil Trelford describe y demuestra áreas donde F sobresale, como modelos de dominio, la computación y la concurrencia. Bio Phil Trelford es un arquitecto de software en un ISV suministro de software de comercio electrónico en tiempo real. Su carrera abarca hasta el momento más de 20 años, con experiencia en los videojuegos, el ocio, el comercio minorista y los sectores financieros. PHILS reciente trabajo de desarrollo comercial ha sido con C, C, SQL, JavaScript, e incluye más de 5 años en desarrollo de aplicaciones F. Lazo extraño es una conferencia multidisciplinaria que tiene como objetivo reunir a los desarrolladores y pensadores tecnología de la construcción mañanas en ámbitos como las lenguas emergentes, bases de datos alternativas, concurrencia, sistemas distribuidos, el desarrollo móvil y la web. Lazo extraño fue creado en 2009 por el desarrollador de software Alex Miller y ahora está a cargo de un equipo de amigos y desarrolladores sede en St. Louis bajo lazo extraño LLC, una empresa pero no especialmente rentable con fines de lucro. Personas Temas relacionados con el proveedor de contenido Discute Cuéntanos lo que piensas 0 comentarios Hola comunidad extraño Debe registrarse una cuenta InfoQ o inicie sesión para enviar comentarios. Pero theres mucho más detrás de su registro. Obtener el máximo provecho de la experiencia InfoQ. InfoQ semanal de novedades Suscribirse a nuestro boletín electrónico semanal para seguir todo el contenido nuevo en InfoQ Enlaces Útiles InfoQ y todos los derechos de autor de contenido 169 2006-2016 C4Media Inc. InfoQ alojado en Contegix. el mejor proveedor de Internet que hemos trabajado alguna vez con. política de privacidad Actualización del perfil, se le enviará un correo electrónico para validar la nueva dirección de correo electrónico. Esta ventana emergente se cerrará en unos instantes.


No comments:

Post a Comment