Saltar a contenido

Conversor de divisas

En las operaciones con algoritmos, es esencial dar a los cBots y a los indicadores la capacidad de convertir divisas de forma autónoma utilizando las tasas de mercado actuales. En esta guía de la API, explicamos cómo se implementa esta función en cTrader.

¡Conversión de divisas en un minuto!

  • Los métodos Convert (double value, Asset from, Asset to y Convert(double value, string from, string to)) devuelven la tasa de conversión exacta entre los activos especificados o los activos con los nombres especificados. Acceda a ellos a través de la nueva propiedad AssetConverter de la clase Algo.
  • La clase Asset incluye sus propios métodos Convert(Asset to, double value) y Convert(string to, double value) que pueden invocarse fácilmente desde cualquier objeto Asset.
  • Durante el backtesting, cTrader utilizará automáticamente las tasas de conversión históricas. Esto significa que siempre puede esperar resultados históricamente precisos y evaluar completamente el rendimiento de sus cBots.

Cómo funciona la conversión de divisas

La interfaz IAssetConverter en el espacio de nombres cAlgo.API.Internals contiene el método Convert() que tiene las siguientes sobrecargas:

  • double Convert(double value, Asset from, Asset to) - convierte el valor especificado del activo from al activo to.
  • double Convert(double value, string from, string to) - convierte el valor especificado del activo cuyo nombre coincide con la cadena from al activo cuyo nombre coincide con la cadena to.

La clase Algo ahora incluye la propiedad AssetConverter del tipo IAssetConverter. Puede acceder a los dos métodos anteriores escribiendo lo siguiente.

1
AssetConverter.Convert(double value, Asset from, Asset to)

La clase Asset también tiene sus propios métodos Convert() con las siguientes sobrecargas:

  • double Convert(Asset to, double value) - convierte el valor especificado del activo desde el que se llama a este método al activo to.
  • double Convert(string to, double value) - convierte el valor especificado del activo desde el que se llama a este método al activo cuyo nombre coincide con la cadena to.

Considere el ejemplo siguiente en el que nuestro cBot convierte GBP a JPY y luego ejecuta una nueva orden de mercado utilizando el valor calculado como volumen de la orden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleConversionTestBot : Robot
    {
        [Parameter(DefaultValue = "Hello world!")]
        public string Message { get; set; }

        protected override void OnStart()
        {

            Asset baseAssetForNewOrder = Assets.GetAsset("GBP");

            Asset quoteAssetForNewOrder = Assets.GetAsset("JPY");

            double newOrderVolume = baseAssetForNewOrder.Convert(quoteAssetForNewOrder, 1000.00);

            ExecuteMarketOrder(TradeType.Buy, SymbolName, newOrderVolume);

            Print($"New order has been executed with {newOrderVolume} as its volume");
        }


    }
}

Si echamos un vistazo al registro, podemos ver que nuestro cBot se comporta como se esperaba. En el momento en que se inició la instancia, el precio de oferta para GBPJPY era igual a 159,619.

Conversión de divisas en el backtesting

cTrader admite completamente las tasas de conversión históricas en el backtesting.

Esto significa que, cuando realiza un backtesting de un cBot que utiliza cualquiera de los métodos descritos anteriormente, los cálculos de conversión se realizarán utilizando datos históricamente precisos en lugar de las tasas de cambio actuales entre los activos especificados. Esta función garantiza que los resultados del backtesting y la optimización sean lo más precisos posible dadas las condiciones pasadas del mercado.

Tenga en cuenta que cTrader puede construir cadenas de conversión precisas utilizando potencialmente un número ilimitado de instrumentos de operaciones. Como resultado, incluso si la divisa de depósito de su cuenta difiere de los activos base o cotizados del símbolo en el que desea realizar un backtesting, cTrader manejará todos los cálculos necesarios para proporcionarle resultados precisos de backtesting.

En resumen, las tasas de conversión constituyen otra valiosa herramienta para asegurarse de que sus cBots e indicadores funcionen exactamente como se espera. Como cTrader admite el uso de datos históricos al convertir activos en el backtesting, puede estar seguro de que todos los resultados de backtesting y optimización son históricamente precisos.