콘텐츠로 이동

파일 작업

플랫폼 사용자는 AccessRights.FullAccess로 cBots 및 지표를 실행하는 것에 대해 정당한 우려를 표명합니다. 특히 소스 코드가 없는 경우 알고리즘이 파일 시스템에 어떤 변경을 가할지 확실히 알기 어렵습니다. 접근 권한 가이드에서 이미 다른 사람과 공유하는 cBots 및 지표는 AccessRights.None을 받아야 한다고 조언했습니다.

이 API 가이드는 제한된 AccessRights를 가진 알고리즘이 로컬 파일과 안전하게 작업하는 방법을 설명합니다.

1분 만에 파일 작업!

  • 파일 작업 기능은 제한된 접근 권한을 가진 알고리즘이 지정된 폴더 내에서만 파일 및 폴더와 작업할 수 있도록 합니다.
  • 폴더 이름은 cBot 또는 지표 이름에 해당합니다.
  • 사용자 파일 시스템의 다른 모든 디렉토리는 무단 접근으로부터 안전하게 보호됩니다.
  • API에서 파일 작업 기능은 .NET 6.0 알고리즘에만 지원됩니다.

파일 작업 규칙

제한된 접근 권한을 가진 모든 알고리즘은 사용자 파일 시스템의 지정된 폴더에서만 파일 작업을 수행할 수 있습니다. 각 알고리즘 유형은 아래와 같이 자체 폴더를 찾으며, 각 알고리즘 이름에 대해 별도의 폴더가 생성됩니다.

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 등)를 제공합니다.

아래는 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}");
                } 
            }
        }
    }
}

Created File

Written Position ID

요약

API의 파일 작업 기능은 제한된 액세스 권한을 가진 알고리즘이 로컬 파일 및 폴더와 작업할 수 있도록 합니다. C#의 System.IO 네임스페이스의 메서드를 사용하여 알고리즘이 해당 폴더 내에서 이러한 작업을 수행하는 방식을 프로그래밍할 수 있습니다. 따라서 알고리즘 소스 코드를 사용할 수 없는 경우에도 사용자의 파일 시스템 내 다른 디렉터리는 완전히 보호됩니다.