跳转至

插件文件关联

FileAssociations 接口提供了使插件能够灵活地注册、修改和处理文件扩展名的类型。 通过这些类型,开发者可以编写一个插件来管理文件关联。 当插件启用时,cTrader 会识别并将相关文件定向到插件进行处理。

通过配置插件直接在 cTrader UI 中处理文件,用户在处理文件时可能不再需要在多个应用程序之间切换。 例如,可以创建一个插件来打开和管理与特定交易策略一起使用的所有文件。

用例

以下是使用 FileAssociations 功能的插件示例:

  • 交易历史转换器接受并处理包含来自其他平台的交易历史的 CSV 和 TXT 文件,将其转换为 cTrader 兼容格式进行分析或直接导入其日志。
  • 交易信号处理器读取包含来自外部提供商或自动化交易系统的交易信号的 XML 或 JSON 文件,允许用户根据信号快速执行交易。
  • 风险管理模板导入器接受并处理包含风险管理配置的 JSON 或 CSV 文件,允许用户在 cTrader 中应用预定义设置。
  • 投资组合管理器处理包含交易者投资组合详情的 CSV 和 XML 文件,提供资产、头寸和绩效指标的简化视图,同时增强投资组合管理。
  • 图表模板加载器处理图表模板的 XML 或 JSON 文件,允许用户存储并快速加载其首选的图表配置或设置。
  • 指标设置加载器处理自定义指标设置的 JSON 或 CSV 文件,允许用户存储并快速应用其首选的指标配置。

操作

安装插件

当 cTrader 用户首次安装并启用支持特定文件类型的插件时,会出现一个对话框。 用户被提示将文件扩展名与插件关联。

用户确认操作后,他们的计算机会更新系统范围内的文件关联设置,并立即应用新配置。

文件类型的新图标在文件资源管理器中可见。 如果未提供文件类型的图标,则使用默认插件图标。

警告

插件不允许处理受限的文件扩展名,例如 .algo

使用插件

如果在 cTrader 中启用了支持文件扩展名的插件,当用户执行以下操作时,插件会被调用来处理文件:

  • 拖放文件 - 用户可以拖放一个支持的文件到 cTrader UI 中。

  • 在文件资源管理器中打开文件 - 用户可以双击文件打开它,或使用 打开方式 选项并选择 cTrader。

    • 如果 cTrader 应用程序已打开,插件会立即接收文件。
    • 如果 cTrader 应用程序已关闭,cTrader 会先启动,然后插件接收文件。

接收到的文件被复制到插件的数据文件夹中,并在插件处理完成后删除。

插件数据文件夹的路径:…/Documents/cAlgo/Data/Plugins/{PluginName}/Temp

如果文件扩展名与多个启用的插件关联,每个插件都会独立处理文件。

当文件关联因相关插件在 cTrader 实例中被禁用而被移除时,文件关联会在另一个启用相同插件的 cTrader 实例中自动重新添加。

执行手动覆盖

如果用户稍后在其常规计算机设置中更改了文件类型的默认程序,cTrader 会自动停止处理该文件类型。

要再次将 cTrader 设置为处理该格式文件的默认程序,用户必须通过以下方式重新建立文件关联:

  1. 打开 cTrader 并禁用相关插件。
  2. 启用插件。 当对话框出现时,确认操作。

此设置有助于插件和 cTrader 应用程序管理文件扩展名,同时避免其他程序的干扰。

注意

插件可以在运行时添加和删除文件关联,而无需重新启动算法或 cTrader 应用程序。

示例插件

示例插件仅为以下文件类型添加文件关联:

  • CSV
  • PNG
  • PDF
  • TXT
 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class FileAssociationSample : Plugin
    {
        private const string FileExtension1 = ".csv";
        private const string FileExtension2 = ".png";
        private const string FileExtension3 = ".pdf";
        private const string FileExtension4 = ".txt";

        protected override void OnStart()
        {
            AddFileAssociations();
            FileAssociations.FileOpened += FileAssociations_FileOpened;

            Print("File associations have been added.");
        }

        private void AddFileAssociations()
        {
            FileAssociations.Add(FileExtension1);
            FileAssociations.Add(FileExtension2);
            FileAssociations.Add(FileExtension3);
            FileAssociations.Add(FileExtension4);
        }

        private void FileAssociations_FileOpened(FileAssociationsFileOpenedEventArgs obj)
        {
            Print($"File opened: {obj.FilePath}");
        }

        protected override void OnException(Exception exception)
        {
            Print($"Exception: {exception}");
        }
    }
}

Image title