Archiviazione locale
In questa guida spieghiamo come lavorare con l'archiviazione locale durante lo sviluppo di algoritmi cTrader. Di seguito forniamo un riepilogo di un minuto su come funziona l'accesso all'archiviazione locale.
Archiviazione locale in un minuto!
- L'archiviazione locale ti consente di salvare informazioni nel tuo file system locale. Utilizzala per conservare i dati tra due o più distribuzioni dei tuoi cBot e indicatori.
- Per salvare i dati, utilizza i metodi
SetString(string key, string value)eSetObject(string key, object obj). Per recuperarli, richiama i metodiGetString(string key)eT GetObject<T>(string key). - Specifica l'ambito di archiviazione locale preferito utilizzando l'enum
LocalStorageScope. Ad esempio, l'overloadSetString(string key, string value, LocalStorageScope.Device)salverà i dati nella directoryDocuments/cAlgo/LocalStorage/. - Mentre le informazioni vengono salvate automaticamente ogni minuto, puoi utilizzare il metodo
Flush(LocalStorageScope localStorageScope)per archiviare i dati senza ritardi. - Durante il backtesting e l'ottimizzazione, l'archiviazione locale memorizza i dati solo in memoria.
Utilizzo dell'archiviazione locale
Pensa all'archiviazione locale come a un modo per conservare informazioni tra uno o più arresti e avvii dei tuoi cBot e indicatori. Questa funzionalità consente di salvare i dati di cBot e indicatori e quindi di accedere a queste informazioni in diversi modi a seconda delle tue esigenze. L'archiviazione locale funziona indipendentemente dai diritti di accesso concessi a un algoritmo.
L'interfaccia LocalStorage contiene tutti i metodi che puoi utilizzare per archiviare e accedere ai dati da e verso l'archiviazione locale. Alcuni esempi di questi metodi includono i seguenti:
SetString(string key, string value)- salva un valore stringa abbinandolo alla chiave specificata.SetObject(string key, object obj)- salva un oggetto abbinandolo alla chiave specificata.GetString(string key)- recupera un valore stringa salvato trovandolo sotto la chiave specificata.T GetObject<T>(string key)- recupera un oggetto salvato di tipoTdall'archiviazione locale trovandolo sotto la chiave specificata.
Avvertenza
I metodi SetObject(string key, object obj) e GetObject<T>(string key) funzionano solo con tipi di dati che possono essere serializzati (convertiti in byte).
Considera il seguente esempio in cui chiediamo a un'istanza di cBot di salvare un messaggio di esempio all'avvio. Agli avvii successivi, la stessa istanza mostrerà una finestra di messaggio contenente il nostro messaggio.
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 | |
Dopo che un'istanza del cBot sopra viene avviata per la prima volta, salva il nostro messaggio di esempio nell'archiviazione locale. Dopo aver interrotto l'istanza e averla riavviata, viene visualizzata la seguente finestra di messaggio.

Nota che l'archiviazione locale funziona anche quando viene specificato AccessRights.None.
Definire l'ambito dell'archiviazione locale
L'ambito dell'archiviazione locale (definito tramite il tipo LocalStorageScope) determina dove esattamente vengono archiviate le informazioni e come è possibile accedervi. Questo enum contiene le seguenti costanti:
LocalStorageScope.Instance- i dati salvati vengono archiviati e sono accessibili solo da un'istanza specifica in esecuzione di un cBot o indicatore. Le informazioni vengono salvate nella directoryDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/{InstanceUniqueIdentifier}/. In questo percorso, "AlgoType" indica il tipo di estensione cTrader che lavora con l'archiviazione locale (cBotsoIndicators) mentreAlgoNameè il nome di un cBot/indicatore specifico.InstanceUniqueIdentifierè l'ID univoco di un'istanza specifica di un particolare cBot o indicatore.LocalStorageScope.Type- i dati salvati vengono archiviati e sono accessibili da tutte le istanze in esecuzione di un particolare cBot o indicatore. Le informazioni vengono salvate nella directoryDocuments/cAlgo/LocalStorage/{AlgoType}/{AlgoName}/.LocalStorageScope.Device- i dati salvati vengono archiviati e sono accessibili da tutte le istanze in esecuzione di cBot e indicatori sul dispositivo corrente. Le informazioni vengono salvate nella directory "Documents/cAlgo/LocalStorage/".
A loro volta, metodi come SetString() e SetObject() hanno overload aggiuntivi che consentono di specificare un ambito di archiviazione locale personalizzato. Ad esempio, il seguente codice salverà una stringa in LocalStorageScope.Type; questa stringa, successivamente, sarà accessibile a tutte le estensioni di un particolare tipo.
1 | |
Se LocalStorageScope non viene specificato come parametro, viene utilizzato LocalStorageScope.Instance per impostazione predefinita.
Nota che questo comportamento è diverso per i metodi GetString(string key) e T GetObject<T>(string key). Quando questi metodi vengono richiamati senza specificare l'ambito dell'archiviazione locale, cercheranno la chiave specificata in tutti gli ambiti seguendo la gerarchia seguente:
- Istanza
- Tipo
- Dispositivo
Inoltre, ogni diverso ambito di archiviazione locale ha la propria quota di spazio su disco:
LocalStorageScope.Instanceè limitato a 10 MB.LocalStorageScope.Typeè limitato a 100 MB.LocalStorageScope.Deviceè limitato a 500 MB.
I limiti definiti sopra non sono cumulativi. Ad esempio, se hai già utilizzato tutti i 500 MB di archiviazione a livello di dispositivo, potrai comunque archiviare informazioni utilizzando l'archiviazione a livello di istanza fino a raggiungere il suo limite di 10 MB.
Come funzionano il salvataggio e il caricamento delle informazioni
Quando si archiviano informazioni nell'archiviazione locale (ad esempio, richiamando il metodo SetString()), cTrader salva automaticamente i dati ogni minuto. I dati vengono salvati anche all'arresto dell'istanza.
Tuttavia, puoi personalizzare questo comportamento utilizzando i seguenti metodi:
Flush(LocalStorageScope localStorageScope)- salva tutti i dati nell'ambito specificato.Reload(LocalStorageScope localStorageScope)- ricarica tutti i valori dall'ambito specificato.
Tieni presente che, quando si richiama il metodo Reload(LocalStorageScope localStorageScope, eventuali modifiche in sospeso potrebbero andare perse. Per evitare ciò, assicurati di richiamare Flush(LocalStorageScope localStorageScope) in anticipo.
Nell'esempio seguente, chiediamo a un cBot di eseguire un ordine di mercato. Dopo il completamento di questa azione, salviamo immediatamente il P&L lordo della posizione che abbiamo appena aperto in LocalStorageScope.Type.
1 2 3 4 5 | |
Archiviazione locale nel backtesting e nell'ottimizzazione
L'archiviazione locale funziona in modo diverso nel backtesting rispetto al trading in tempo reale.
Come mostrato in precedenza, l'archiviazione locale utilizza il file system della tua macchina locale quando questa funzionalità viene utilizzata nel trading in tempo reale. Tuttavia, l'utilizzo del file system nel backtesting porterebbe a diversi problemi, in particolare il salvataggio di grandi quantità di dati che non hanno alcuna relazione con i movimenti di mercato correnti e le operazioni di trading.
Per evitare questi problemi, tutte le operazioni con l'archiviazione locale vengono condotte solo in memoria quando si eseguono backtest o si ottimizzano i tuoi cBot. Di conseguenza, puoi essere sicuro che tutti i dati salvati nel tuo file system riguardano solo il trading in tempo reale.
In sintesi, l'archiviazione locale è una funzionalità estremamente vantaggiosa dell'API Algo che consente di conservare i dati tra più interruzioni e riavvii di vari cBot e indicatori. Utilizzando l'archiviazione locale in modo efficace, puoi creare strategie di trading automatizzate complesse basate su dati personalizzati salvati nel tuo file system.