ファイル操作

プラットフォームユーザーは、AccessRights.FullAccess で cBots やインジケーターを起動することについて正当な懸念を示しています。特にソースコードが利用できない場合、アルゴリズムがファイルシステムにどのような変更を加えるかを確実に知るのは難しいです。アクセス権ガイドでは、他者と共有する cBots やインジケーターは、AccessRights.None を受けるべきであるとアドバイスしています。

この API ガイドでは、制限された AccessRights を持つアルゴリズムが、どのようにローカルファイルと安全に操作できるかを説明します。

1 分でファイル操作!

  • ファイル操作機能を使用すると、制限されたアクセス権を持つアルゴリズムが、指定されたフォルダー内のファイルやフォルダーのみと作業できます。
  • フォルダー名は cBot/インジケーター名に対応しています。
  • ユーザーのファイルシステム内のその他のディレクトリは、不正アクセスから安全に保護されます。
  • API では、ファイル操作機能は .NET 6.0 のアルゴリズムのみに対応しています。

ファイル操作のルール

アクセス権が制限されたアルゴリズムは、ユーザーのファイルシステム内の指定されたフォルダーのみでファイル操作を実行できます。各アルゴリズムタイプは、以下のように独自のフォルダーを見つけ、そのアルゴリズム名ごとに個別のフォルダーが作成されます(例:cBots、インジケーターなど)。

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

注意

ファイル操作機能は .NET 6.0 のアルゴリズムにのみ対応しています。

以下のルールは、API でファイル操作機能がどのように機能するかを決定します。

1. 各アルゴリズムは、その名前に対応するフォルダー(サブフォルダーを含む)にのみアクセスできます。

2. 対応するフォルダーが存在しない場合、そのフォルダーは、インスタンスが最初に起動されるときに、上記のスキームに従ってファイルシステムに作成されます。

3. 新しいフォルダーを作成できない場合、cBot/インジケーターは起動せず、エラーが報告されます。

4. アルゴリズムコードでは、対応するフォルダーのフルパスを指定する必要はありません。代わりに、アルゴリズムは相対パスを使用します。

5. System.IO 名前空間は、ファイルやフォルダーの操作を実行するためのさまざまなクラス(例:FileFileInfoDirectoryDirectoryInfoPath)を提供しており、関連するメソッドを呼び出すことができます。

以下は、FileDirectory クラスに含まれるメソッドのいくつかの例です。

メソッド説明
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}");
                } 
            }
        }
    }
}

作成されたファイル

まとめ

API のファイル操作機能により、アクセス権が制限されたアルゴリズムでもローカルファイルやフォルダーと作業することができます。アルゴリズムが対応するフォルダー内でその操作をプログラムするために、C# の System.IO 名前空間のメソッドを使用できます。このため、アルゴリズムのソースコードが利用できなくても、ユーザーのファイルシステム内の他のディレクトリは完全に保護されます。