Langkau tajuk talian

Storan tempatan

Dalam panduan ini, kami menerangkan bagaimana anda boleh bekerja dengan storan tempatan semasa membangunkan algo cTrader. Di bawah, kami menyediakan ringkasan satu minit tentang bagaimana akses storan tempatan berfungsi.

Storan tempatan dalam satu minit!

  • Storan tempatan membolehkan anda menyimpan maklumat dalam sistem fail tempatan anda. Gunakannya untuk mengekalkan data antara dua atau lebih penempatan cBot dan indikator anda.
  • Untuk menyimpan data, gunakan kaedah SetString(string key, string value) dan SetObject(string key, object obj). Untuk mendapatkannya semula, panggil kaedah GetString(string key) dan T GetObject<T>(string key).
  • Tentukan skop storan tempatan pilihan anda dengan menggunakan enum LocalStorageScope. Sebagai contoh, penindihan SetString(string key, string value, LocalStorageScope.Device) akan menyimpan data dalam direktori Documents/cAlgo/LocalStorage/ anda.
  • Walaupun maklumat disimpan secara automatik setiap minit, anda boleh menggunakan kaedah Flush(LocalStorageScope localStorageScope) untuk menyimpan data tanpa kelewatan.
  • Semasa ujian belakang dan pengoptimuman, storan tempatan menyimpan data dalam memori sahaja.

Menggunakan storan tempatan

Fikirkan storan tempatan sebagai cara untuk menyimpan maklumat antara satu atau beberapa hentian dan permulaan cBot dan indikator anda. Ciri ini membolehkan penyimpanan data cBot dan indikator dan kemudian mengakses maklumat ini dalam beberapa cara bergantung pada keperluan anda. Storan tempatan berfungsi tanpa mengira hak akses yang diberikan kepada algo.

Antara muka LocalStorage mengandungi semua kaedah yang boleh anda gunakan untuk menyimpan dan mengakses data ke dan dari storan tempatan. Beberapa contoh kaedah ini termasuk yang berikut:

  • SetString(string key, string value)- menyimpan nilai rentetan dengan memadankannya dengan kunci yang ditentukan.
  • SetObject(string key, object obj)- menyimpan objek dengan memadankannya dengan kunci yang ditentukan.
  • GetString(string key) - mendapatkan semula nilai rentetan yang disimpan dengan mencarinya di bawah kunci yang ditentukan.
  • T GetObject<T>(string key) - mendapatkan semula objek yang disimpan jenis T dari storan tempatan dengan mencarinya di bawah kunci yang ditentukan.

Amaran

Kaedah SetObject(string key, object obj) dan GetObject<T>(string key) hanya berfungsi dengan jenis data yang boleh diserialisasikan (ditukar kepada bait).

Pertimbangkan contoh berikut di mana kami meminta tika cBot untuk menyimpan mesej contoh pada permulaan. Pada permulaan seterusnya, tika yang sama akan memaparkan kotak mesej yang mengandungi mesej kami.

 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
30
31
32
33
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;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleLocalStorageTest : Robot

    {

        protected override void OnStart()
        {

            string messageLocalStorage = LocalStorage.GetString("Example Message");

            if (messageLocalStorage is not null)

            {

                MessageBox.Show(messageLocalStorage);

            }

            LocalStorage.SetString("Example Message", "This is just an example message");
        }
    }
}

Selepas tika cBot di atas dilancarkan untuk kali pertama, ia menyimpan mesej contoh kami dalam storan tempatan. Selepas menghentikan tika dan memulakannya semula, kotak mesej berikut ditunjukkan.

Perhatikan bahawa storan tempatan berfungsi walaupun apabila AccessRights.None ditentukan.

Takrif skop storan tempatan

Skop storan tempatan (ditakrifkan melalui jenis LocalStorageScope) menentukan di mana maklumat disimpan secara tepat dan bagaimana ia boleh diakses. enum ini mengandungi pemalar berikut:

  • LocalStorageScope.Instance - data yang disimpan hanya boleh disimpan dan diakses oleh instans tertentu cBot atau penunjuk yang sedang berjalan. Maklumat disimpan ke dalam direktori Documents/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. Dalam laluan ini, "AlgoType" menandakan jenis sambungan cTrader yang bekerja dengan storan tempatan (cBots atau Indicators) manakala AlgoName ialah nama cBot/penunjuk tertentu. InstanceUniqueIdentifier ialah ID unik bagi instans tertentu cBot atau penunjuk tertentu.
  • LocalStorageScope.Type - data yang disimpan boleh disimpan dan diakses oleh semua instans cBot atau penunjuk tertentu yang sedang berjalan. Maklumat disimpan ke dalam direktori Documents/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/.
  • LocalStorageScope.Device - data yang disimpan boleh disimpan dan diakses oleh semua instans cBot dan penunjuk yang sedang berjalan pada peranti semasa. Maklumat disimpan ke dalam direktori "Documents/cAlgo/LocalStorage/".

Seterusnya, kaedah seperti SetString() dan SetObject() mempunyai muatan lebih tambahan yang membolehkan penentuan skop storan tempatan tersuai. Sebagai contoh, kod berikut akan menyimpan rentetan ke LocalStorageScope.Type; rentetan ini, seterusnya, akan boleh diakses oleh semua sambungan jenis tertentu.

1
SetString(Example String, Just an example string, LocalStorageScope.Type);

Jika LocalStorageScope tidak ditentukan sebagai parameter, LocalStorageScope.Instance digunakan secara lalai.

Perhatikan bahawa tingkah laku ini berbeza untuk kaedah GetString(string key) dan T GetObject<T>(string key). Apabila kaedah ini dipanggil tanpa menentukan skop storan tempatan, ia akan mencari kunci yang ditentukan dalam semua skop mengikut hierarki di bawah:

  • Tika
  • Jenis
  • Peranti

Tambahan pula, setiap skop storan tempatan yang berbeza mempunyai kuota ruang cakera sendiri:

  • LocalStorageScope.Instance dihadkan kepada 10 MB.
  • LocalStorageScope.Type dihadkan kepada 100 MB.
  • LocalStorageScope.Device dihadkan kepada 500 MB.

Had yang ditakrifkan di atas tidak bersifat kumulatif. Sebagai contoh, jika anda telah menggunakan semua 500 MB storan peringkat peranti, anda masih boleh menyimpan maklumat menggunakan storan peringkat instans sehingga mencapai hadnya iaitu 10 MB.

Bagaimana penyimpanan dan pemuatan maklumat berfungsi

Apabila menyimpan maklumat ke storan tempatan (contohnya, dengan memanggil kaedah SetString()), cTrader secara automatik menyimpan data setiap minit. Data juga disimpan apabila instans dihentikan.

Walau bagaimanapun, anda boleh menyesuaikan tingkah laku ini dengan menggunakan kaedah berikut:

  • Flush(LocalStorageScope localStorageScope) - menyimpan semua data ke skop yang ditentukan.
  • Reload(LocalStorageScope localStorageScope) - memuatkan semula semua nilai daripada skop yang ditentukan.

Perlu diingat bahawa, apabila memanggil kaedah Reload(LocalStorageScope localStorageScope, sebarang perubahan yang belum selesai mungkin hilang. Untuk mengelakkan ini, pastikan untuk memanggil Flush(LocalStorageScope localStorageScope) terlebih dahulu.

Dalam contoh di bawah, kita meminta cBot untuk melaksanakan pesanan pasaran. Selepas tindakan ini selesai, kita segera menyimpan P&L kasar bagi posisi yang baru kita buka dalam LocalStorageScope.Type.

1
2
3
4
5
ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000, Custom label);
var positionOne = Positions.Find("Custom label");        
string positionOneGrossProfit = positionOne.GrossProfit.ToString();
LocalStorage.SetString("Position 1", positionOneGrossProfit, LocalStorageScope.Device); 
LocalStorage.Flush(LocalStorageScope.Device);

Storan tempatan dalam ujian belakang dan pengoptimuman

Storan tempatan berfungsi secara berbeza dalam ujian belakang berbanding dengan dagangan masa nyata.

Seperti yang ditunjukkan sebelum ini, storan tempatan menggunakan sistem fail mesin tempatan anda apabila ciri ini digunakan dalam dagangan masa nyata. Walau bagaimanapun, penggunaan sistem fail dalam ujian belakang akan menyebabkan beberapa masalah, terutamanya menyimpan sejumlah besar data yang tidak berkaitan dengan pergerakan pasaran dan operasi dagangan semasa.

Untuk mengelakkan masalah ini, semua operasi dengan storan tempatan dijalankan dalam memori sahaja apabila melakukan ujian belakang atau mengoptimumkan cBot anda. Hasilnya, anda boleh memastikan bahawa semua data yang disimpan ke sistem fail anda hanya berkaitan dengan dagangan masa nyata.

Secara ringkasnya, storan tempatan adalah ciri API Algo yang sangat bermanfaat yang membolehkan data kekal antara berbilang hentian dan permulaan pelbagai cBot dan penunjuk. Dengan menggunakan storan tempatan secara berkesan, anda boleh mencipta strategi dagangan automatik yang kompleks berdasarkan data tersuai yang disimpan dalam sistem fail anda.