Ir al contenido

Brókeres y fuentes de datos

AQE separa los datos de mercado de la ejecución. Una fuente de datos proporciona historial y precios; un bróker de ejecución gestiona las órdenes y el estado de la cuenta. UnifiedBroker los combina para que la estrategia pueda usar la misma estructura en pruebas históricas y operaciones en vivo.

FinalidadImplementaciones
Ejecución simuladaPaperBroker
Ejecución en MetaTrader 5Mt5Broker
Datos de mercadoYahooFinanceDataFeed, Mt5DataFeed

Consulta PaperBroker para la ejecución simulada y los supuestos sobre comisiones. Consulta la guía de MT5 para configurar el Expert Advisor y el puente.

let execution = PaperBroker::new(AccountType::Paper, 100_000.0, 1);
let data = YahooFinanceDataFeed::new();
let broker = UnifiedBroker::new_backtest(execution, data);

La API 0.2.0 envía un BrokerOrderRequest en lugar de pasar el insight completo al bróker. Incluye los datos de entrada, protección e identidad necesarios para la ejecución.

let request = aq_engine::core::broker::BrokerOrderRequest::from(&insight);
let order = broker.submit_order(request).await?;

Este fragmento presupone que ya existen un bróker, un insight y una importación de OrderManagementProvider. Los pipes de estrategia normalmente deben solicitar mutaciones mediante el contexto de la estrategia y conservar sus resultados pendientes; consulta Pipes de insights.

Los adaptadores personalizados deben devolver futuros Send para las mutaciones del bróker. La sustitución de entradas pendientes usa replace_order; los cambios de protección usan update_take_profit o update_stop_loss. No reutilices la interfaz eliminada y ambigua update_order.

Para un insight en estado Executed cuya orden aún no se haya ejecutado, update_limit(ctx, price) modifica su precio límite de entrada y update_stop_limit(ctx, price) modifica el precio de activación de su orden stop de entrada. Este último no es una actualización del stop-loss. El adaptador de ejecución gestiona estos cambios mediante amend_entry_prices(order_id, limit_price, stop_price) y declara AmendLimitPrice o AmendStopPrice para las operaciones compatibles. Esta modificación de precio conserva la cantidad de la orden; replace_order es una operación independiente. Consulta Ciclo de vida de los insights para las reglas de estado y confirmación de recepción.

Conecta tu servicio de datos de mercado, API de un mercado o conjunto de datos históricos implementando DataFeed y DataProvider. Estos traits cubren la gestión de conexiones, los metadatos de activos, las velas históricas, los precios actuales y las suscripciones. Puedes combinar el resultado con PaperBroker para probar los datos independientemente de la ejecución en vivo.

Sigue Crear una fuente de datos personalizada para conocer los métodos requeridos, los formatos de velas y cotizaciones, los indicadores de capacidades y una lista de validación.

Conecta un centro de ejecución implementando Broker y OrderManagementProvider. Tu adaptador traduce las solicitudes de órdenes de AQE a la API del centro, devuelve el estado de la cuenta y de las posiciones e informa de los eventos del ciclo de vida de las órdenes. UnifiedBroker puede combinarlo con una fuente de datos existente o con tu propia implementación.

Sigue Crear un bróker personalizado para conocer el contrato de ejecución, las colas de eventos acotadas, la gestión de protección y los requisitos de recuperación.

Estas integraciones de Rust se compilan dentro de tu estrategia. Implementar los traits no añade automáticamente un proveedor al selector de conexiones de AQS.

FuenteComportamiento de las cotizaciones
MT5 en vivoBid/ask nativos muestreados, independientes del marco temporal de las velas
Yahoo en vivo o en simulaciónCierre de vela de un minuto obtenido por sondeo y representado como una cotización sintética bid=ask
Reproducción de backtestCotizaciones sintéticas de velas históricas ya consumidas

Las cotizaciones sintéticas no proporcionan un spread real ni un precio ejecutable. Los backtests no obtienen cotizaciones actuales del mercado. Las suscripciones de cotizaciones no introducen un callback de estrategia on_quote ni backtests basados en ticks.

Para un consumidor de datos personalizado, comprueba DataFeedFeature::QuoteStream y los indicadores de capacidades nativas o sintéticas. Usa un ID de suscripción único y libera únicamente tu propia suscripción. Mantén los callbacks breves y no bloqueantes.

El motor actual distingue tres límites:

CampoSignificado
Account.max_total_ordersNúmero máximo de órdenes pendientes
Asset.max_order_sizeCantidad máxima de una orden de entrada
Asset.max_total_sizeLímite de cantidad agregada para un símbolo

El dimensionamiento considera las cantidades activas y reservadas antes de dividir una orden. MT5 informa de la capacidad mediante el Expert Advisor actualizado. La ejecución simulada no hereda todos los límites de las cuentas en vivo de su fuente de datos.

Las reservas se mantienen por separado para cada estrategia. Otras estrategias u órdenes manuales pueden consumir capacidad de la cuenta; un bróker puede rechazar una orden incluso después de la validación local. Inspecciona el rechazo antes de volver a intentarlo.

AQS muestra las observaciones de cuenta, el patrimonio, los eventos y los insights recibidos. La confirmación de recepción de un comando no equivale a una orden ejecutada, y una observación ausente o desactualizada no demuestra una cancelación. Comprueba los registros del bróker y el historial del insight cuando el resultado sea incierto.

Consulta Ejecución en vivo para la recuperación y Fuentes de datos en AQS para la configuración de escritorio.