Penyimpanan lokal
Dalam panduan ini, kami menjelaskan bagaimana Anda dapat bekerja dengan penyimpanan lokal saat mengembangkan algo cTrader. Di bawah ini, kami menyediakan ringkasan satu menit tentang cara kerja akses penyimpanan lokal.
Penyimpanan lokal dalam satu menit!
- Penyimpanan lokal memungkinkan Anda menyimpan informasi dalam sistem berkas lokal Anda. Gunakan untuk menyimpan data di antara dua atau lebih penerapan cBot dan indikator Anda.
- Untuk menyimpan data, gunakan metode
SetString(string key, string value)danSetObject(string key, object obj). Untuk mengambilnya, panggil metodeGetString(string key)danT GetObject<T>(string key). - Tentukan cakupan penyimpanan lokal yang Anda inginkan dengan menggunakan enum
LocalStorageScope. Misalnya, overloadSetString(string key, string value, LocalStorageScope.Device)akan menyimpan data di direktoriDocuments/cAlgo/LocalStorage/Anda. - Meskipun informasi disimpan secara otomatis setiap menit, Anda dapat menggunakan metode
Flush(LocalStorageScope localStorageScope)untuk menyimpan data tanpa penundaan. - Selama backtesting dan optimisasi, penyimpanan lokal hanya menyimpan data dalam memori.
Menggunakan penyimpanan lokal
Anggap penyimpanan lokal sebagai cara untuk menyimpan informasi di antara satu atau beberapa kali berhenti dan mulai cBot dan indikator Anda. Fitur ini memungkinkan penyimpanan data cBot dan indikator dan kemudian mengakses informasi ini dengan beberapa cara tergantung kebutuhan Anda. Penyimpanan lokal berfungsi terlepas dari hak akses yang diberikan kepada algo.
Antarmuka LocalStorage berisi semua metode yang dapat Anda gunakan untuk menyimpan dan mengakses data ke dan dari penyimpanan lokal. Beberapa contoh metode ini termasuk yang berikut:
SetString(string key, string value)- menyimpan nilai string dengan mencocokkannya dengan kunci yang ditentukan.SetObject(string key, object obj)- menyimpan objek dengan mencocokkannya dengan kunci yang ditentukan.GetString(string key)- mengambil nilai string yang disimpan dengan menemukannya di bawah kunci yang ditentukan.T GetObject<T>(string key)- mengambil objek tersimpan tipeTdari penyimpanan lokal dengan menemukannya di bawah kunci yang ditentukan.
Peringatan
Metode SetObject(string key, object obj) dan GetObject<T>(string key) hanya bekerja dengan tipe data yang dapat diserialisasi (diubah menjadi byte).
Pertimbangkan contoh berikut di mana kita meminta instance cBot untuk menyimpan pesan contoh saat mulai. Pada mulai berikutnya, instance yang sama akan menampilkan kotak pesan yang berisi pesan kita.
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 | |
Setelah instance cBot di atas diluncurkan untuk pertama kalinya, ia menyimpan pesan contoh kita di penyimpanan lokal. Setelah menghentikan instance dan memulainya lagi, kotak pesan berikut ditampilkan.

Perhatikan bahwa penyimpanan lokal bekerja bahkan ketika AccessRights.None ditentukan.
Tentukan cakupan penyimpanan lokal
Cakupan penyimpanan lokal (didefinisikan melalui tipe LocalStorageScope) menentukan di mana tepatnya informasi disimpan dan bagaimana informasi tersebut dapat diakses. enum ini berisi konstanta berikut:
LocalStorageScope.Instance- data yang disimpan hanya dapat diakses oleh instance tertentu dari cBot atau indikator yang sedang berjalan. Informasi disimpan ke direktoriDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. Dalam jalur ini, "AlgoType" menunjukkan jenis ekstensi cTrader yang bekerja dengan penyimpanan lokal (cBotsatauIndicators) sementaraAlgoNameadalah nama cBot/indikator tertentu.InstanceUniqueIdentifieradalah ID unik dari instance tertentu dari cBot atau indikator tertentu.LocalStorageScope.Type- data yang disimpan dapat diakses oleh semua instance yang berjalan dari cBot atau indikator tertentu. Informasi disimpan ke direktoriDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/.LocalStorageScope.Device- data yang disimpan dapat diakses oleh semua instance cBot dan indikator yang berjalan pada perangkat saat ini. Informasi disimpan ke direktori "Documents/cAlgo/LocalStorage/".
Sebaliknya, metode seperti SetString() dan SetObject() memiliki overload tambahan yang memungkinkan untuk menentukan cakupan penyimpanan lokal kustom. Misalnya, kode berikut akan menyimpan string ke LocalStorageScope.Type; string ini, selanjutnya, akan dapat diakses oleh semua ekstensi dari jenis tertentu.
1 | |
Jika LocalStorageScope tidak ditentukan sebagai parameter, LocalStorageScope.Instance digunakan secara default.
Perhatikan bahwa perilaku ini berbeda untuk metode GetString(string key) dan T GetObject<T>(string key). Ketika metode ini dipanggil tanpa menentukan cakupan penyimpanan lokal, mereka akan mencari kunci yang ditentukan di semua cakupan mengikuti hierarki di bawah ini:
- Instance
- Tipe
- Perangkat
Selain itu, setiap cakupan penyimpanan lokal yang berbeda memiliki kuota ruang disk sendiri:
LocalStorageScope.Instancedibatasi hingga 10 MB.LocalStorageScope.Typedibatasi hingga 100 MB.LocalStorageScope.Devicedibatasi hingga 500 MB.
Batas yang ditentukan di atas tidak bersifat kumulatif. Misalnya, jika Anda telah menggunakan semua 500 MB penyimpanan tingkat perangkat, Anda masih akan dapat menyimpan informasi menggunakan penyimpanan tingkat instance hingga mencapai batasnya 10 MB.
Cara kerja penyimpanan dan pemuatan informasi
Saat menyimpan informasi ke penyimpanan lokal (misalnya, dengan memanggil metode SetString()), cTrader secara otomatis menyimpan data setiap menit. Data juga disimpan saat instance berhenti.
Namun, Anda dapat menyesuaikan perilaku ini dengan menggunakan metode berikut:
Flush(LocalStorageScope localStorageScope)- menyimpan semua data ke cakupan yang ditentukan.Reload(LocalStorageScope localStorageScope)- memuat ulang semua nilai dari cakupan yang ditentukan.
Perlu diingat bahwa, saat memanggil metode Reload(LocalStorageScope localStorageScope, perubahan yang tertunda mungkin hilang. Untuk menghindari hal ini, pastikan untuk memanggil Flush(LocalStorageScope localStorageScope) terlebih dahulu.
Dalam contoh di bawah ini, kita meminta cBot untuk mengeksekusi order pasar. Setelah tindakan ini selesai, kita segera menyimpan L&R kotor dari posisi yang baru saja kita buka di LocalStorageScope.Type.
1 2 3 4 5 | |
Penyimpanan lokal dalam backtesting dan optimisasi
Penyimpanan lokal bekerja secara berbeda dalam backtesting dibandingkan dengan trading waktu nyata.
Seperti yang ditunjukkan sebelumnya, penyimpanan lokal menggunakan sistem berkas mesin lokal Anda ketika fitur ini digunakan dalam trading waktu nyata. Namun, menggunakan sistem berkas dalam backtesting akan menyebabkan beberapa masalah, yang paling mencolok adalah menyimpan sejumlah besar data yang tidak terkait dengan pergerakan pasar dan operasi trading saat ini.
Untuk menghindari masalah ini, semua operasi dengan penyimpanan lokal dilakukan hanya dalam memori saat melakukan backtest atau mengoptimalkan cBot Anda. Hasilnya, Anda dapat memastikan bahwa semua data yang disimpan ke sistem berkas Anda hanya menyangkut trading waktu nyata.
Singkatnya, penyimpanan lokal adalah fitur yang sangat bermanfaat dari Algo API yang memungkinkan untuk menyimpan data di antara beberapa kali berhenti dan mulai berbagai cBot dan indikator. Dengan menggunakan penyimpanan lokal secara efektif, Anda dapat membuat strategi trading otomatis yang kompleks berdasarkan data kustom yang disimpan dalam sistem berkas Anda.