跳转至

货币转换器

在算法交易中,让 cBot 和指标能够使用当前市场汇率自主转换货币是至关重要的。 在这个 API 指南中,我们介绍了 cTrader 如何实现这一功能。

一分钟内完成货币转换!

  • Convert (double value, Asset from, Asset toConvert(double value, string from, string to)) 方法返回指定资产之间或指定名称资产之间的精确转换率。 通过 Algo 类的新 AssetConverter 属性访问它们。
  • Asset 类包含自己的 Convert(Asset to, double value)Convert(string to, double value) 方法,可以从任何 Asset 对象轻松调用。
  • 在回测时,cTrader 将自动使用历史转换率。 这意味着您始终可以期待历史准确的结果,并全面评估 cBot 的表现。

货币转换的工作原理

cAlgo.API.Internals 命名空间中的 IAssetConverter 接口包含 Convert() 方法,它有以下重载:

  • double Convert(double value, Asset from, Asset to) - 将指定值从 from 资产转换为 to 资产。
  • double Convert(double value, string from, string to) - 将指定值从名称匹配 from 字符串的资产转换为名称匹配 to 字符串的资产。

Algo 类现在包括 IAssetConverter 类型的 AssetConverter 属性。 您可以通过以下方式访问上述两种方法。

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 字符串的资产。

考虑下面的例子,我们的 cBot 将英镑转换为日元,然后使用计算出的值作为订单量执行新的市价单。

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


    }
}

如果我们查看日志,可以看到我们的 cBot 表现如预期。 在实例启动时,GBPJPY 的买入价为 159.619。

回测中的货币转换

cTrader 在回测中完全支持历史转换率。

这意味着,当您回测使用上述任何方法的 cBot 时,转换计算将使用历史准确的数据,而不是指定资产之间的当前汇率。 这个功能确保了回测和优化的结果在过去的市场条件下尽可能精确。

请注意,cTrader 可以使用潜在无限的交易工具构建准确的转换链。 因此,即使您的账户存款货币与您想要执行回测的交易品种的基础或报价资产不同,cTrader 也会处理所有必要的计算,为您提供精确的回测结果。

总之,转换率是另一个有价值的工具,可以确保您的 cBot 和指标完全按预期执行。 由于 cTrader 在回测中转换资产时支持使用历史数据,您可以确信所有回测和优化结果在历史上都是准确的。