コンテンツにスキップ

アルゴリズムレジストリ

ユーザーに配布するアルゴリズムの大規模なポートフォリオを持っている場合、ユーザーがローカルマシン上で簡単にアルゴリズムを管理できるカスタムパネルやシステムを提供することも検討してください。 特に、複数の製品が互いに補完し合う場合(例えば、2つのcBotと1つのカスタムインジケーターがすべて正常に機能するために必要である場合)、このようなシステムは非常に価値があります。 ユーザーが必要な製品のインストールをスキップした場合、その事実をユーザーに警告することができます。

また、ユーザーが多くのアルゴリズムにアクセスできる場合、すべてのアルゴリズムを追跡するのが難しいことがあります。 例えば、ユーザーが誤って貴重なアルゴリズムを削除し、後でそれを操作できなくなったことに気付くことがあります。

あなたとユーザーを支援するために、Algo APIは AlgoRegistry インターフェースを公開しており、現在インストールされているまたはアンインストールされているさまざまな種類のアルゴリズムに関する統計を動的に追跡する便利な手段を提供します。

アルゴリズムレジストリの操作

AlgoRegistry では、各アルゴリズムは AlgoType で表され、アルゴリズムの一意の名前とその AlgoKind(例えば AlgoKind.CustomIndicator)が含まれます。

次のメソッドを呼び出すことで、レジストリから特定のアルゴリズムを取得できます。

1
AlgoRegistry.Get(string name, AlgoKind algoKind);

特定の種類のアルゴリズムの数を取得するには、次のメソッドを呼び出します。

1
AlgoRegistry.GetCount(AlgoKind algoKind)

また、次のイベントにカスタムハンドラーを追加できます:

  • AlgoTypeInstalled - 新しいアルゴリズムがインストールされるたびにトリガーされます。
  • AlgoTypeDeleted - 新しいアルゴリズムが削除されるたびにトリガーされます。
  • AlgoTypeChanged - インストールされたアルゴリズムが変更されるたびにトリガーされます。

異なるモードでのAlgoRegistry

AlgoRegistry は、バックテストと最適化で意図した通りに動作します。 cTrader CLIを使用している場合は動作しません。

サンプルプラグインの作成

AlgoRegistry は、cTrader UIにアルゴリズムに関する情報を直接表示するプラグインを作成するのに最適です。 次のプラグインはまさにそれを行います。

 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class AlgoStatsPlugin : Plugin
    {
        private TextBlock _customIndicatorsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private TextBlock _indicatorsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private TextBlock _robotsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private TextBlock _pluginsBlock = new TextBlock
        {
            FontSize = 12,
            FontWeight = FontWeight.Bold,
            TextAlignment = TextAlignment.Left,
            Padding = new Thickness(5, 5, 5, 5),
        };

        private Grid _grid = new Grid(4, 1);

        protected override void OnStart()
        {
            var aspBlock = Asp.SymbolTab.AddBlock("Algo Registry");
            aspBlock.IsExpanded = true;
            aspBlock.Height = 200;

            _grid.AddChild(_robotsBlock, 0, 0);
            _grid.AddChild(_indicatorsBlock, 1, 0);
            _grid.AddChild(_customIndicatorsBlock, 2, 0);
            _grid.AddChild(_pluginsBlock, 3, 0);

            aspBlock.Child = _grid;

            Timer.Start(TimeSpan.FromSeconds(1));
        }

        protected override void OnTimer() 
        {
            _robotsBlock.Text = $"cBots: {AlgoRegistry.GetCount(AlgoKind.Robot)}";
            _customIndicatorsBlock.Text = $"Custom indicators: {AlgoRegistry.GetCount(AlgoKind.CustomIndicator)}";
            _indicatorsBlock.Text = $"Indicators: {AlgoRegistry.GetCount(AlgoKind.StandardIndicator)}";
            _pluginsBlock.Text = $"Plugins: {AlgoRegistry.GetCount(AlgoKind.Plugin)}";
        }

    }
}

プラグインをビルドすると、アクティブ通貨ペアパネルに次のブロックが表示されます。 ブロック内のデータは毎秒動的に更新されます。

別のアルゴリズムを通じてアルゴリズムをインストールする

AlgoRegistry インターフェースを使用すると、開発者は他のアルゴリズムをインストールできるアルゴリズムを作成できます。 例えば、cBot(起動時)に別のcBot、インジケーター、またはプラグインを自動的にインストールするようにコーディングできます。

次のcBotは、別の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
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class Installation : Robot
    {
        protected override void OnStart()
        {
            InstallationResult result = AlgoRegistry.Install("https://ctrader.com/algos/download/4392/");
            Print(result.Succeeded);
        }

        protected override void OnTick()
        {
        }

        protected override void OnStop()
        {
        }
    }
}

概要

AlgoRegistry はプラグイン開発者にとって素晴らしい機能ですが、他の種類のアルゴリズムでも使用できます。 例えば、別のカスタムインジケーターを参照するインジケーターを作成する場合、アルゴリズムはまず必要なインジケーターがユーザーによってインストールされているかどうかを確認する必要があります。 また、既存のアルゴリズムに AlgoRegistry を追加して、カスタムインジケーターや他の種類のアルゴリズムの管理を簡素化することをお勧めします。