ข้ามไปที่เนื้อหา

ทะเบียน Algo

หากคุณมีพอร์ตโฟลิโอ Algo ขนาดใหญ่ที่คุณกำลังแจกจ่ายให้กับผู้ใช้ คุณอาจต้องการเสนอแผงควบคุมหรือระบบที่กำหนดเองที่ช่วยให้ผู้ใช้เหล่านี้สามารถจัดการ Algo ของคุณบนเครื่องของพวกเขาได้อย่างง่ายดาย ระบบดังกล่าวจะมีคุณค่าเป็นพิเศษหากคุณเสนอผลิตภัณฑ์หลายรายการที่เสริมกันและกัน (ตัวอย่างเช่น cBots สองตัวและอินดิเคเตอร์ที่กำหนดเองหนึ่งตัวที่ต้องติดตั้งทั้งหมดเพื่อให้ทำงานได้อย่างถูกต้อง) หากผู้ใช้ข้ามการติดตั้งผลิตภัณฑ์ที่จำเป็น คุณจะสามารถแจ้งเตือนพวกเขาถึงข้อเท็จจริงนี้ได้

นอกจากนี้ เมื่อผู้ใช้มีสิทธิ์เข้าถึงอัลกอริทึมจำนวนมาก บางครั้งอาจเป็นเรื่องยากที่จะติดตามทั้งหมด ตัวอย่างเช่น ผู้ใช้อาจลบอัลกอริทึมที่มีค่าโดยไม่ตั้งใจ เพียงเพื่อตระหนักในภายหลังว่าพวกเขาไม่สามารถใช้งานได้อีกต่อไป

เพื่อช่วยคุณและผู้ใช้ของคุณ Algo API เปิดเผยอินเทอร์เฟซ AlgoRegistry ซึ่งเสนอวิธีที่สะดวกในการติดตามสถิติแบบไดนามิกเกี่ยวกับ Algo ประเภทต่างๆ ที่ติดตั้งและยังไม่ได้ติดตั้งในปัจจุบัน

ทำงานกับทะเบียน Algo

ใน AlgoRegistry แต่ละ Algo จะถูกแทนด้วย AlgoType ซึ่งมีชื่อเฉพาะของอัลกอริทึมและ AlgoKind ของมัน (เช่น AlgoKind.CustomIndicator)

คุณสามารถดึงอัลกอริทึมเฉพาะจากทะเบียนโดยเรียกใช้เมธอดต่อไปนี้

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

เพื่อดึงจำนวนของอัลกอริทึมประเภทเฉพาะ ให้เรียกใช้เมธอดต่อไปนี้

1
AlgoRegistry.GetCount(AlgoKind algoKind)

คุณยังสามารถเพิ่มตัวจัดการที่กำหนดเองให้กับเหตุการณ์ต่อไปนี้:

  • AlgoTypeInstalled - ทริกเกอร์ทุกครั้งที่มีการติดตั้ง Algo ใหม่
  • AlgoTypeDeleted - ทริกเกอร์ทุกครั้งที่มีการลบ Algo ใหม่
  • AlgoTypeChanged - ทริกเกอร์ทุกครั้งที่มีการแก้ไข Algo ที่ติดตั้ง

AlgoRegistry ในโหมดต่างๆ

AlgoRegistry ทำงานตามที่ตั้งใจไว้ในการทดสอบย้อนหลังและการปรับให้เหมาะสม ไม่ทำงานเมื่อใช้ cTrader CLI

สร้างปลั๊กอินตัวอย่าง

AlgoRegistry เหมาะอย่างยิ่งสำหรับการสร้างปลั๊กอินที่จะแสดงข้อมูลเกี่ยวกับ Algo โดยตรงในอินเทอร์เฟซผู้ใช้ของ cTrader ปลั๊กอินต่อไปนี้ทำเช่นนั้น

 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 ลงในอัลกอริทึมที่มีอยู่ของคุณเพื่อทำให้การจัดการอินดิเคเตอร์ที่กำหนดเองและอัลกอริทึมประเภทอื่นง่ายขึ้น