Ana içeriğe geç

Algo kayıt defteri

Kullanıcılara dağıttığınız geniş bir algoritma portföyünüz varsa, bu kullanıcıların algoritmalarınızı yerel makinelerinde kolayca yönetmelerini sağlayan özel bir panel veya sistem de sunmak isteyebilirsiniz. Böyle bir sistem, birbirini tamamlayan birkaç ürün sunuyorsanız (örneğin, düzgün çalışması için hepsinin yüklenmesi gereken iki cBot ve bir özel gösterge) özellikle değerli olacaktır. Bir kullanıcı gerekli bir ürünü yüklemeyi atlarsa, bu durumu onlara bildirebileceksiniz.

Ayrıca, bir kullanıcı birçok algoritmaya eriştiğinde, bazen hepsini takip etmek zor olabilir. Örneğin, bir kullanıcı değerli bir algoritmayı yanlışlıkla silebilir ve daha sonra onu artık çalıştıramadığını fark edebilir.

Size ve kullanıcılarınıza yardımcı olmak için Algo API, farklı türdeki yüklü ve kaldırılmış algoritmalar hakkındaki istatistikleri dinamik olarak izlemek için uygun bir yol sunan AlgoRegistry arayüzünü sunar.

Algo kayıt defteriyle çalışma

AlgoRegistry içinde, her algoritma, algoritmanın benzersiz adını ve AlgoKind'ını (örneğin bir AlgoKind.CustomIndicator gibi) içeren bir AlgoType ile temsil edilir.

Kayıt defterinden belirli bir algoritmayı aşağıdaki yöntemi çağırarak alabilirsiniz.

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

Belirli bir türdeki algoritmaların sayısını almak için aşağıdaki yöntemi çağırın.

1
AlgoRegistry.GetCount(AlgoKind algoKind)

Ayrıca aşağıdaki olaylara özel işleyiciler ekleyebilirsiniz:

  • AlgoTypeInstalled - her yeni algoritma yüklendiğinde tetiklenir.
  • AlgoTypeDeleted - her yeni algoritma silindiğinde tetiklenir.
  • AlgoTypeChanged - yüklü bir algoritma her değiştirildiğinde tetiklenir.

AlgoRegistry farklı modlarda

AlgoRegistry, geriye dönük test ve optimizasyonda beklendiği gibi çalışır. cTrader CLI kullanılırken çalışmaz.

Örnek bir eklenti oluşturma

AlgoRegistry, algoritmalar hakkında bilgileri doğrudan cTrader kullanıcı arayüzünde görüntüleyecek bir eklenti oluşturmak için mükemmeldir. Aşağıdaki eklenti tam da bunu yapar.

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

    }
}

Eklentimizi oluşturduktan sonra, Aktif Sembol Paneli'nde aşağıdaki bloğu görmeliyiz. Bloktaki veriler her saniye dinamik olarak güncellenecektir.

Başka bir algoritma aracılığıyla algoritma yükleme

AlgoRegistry arayüzü, geliştiricilerin başka algoritmaları yükleyebilen algoritmalar oluşturmasını sağlar. Örneğin, bir cBot'u (başlangıçta) başka bir cBot'u, bir göstergeyi veya bir eklentiyi otomatik olarak yükleyecek şekilde kodlayabilirsiniz.

Aşağıdaki cBot, başka bir cBot'u yüklemek üzere kodlanmıştır:

 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()
        {
        }
    }
}

Özet

AlgoRegistry, eklenti geliştiricileri için harika bir özelliktir ancak diğer algoritma türleriyle de kullanılabilir. Örneğin, başka bir özel göstergeye referans veren bir gösterge oluşturabilirsiniz; bu durumda algoritmanız önce gerekli göstergenin kullanıcı tarafından yüklü olup olmadığını kontrol etmelidir. Ayrıca, özel göstergelerin ve diğer algoritma türlerinin yönetimini basitleştirmek için mevcut algoritmalarınıza AlgoRegistry eklemenizi öneririz.