Accesso alla rete
Questa guida definisce come puoi creare algoritmi in grado di accedere a Internet. Di seguito è riportato un riepilogo di un minuto di questa funzionalità API.
Accesso alla rete in un minuto!
- Le tue soluzioni algoritmiche possono attingere informazioni da siti web di notizie di trading o API web orientate al Forex. Utilizza questa funzionalità per garantire che i tuoi cBot, plugin e indicatori reagiscano a eventi e informazioni urgenti della vita reale.
- Utilizzando i metodi negli spazi dei nomi
System.Text.JsoneSystem.Text.Json.Serialization, puoi serializzare o deserializzare rapidamente oggetti da e verso file JSON, consentendo ai cBot di utilizzare facilmente gli endpoint ed elaborare informazioni preziose. - Il protocollo WebSocket consente di ricevere dati da un servizio in tempo reale invece di dover effettuare una richiesta HTTP ogni volta. Utilizza websocket per integrare senza problemi i tuoi algoritmi con le risorse web. La classe
WebSocketClientcontiene tutti i metodi e i parametri necessari per utilizzare le connessioni websocket. - Quando utilizzi websocket, puoi inviare e ricevere stringhe e dati grezzi in byte. Lavora con diverse strutture di dati e serializzale in byte per utilizzare preziosi servizi di terze parti.
AccessRights.Noneè sufficiente per le funzioni di rete.
HTTP
La nuova interfaccia Http contiene diversi metodi che, una volta implementati, dovrebbero consentire ai cBot e ad altri tipi di algoritmi di accedere a Internet. Per un'illustrazione, vedi quanto segue:
HttpResponse Http.Get(string uri). Esegue una richiestaGETall'URI specificato nella stringa passataurie restituisce un oggettoHttpsResponsecontenente i risultati di questa richiesta.
La classe HttpsRequest consente di eseguire richieste più complesse, incluse le richieste POST. Per eseguire queste richieste, imposta la proprietà HttpsRequest.Method su uno dei valori dell'enum HttpMethod come HttpMethod.Put o HttpMethod.Patch.
A sua volta, la proprietà HttpsRequest.Uri contiene l'URI a cui viene inviata una richiesta, mentre la proprietà HttpsRequest.Body può essere utilizzata per impostare il corpo della richiesta. Vedi di seguito un esempio di come puoi utilizzare un oggetto HttpsRequest.
HttpResponse Http.Send(HttpRequest request). Esegue una richiesta all'URI specificato come valore della proprietàrequest.Uridell'oggettoHttpsRequestpassato a questo metodo. Successivamente, restituisce un oggettoHttpsResponsecontenente i risultati di questa richiesta. Il tipo di richiesta è impostato come valore della proprietàequest.Method.
Accesso alla rete nel backtesting e nell'ottimizzazione
Tutti i metodi nell'interfaccia Http funzionano come previsto nel backtesting e nell'ottimizzazione. Tieni presente che, quando accedi a una risorsa web nel backtesting o nell'ottimizzazione, verrà richiesta la versione aggiornata di questa risorsa invece di una storica.
Crea cBot di esempio
Esegui una richiesta GET
Creeremo un semplice cBot che esegue le seguenti azioni:
- Invia una richiesta
GETe accede a un file JSON tramite l'API suhttps://forexApiExample.com/v1/exchangerate(nota che questa API è completamente fittizia). - Se la risposta
GETha successo, il cBot deserializza il corpo della risposta in un oggetto di una classe personalizzataSymbolPrice(abbiamo creato questa classe a scopo dimostrativo). - Piazza un ordine limite di vendita per un simbolo a un prezzo leggermente superiore al prezzo specificato nell'API.
Nota che il cBot è completamente inventato. Sebbene il codice venga compilato, non eseguirà alcuna azione significativa.
Come serializzare o deserializzare stringhe da file JSON
Il codice del nostro cBot include due importanti istruzioni using, ovvero System.Text.Json e System.Text.Json.Serialization. Questi spazi dei nomi contengono diversi metodi che consentono di serializzare e deserializzare facilmente stringhe da file JSON come JsonSerializer.Deserialize<T>().
Ecco il codice del nostro cBot di esempio:
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 | |
Se questo cBot dovesse accedere a un'API reale, lo avrebbe fatto con successo.
Esegui una richiesta POST
Possiamo anche creare un cBot più avanzato che raggiunge i seguenti obiettivi:
- Invia una richiesta
POSTalla stessa API fittizia suhttps://anotherForexApiExample.com/commodities/v1/getaccesstoken. Questo viene fatto per ottenere un token di accesso per questa API. - Memorizza il token dal corpo della risposta nella variabile
token. - Esegue una richiesta
GETalla stessa API con il valore della variabiletokenpassato come parametro di query nell'URI (https://anotherForexApiExample.com/commodities/v1/getprices). - Utilizzando la serializzazione JSON (discussa sopra), piazza un ordine stop di acquisto a un prezzo leggermente inferiore al prezzo ricevuto dall'API.
Ancora una volta, nota che questo cBot non eseguirà alcuna azione significativa quando compilato. Esiste solo a scopo di esempio.
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 | |
Client WebSocket
L'API Algo consente a chiunque di utilizzare vari servizi e risorse web utilizzando una connessione websocket. Rispetto al protocollo HTTP che viene utilizzato nella funzionalità di accesso alla rete, il protocollo WebSocket è più veloce e consente di ricevere dati in tempo reale.
Utilizza il client WebSocket
Utilizzare il client WebSocket è semplice:
- Scegli un servizio che espone un endpoint per una connessione websocket
- Inizializza un oggetto della classe
WebSocketClientOptionse specifica i suoi parametri per configurare il tuo client. - Inizializza un oggetto della classe
WebSocketCliente passa le opzioni create in precedenza al costruttore. - Utilizza il metodo
Connect()per connetterti alla risorsa scelta e invia dati tramite il metodoSend(). - Utilizza i gestori di eventi
TextReceived()eBinaryReceived()per impostare cosa dovrebbe fare il tuo algoritmo quando il client WebSocket riceve nuovi dati.
Di seguito, creeremo un semplice cBot che si connette a un servizio di notizie economiche immaginario tramite websocket. Quando viene pubblicata una nuova notizia sul simbolo a cui il cBot è attualmente collegato, l'algoritmo mostrerà una finestra di messaggio contenente il testo della notizia.
Nota
Questo cBot è solo a scopo di esempio. Sebbene venga compilato con successo, non esegue alcuna azione quando viene collegato a un grafico.
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 | |
Come puoi vedere, il nostro codice è piuttosto compatto poiché possiamo gestire l'evento WebSocketClient.TextReceived per mostrare la finestra di messaggio. Nota che il nostro cBot non richiede attivamente informazioni dai servizi. Invece, reagisce dinamicamente alle nuove informazioni che gli vengono fornite.
Avvertenza
Quando il tuo client websocket si disconnette per qualsiasi motivo (come un errore lato server che porta al superamento dell'intervallo keep-alive), dovrai chiamare nuovamente il metodo WebSocketClient.Connect(). Per gestire tali casi in modo programmatico, utilizza l'evento WebSocketClient.Disconnected.
Vantaggi di WebSocket
Poiché websocket consente di reagire a nuovi dati dal web in tempo reale, è perfetto per l'integrazione con servizi di terze parti che possono notificare autonomamente ai tuoi algoritmi qualcosa. Ecco alcuni esempi di risorse web con cui puoi utilizzare il client WebSocket.
- Un calendario di notizie economiche. Quando viene pubblicata una nuova notizia, il tuo algoritmo può mostrare una finestra di messaggio con le informazioni chiave.
- Un servizio di intelligenza artificiale generativa. Quando un servizio di IA inizia a fornire una risposta a un prompt, puoi mostrare il risultato parola per parola anziché dover attendere la risposta completa.
- Un flusso di prezzi per tutti i simboli correlati a quello a cui è collegato un algoritmo. Quando i prezzi vengono aggiornati, vengono mostrati immediatamente e con precisione agli utenti dell'algoritmo.
- Un social network incentrato sul trading. Quando vengono pubblicati nuovi messaggi su un particolare simbolo, un algoritmo può mostrarne i contenuti agli utenti.
In generale, le connessioni websocket offrono i seguenti vantaggi rispetto all'HTTPS normale:
- Le connessioni WebSocket sono più efficienti. Qualsiasi richiesta HTTP deve contenere dati aggiuntivi come le intestazioni. Con websocket, la connessione viene stabilita una sola volta, dopodiché non è necessario inviare dati ridondanti.
- Le connessioni WebSocket offrono una migliore concorrenza. Non è necessario interrompere le operazioni dell'algoritmo fino a quando non si attende una risposta dopo aver inviato una richiesta HTTP. Con websocket, puoi inviare e ricevere dati in qualsiasi momento e gestirli in modo asincrono.
Il client WebSocket consente a tutti i tipi di algoritmi di interagire dinamicamente con le risorse web; questa interazione è più veloce ed efficiente rispetto all'utilizzo di HTTP. Utilizza il client WebSocket per creare potenti algoritmi integrati con servizi di terze parti.
Accesso alla rete e la proprietà AccessRights
In breve, l'enum AccessRights definisce se gli algoritmi hanno accesso a dati esterni a cTrader come il file system della tua macchina locale. Puoi saperne di più in questo tutorial.
Impostare AccessRights su AccessRights.FullAccess consente agli algoritmi di eseguire operazioni avanzate (come l'acquisizione di informazioni dal registro di Windows). Gli utenti finali, tuttavia, potrebbero trovare rischioso concedere ai cBot o agli indicatori l'accesso completo in quanto potrebbe portare a una violazione dei dati.
Di conseguenza, AccessRights.None è solitamente l'opzione più sensata se desideri condividere i tuoi prodotti algoritmici con altri. Tuttavia, anche se scegli questa opzione, i tuoi prodotti cTrader sono liberi di accedere al web. L'aggiunta della funzionalità di accesso alla rete all'API di cTrader Algo significa che i cBot non richiedono più che la proprietà AccessRights sia impostata su AccessRights.FullAccess per funzionare con risorse su Internet.
Questo amplia notevolmente le opportunità che gli sviluppatori di algoritmi hanno quando codificano prodotti cTrader che intendono distribuire ad altri trader.
Riepilogo
In conclusione, l'accesso alla rete è una funzionalità potente che consente di espandere notevolmente il numero di operazioni che i tuoi algoritmi possono eseguire senza introdurre rischi aggiuntivi.