Перейти к содержанию

Конвертер валют

В алгоритмической торговле крайне важно предоставить сиБотам и индикаторам возможность автономно конвертировать валюты, используя текущие рыночные курсы. В этом руководстве по API мы рассмотрим, как эта функция реализована в cTrader.

Конвертация валют за одну минуту!

  • Методы Convert (double value, Asset from, Asset to и Convert(double value, string from, string to)) возвращают точный курс конвертации между указанными активами или активами с указанными названиями. Получите к ним доступ через новое свойство AssetConverter класса Algo.
  • Класс Asset включает собственные методы Convert(Asset to, double value) и Convert(string to, double value), которые можно легко вызвать из любого объекта Asset.
  • При бэктестинге cTrader будет автоматически использовать исторические курсы конвертации. Это означает, что вы всегда можете ожидать исторически точных результатов и полностью оценить эффективность своих сиБотов.

Как работает конвертация валют

Интерфейс IAssetConverter в пространстве имен cAlgo.API.Internals содержит метод Convert(), который имеет следующие перегрузки:

  • double Convert(double value, Asset from, Asset to) — конвертирует указанное значение из актива from в актив to.
  • double Convert(double value, string from, string to) — конвертирует указанное значение из актива, название которого соответствует строке from, в актив, название которого соответствует строке to.

Класс Algo теперь включает свойство AssetConverter типа IAssetConverter. Вы можете получить доступ к двум вышеуказанным методам, введя следующее.

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

Класс Asset также имеет собственные методы Convert() со следующими перегрузками:

  • double Convert(Asset to, double value) — конвертирует указанное значение из актива, из которого вызывается этот метод, в актив to.
  • double Convert(string to, double value) — конвертирует указанное значение из актива, из которого вызывается этот метод, в актив, название которого соответствует строке to.

Рассмотрим пример ниже, в котором наш сиБот конвертирует GBP в JPY, а затем исполняет новый рыночный ордер, используя рассчитанное значение в качестве объема ордера.

 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");
        }


    }
}

Если мы посмотрим на лог, то увидим, что наш сиБот ведет себя так, как ожидалось. В момент запуска экземпляра цена продажи для GBPJPY составляла 159,619.

Конвертация валют в бэктестинге

cTrader полностью поддерживает исторические курсы конвертации в бэктестинге.

Это означает, что когда вы запускаете бэктестинг сиБота, который использует любой из описанных выше методов, расчеты конвертации будут выполняться с использованием исторически точных данных, а не текущих обменных курсов между указанными активами. Эта функция гарантирует, что результаты бэктестинга и оптимизации будут максимально точными с учетом прошлых рыночных условий.

Обратите внимание, что cTrader может строить точные цепочки конвертации, используя потенциально неограниченное количество торговых инструментов. В результате, даже если валюта депозита вашего счета отличается от базового или котируемого активов символа, на котором вы хотите выполнить бэктестинг, cTrader выполнит все необходимые расчеты, чтобы предоставить вам точные результаты бэктестинга.

Подводя итог, курсы конвертации представляют собой еще один ценный инструмент для обеспечения того, чтобы ваши сиБоты и индикаторы работали именно так, как ожидается. Поскольку cTrader поддерживает использование исторических данных при конвертации активов в бэктестинге, вы можете быть уверены, что все результаты бэктестинга и оптимизации исторически точны.