콘텐츠로 이동

알고리즘 레지스트리

사용자에게 배포할 알고리즘 포트폴리오가 크다면, 사용자가 로컬 머신에서 알고리즘을 쉽게 관리할 수 있는 맞춤형 패널이나 시스템을 제공할 수도 있습니다. 이러한 시스템은 서로 보완하는 여러 제품(예: 두 개의 cBot과 하나의 맞춤형 지표)을 제공할 때 특히 유용합니다. 사용자가 필수 제품을 설치하지 않으면 이 사실을 알릴 수 있습니다.

또한, 사용자가 많은 알고리즘에 접근할 때 때로는 모든 알고리즘을 추적하기 어려울 수 있습니다. 예를 들어, 사용자가 실수로 중요한 알고리즘을 삭제한 후 나중에 더 이상 작동할 수 없다는 사실을 깨닫는 경우가 있습니다.

이러한 문제를 해결하기 위해 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를 추가하여 맞춤형 지표 및 기타 유형의 알고리즘 관리를 단순화하는 것도 권장합니다.