通貨コンバーター

アルゴリズム取引において、cBotsやインジケーターに対して、現在の市場レートを使用して通貨を自動的に変換する機能を持たせることは非常に重要です。このAPIガイドでは、この機能がcTraderでどのように実装されているかを説明します。

1分でわかる通貨変換!

  • Convert (double value, Asset from, Asset to および Convert(double value, string from, string to)) メソッドは、指定された資産間または指定された名前の資産間の正確な換算レートを返します。これらのメソッドには、Algo クラスの新しい AssetConverter プロパティを介してアクセスできます!
  • Asset クラスには、任意の Asset オブジェクトから簡単に呼び出せる Convert(Asset to, double value) および Convert(string to, double value) メソッドがあります。
  • バックテスト時には、cTraderは自動的に過去の換算レートを使用します!つまり、過去のレートに基づいた正確な結果を常に期待でき、cBotsのパフォーマンスを完全に評価することができます。

通貨変換の仕組み

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 クラスには、新たに IAssetConverter タイプの AssetConverter プロパティが追加されました。その結果、以下のように単に入力するだけで、上記の2つのメソッドにアクセスできます。

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


    }
}

ログを確認すると、cBotが期待通りに動作していることがわかります。インスタンスが起動された時点で、GBPJPYの入札価格は159.619でした。

バックテストにおける通貨変換

cTraderはバックテストにおいて、過去の換算レートを完全にサポートしています。

これにより、上記のいずれかのメソッドを使用するcBotをバックテストする際、換算計算は指定された資産間の現在の為替レートではなく、過去の正確なデータを使用して行われます。この機能により、バックテストおよび最適化の結果が、過去の市場状況を考慮した上で可能な限り正確になります。

cTraderは、取引インストルメントの無限の数の可能性を含む正確な換算チェーンを構築することができます。そのため、バックテストを実行したいシンボルの基軸および/またはクオート資産が、アカウントの預金通貨と異なる場合でも、cTraderはすべての必要な計算を処理して、正確なバックテスト結果を提供します。

まとめると、換算レートは、cBots/インジケーターが期待通りに動作することを確認するためのもう一つの貴重なツールです。cTraderはバックテストで資産を換算する際に過去のデータの使用をサポートしているため、バックテスト/最適化の結果が過去の状況に基づいて正確であることが保証されます。