ข้ามไปที่เนื้อหา

การดำเนินการกับไฟล์

ผู้ใช้แพลตฟอร์มแสดงความกังวลที่มีเหตุผลเกี่ยวกับการเปิดใช้งาน cBot และอินดิเคเตอร์ด้วย AccessRights.FullAccess โดยเฉพาะอย่างยิ่งเมื่อไม่มีซอร์สโค้ดให้ใช้งาน จึงยากที่จะทราบแน่ชัดว่าอัลกอริทึมจะทำการเปลี่ยนแปลงอะไรกับระบบไฟล์ ในคู่มือสิทธิ์การเข้าถึง เราได้แนะนำไปแล้วว่า 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" ทันทีหลังจากการเริ่มต้น หากมีการวางคำสั่ง Market ที่สำเร็จใน 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 ยังคงช่วยให้อัลกอริทึมที่มีสิทธิ์การเข้าถึงจำกัดสามารถทำงานกับไฟล์และโฟลเดอร์ในเครื่องได้ คุณสามารถใช้เมธอดจากเนมสเปซ System.IO ของ C# เพื่อเขียนโปรแกรมว่าอัลกอริทึมจะดำเนินการดังกล่าวภายในขอบเขตของโฟลเดอร์ที่เกี่ยวข้องอย่างไร ดังนั้น ไดเรกทอรีอื่นๆ ในระบบไฟล์ของผู้ใช้จึงยังคงได้รับการปกป้องอย่างเต็มที่แม้ว่าซอร์สโค้ดของอัลกอริทึมจะไม่สามารถใช้งานได้