Yerel depolama ile nasıl çalışılır
Bu makalede ve ilgili videosunda, yerel depolamanın ne olduğunu ve cTrader algoritmalarınızda nasıl kullanılabileceğini açıklayacağız. Ayrıca faydalı örnekler sunacak ve yerel depolama kapsamının nasıl çalıştığını açıklayacağız.
Yerel depolama neden kullanılır
Algoritmanızın yerel dosya sistemine bir şeyler kaydetmek veya oradan bir şeyler almak istediği birçok durum vardır. Örneğin, tüm cBot işlemlerinin bir günlüğünü kaydetmek isteyebilirsiniz. Ancak bu, genellikle algoritmanın yükseltilmiş erişim haklarına (AccessRights.FullAccess) sahip olmasını gerektirir ki bu, kullanıcılar için ideal değildir. Bir algoritma, bir kullanıcıdan yükseltilmiş izinler sağlamasını isterse, kullanıcı algoritmaya güvenme olasılığı çok daha düşüktür, özellikle de kaynak kodu olmadan dağıtılıyorsa. Yerel depolama, herhangi bir güvenlik endişesi yaratmadan yerel dosya sistemine güvenli bir şekilde erişmek için uygun bir yoldur. Yerel depolama kullanmak, geliştiricilerin algoritmalarının erişim haklarını AccessRights.None olarak ayarlamasına olanak tanır.
Yerel depolamada dizeleri kaydetme
Her cTrader algoritma türünün, okuma ve yazma işlemlerini gerçekleştirmeye olanak tanıyan bir LocalStorage özelliği vardır. Yerel depolamanın nasıl çalıştığını göstermek için yeni bir cBot oluşturacağız. OnStart işleyicisinde, LocalStorage.SetString(string key, string value) yöntemini kullanacağız. Gördüğünüz gibi, iki argüman alır: bilginin kaydedileceği bir anahtar ve kaydedilecek değer.
1 | |
Değeri almak için cBot'un OnTick işleyicisinde GetString(string key) yöntemini kullanacağız.
1 | |
Message boş olmadığı sürece, cBot'u derleyebilir ve alınan değerin günlüğe doğru şekilde yazdırıldığını görebiliriz.
Yerel depolamada nesneleri kaydetme
Dize dışında, yerel depolamayı herhangi bir tür nesneyi kaydetmek için kullanabilirsiniz. Arka planda cTrader, yerel depolamadaki nesneleri serileştirir ve seri durumdan çıkarır, bu da her türlü verinin paylaşılmasına olanak tanır. Bunu göstermek için, bilgi depolamak, kaydetmek ve daha sonra almak üzere yeni bir sınıf oluşturabiliriz. Bu sınıfa Signal adını vereceğiz.
1 2 3 4 5 6 | |
OnStart() yönteminde, bu sınıfın yeni bir örneğini oluşturacak ve özelliklerini başlatacağız.
1 2 3 4 5 | |
Hesap bakiyesini kaydetmek ve almak için SetObject(string key, Object object) yöntemini kullanacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
cBot'umuzu derleyip başlatırsak, doğru değerlerin günlüğe yazdırıldığını görmeliyiz.
Yerel depolama kapsamları
Yerel depolama kullanırken, kaydedilen değerlerin gelecekte alınmak üzere maruz bırakıldığı kapsamı da tanımlayabilirsiniz. Üç farklı kapsam mevcuttur:
- Örnek kapsamı - kaydedilen değerler yalnızca belirli bir örneğe açıktır.
- Tür kapsamı - kaydedilen değerler belirli bir algoritmanın tüm örneklerine açıktır.
- Cihaz kapsamı - kaydedilen değerler, türlerinden bağımsız olarak tüm algoritmalara açıktır.
Örnek kapsamı kullanmak şöyle görünebilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
SetString() yönteminde kapsamı açıkça belirttiğimizi unutmayın.
Bu cBot'un birkaç örneğini ekleyebilir ve birinin yerel depolamaya yazarken diğerinin bilgi almasını sağlayacak şekilde yapılandırabiliriz. Bu durumda, bilgi okumak imkansız olmalıdır. Ancak, yalnızca bir örnek hem yazma hem de okuma işlemlerini gerçekleştirecek şekilde ayarlanmışsa, cBot amaçlandığı gibi çalışmalıdır.
Tür kapsamı kullanmaya bir örnek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Bu botun iki örneğini oluşturup bir örneğin yerel depolamaya yazmasını, diğerinin ise kaydedilen değeri okumasını sağlayacak şekilde ayarlarsak, her şey herhangi bir hata vermeden çalışmalıdır.
Son olarak, cihaz kapsamı farklı algoritmalar arasında bilgi alışverişi yapılmasına olanak tanır. Bu kapsam türünün kullanımına bir örnek aşağıdadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Hepsi aynı kodu kullanan birkaç cBot oluşturabiliriz. Bunları doğru şekilde ayarlarsak, bir cBot yerel depolamaya bilgi kaydedebilirken diğeri bu bilgiyi geri alabilir. Kapsam LocalStorageScope.Device değerine eşit olduğu sürece sistemimiz amaçlandığı gibi çalışmalıdır.
Flush() ve Reload() yöntemlerini kullanma
cTrader'ın birkaç örneği arasında bilgi paylaşmak istiyorsanız Flush() ve Reload() yöntemlerini çağırın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Bu kodla birkaç cBot oluşturur ve cTrader'ın farklı örnekleri arasında bilgi paylaşmak için bir deney yaparsak, kaydedilen değerlerimizin amaçlandığı gibi kalıcı olduğunu görürüz.