La gestione degli Asset con DataInvestor

In questa nuova serie di articoli descriviamo l’implementazione per tutte le classi orientate agli oggetti di Python associate al framework di backtesting open source DataInvestor di TradingQuant.it. In questo articolo descriviamo come implementare la gestione degli asset di un portafoglio quantitativo tramite la classe Asset. Questa classe è responsabile dell’implementazione degli aspetti relativi agli asset negoziabili all’interno del sistema di backtesting.

Alla data di pubblicazione di questo articolo sono disponibili due sottoclassi derivate da Asset: CashEquity. Ognuna di queste due sottoclassi è una semplice estensione della classe base, che in questa fase non contiene specifiche di interfaccia. Usiamo questa gerarchia di classi in modo da consentire sviluppi futuri e la possibilità d specificare l’interfaccia quando si vuole implementare tipologie di asseta più sofisticate, come i derivati.

La gestione degli asset

Iniziamo definendo la classe base Asset:

				
					from abc import ABCMeta


class Asset(object):
    """
    Classe di asset generica che memorizza i metadati su un asset di trading.
    """

    __metaclass__ = ABCMeta
				
			

Non ci sono metodi astratti in questa classe, ma fornisce una base per future specifiche dell’interfaccia.

Gestione del cash

La prima sottoclasse derivata è Cash. Questo rappresenta il “asset in contanti” che è depositato in un conto del broker quando qualsiasi asset negoziabile deve essere ancora acquistato. Contiene due attributi. Il primo è il valore booleano cash_like, per indicare semplicemente che l’asset se è “simile al contante” o meno. La seconda è una stringa che descrive la valuta. L’impostazione predefinita è il dollaro USA.

				
					from datainvestor.asset.asset import Asset


class Cash(Asset):
    """
    Memorizza i metadati di un asset Cash.

    Parameters
    ----------
    currency : str, optional
        La valuta del Cash Asset. Il valore predefinito è USD.
    """

    def __init__(
        self,
        currency='USD'
    ):
        self.cash_like = True
        self.currency = currency
				
			

Gestione dei titoli azionari

Per la gestione degli asset la sottoclasse derivata più interessante è l’asset Equity. Questa classe contiene un semplice insieme di attributi che memorizzano le informazioni sulle azioni ordinarie o i fondi negoziati in borsa (ETF). In particolare ha un nome e un simbolo ticker. Quest’ultimo non ha ancora alcuna funzionalità per la mappatura dei ticker, che sarebbe necessaria in un contesto istituzionale più robusto. Il terzo attributo tax_exempt è un valore booleano specifico per determinate aree geografiche per indicare al sistema di backtesting che le transizioni di questo asset devono essere tassate: 

				
					from datainvestor.asset.asset import Asset


class Equity(Asset):
    """
        Memorizza i metadati su un'azione ordinaria o ETF.

    Parameters
    ----------
    name : `str`
        Il nome dell'asset (ad es. il nome dell'azienda e/o
        la clase delle azioni).
    symbol : `str`
        Il simbolo ticker originale dell'asset
        TODO: modifiche per gestire la corretta mappatura dei ticker.
    tax_exempt: `boolean`, optional
        La quota è esente da tassazione governativa?
        Necessario per la tassazione sulle transazioni azionarie.
    """

    def __init__(
        self,
        name,
        symbol,
        tax_exempt=True
    ):
        self.cash_like = False
        self.name = name
        self.symbol = symbol
        self.tax_exempt = tax_exempt

    def __repr__(self):
        """
        Rappresentazione in stringa dell'Asset azionario.
        """
        return (
            "Equity(name='%s', symbol='%s', tax_exempt=%s)" % (
                self.name, self.symbol, self.tax_exempt
            )
        )

				
			

Conclusioni

Notiamo che tutte le sottoclassi per la gestione degli asset contengono un metodo  di doppia sottolineatura – ‘dunder’ – __repr__ che produce una stringa di rappresentazione. In questo modo permettiamo ad ogni asset di essere completamente replicato da questa rappresentazione. Per esempio, Questo è il caso dove fosse digitato direttamente in una console Python.

Nel prossimo articolo della serie descriviamo la simulazione di un broker, considerando la gerarchia di classi FeeModel. E’ utilizzato per specificare la struttura delle fee e delle commissioni di un broker, necessarie per modellare in modo appropriato i costi delle transazioni di trading.

Il codice completo presentato in questo articolo, basato sul framework di trading quantitativo event-driven DataInvestor, è disponibile nel seguente repository GitHub: https://github.com/tradingquant-it/DataInvestor.

Benvenuto su TradingQuant!

Sono Gianluca, ingegnere software e data scientist. Sono appassionato di coding, finanza e trading. Leggi la mia storia.

Ho creato TradingQuant per aiutare le altre persone ad utilizzare nuovi approcci e nuovi strumenti, ed applicarli correttamente al mondo del trading.

TradingQuant vuole essere un punto di ritrovo per scambiare esperienze, opinioni ed idee.

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Torna in alto