Strategia di trading

Per prima cosa dobbiamo creare una serie storica tramite passeggiata aleatoria dei prezzi, utilizzando dei dati pseudocasuali. Genero 1000 valori iniziali ad un prezzo iniziale pari a 100 e con un delta di incremento pari a 1. Successivamente, allo scorrere del tempo, confronto il prezzo rispettivamente con gli estremi superiori e inferiori. Successivamente riportiamo il punto centrale della nostra strategia:

If (OsservazionePrezzo.Prezzo-PrezzoDiRiferimentoPerOrdine)/ PrezzoDiRiferimentoPerOrdine > Me.PercentualeRibassoPerBUY Then

                    ‘ora di fare un BUY

ElseIf(PrezzoDiRiferimentoPerOrdine-OsservazionePrezzo.Prezzo)/ PrezzoDiRiferimentoPerOrdine > Me.PercentualeRibassoPerSELL Then

                    ‘ora di fare un SELL

  • Successivamente inserisco all’interno di una lista i valori di Buy e di Sell
  • Costruisco la media mobile e deviazione standard della serie storica creata nei punti precedenti
  • Calcolo il profitto (prezzoSell-prezzoBuy)
  • Calcolo indice di performance (pnl e drawdown)

Ricordiamo inoltre che una dichiarazione Profitti e Perdite (P&L) è un rendiconto finanziario che riassume i ricavi, i costi e le spese sostenute durante un determinato periodo di tempo, di solito un trimestre fiscale o anno. Queste registrazioni forniscono informazioni circa la capacità di un’azienda di generare profitto aumentando le entrate, riducendo i costi. In questo caso specifico la grafica del pnl è stata inserita in una Picture Box.

Modelli per la generazione di serie storiche

La passeggiata aleatoria, o comunemente “random walk”, è il modello base utilizzato per descrivere i movimenti dei prezzi azionari nei principali modelli di gestione del rischio. È una successione di variabili aleatorie con uguale distribuzione di probabilità e indipendenti l’una dall’altra.
Un esempio elementare di una passeggiata aleatoria semplice è la  distribuzione di Bernoulli che assume il valore 1 con probabilità p ( un passo verso destra) e -1 con probabilità 1 – p (un passo verso sinistra) ad ogni passo.  La probabilità di andare a destra che a sinistra, vale p=0.5. Se si verificano N realizzazioni, allora abbiamo una distribuzione binomiale

La distribuzione di probabilità è:

Il moto browniano geometrico è un processo stocastico definito nel continuo in cui il logaritmo della variabile aleatoria nel tempo segue un moto browniano. Tale processo assume particolare rilevanza in ambito finanziario, in particolare nel calcolo del prezzo in quanto nel modello di Black-Scholes-Merton viene ipotizzato che il prezzo dell’azione sottostante segua un tale processo.Il moto browniano geometrico soddisfa la seguente equazione differenziale stocastica:

dove Wt  è un moto browniano standard, mi  il drift percentuale istantaneo e sigma la volatilità percentuale istantanea, sono costanti reali.

L’equazione ha una soluzione analitica nella forma:

Quando viene applicato ai prezzi, moto browniano presuppone che il passaggio da un periodo all’altro non è dipendente dal livello dei prezzi oppure dalle variazioni dei prezzi. Cioè, ogni variazione è indipendente dalle variazioni di prezzo del passato e la volatilità delle variazioni dei prezzi è costante. 

Algoritmo per il calcolo della running mean e running variance

In statistica la varianza di una variabile aleatoria X è un numero, indicato con Var(X) che fornisce una misura di quanto siano vari i valori assunti dalla variabile, cioè di quanto essi differiscano dalla media µ. In altri è il valore medio del quadrato degli scarti, cioè la somma dei quadrati degli scarti per le relative probabilità. La varianza è quindi una misura di concentrazione: minore (maggiore) è la varianza, peggiore (maggiore) è la concentrazione (dispersione) dei dati attorno al valore medio.La formula matematica per il calcolo della varianza per un’intera popolazione di dimensione N è:

La formula per il calcolo di una stima corretta della varianza di un campione di grandezza n è invece:

Gli algoritmi precedenti possono, però, essere migliorati. Il problema della perdita di cifre significative è descritta e analizzata daDonald Knuth (Art of Computer Programming, Vol 2, Seminumerical Algorithms“, section 4.2.2), un informatico statunitense. La soluzione prevede di calcolare media e varianza utilizzando equazioni di ricorrenza nel caso di data stream:

È di notevole interesse la dimostrazione che dalle formule classiche portano alla scrittura delle formule di ricorrenza:


Liste e strutture dei dati in vb.net

Ampliando le nostre conoscenze sulla struttura e gestione di dati annoveriamo:

  • le Collection
  • gli ArrayList
  • le strutture enumerative

Le collection sono strutture dati le quali possono ospitare qualsiasi tipo di oggetto, e per propria natura, a differenza degli array, non sono fortemente tipizzati.

Gli ArrayList sono una particolare struttura dati inclusa nel Framework .Net derivante dal namespace System.Collections.ArrayList; quindi costituiscono una particolare collection. Vediamone qualche esempio.

Facciamo l’esempio di dichiarazione, inizializzazione e aggiunta di elementi:

….

Dim objlist As ArrayList

objlist=New ArrayList()

objlist.Add(“casa”)

objlist.Add(“macchina”)

objlist.Add(“divano”)

objlist.Add(“motore”)

….

Si dichiara una variabile di tipo ArrayList, si inizializza tale variabile con la clausola New e con il metodo Add si aggiunge l’elemento all’ArrayList. Volendo ordinare la lista, non dobbiamo are altro che utilizzare il metodo Sort.

objlist.Sort()

….

Concludiamo questo capitolo affermando che la gestione di una collection è simile in tutto alla gestione di un ArrayList.

Accanto a queste troviamo le strutture enumerative, particolarmente utili per definire un insieme, tipo:

  • l’insieme dei giorni della settimana
  • un insieme di costanti definite dall’utente
  • l’insieme dei mesi dell’anno
  • ecc.. ecc..

Una struttura enumerativa viene dichiarata con la classe Enum, proponiamo anche in questo caso un esempio:

….

Public Module enumerazioni

Enum giorni_settimana

  Lunedì=1

  Martedì=2

  Mercoledì=3

  Giovedì=4

  Venerdì=5

  Sabato=6

  Domenica=7

End Enum

End Module

In questo modo abbiamo costruito un insieme di costanti intrinseche definite dall’utente sfruttando la classe di base Enum.

Overnight gap

Nel linguaggio del trading, per Gap si intende una particolare situazione in cui all’apertura di una sessione di contrattazione la quotazione di un titolo è superiore alla quotazione di chiusura del giorno precedente. Nel caso in cui invece l’apertura segni una quotazione inferiore a quella del minimo toccato il giorno precedente si parla di Gap Down.

La situazione di gap si verifica quando sul mercato vi sono repentini sbilanci tra domande e offerta. Poniamo ad esempio che una notizia importante arrivi durante le ore serali o notturne, quando le contrattazioni sono chiuse. Questa notizia ha molta probabilità di creare un gap up o un gap down rispetto al giorno precedente.

Strumenti finanziari a leva

Tra i certificati a capitale non protetto, gli strumenti a leva sono quelli che offrono potenzialmente i rendimenti più alti a patto di essere disponibili a sottoporsi a rischi superiori.

Con un prodotto con leva si acquisisce il diritto di comperare (bull) o di vendere (bear) un valore sottostante a un prezzo di esercizio (strike) e a una data prestabiliti.

L’impiego di capitale per investire in un prodotto di questo tipo è minore rispetto a quello necessario per un investimento diretto nel valore sottostante (cosiddetto effetto leva). E proprio la presenza dell’effetto leva consente di moltiplicare la performance del sottostante.

La leva però non amplifica solo i guadagni ma anche le eventuali perdite e l’investitore si trova esposto al rischio di estinzione anticipata del certificato e di perdita totale del capitale investito, se il sottostante raggiunge una predeterminata barriera di stop loss.

Ereditarietà in vb.net

Visual Basic .NET è un linguaggio di programmazione orientato agli oggetti, avendo bene in mente il concetto di classe, analizziamo una caratteristica fondamentale di questo paradigma di programmazione, ovvero l’ereditarietà. Si definisce ereditarietà la possibilità per una classe di derivare da un’altra. La parola chiave utilizzata per creare una relazione di eredità è Inherits; questa istruzione deve obbligatoriamente essere sulla prima riga di codice dopo la definizione della classe.

L’istruzione Inherits viene usata per dichiarare una nuova classe, denominata classe derivata, in base a una classe esistente, nota come una classe di base. Le classi derivate ereditano e possono estendere, proprietà, metodi, eventi, campi e le costanti definite nella classe di base. La sezione seguente descrive alcune delle regole per l’ereditarietà e i modificatori che è possibile usare per modificare le classi modo ereditano o vengono ereditati:

  • Per impostazione predefinita, tutte le classi sono ereditabili a meno che non contrassegnato con il NotInheritable (parola chiave). Le classi possono ereditare da altre classi nel progetto o dalle classi in altri assembly che fa riferimento il progetto.
  • Diversamente dai linguaggi che consentono l’ereditarietà multipla, Visual Basic consente solo l’ereditarietà singola nelle classi. ovvero le classi derivate possono avere una sola classe base. Anche se non è consentito nelle classi di ereditarietà multipla, le classi possono implementare più interfacce di cui è possono eseguire in modo efficace la stessa funzione.
  • Per evitare l’esposizione agli elementi in una classe base, il tipo di accesso di una classe derivata deve essere uguale o più restrittivo alla classe di base. Ad esempio, un Public classe non può ereditare un Friend o una Private (classe) e un Friend classe non può ereditare un Private classe.

Prezzo bid, ask, spread, contengo e backwardation

Definizione prezzo bid e prezzo ask

Il prezzo bid è il prezzo al quale il dealer è disposto ad acquistare uno strumento finanziario,i prezzo ask è quello al quale il dealer è disposto a vendere uno strumento finanziario.

Il prezzo ask (detto anche offer) è superiore al prezzo bid. Il cosiddetto best bid è il più elevato prezzo bid presente sul mercato. Analogamente, è detto best ask il più basso prezzo ask presente sul mercato. Una quotazione di mercato riporta il best bid e best ask disponibili sul mercato, ed è nota come BBO (Best Bid and Offer). In tal senso il bid-ask spread è la differenza tra best ask e best bid. Con riferimento all’operatività del dealer, il bid-ask spread è il margine di profitto lordo di tale intermediario, che negozia strumenti di proprietà appartenenti al proprio portafoglio (noto come inventory). Con riferimento all’investitore, il bid-ask spread rappresenta un costo di transazione implicito (che si differenzia dal principale costo di transazione esplicito, ovvero dalla commissione pagata). 
Il concetto di bid-ask spread è applicabile anche ai mercati ad asta e in tal senso è dato dalla differenza tra la miglior proposta in vendita e la miglior proposta in acquisto presenti sul mercato.CD

Contratto futures

È un accordo standardizzato (diversamente dal contratto forward) in cui le parti, un compratore e un venditore, stabiliscono di scambiarsi a una data futura (delivery date) un ammontare prestabilito (cash asset) ad uno specifico prezzo (delivery price). Un funzionamento un po’ contorto all’apparenza, ma semplice nella sostanza.

Futures sono scambiati sul mercato ufficiale (diversamente dai contratti forward, per i quali non esiste un mercato ufficiale, ma vengono per l’appunto scambiati over-the-counter) al prezzo Future di mercato, finché il contratto non scade.

Una tipologia di strumenti che si basa su contratti Futures sono ad esempio gli ETC (Exchange Trade Commodity) sul petrolio e sulle altre principali materie prime.

Infatti, a causa di problemi di stoccaggio e conservazione della commodity, non è possibile investire fisicamente in questa materia prima ma l’esposizione può essere ottenuta attraverso una replica di indici di Futures(replica sintetica, resa possibile tramite l’utilizzo di derivati).

Backwardation e contango

Gli ETC (come anche gli ETF) non hanno una scadenza. La motivazione è la seguente: per evitare la liquidazione dell’investimento si rende necessario rinnovare il contratto Futures corrente prima che giunga a scadenza e reinvestire il ricavato in un contratto a scadenza successivo. In questo modo, l’investitore in ETC (nel nostro caso sul petrolio) potrà mantenere la sua posizione. Di conseguenza, questa attività di sostituzione (rolling), genera un rendimento (chiamato rendimento roll) che può essere positivo o negativo e può influenzare in maniera significativa il rendimento complessivo dell’investimento.

Quando il rendimento roll è negativo, ossia il valore del contratto Futures in scadenza è inferiore a quello successivo, il mercato si dice in contango.

Nel caso opposto, ossia quando il rendimento roll è positivo, si parla di backwardation.

Il rendimento totale dell’investimento in Futures dipende anche:

  • dal movimento dei prezzi del sottostante;
  • dal collateral yield, cioè dall’interesse sul valore delle garanzie collaterali.

Tuttavia, come abbiamo detto, anche il rolling yield, è una componente importante da considerare.

Principali strutture iterative in vb.net

Le strutture iterative consentono di eseguire più volte una determinata porzione di codice. Le strutture più utilizzate in VB sono due: For… Next e Do… Loop. La prima è senza dubbio la più utilizzata;

la sua sintassi è:

For <Contatore> = Inizio To Fine [Step Incremento]

Next [<Contatore>]

<Contatore> è una variabile che deve contenere valori di tipo numerico (quindi può essere Integer, Long, Single, Double, ecc.), così come numerici devono essere i valori di Inizio, Fine e Incremento. La parola chiave Step è facoltativa, se non viene specificata Incremento viene automaticamente impostato a 1. Quando si entra in un ciclo For, la variabile Contatore assume il valore specificato in Inizio; subito dopo viene verificato se Contatore è maggiore dell’argomento Fine: in tal caso il ciclo termina (analogamente, se Incremento è negativo, viene verificato se Contatore è minore dell’argomento Fine). Se, invece, Contatore è minore o uguale a Fine (oppure è maggiore o uguale, nel caso che Incremento sia negativo), vengono eseguite le istruzioni all’interno del ciclo e, infine, Contatore viene incrementato del valore di Incremento. Queste operazioni vengono fino a quando il valore di Contatore diventa maggiore del valore di Incremento (oppure minore se Incremento è negativo). Per uscire dal ciclo prima che si verifichino le condizioni di fine descritte sopra è possibile usare l’istruzione Exit For; con la quale si passa subito ad eseguire le istruzioni successive al ciclo.

L’altra struttura iterativa cui abbiamo accennato è quella Do… Loop; di solito viene utilizzata quando non si sa a priori per quante volte è necessario eseguire un certo blocco di codice. Questo costrutto si può presentare in due forme; la più comune è la seguente:

Do While Condizione

Loop

L’esecuzione di questa struttura prevede innanzitutto la verifica della Condizione, che deve restituire un valore di tipo booleano. Se risulta False, tutte le istruzioni del ciclo vengono ignorate, se invece risulta true, le istruzioni vengono eseguite e, di seguito, la condizione viene nuovamente verificata, e così via, finché Condizione risulta False. E’ facile intuire che se la condizione risulta subito False, le istruzioni non verranno mai eseguite. L’altra forma del Do… Loop, invece, permette di eseguire le istruzioni e di verificare la Condizione al termine di ciascuna esecuzione. In questo modo le istruzioni vengono eseguite almeno una volta:

Do

Loop While Condizione

Leggere file di testo in vb.net

L’apertura e la lettura di file con accesso in lettura costituiscono una parte importante della funzionalità di input/output (IO), anche se non è necessario scrivere sul file in questione. In questo esempio viene aperto un file per la lettura, una procedura utile per i file di testo ma non adatta ai file binari. Nell’esempio viene utilizzato uno dei vari metodi disponibili per l’apertura del file. Sebbene siano disponibili diverse strutture di dati per la memorizzazione delle informazioni recuperate dal file, la classe ArrayList è la struttura più semplice da utilizzare. Per aprire e leggere i dati contenuti nel file nell’esempio vengono impiegati oggetti dello spazio dei nomi System.IO, in particolare la classe System.IO.StreamReader.
Per caricare e leggere un file di testo da Visual Basic .NET, attenersi alla seguente procedura:

  1. Aprire Visual Studio .NET. Creare una nuova applicazione console in Visual Basic .NET. In Visual Studio vengono automaticamente creati un modulo e una procedura Main() vuota.
  2. Verificare che il progetto contenga riferimenti per lo meno allo spazio dei nomi System. Utilizzare l’istruzione Imports per gli spazi dei nomi System, System.IO e System.Collections in modo che non sia necessario qualificare in un secondo tempo nel codice le relative dichiarazioni. Queste istruzioni devono essere utilizzate prima di qualunque altra dichiarazione.

Imports System
Imports System.IO
Imports System.Collections

  • Per aprire un file per la lettura, creare una nuova istanza di un oggetto StreamReader e passare il percorso del file al costruttore come segue:

Dim objReader As New StreamReader(“c:\test.txt”)

  • Occorrerà una variabile di stringa in cui memorizzare ogni riga del file man mano che si procede. Poiché le righe verranno aggiunte a ArrayList, dichiarare e creare anche un oggetto di questo tipo.

Dim sLine As String = “”
Dim arrText As New ArrayList()

  • Esistono vari modi per leggere all’interno del file, compreso il metodo ReadToEnd con il quale l’intero file viene letto immediatamente. In questo esempio è tuttavia possibile utilizzare il metodo ReadLine per inserire il file una riga alla volta. Una volta raggiunta la fine del file, il metodo restituisce “Nothing”, il che costituisce un modo per porre termine al loop. Man mano che ogni riga del file viene letta, è possibile servirsi del metodo Add di ArrayList per inserire le righe nella classe ArrayList.
  • Utilizzare un loop “For Each” per scrivere nella console il contenuto dell’ArrayList in cui sono appena stati inseriti i dati come illustrato di seguito:

For Each sLine In arrText
    Console.WriteLine(sLine)

Next
Console.ReadLine()

  • Salvare ed eseguire il codice, nella console viene visualizzato il file.

Precauzioni

Vi sono vari fattori di cui essere consapevoli quando si lavora con l’I/O di file, fra cui:

  • Ogni volta che si accede a un file vi è la possibilità che il file che si tenta di leggere o su cui si tenta di scrivere non sia presente nel sistema o sia in uso.
  • In questo esempio l’intero file viene letto in memoria prima di essere elaborato. Il file potrebbe essere troppo grande per essere contenuto in memoria oppure l’utente potrebbe non disporre delle autorizzazioni di accesso al file.

In tutti questi casi si verifica un’eccezione. È sempre buona norma fornire un blocco try…catch per gestire queste situazioni comuni.

Fonte: https://support.microsoft.com/it-it/help/302309/how-to-read-a-text-file-by-using-system-io-in-visual-basic-2005-or-in