trading-algoritmico-DataInvestor-parte7

DataInvestor – La gestione degli Asset

Sommario

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 DataTrading.info. Questo  articolo descrivere la classe Asset, che è 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.

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.

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
				
			

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
            )
        )

				
			

Notiamo che tutte le sottoclassi di questo 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.

Benvenuto su DataTrading!

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

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

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

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Scroll to Top