跳转至

文件操作

平台用户对启动具有 AccessRights.FullAccess 权限的 cBot 和指标表示合理的担忧。 尤其是在没有源代码可用的情况下,很难确切知道算法会对文件系统引入哪些更改。 在访问权限指南中,我们已经建议您与他人共享的 cBot 和指标应该获得 AccessRights.None。

本 API 指南解释了具有有限 AccessRights 的算法如何安全地进行本地文件操作。

一分钟内完成文件操作!

  • 文件操作功能允许具有受限访问权限的算法仅在指定文件夹内处理文件和文件夹。
  • 文件夹名称与 cBot 或指标名称相对应。
  • 用户文件系统的所有其他目录仍然受到安全保护,防止未经授权的访问。
  • 在 API 中,文件操作功能仅支持 .NET 6.0 算法。

文件操作规则

任何具有受限访问权限的算法只允许在用户文件系统的指定文件夹中执行文件操作。 每种算法类型(如 cBot 和指标)都有自己的文件夹位置,如下所示,每个算法名称都会创建一个单独的文件夹。

Documents
|-cAlgo
  |-Data
    |-cBots
      |-${cBot Name}
    |-Indicators
      |-${Indicator Name}

注意

文件操作功能仅适用于 .NET 6.0 算法。

以下规则决定了 API 中文件操作功能的运作方式:

1. 每个算法只能访问与其名称相对应的文件夹(包括子文件夹,如果有的话)。

2. 如果没有相应的文件夹,当首次启动实例时,会根据上述方案在文件系统中创建这样一个文件夹。

3. 如果无法创建新文件夹,cBot 或指标将无法启动,并会报告错误。

4. 在算法代码中,您不需要指定相应文件夹的完整路径。 相反,算法使用相对路径。

5. System.IO 命名空间提供了各种类(File、FileInfo、Directory、 DirectoryInfo、Path 等), 可以调用相关方法来执行文件和文件夹操作。

以下是 File 和 Directory 类中包含的一些方法示例。

方法 描述
File.Create() 在指定目录中创建或覆盖文件。
File.WriteAllText() 创建新文件,将指定字符串写入文件并关闭文件。
File.Copy() 将现有文件复制到新文件。 不允许覆盖同名文件。
File.Delete() 删除指定目录中的文件。
Directory.CreateDirectory() 创建文件夹或子文件夹。
Directory.Delete() 删除文件夹或子文件夹。
Directory.Exists() 检查指定目录是否存在。
Directory.Move() 将现有目录移动到新指定的目录。

用例

当调用TakeChartshot()方法时,由于文件操作的性质,不需要在File.WriteAllBytes后指定完整的目录路径来保存。即使设置了AccessRights.None,图表截图也会保存在与算法相关的目录中。

创建 cBot 示例

以下 cBot 示例具有 AccessRights.None,但它在初始化后立即在相应文件夹中创建一个名为"File Access Test"的文本文件。 如果在 OnStart() 中成功下达市价单,cBot 会将持仓 ID 写入创建的文件中。

 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
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;
using System.IO;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class MycBot : Robot
    {
        protected override void OnStart()
        {
            TradeResult result = ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);

            if (result.IsSuccessful)
            {
                string positionId = result.Position.Id.ToString();
                {
                    File.WriteAllText("My positions.txt", $"{positionId}");
                } 
            }
        }
    }
}

Created File

Written Position ID

总结

API 中的文件操作功能仍然使具有受限访问权限的算法能够处理本地文件和文件夹。 您可以使用 C# 的 System.IO 命名空间中的方法来编程算法如何在相应文件夹的范围内执行此类操作。 因此,即使算法源代码不可用,用户文件系统中的其他目录仍然受到完全保护。