Cómo Comenzar Utilizando ForexConnect .NET API (Win32/Win64)

From FxCodeBaseWiki
Jump to: navigation, search

Este artículo describe cómo comenzar utilizando ForexConnect .NET API. Aquí puede encontrar los basicós de API explicada y instrucciones paso a paso en creando una muestra de trabajo de una aplicación de comercio sencillo.

Platform: Microsoft .NET Framework 2.0 y más tarde en MS Windows 32-bit/64-bit versión
Language: C# .NET
IDE: Microsoft Visual Studio 2005, 2008, 2010

ForexConnect .NET biblioteca uso con el marco de la aplicación Microsoft Silverlight no compatible.
ForexConnect .NET ejecutando de biblioteca utilizando Mono no compatible.

Obtener y Instalar Bibliotecas de ForexConnect API

  1. Descarga la última versión de ForexConnect API:
    • Si tiene un versión de 32-bit de Microsoft Windows, descarga versión de ForexConnect API.
    • Si tiene un versión de 64-bit version de Microsoft Windows, descarga construye de 64-bit de ForexConnect API.
    Véase el diálogo de System Properties para información sobre el versión de su sistema.
    Nota que si su sistema es Windows XP y no vea "x64 Edition" se cotiza en el diálogo de System Properties, a continuación esta ejecutando un versión de 32-bit de Windows XP.
  2. Comienza el instalador y a continuación siga las instrucciones de el wizard de laa instalación.
Además, supondrá ForexConnect API es instalado en C:\Program Files\Candleworks\ForexConnectAPI\.

Utilizando ForexConnect API con Microsoft Visual Studio

Debe hacer cambias siguiente en su proyecto C#:

1. Configura el evento post-build de su proyecto copiar bibliotecas de ForexConnect API y archivos de apoyo al carpeta dónde su programa es construido:
En el proyecto Properties → Build Events → Post-Build lónea de comando evento, anida el siguiente texto:
copy "C:\Program Files\Candleworks\ForexConnectAPI\bin\*.*" "$(TargetDir)"
2. Anida una referencia al asamblea fxcore2.dll .NET a su proyecto.
  • Si usa .NET 4.0 a continuación usa el conveniente asamblea .NET fxcore2.dll que puede ser encuentra en la carpeta "C:\Program Files\Candleworks\ForexConnectAPI\bin\net\dotnet40\".
  • Si usa .NET 2.0 a continuación usa asamblea fxcore2.dll desde carpeta "C:\Program Files\Candleworks\ForexConnectAPI\bin\net\dotnet20\".
3. Anida el namespace fxcore2 a su código:
        using fxcore2;

Distribución

Debe distribuir el programa con todas las bibliotecas binarias y archivos auxiliares de "C:\Program Files\Candleworks\ForexConnectAPI\bin". Bibliotecas y archivos auxiliares de ForexConnect debe ser localizado en la carpeta dónde su aplicación es instalado.

Tenga en cuenta que asamblea fxcore2.dll debe colocarse demasiado en la carpeta dónde su aplicación es instalado demasiado.

ForexConnect .NET API Features

Arquitectura Orientada a Evento

Todos APIs utilizado por ForexConnect son asincrono, por lo que tendrá aplicar un arquitectura orientada a eventos en el código.

Una arquitectura impulsada por eventos es un patrón de arquitectura de software que gestiona el comportamiento de la producción, la detección y el consumo de eventos, así como las respuestas que evocan. En este contexto, un evento debe tratarse como algún valor o mensajes que pueden ser identificados dentro de un flujo continuo de entradas supervisadas, tales como condiciones específicas o señales o algo más.

Arquitecturas orientada a eventos normalmente consisten en evento productores y consumidores de evento. Los consumidores eventos suscripción a algún administrador de eventos, y los productores del evento publican en este gestor. Cuando el administrador recibe un evento de un productor, reenvía este evento a todos los consumidores registrados o almacena el evento después de reenvío.

Un controlador de eventos es una rutina de devolución de llamada que opera de forma asincrónica y se encarga de aportaciones recibidas en un programa (eventos). En este contexto, un evento es algún elemento significativo de la información de la aplicación de un marco de desarrollo subyacente, generalmente de un kit de herramientas de (GUI) interfaz gráfica de usuario o algún tipo de rutina de entrada. En el lado de GUI, por ejemplo, eventos incluyen pulsaciones de tecla, actividad del ratón, selecciones de acción o caducidad del temporizador. En el lado de entrada, eventos incluyen abrir o cerrar archivos y secuencias de datos, lectura de datos y así sucesivamente..

Control de eventos es la recepción de un evento en algún controlador de eventos de un productor de eventos y procesos posteriores.

Los procesas involucrados en el gestión de eventos incluye:

  • Identificando dónde un evento debe ser reenviado;
  • Haciendo el reenvía;
  • Recibiendo el evento reenviado;
  • Tomando algunos tipo de acción caso en respuesta, como escribiendo a una rutina de error o recuperación o enviando una mensaje;
  • En última instancia el controlador de evento puede reenvia el evento a un consumidor de evento.

El beneficio de arquitecturas orientada a eventos es que permiten arbitrariamente grandes colecciones de los consumidores y productores, junto con algunos de los directivos, para intercambiar información de respuesta y estado actual. También normalmente son bastante sensibles a eventos como se producen y funciona bien en entornos de comunicación imprevisible y asincrónica.

ForexConnect .NET Event Handling Peculiarities

El ForexConnect .NET API ya tiene implementaciones de interfaces IO2GSessionStatus y IO2GResponseListener recibir notificaciones de cambias de estado de sesión y recibiendo de datos. Por lo que puede usa eventos caso .NET del objeto O2GSession en vez de aplicando estos interfaces por su propio. Sin embargo puede aplicarlos y usarlos recibir notificaciones desde el objeto de sesión después de suscripción si esto es más adecuado para usted.

Tenga en cuenta que todas controladores de evento que han implementado para eventos de O2GSession se les llama en un subproceso independiente. Por lo que deben tener en cuenta los siguientes:

  1. Siempre usted debe proporciona acceso de segura para los subprocesos a todas datos almacenado en su aplicación que es actualizado desde su controladores de evento.
  2. No necesita sincronizar llame de los controladores de evento y no necesita pensar sobre el controlador de evento 're-entrando' por que todos eventos desde API ya están sincronizados en un subproceso. Por lo tanto se denominan controladores de eventos en secuencia.
  3. Debe controla cada evento tan rápido como sea posible porque están sincronizados en el subproceso de 'handlers' por la biblioteca de ForexConnect. Puede ejecutar sus propios subprocesos para acelerar los manejo de los eventos.

Object Lifetime Management

No necesita cualquier gestión de los recursos adicionales para los objetos obtenidos utilizando ForexConnect .NET API. Sin embargo, se recomienda llamar el método Dispose() para todos objetos que implementarlo. Estas llamadas permiten liberar recursos del sistema no utilizados más eficazmente. Puede usa el declaración de using para este propósito:

    using (O2GValueMap valuemap = factory.createValueMap())
    {
         //...
    }

Sample Application Using ForexConnect .NET API

Visión General

Este muestra es una aplicación de console sencillo que usa ForexConnect .NET API. Este aplicación tiene las características siguiente:

  1. Conectando a un servidor de comercio utilizando las credenciales de usuario predefinidas
  2. Recuperando precios para EUR/USD
  3. Recuperando la tabla de cuentas para el usuario
  4. Creando un orden de Open Market para EUR/USD cuando entrada 'b' (compra) o 's'(vende)
  5. Recuperando la tabla de órdenes y recibiendo notificaciones de actualizaciones en este tabla
  6. Finalizando la ejecución de la aplicación cuando se entrada 'q' (quita)

Simplifica la muestra, el todo lógica de aplicación se implementado en uno clase MyApp.

Puede descarga el todo código de fuente de la muestra: File:ForexConnect Sample Net.zip

Conectando con Servidor de Comercio

El objeto principal de ForexConnect .NET API es un objeto de sesión O2GSession en el namespace fxcore2. Este objeto representa un sesión de conexión de usuario y puede ser creado utilizando un método de estamétodo estático de la clase O2GTransport:

    O2GTransport.createSession();

El objeto O2GSession notifica suscriptores de todas cambias del estado de conexion a través de los eventos siguiente:

o a través de la interfaz de callback IO2GSessionStatus.

Los datos de recepción de notificaciones pueden ser manejados mediante el siguiente eventos O2GSession:

o a través de la interfaz de callback IO2GResponseListener.

Conectar a un servidor de comercio utilizando ForexConnect .NET API, haga lo siguiente:

  1. Crea un objeto de sesión.
  2. Implementa controladores para eventos de objeto sesión recibir notificaciones de cambias del estado de sesión.
  3. Llame login() para el sesión y espera hasta que se complete el proceso de inicio de sesión.
  4. Procesar las notificaciones recibidas de los cambios de estado de conexión en onSessionStatusChanged administrar el estado del procesa de inicio de sesión.

Véase el código de fuente siguiente para detalles de implentación: '"`UNIQ--toggledisplay-00000006-QINU`"' Note that we wait for a notification of the login completion because the <code>login() convocatoria es asincrónica. Para este, usamos una señal de sincronización especial. When onSessionStatusChanged es llamado, la señal es configura reanudar la ejecución del subproceso después de mSyncSessionEvent.WaitOne(5000) en el run() método.

Inicio de Sesión con Elección Sesión de Comercio

Cuando una cuenta de usuario tiene varias sesiones comerciales, a continuación iniciar de sesión es un proceso de múltiples pasos:

1. Llame el método login() del objeto de sesión con un nombre de usuario, contraseña, servidor URL y nombre de base de datos especificado.
2. Procesa el estado recibido TradingSessionRequested en el onSessionStatusChanged controlador de evento. Allí son pasos comunes para procesar el estado TradingSessionRequested:
2.1. Recupera la lista de la sesión de comercio desde el objeto de método O2GSession utilizando el getTradingSessionDescriptors().
2.2. Proporciona una elección de la sesión de comercio para el usuario.
2.3. Solicitud una PIN secreto desde el usuario.
2.4. Establece el ID del sesión de comercio especificado y PIN utilizando setTradingSession().

            '"`UNIQ--toggledisplay-00000007-QINU`"'

3. Si setTradingSession es con exito, a continuación el estado Connected es recibido en el controlador de evento onSessionStatusChanged.

Administración de Precios

Administración de precios incluye los pasos siguientes:

  1. Comprobar si hay datos de precios solicitados automáticamente durante el inicio de sesión.
    • Si sí, vaya a 2.
    • Si no, envía una solicitud para los precios actuales para todos instrumentos.
  2. Controla la respuesta.
  3. Controla la actualización de precio para un determinado instrumento.

Recibir notificaciones de respuestas de solicitud o cambios de estado de los objetos de servidor, debe implementar y suscribir controladores de evento a los eventos adecuadas de la instancia O2G2Session.

Para este, modifica la clase MyApp controlar estos eventos: '"`UNIQ--toggledisplay-00000008-QINU`"'


Solicita Precios de Actuales

Dependiente en configuraciones del servidor de comercial, los precios de actuales de todos instrumentos puede ser recibido automáticamente durante el proceso de inicio de sesión, o explicitamente puede solicitud puede solicita este datos desde el servidor de comercial. Por lo que, obtener los precios de actuales usted debe hacer lo siguiente:

1. Comprueba si allí son oftertas de precio recibido en el inicio de sesión utilizando el método isTableLoadedByDefault() de la instancia O2GLoginRules.
2. Si están cargados, obtener el objeto de respuesta ofertas ya recibidas utilizando el método getTableRefeshResponse(Offers) de la instancia O2GLoginRules.
Este objeto de respuesta puede procesarse para extraer datos de ofertas. Para obtener ofertas lector para leer los datos de respuesta, haga lo siguiente:
  1. Obtiene el fábrica de lector de respuesta utilizando el método getResponseReaderFactory() de la instancia session object.
  2. Crea una lector utilizando el método createOffersTableReader() de la instancia O2GResponseReaderFactory.
3. Si ofertas o recibido en inicio de sesión, explícitamente envía una solicitud para la tabla de las oftertas utilizando el método sendRequest() del objeto de sesión.
Crear la solicitud adecuado, haga lo siguiente:
  1. Obtiene la factoria de solicitud utilizando el método getRequestFactory() del session object.
  2. Crea solicitud utilizando el método createRefreshTableRequest() de la instancia O2GRequestFactory.

Solicitar los precios de actuales, agregue el siguiente código fuente para el método run() de nuestro muestra después de procesamiento de inicio de sesión: '"`UNIQ--toggledisplay-00000009-QINU`"'

En la muestra, esperamos para la recepcion de la resuesta de solicitud utilizando una señal de sincronizacion. Por lo que "capturamos" el momento comenzar vigilancia el cambio del precio para EUR/USD desde. Claro, debemos establece este señal cuando datos de precio se recibe.

En nuestro una "truco" se utiliza evitar duplicación de código. Como se verá más, procesamieto de la respuesta es el mismo cuando datos de ofertas se recibe desde el objeto O2GLoginRules y cuando recupera datos de ofertas. Por lo que, procesar el objeto de la respuesta recuperado desde O2GLoginRules, puede llamar directamente a el controlador de evento del evento RequestCompleted del objeto de sesión.

Recibir Datos de Precio

Como un llame de sendRequest() es asincrónica, recibir una respuesta con datos de precio, necesita implementar el controlador de evento para evento RequestCompleted de session object. Como este controlador de evento es utilizado recibir notificaciones de respuestas de todas solicitudes, debe hacer lo siguiente:

  1. Comprueba si el tipo de respuesta es GetOffers.
  2. Obtiene el lectura de respuesta O2GOffersTableResponseReader utilizando O2GResponseReaderFactory obtener datos de precio desde el objeto de respuesta.
  3. Procesa todas filas en la tabla de Offers utilizando la lectura.

Debe proporcionar acceso de subprocesos a las ofertas que se almacenan en su aplicación.

Véase el código de fuente debajo para una muestra de cómo administrar recepción de una respuesta. Almacenar precios de actual para EUR/USD, los variables apropriado se definado subprocesos acceso a ellas es implementado.

'"`UNIQ--toggledisplay-0000000A-QINU`"' Una señal de sincronización se establece cuando se ha completado la recepción de datos de ofertas. Este "truco" permite esperar para recepción de los precios actual en el principal subproceso después de envío la solicitud.

Nuestro apliación controla el evento RequestComplete y extractos el precio de venta y compra de EUR/USD. Los precios de venta y compra recibido están almacenados en las variables de nivel de clase mEURUSDBid y mEURUSDAsk, métodos de subprocesos leer y cambiar estos variables son implementados.

Recibir Actualizaciones de Ofertas

Tenga en cuenta que la notificación es recibida en un subproceso independiente, por lo tanto, debe utilizar subprocesos de lectura y actualización de las variables que almacenan los datos recibidos.

Anida el código siguiente a MyApp administrar el actualización de precio EUR/USD:

Procesamiento de la actualización de tabla del Offers incluye los pasos siguientes:

1. Obtiene O2GResponseReaderFactory desde el objeto sesión.
2. Obtiene un lectura O2GTablesUpdatesReader utilizando la fábrica via método createTablesUpdatesReader.
3. Hacer un bucle para enumerar cada elemento de la lista de actualizaciones, ya que los datos recibidos pueden contener actualizaciones para cualquier tipo de objetos, no sólo para la tabla ofertas. Por lo tanto necesita comprobar cada elemento de la lista de actualizaciones para el tipo de tabla requerida y actualizar el tipo de operación.
4. Procesar el cambio, usa el método getOfferRow() del lectura recuperar un objeto del tipo O2GOfferRow:
        O2GOfferRow offer = pReader.getOfferRow(i);

Tenga en cuenta que la notificación es recibida en un subproceso independiente, por lo tanto, debe utilizar subprocesos de lectura y actualización de las variables que almacenan los datos recibidos.

Anida el código siguiente a MyClass administrar el actualización del precio EUR/USD: '"`UNIQ--toggledisplay-0000000D-QINU`"' En nuestro muestra, procesamos actualizaciones de precio EUR/USD sólo y almacena sus valores proxio en los variables de mEURUSDBid y mEURUSDAsk. Hemos implementado métodos de subprocesos para acceder a estas variables.

Creación de Orden

Crear un orden, realice el siguiente:

1. Asegúrese de que dispone en al menos una cuenta de usuario de ID y un oferta ID que se requieren para crear un orden. Si no, soliciten al principio.
2. Usa una instancia O2GRequestFactory crear O2GValueMap especificar los parámetros del orden.
3. Llena el valuemap con los parámetros necesario crear un tipo particular de orden
Por favor vea ForexConnectAPI SDK para detalles sobre parámetros de comandos para creando órdenes.
4. Crea un objeto O2GRequest utilizando O2GRequestFactory para el valuemap llenado.
5. Comienza ejecución de la solicitud.
6. Recibe la respuesta de solicitud ser para asegurarse de que la ejecución de la solicitud es correcta.

Como necesitamos un Cuenta ID para nuestro muestra, vamos a recupera la tabla Cuentas al principio. Recuperando datos del tabla Cuentas es simila recuperar datos de la tabla Ofertas. Simplificar la muestra, obtiene la primera cuenta desde la lista de la cuenta usuario y almacenarlo en una variable de nivel de clase para el uso de más. '"`UNIQ--toggledisplay-0000000E-QINU`"'

Esperamos para la respuesta evitar creación de orden antes de la Cuenta ID es recuperado.

La mejor práctica es la encapsulación de la lógica de creación de la orden en forma independiente de la clase MyApp. También debe maneja la respuesta al solicitud del creación de orden en el controlador de evento onRequestCompleted para asegurarse de que se crea el orden.

Véase el siguiente código de fuente que crea un orden de compra o venta para el instrumento de EUR/USD con cantidad de 100K: '"`UNIQ--toggledisplay-0000000F-QINU`"'

Tenga en cuenta que hay algunas clases de ayuda útil en la fxcore2.Constants namespace para el objeto valueMap de llenado con parámetros orden:

  • Constants.Commands
  • Constants.Order

y etc.

Puede maneja el solicitud ID procesar respuesta de un particular solicitud sólo:

    request.RequestId;

Tabla de Órdenes Recuperando

Todos información sobre los estados de órdenes existente puede ser recuperado desde el tabla de Órdenes.

ForexConnect API permite recuperando la tabla de Órdenes sólo para una cuenta especificado. Por lo tanto necesita hacer el siguiente:

  1. Recupera la tabla de Cuentas.
  2. Espera hasta datos de las cuentas se recibe.
  3. Recupera la tabla de Órdenes para cada cuenta recibido utilizando createRefreshTableRequestByAccount() de la instancia O2GRequestFactory.
  4. Maneja la respuesta del solicitud en un controlador de evento del evento RequestComplete.
  5. Maneja la actualización de la tabla de Órdenes en un controlador de evento del evento TablesUpdates.

Simplificar nuestro muestra, tenemos en cuenta ID el almacenado y usarlo en el ejemplo de la tabla de Órdenes recuperando.

'"`UNIQ--toggledisplay-00000012-QINU`"' Tenga en cuenta que si almacena datos de órdenes, debe proporcionar acceso seguro para subprocesos a estos datos y la correcta gestión de contadores de referencia para los objetos almacenados. En nuestro ejemplo, órdenes datos no se almacenan, por lo que no se ha implementado la sincronización.

Finalización de la Aplicación. Cierre de Sesión

Como puede ver, el método stop() de nuestro clase MyApp libera todos los recursos del sistema utilizados y cancela la suscripción de todos controlador de eventos desde eventos de sesión para dejar de recibir notificaciones. Debe llamar logout() antes de terminación de su aplicación. También debe llame el método Dispose() de la instancia de sesión antes de _tmain()devuelve el control. '"`UNIQ--toggledisplay-00000013-QINU`"'

Solicitud de Control de Errores

Cuando un error occure durante ejecución de asíncrono de un solicitud, el manejar de evento del evento RequestFailed se invoca. En nuestro muestra, manejamos el error al poner la descripción del error en la salida de la consola y deteniendo la aplicación:

        void mSession_RequestFailed(object sender, RequestFailedEventArgs e)
        {
            Console.WriteLine(e.Error);
            stop();
        }

Lanzomiento de Muestra

Por ahora nuestro muestra puede inicia de sesión, recupera EUR/USD cambias de precio, muestra información sobre órdenes existente, y tiene un método crear un Open Market Order.

Para lanzar la muestra en esta etapa, necesitamos aplicar uso de nuestro clase MyApp. Para este, realiza el siguiente:

  1. Dentro de la función principal de nuestra aplicación de consola, crear una instancia de nuestro clase MyApp.
  2. Llame el método de run() de la instancia iniciar de sesión al servidor de comercia y comienza recibiendo actualizaciones de EUR/USD.
  3. Proporciona lectura de entrada del usuario ejecutar comandos:
    • cuando "b" es entrada, crea un orden de mercado compra;
    • cuando "s" es entrada, crea un orden de mercado venta;
    • cuando "q" es entrada, sale de la aplicación.
    class Program
    {
        static void Main(string[] args)
        {
            MyApp app = new MyApp();
            if (app.run()) //waiting for login completion and making other preparations
            {
                char cKey;
                while (true)
                {
                    cKey = (char)Console.Read();
                    if (app.Status == O2GSessionStatusCode.Disconnected) //in case of error after async, call createOrder
                        break;

                    if (cKey == 'q')
                    {
                        app.stop();
                        break;
                    }
                    else if (cKey == 'b')
                        app.createOrder(true);
                    else if (cKey == 's')
                        app.createOrder(false);
                }
            }
        }
    }

El método de run() del muestra prepara la aplicación para comercio. Después de realiza la preparación, devuelve true si todo es bueno. Como puede ver, este método llama a todas las funciones de API asincrónica pero espera sus respuestas utilizando objetos de sincronización especial. Tenga en cuenta que esto no es un método eficaz de usar ForexConnectAPI, pero es fácil de entender.

No olvide especificar un nombre de usuario válido y contraseña para un llame del método de login().

Ahora puede construye y ejecuta la muestra. Si tiene algún problema con construcción de la muestra, por favor compararlo con el el código fuente completo de la muestra: File:ForexConnect Sample Net.zip.

¿Qué es lo próximo?

Para información detallado sobre todos clases de API y sus métodos, por favor lea ForexConnectAPI SDK.


Este Artículo en Otros Idiomas

Language: English  • español • français • русский • 中文 • 中文(繁體)‎