Yerel depolama
Bu kılavuzda, cTrader algoritmaları geliştirirken yerel depolama ile nasıl çalışabileceğinizi açıklıyoruz. Aşağıda, yerel depolama erişiminin nasıl çalıştığına dair bir dakikalık bir özet sunuyoruz.
Bir dakikada yerel depolama!
- Yerel depolama, bilgileri yerel dosya sisteminize kaydetmenizi sağlar. cBots'larınızın ve göstergelerinizin iki veya daha fazla dağıtımı arasında verileri kalıcı hale getirmek için kullanın.
- Verileri kaydetmek için
SetString(string key, string value)veSetObject(string key, object obj)yöntemlerini kullanın. Verileri almak içinGetString(string key)veT GetObject<T>(string key)yöntemlerini çağırın. LocalStorageScopeenum'unu kullanarak tercih ettiğiniz yerel depolama kapsamını belirtin. Örneğin,SetString(string key, string value, LocalStorageScope.Device)aşırı yüklemesi verileriDocuments/cAlgo/LocalStorage/dizininize kaydedecektir.- Bilgiler her dakika otomatik olarak kaydedilse de, verileri gecikmeden depolamak için
Flush(LocalStorageScope localStorageScope)yöntemini kullanabilirsiniz. - Geriye dönük test ve optimizasyon sırasında, yerel depolama verileri yalnızca bellekte saklar.
Yerel depolamayı kullanma
Yerel depolamayı, cBot'larınızın ve göstergelerinizin bir veya birden fazla durdurulması ve başlatılması arasında bilgi depolamanın bir yolu olarak düşünün. Bu özellik, cBot ve gösterge verilerini kaydetmenize ve ardından bu bilgilere ihtiyaçlarınıza bağlı olarak çeşitli şekillerde erişmenize olanak tanır. Yerel depolama, bir algoritmaya verilen erişim haklarından bağımsız olarak çalışır.
LocalStorage arayüzü, yerel depolamaya veri depolamak ve bu verilere erişmek için kullanabileceğiniz tüm yöntemleri içerir. Bu yöntemlerden bazı örnekler şunlardır:
SetString(string key, string value)- belirtilen anahtarla eşleştirerek bir dize değerini kaydeder.SetObject(string key, object obj)- belirtilen anahtarla eşleştirerek bir nesneyi kaydeder.GetString(string key)- belirtilen anahtar altında bularak kaydedilmiş bir dize değerini alır.T GetObject<T>(string key)- belirtilen anahtar altında bularak yerel depolamadanTtüründe kaydedilmiş bir nesneyi alır.
Uyarı
SetObject(string key, object obj) ve GetObject<T>(string key) yöntemleri yalnızca serileştirilebilen (baytlara dönüştürülebilen) veri türleriyle çalışır.
Bir cBot örneğinin başlangıçta örnek bir mesaj kaydetmesini istediğimiz aşağıdaki örneği ele alalım. Sonraki başlatmalarda, aynı örnek mesajımızı içeren bir mesaj kutusu görüntüleyecektir.
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 | |
Yukarıdaki cBot'un bir örneği ilk kez başlatıldıktan sonra, örnek mesajımızı yerel depolamaya kaydeder. Örnek durdurulup tekrar başlatıldıktan sonra aşağıdaki mesaj kutusu gösterilir.

Yerel depolamanın AccessRights.None belirtildiğinde bile çalıştığını unutmayın.
Yerel depolama kapsamını tanımlama
Yerel depolama kapsamı (LocalStorageScope türü aracılığıyla tanımlanır), bilgilerin tam olarak nerede depolandığını ve bunlara nasıl erişilebileceğini belirler. Bu enum aşağıdaki sabitleri içerir:
LocalStorageScope.Instance- kaydedilen veriler depolanır ve yalnızca bir cBot veya göstergenin belirli bir çalışan örneği tarafından erişilebilir. BilgilerDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/dizinine kaydedilir. Bu yolda, "AlgoType" yerel depolama ile çalışan cTrader uzantısının türünü (cBotsveyaIndicators) belirtirken,AlgoNamebelirli bir cBot/göstergenin adıdır.InstanceUniqueIdentifier, belirli bir cBot veya göstergenin belirli bir örneğinin benzersiz kimliğidir.LocalStorageScope.Type- kaydedilen veriler depolanır ve belirli bir cBot veya göstergenin tüm çalışan örnekleri tarafından erişilebilir. BilgilerDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/dizinine kaydedilir.LocalStorageScope.Device- kaydedilen veriler depolanır ve mevcut cihazdaki tüm çalışan cBot ve gösterge örnekleri tarafından erişilebilir. Bilgiler "Documents/cAlgo/LocalStorage/" dizinine kaydedilir.
Buna karşılık, SetString() ve SetObject() gibi yöntemlerin, özel bir yerel depolama kapsamı belirtmeye olanak tanıyan ek aşırı yüklemeleri vardır. Örneğin, aşağıdaki kod bir dizeyi LocalStorageScope.Type'a kaydedecektir; bu dize, daha sonra belirli bir türdeki tüm uzantılar tarafından erişilebilir olacaktır.
1 | |
Eğer LocalStorageScope bir parametre olarak belirtilmezse, varsayılan olarak LocalStorageScope.Instance kullanılır.
Bu davranışın GetString(string key) ve T GetObject<T>(string key) yöntemleri için farklı olduğunu unutmayın. Bu yöntemler yerel depolama kapsamı belirtilmeden çağrıldığında, belirtilen anahtarı aşağıdaki hiyerarşiyi takip eden tüm kapsamlarda arayacaklardır:
- Örnek
- Tür
- Cihaz
Ek olarak, her farklı yerel depolama kapsamının kendi disk alanı kotası vardır:
LocalStorageScope.Instance10 MB ile sınırlıdır.LocalStorageScope.Type100 MB ile sınırlıdır.LocalStorageScope.Device500 MB ile sınırlıdır.
Yukarıda tanımlanan limitler kümülatif değildir. Örneğin, cihaz düzeyindeki depolamanın 500 MB'ının tamamını zaten kullandıysanız, örnek düzeyindeki depolamayı 10 MB'lık limitine ulaşana kadar yine de bilgi depolamak için kullanabileceksiniz.
Bilgileri kaydetme ve yükleme nasıl çalışır
Yerel depolamaya bilgi kaydederken (örneğin, SetString() yöntemini çağırarak), cTrader verileri her dakika otomatik olarak kaydeder. Veriler örnek durdurulduğunda da kaydedilir.
Ancak, bu davranışı aşağıdaki yöntemleri kullanarak özelleştirebilirsiniz:
Flush(LocalStorageScope localStorageScope)- tüm verileri belirtilen kapsama kaydeder.Reload(LocalStorageScope localStorageScope)- belirtilen kapsamdaki tüm değerleri yeniden yükler.
Reload(LocalStorageScope localStorageScope) yöntemini çağırırken, bekleyen değişikliklerin kaybolabileceğini unutmayın. Bunu önlemek için, önceden Flush(LocalStorageScope localStorageScope) yöntemini çağırdığınızdan emin olun.
Aşağıdaki örnekte, bir cBot'tan bir piyasa emri yürütmesini istiyoruz. Bu eylem tamamlandıktan sonra, yeni açtığımız pozisyonun brüt kâr ve zararını hemen LocalStorageScope.Type'a kaydediyoruz.
1 2 3 4 5 | |
Geriye dönük test ve optimizasyonda yerel depolama
Yerel depolama, geriye dönük testte gerçek zamanlı işlemlerden farklı çalışır.
Daha önce gösterildiği gibi, yerel depolama bu özellik gerçek zamanlı işlemlerde kullanıldığında yerel makinenizin dosya sistemini kullanır. Ancak, geriye dönük testte dosya sistemini kullanmak, en önemlisi mevcut piyasa hareketleri ve işlem operasyonlarıyla ilgisi olmayan büyük miktarda veri kaydetmek gibi çeşitli sorunlara yol açacaktır.
Bu sorunları önlemek için, geriye dönük testler yaparken veya cBot'larınızı optimize ederken yerel depolama ile tüm işlemler yalnızca bellekte gerçekleştirilir. Sonuç olarak, dosya sisteminize kaydedilen tüm verilerin yalnızca gerçek zamanlı işlemleri ilgilendirdiğinden emin olabilirsiniz.
Özetle, yerel depolama, çeşitli cBot'ların ve göstergelerin birden fazla durdurulması ve başlatılması arasında verileri kalıcı hale getirmeye olanak tanıyan Algo API'nin oldukça faydalı bir özelliğidir. Yerel depolamayı etkili bir şekilde kullanarak, dosya sisteminize kaydedilen özel verilere dayalı karmaşık otomatik işlem stratejileri oluşturabilirsiniz.