Overbasic – Variabili, Costanti e Tipi Dato

Tipi Dato #

I tipi dato definiscono il tipo di variabile, costante, argomento di una funzione e il valore restituito da una funzione. Se, ad esempio, una variabile è definita come Numeric, essa conterrà un numero, se definita come String allora conterrà una stringa di caratteri ecc.

La definizione del tipo dato avviene utilizzando la parola chiave AS seguita dal tipo dato:

Dim b As Numeric

I tipi dato disponibili in Overbasic sono:

Numeric: rappresenta un numero. Nel linguaggio OverBasic non vi è distinzione tra numeri interi, decimali, ecc. La virgola è rappresentata dal punto “.”

Boolean: rappresenta un valore booleano (TRUE o FALSE)

String: rappresenta una stringa di caratteri

Database: rappresenta la serie storica di uno strumento

TradingSystem: rappresenta un Trading System

Date: (disponibile SOLO nelle PROPERTY) rappresenta una data nel formato YYYYMMDD

Time: (disponibile SOLO nelle PROPERTY) rappresenta un orario nel formato HHMMSSFFFCCCN (HH = ora; MM = minuti; SS = secondi; FFF = millisecondi; CCC = microsecondi; N = 100 nanosecondi)

Indicator: (disponibile SOLO nelle PROPERTY) rappresenta un indicatore.

Variabile #

Una variabile è un oggetto che contiene un dato (un numero, un boolean, una stringa ecc.). Le variabili possono essere utilizzate in qualsiasi espressione nello script Overbasic (all’interno dell’area di validità della variabile).

Sintassi #

Una variabile, prima di essere utilizzata, deve essere dichiarata, cioè è necessario informare Overbasic dell’esistenza della variabile e del tipo di dato che può contenere. La dichiarazione di una variabile avviene mediante la parola chiave DIM seguita dal nome variabile, dal tipo dato e dall’eventuale valore/espressione di inizializzazione (facoltativo):

Dim <nome variabile> As <tipo dato>[()] = [<valore/espressione di inizializzazione>]

Il nome della variabile:

  • deve essere univoco all’interno dello script
  • può essere una qualsiasi stringa composta da lettere e numeri
  • NON può essere una parola chiave di Overbasic, o il nome di una funzione, argomento, ecc.
Dim a As Numeric = 10
'10 è il valore di inizializzazione

Array:

Un array è una collezione ordinata (una serie) di elementi dello stesso tipo. L’accesso a un elemento dell’array avviene mediante il suo indice numerico. Il primo elemento di un array ha sempre indice 0 (zero).

Una variabile può essere dichiarata come array aggiungendo al tipo dato le parentesi tonde:

Dim a As Numeric()

Un array può essere inizializzato in 2 modi diversi:

Per elemento:

'Ogni elemento dell'array viene inizializzato a 10.
Dim a As Numeric() = 10

Con un altro array:

Dim a1 As Numeric() = 10
a1(5) = 23 'utilizziamo a1 almeno una volta prima di assegnarlo ad a2
Dim a2 As Numeric() = a1

L’array a2 viene inizializzato con l’array a1. In questo caso non si tratta di un’inizializzazione, ma di una assegnazione per riferimento. In altre parole, a1 e a2 rappresentano di fatto lo stesso oggetto e pertanto una modifica successiva ad un elemento di a1 si rifletterà sullo stesso elemento di a2. Quanto detto è valido SOLO se a1 è stato utilizzato almeno una volta prima di essere assegnato ad a2. Questo perché gli array in Overbasic vengono creati e quindi esistono realmente solo nel momento in cui vengono utilizzati la prima volta.

Non è necessario definire la dimensione di un array. La dimensione dell’array è gestita automaticamente da Overbasic.

L’accesso a un elemento dell’array avviene mediante il suo indice numerico. Il primo elemento di un array ha sempre indice 0 (zero):

Dim a1 As Numeric() = 10
a1(5) = 23 'assegnamo all'elemento 5 dell'array a1 il valore 23

Per cancellare tutti gli elementi dell’array utilizzare la parola chiave ERASE:

Erase a1

Costante #

Una costante è un oggetto che contiene un dato che non cambia durante l’esecuzione dello script.

Sintassi #

Come per le variabili, anche le costanti devono essere dichiarate prima di essere utilizzate, cioè è necessario informare Overbasic dell’esistenza della costante, del tipo di dato che contiene e assegnarle un valore. La dichiarazione di una costante avviene mediante la parola chiave CONST seguita dal nome della costante, dal tipo dato e dal valore:

Const <nome costante> As <tipo dato> = <valore/espressione>

Il nome della costante:

  • deve essere univoco all’interno dello script
  • può essere una qualsiasi stringa composta da lettere e numeri
  • NON può essere una parola chiave di Overbasic, o il nome di una funzione, argomento, ecc.
Const a As Numeric = 10

Area di validità #

L’area di validità è la regione in cui una variabile/costante è valida e può essere utilizzata. In altre parole, una variabile/costante può essere utilizzata solo nel contesto in cui è stata dichiarata.

Se la dichiarazione è a livello di modulo (esterna a tutte le funzioni), la variabile/costante è valida ovunque nello script e il suo valore NON viene inizializzato ogni volta che lo script viene eseguito:

Dim a As Numeric = 10

Function Main()
    ...
    If (a = 10) Then
        ...
    EndIf
    ...
EndFunction

Function CalculateABS As Numeric
    If (a < 0) Then
        Return -1 * a
    EndIf
    Return a
EndFunction

Se la dichiarazione è interna ad una funzione, la variabile/costante sarà valida solo internamente alla funzione e solo nelle istruzioni successive alla sua dichiarazione:

Function Main()
    Dim a As Numeric = 10
    ...
    If (a = 10) Then
        ...
    EndIf
    ...
EndFunction

Se una variabile è dichiarata all’interno di un IF, FOR, DO UNTIL, WHILE, SELECT CASE ecc, potrà essere utilizzata solo nel contesto in cui è stata dichiarata:

Function Main()
    Dim b As Boolean = True
    ...
    If (b = True) Then
        Dim a As Numeric = 10
        ...
        a = Close
        ...
    EndIf
    ...
    a = 10 * High 'ERRORE! NON è possibile usare la variabile fuori dall'IF dove è stata dichiarata
    ...
EndFunction

Static #

Una variabile dichiarata all’interno di una Funzione sarà inizializzata ad ogni esecuzione dello script. Tuttavia, in particolari situazioni, può essere utile mantenere il suo ultimo valore evitando quindi la reinizializzazione.

Per fare questo hai 2 possibilità:

  1. Dichiari la variabile a livello di modulo (esternamente a tutte le funzioni)
  2. Dichiari la variabile all’interno della funzione utilizzando la parola chiave STATIC al posto della parola chiave DIM:
Static n As Numeric = 0

Esempio:

Function Main()
    ...
    'L'inizializzazione a 0 avviene solo la prima volta.
    'Nei passaggi successivi viene mantenuto l'ultimo valore precedente
    Static n As Numeric = 0
    ...
    If (Open > Close) Then
        n = n + 1
    EndIf
    ...
    ...
    Return n
EndFunction