Ağ erişimi
Bu kılavuz, İnternet'e erişebilen algoritmaları nasıl oluşturabileceğinizi tanımlar. Aşağıda, bu API özelliğinin bir dakikalık özeti bulunmaktadır.
Bir dakikada ağ erişimi!
- Algoritma çözümleriniz, işlem haberleri web sitelerinden veya Forex odaklı web API'lerinden bilgi alabilir. Bu özelliği, cBot'larınızın, eklentilerinizin ve göstergelerinizin güncel gerçek hayat olaylarına ve bilgilerine tepki vermesini sağlamak için kullanın.
System.Text.JsonveSystem.Text.Json.Serializationad alanlarındaki yöntemleri kullanarak nesneleri JSON dosyalarına ve JSON dosyalarından hızlı bir şekilde serileştirebilir veya seri durumdan çıkarabilirsiniz, bu da cBot'ların uç noktaları kolayca tüketmesine ve değerli bilgileri işlemesine olanak tanır.- WebSocket protokolü, her seferinde bir HTTP isteği yapmak zorunda kalmak yerine bir hizmetten gerçek zamanlı olarak veri almayı sağlar. Algoritmalarınızı web kaynaklarıyla sorunsuz bir şekilde entegre etmek için WebSocket kullanın.
WebSocketClientsınıfı, WebSocket bağlantılarını kullanmak için gerekli tüm yöntemleri ve parametreleri içerir. - WebSocket kullanırken dizeleri ve ham bayt verilerini gönderebilir ve alabilirsiniz. Farklı veri yapılarıyla çalışın ve değerli üçüncü taraf hizmetlerini kullanmak için bunları baytlara serileştirin.
AccessRights.Noneağ işlevleri için yeterlidir.
HTTP
Yeni Http arayüzü, uygulandığında cBot'ların ve diğer algoritma türlerinin İnternet'e erişmesini sağlaması gereken çeşitli yöntemler içerir. Bir örnek için aşağıdakilere bakın:
HttpResponse Http.Get(string uri). Geçirilenuridizesinde belirtilen URI'ye birGETisteği gerçekleştirir ve bu isteğin sonuçlarını içeren birHttpsResponsenesnesi döndürür.
HttpsRequest sınıfı, POST istekleri de dahil olmak üzere daha karmaşık istekler gerçekleştirmeye olanak tanır. Bu istekleri gerçekleştirmek için HttpsRequest.Method özelliğini HttpMethod.Put veya HttpMethod.Patch gibi HttpMethod enum değerlerinden birine ayarlayın.
Buna karşılık, HttpsRequest.Uri özelliği isteğin gönderildiği URI'yi içerirken, HttpsRequest.Body özelliği istek gövdesini ayarlamak için kullanılabilir. HttpsRequest nesnesini nasıl kullanabileceğinize dair bir örnek için aşağıya bakın.
HttpResponse Http.Send(HttpRequest request). Bu yönteme geçirilenHttpsRequestnesnesininrequest.Uriözelliğinin değeri olarak belirtilen URI'ye bir istek gerçekleştirir. Daha sonra, bu isteğin sonuçlarını içeren birHttpsResponsenesnesi döndürür. İstek türü,equest.Methodözelliğinin değeri olarak ayarlanır.
Geriye dönük test ve optimizasyonda ağ erişimi
Http arayüzündeki tüm yöntemler, geriye dönük test ve optimizasyonda amaçlandığı gibi çalışır. Geriye dönük test veya optimizasyonda bir web kaynağına erişirken, bu kaynağın geçmiş bir sürümü yerine güncel sürümünün isteneceği unutulmamalıdır.
Örnek cBot'lar oluşturun
Bir GET isteği gerçekleştirin
Aşağıdaki eylemleri gerçekleştiren basit bir cBot oluşturacağız:
GETisteği gönderir vehttps://forexApiExample.com/v1/exchangerateadresindeki API aracılığıyla bir JSON dosyasına erişir (bu API'nin tamamen sahte olduğunu unutmayın).- Eğer
GETyanıtı başarılı olursa, cBot yanıt gövdesini özel birSymbolPricesınıfının nesnesine seri durumdan çıkarır (bu sınıfı tanıtım amaçlı oluşturduk). - API'de belirtilen fiyattan biraz daha yüksek bir fiyata bir sembol için satış limit emri verir.
cBot'un tamamen uydurma olduğunu unutmayın. Kod derlenecek olsa da, herhangi bir anlamlı eylem gerçekleştirmeyecektir.
JSON dosyalarından dizeleri nasıl serileştireceğiniz veya seri durumdan çıkaracağınız
cBot'umuzun kodu, System.Text.Json ve System.Text.Json.Serialization olmak üzere iki önemli using ifadesi içerir. Bu ad alanları, JsonSerializer.Deserialize<T>() gibi JSON dosyalarından dizeleri kolayca serileştirmeye ve seri durumdan çıkarmaya olanak tanıyan çeşitli yöntemler içerir.
İşte örnek cBot'umuzun kodu:
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 34 35 36 37 | |
Bu cBot gerçek bir API'ye erişseydi, bunu başarıyla yapmış olurdu.
Bir POST isteği gerçekleştirin
Aşağıdaki hedeflere ulaşan daha gelişmiş bir cBot da oluşturabiliriz:
- Aynı sahte API'ye
https://anotherForexApiExample.com/commodities/v1/getaccesstokenadresinden birPOSTisteği gönderir. Bu, bu API için bir erişim belirteci almak amacıyla yapılır. - Yanıt gövdesindeki belirteci
tokendeğişkeninde saklar. - Aynı API'ye,
tokendeğişkeninin değeri URI'de bir sorgu parametresi olarak geçirilerek (https://anotherForexApiExample.com/commodities/v1/getprices) birGETisteği gerçekleştirir. - JSON serileştirmeyi (yukarıda tartışıldı) kullanarak, API'den alınan fiyattan biraz daha düşük bir fiyata bir alış stop emri verir.
Bir kez daha, bu cBot derlendiğinde herhangi bir anlamlı eylem gerçekleştirmeyecektir. Yalnızca örnek amaçlıdır.
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
WebSocket istemcisi
Algo API, herkesin bir WebSocket bağlantısı kullanarak çeşitli web hizmetlerini ve kaynaklarını kullanmasına olanak tanır. Ağ erişimi özelliğinde kullanılan HTTP protokolüne kıyasla, WebSocket protokolü daha hızlıdır ve gerçek zamanlı olarak veri almayı sağlar.
WebSocket istemcisini kullanın
WebSocket istemcisini kullanmak basittir:
- Bir WebSocket bağlantısı için bir uç nokta sunan bir hizmet seçin
WebSocketClientOptionssınıfının bir nesnesini başlatın ve istemcinizi yapılandırmak için parametrelerini belirtin.WebSocketClientsınıfının bir nesnesini başlatın ve daha önce oluşturulan seçenekleri kurucuya geçirin.- Seçtiğiniz kaynağa bağlanmak için
Connect()yöntemini veSend()yöntemi aracılığıyla veri göndermek için kullanın. - WebSocket istemcisi yeni veri aldığında algoritmanızın ne yapması gerektiğini ayarlamak için
TextReceived()veBinaryReceived()olay işleyicilerini kullanın.
Aşağıda, WebSocket aracılığıyla hayali bir ekonomik haber hizmetine bağlanan basit bir cBot oluşturacağız. cBot'un şu anda bağlı olduğu sembol hakkında yeni bir haber yayınlandığında, algoritma haber metnini içeren bir mesaj kutusu gösterecektir.
Not
Bu cBot yalnızca örnek amaçlıdır. Başarıyla derlense de, bir grafiğe eklendiğinde herhangi bir eylem gerçekleştirmez.
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 34 35 36 37 38 39 40 41 42 43 44 | |
Gördüğünüz gibi, WebSocketClient.TextReceived olayını mesaj kutusunu göstermek için işleyebildiğimizden kodumuz oldukça kompakttır. cBot'umuzun hizmetlerden aktif olarak bilgi istemediğini unutmayın. Bunun yerine, kendisine sağlanan yeni bilgilere dinamik olarak tepki verir.
Uyarı
WebSocket istemciniz herhangi bir nedenle bağlantısı kesildiğinde (örneğin, sunucu tarafı bir hata nedeniyle keep-alive aralığının aşılması), WebSocketClient.Connect() yöntemini tekrar çağırmanız gerekir. Bu tür durumları programlı olarak ele almak için WebSocketClient.Disconnected olayını kullanın.
WebSocket'in Faydaları
WebSocket, web'den gelen yeni verilere gerçek zamanlı olarak tepki vermeyi sağladığı için, algoritmalarınızı bir şeyler hakkında otonom olarak bilgilendirebilen üçüncü taraf hizmetleriyle entegrasyon için mükemmeldir. İşte WebSocket istemcisini kullanabileceğiniz web kaynaklarına birkaç örnek.
- Bir ekonomik haber takvimi. Yeni bir haber yayınlandığında, algoritmanız önemli bilgileri içeren bir mesaj kutusu gösterebilir.
- Üretken bir yapay zeka hizmeti. Bir yapay zeka hizmeti bir isteme yanıt vermeye başladığında, tam yanıtı beklemek zorunda kalmak yerine sonucu kelime kelime gösterebilirsiniz.
- Bir algoritmanın bağlı olduğu sembolle ilişkili tüm semboller için bir fiyat akışı. Fiyatlar güncellendiğinde, algoritma kullanıcılarına anında ve doğru bir şekilde gösterilir.
- İşlem yapmaya odaklanmış bir sosyal medya ağı. Belirli bir sembol hakkında yeni mesajlar yayınlandığında, bir algoritma içeriklerini kullanıcılara gösterebilir.
Genel olarak, WebSocket bağlantıları normal HTTPS'ye kıyasla aşağıdaki faydaları sunar:
- WebSocket bağlantıları daha verimlidir. Her HTTP isteği, başlıklar gibi ek veriler içermek zorundadır. WebSocket ile bağlantınız yalnızca bir kez kurulur, bundan sonra gereksiz veri göndermeye gerek kalmaz.
- WebSocket bağlantıları gelişmiş eşzamanlılık sunar. HTTP isteği gönderdikten sonra bir yanıt bekleyene kadar algo işlemlerini durdurmaya gerek yoktur. WebSocket ile istediğiniz zaman veri gönderip alabilir ve bunları eşzamansız olarak işleyebilirsiniz.
WebSocket istemcisi, her tür algonun web kaynaklarıyla dinamik olarak etkileşim kurmasına olanak tanır; bu etkileşim HTTP kullanmaya kıyasla daha hızlı ve daha verimlidir. Üçüncü taraf hizmetlerle entegre güçlü algolar oluşturmak için WebSocket istemcisini kullanın.
Ağ erişimi ve AccessRights özelliği
Kısacası, AccessRights enum'ı algoritmaların cTrader dışındaki verilere (yerel makinenizin dosya sistemi gibi) erişimi olup olmadığını tanımlar. Daha fazlasını bu eğitimde öğrenebilirsiniz.
AccessRights'ı AccessRights.FullAccess olarak ayarlamak, algoların gelişmiş işlemler (Windows kayıt defterinden bilgi alma gibi) gerçekleştirmesine olanak tanır. Ancak son kullanıcılar, cBot'lara veya göstergelere tam erişim vermeyi riskli bulabilirler, çünkü bu durum bir veri ihlaline yol açabilir.
Sonuç olarak, algo ürünlerinizi başkalarıyla paylaşmak istiyorsanız AccessRights.None genellikle en mantıklı seçenektir. Ancak bu seçeneği tercih etseniz bile cTrader ürünleriniz web'e ücretsiz olarak erişebilir. cTrader Algo API'ye ağ erişimi işlevselliğinin eklenmesi, cBot'ların İnternet'teki kaynaklarla çalışmak için artık AccessRights özelliğinin AccessRights.FullAccess olarak ayarlanmasını gerektirmediği anlamına gelir.
Bu, algo geliştiricilerinin diğer trader'lara dağıtmayı amaçladıkları cTrader ürünlerini kodlarken sahip oldukları fırsatları büyük ölçüde genişletir.
Özet
Sonuç olarak, ağ erişimi, algoritmalarınızın gerçekleştirebileceği işlem sayısını büyük ölçüde artırırken ek riskler getirmeyen güçlü bir özelliktir.