コンテンツにスキップ

通貨コンバーター

アルゴリズム取引において、cBotやインジケーターが現在の市場レートを使用して通貨を自律的に変換する機能を提供することは不可欠です。 このAPIガイドでは、cTraderでこの機能がどのように実装されているかについて説明します。

1分で通貨変換!

  • Convert (double value, Asset from, Asset to および Convert(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 プロパティが含まれるようになりました。 以下のように入力することで、上記の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はすべての必要な計算を処理し、正確なバックテスト結果を提供します。

まとめると、変換レートは、cBotやインジケーターが期待通りに動作することを確認するためのもう一つの貴重なツールです。 cTraderがバックテストでの資産変換に過去のデータの使用をサポートしているため、すべてのバックテストと最適化の結果が過去の正確なものであることを確信できます。