コンテンツにスキップ

ファイル操作

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

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

1分でわかるファイル操作!

  • ファイル操作機能により、制限されたアクセス権を持つアルゴリズムは、指定されたフォルダ内でのみファイルやフォルダを操作できます。
  • フォルダ名は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名前空間は、ファイルやフォルダを操作するために呼び出せるさまざまなクラス(FileFileInfoDirectoryDirectoryInfoPathなど) を提供します。

以下は、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 名前空間のメソッドを使用して、アルゴリズムが対応するフォルダ内でこのような操作を実行する方法をプログラムできます。 これにより、アルゴリズムのソースコードが利用できない場合でも、ユーザーのファイルシステム内の他のディレクトリは完全に保護されます。