Scrittura Bid Ask [Matlab]

Un tutorial su come scrivere step by step le serie temporali Bid Ask in Artesian con l'SDK Matlab.

Artesian ti permette non solo di avere un accesso semplice allo storico dei dati ma anche di poterne scrivere di nuovi al suo interno.

Vediamo passo passo come procedere.

Obiettivo

Scrivere i nostri dati in un Bid Ask Time Serie Market Data.

I dati e i link di riferimento sono fittizi, creati appositamente per questo case. In Artesian è possibile scrivere qualsiasi dato che sia riconducibile a una Time Serie, quindi è idoneo per salvare i tuoi dati di produzione.

Vediamo passo per passo come procedere.

Importazione delle librerie e configurazione di Artesian

La prima cosa da fare per poter utilizzare tutte le funzionalità di Artesian è autenticarsi. Per fare ciò dobbiamo installare il toolbox di Artesian che è fondamentale per istanziare l’autenticazione verso il servizio (linea 1 dello script) e successivamente per leggere i dati.

Una volta installato il toolbox, possiamo configurare Artesian, inserendo il link necessario e l’api-key.

Per poter ottenere questi due dati importanti, si può far riferimento al tutorial “Come Configurare Artesian Matlab SDK“. 

Terminata la configurazione di Artesian, possiamo configurare il Query Service (linea 3)

				
					cfg = ArtesianServiceConfig("https://arkive.artesian.cloud/{tenantName}/", "{api-key}");
mds = MarketDataService(cfg);
				
			


Il MarketData Identifier e i dati necessari per la scrittura del Bid Ask TimeSeries

Una volta configurato Artesian e il MarketData Service, possiamo definire il MarketData Identifier, ovvero possiamo dare un nome al nostro MarketData.

Il nome del Provider, in questo caso sarà “MatlabSDK”, mentre il nome del Market Data sarà “BidAskWrite”. La definizione di questi due campi è necessaria per due motivi:

  1.  Il nome del Provider e il nome del Market Data rappresentano l’identificatore univoco della nostra curva su Artesian. Questa combo di valori viene poi tradotta nel MarketDataID.
  2. Il nome del Provider e il nome del Market Data sono necessari per ritrovare i dati all’interno del portale, tramite l’uso del filtro testuale libero o del filtro per categorie.
 

Definiti i nomi del Market data e del Provider, possiamo passare a decidere le caratteristiche di base della nostra Time Serie, come il tipo di Granularità, il tipo della Time Serie e la TimeZone.

Artesian può supportare diverse granularità come: 10min, 15min, 30min, Hour, Day, Week, Month, Quarter, Season e Year.

Nel momento in cui decidiamo il tipo di granularità del nostro market data, lo dobbiamo scrivere di conseguenza, indicandone i valori. Nel caso di Granularity.Day, i dati corrisponderanno a un determinato giorno, di un determinato mese, di un determinato anno. Nel caso di Granularity.Hour, i dati corrisponderanno a una determinata ora (minuto e secondo) di un determinato giorno in un determinato mese e anno.

Le TimeZone va valorizzata con quella corrispondente al dato che stiamo salvando, questo aiuterà il sistema ad applicare le conversioni necessarie ai dati nel caso di estrazioni in una TimeZone differente dall’originale 

Il Tipo della Time Serie, in questo caso è BidAsk, ma potrebbe essere anche Actual, Versioned, MarketAssessment oppure Auction. Vedi gli altri tutorial.

In Artesian, l’Aggregation Rule è un’operazione che va fatta quando si estrae il dato in una granularità diversa da quella originale. Si può scegliere se settarla “Undefined”, “SumAndDivide” oppure “AverageAndReplicate”. I dati che stiamo salvando sono Assessment di mercato, un loro cambio di granularità imporrebbe un ricomputo dell’assessment stesso tenendo in considerazione i dati grezzi, cosa che non è supportata da Artesian al momento. E’ per cui obbligatorio passare il valore “Undefined” quando si compone la scrittura di questo tipo di dati.

 

				
					data = MarketDataEntityInput("MatlabSDK",...
       "BidAskWrite",...
       "Day",...
       "CET",...
       AggregationRuleEnum.Undefined,...
       MarketDataTypeEnum.BidAsk...
     );
    mds.MarketData.Creat(data);

				
			


Scrittura dei valori del MarketData

L’ultima parte del nostro codice consiste nell’andare a configurare la scrittura verso Artesian.

I parametri necessari per farlo sono:

Il Marketdata identifier che abbiamo definito all’inizio del nostro codice

La TimeZone di riferimento del dato che stiamo scrivendo, questa deve essere “UTC” nel caso di dati a granularità oraria o inferiore (ovviamente con l’adeguata conversione dei dati se necessario), deve invece corrispondere all’OriginalTimezone nel caso di dati a granularità giornaliera o superiore. Questa conversione dei dati nel caso di granularità oraria o inferiore è necessaria ad Artesian per gestire correttamente i dati inviati ( es: cambio di ora solare/legale )

Le BidAsk rows sono un array di dictionary contenenti altri dictionary di BidAsk values. Quindi in ordine si passeranno i seguenti parametri:

  • La data di riferimento dei valori che stiamo scrivendo
    • Il prodotto per cui stiamo scrivendo i dati
      • I valori dell’assessment che stiamo calcolando
 
E’ obbligatorio scrivere almeno un valore all’interno dei dictionaries, in modo che il bid ask sia salvato su Artesian.

Tra i valori da inserire, e  suggeriti dall’IntelliSense, ci sono: BestBidPrice”, BestAskPrice”, “BestBidQuantity”, “BestAskQuantity”, “LastPrice”, e “LastQuantity”. In questo caso terremo in considerazione solo “bestBidPrice” e “bestBidQuantity”.

Nell’esempio di codice riportiamo la scrittura di dati giornalieri, con valori per il primo Gennaio.

Un altro campo obbligatorio da scrivere è il “downloadedAt“, un’informazione di tipo metadata che rappresenta quando il dato è stato generato.

Una volta inseriti i valori e definito il momento di generazione dei dati, possiamo caricare il BidAsk Time Serie nel sistema, attraverso il comando “UpsertCurve.Upsert()“.

				
					rows = [];
rows = [rows {{"2022-01-01T00:00:00"{{"Jan-22 {{"bestBidPrice" 60}, {"bestBidQuantity" 50}}}}}}];

id = MarketDataIdentifier("MatlabSDK","BidAskWrite");
data = UpsertCurveDataBidAsk(id, "CET", "2022-01-01T00:00:00Z", rows);
mds.UpsertCurve.Upsert(data);
				
			


Visualizzazione del nuovo MarketData nel portale Artesian

A meno che non ci siano errori da segnalare, nel terminal non apparirà nulla. Possiamo però, tornando sul portale di Artesian, verificare che la nostra TimeSerie appaia sotto la categoria ProviderName con il nome, datole precedentemente, di “Matlab SDK”. 

 

Basta eseguire l’operazione una sola volta per poi averla completamente riproducibile e automatizzata nel nostro workflow.

Questo non solo permette di risparmiare tempo, ma permette anche di ridurre al minimo gli errori umani dati dall’eseguire operazioni ripetute su grandi moli di dati o su diversi file Excel. 

Un vantaggio innegabile che ci consente di focalizzarci sull’analisi del dato invece che sulla sua gestione e ottimizzazione.