Una funzione è una sequenza di istruzioni OverBasic racchiuse tra le parole chiave Function e EndFunction. Il compito di una funzione è eseguire delle operazioni e restituire un risultato. Il risultato è restituito alla funzione chiamante mediante la parola chiave RETURN.
L’esecuzione della funzione terminerà al primo RETURN incontrato, oppure al primo errore NON correttamente gestito (vedi gestione degli errori Try..Catch).
Sintassi #
Function <nome funzione> ([ref] <nome argomento1> As <tipo argomento1>, [ref] <nome argomento2> As <tipo argomento2>, ...) As <tipo di risultato>[()]
...
<istruzioni>
...
Return <espressione>
EndFunction
Una funzione inizia con la parola chiave Function e termina con la parola chiave EndFunction.
Nella prima riga della funzione, subito dopo la parola chiave Function, è definito il nome della funzione.
Successivamente, nella stessa riga, vengono definiti gli eventuali argomenti e il tipo di risultato della funzione.
Esempio:
Nell’esempio qui sotto, la funzione CalculateABS calcola il valore assoluto dell’argomento n1 e ne restituisce il risultato:
Function CalculateABS(n1 As Numeric) As Numeric
If (n1 < 0) Then
Return -1 * n1
EndIf
Return n1
EndFunction
Argomenti #
Gli argomenti sono dei parametri (facoltativi) passati alla funzione per influenzarne il comportamento.
Un argomento è definito mediante la sintassi:
[ref] <nome argomento> As <tipo argomento>[()]
Ogni argomento è definito da un nome e da un tipo. Nell’esempio qui sotto, value è il nome dell’argomento e Numeric è il tipo:
Function DoSomething(value As Numeric) As Numeric
Array
Per definire un argomento come array è sufficiente aggiungere le parentesi tonde subito dopo il tipo argomento:
Argument1 As Numeric()
Passare un argomento per Riferimento (ref) #
Per default, tutti gli argomenti di una funzione sono passati per Valore, cioè nel caso in cui il valore dell’argomento sia modificato all’interno della funzione, la modifica NON si rifletterà nella funzione chiamante.
Inserendo la parola chiave ref prima del nome dell’argomento, l’argomento verrà passato alla funzione per Riferimento. In questo caso, modificando il valore dell’argomento all’interno della funzione, la modifica di rifletterà anche nella funzione chiamante:
Function DoSomething(ref value As Numeric) As Numeric
value = 12
Return 10 * 5
EndFunction
e nella funzione chiamante:
...
...
Dim a1 As Numeric = 10
Dim result As Numeric = DoSomething(a1)
...
...
Il valore di a1 dopo l'esecuzione della funzione DoSomething sarà 12.
Avvertenze su argomenti Array:
Una modifica al valore degli elementi di un argomento array si rifletterà SEMPRE nella funzione chiamante anche se l’array NON è passato per riferimento (a patto però che l’array sia stato usato almeno una volta prima di essere passato alla funzione):
Function DoSomething(ref a1 As Numeric()) As Numeric
a1(5) = 10
Return 1
EndFunction
e nella funzione chiamante:
...
...
Dim a1 As Numeric()
Usiamo l'array almeno una volta prima di passarlo alla funzione
a1(2) = 3
Dim result As Numeric = DoSomething(a1)
...
...
Il valore dell'elemento 5 dell'array a1 dopo l'esecuzione della funzione DoSomething sarà 10.
Risultato #
Una funzione deve sempre restituire un risultato. Il tipo di risultato è definito nella prima riga della funzione. Nell’esempio qui sotto il tipo risultato è Numeric:
Function DoSomething() As Numeric
Per definire il risultato di una funzione come array è sufficiente aggiungere le parentesi tonde subito dopo il tipo risultato:
Function DoSomething() As Numeric()
Funzione Main #
In Overbasic esiste una funzione speciale denominata Main. La funzione Main è la funzione principale dello script Overbasic. In altre parole, è la funzione da dove inizia l’esecuzione dello script.
Function Main()
La funzione Main non ha argomenti e nemmeno un tipo risultato definito. Il risultato infatti dipende dal tipo di script. Se lo script è un indicatore, il risultato sarà di tipo Numeric, se Trading System sarà di tipo Boolean. Per maggiori informazioni vedi la documentazione relativa agli indicatori utente e trading system.
La funzione Main viene chiamata automaticamente da Overcharts ogni volta che viene eseguito lo script. Per esempio, nel calcolo di un indicatore, lo script viene eseguito per ogni barra presente nel grafico di riferimento. Se il grafico di riferimento dell’indicatore contiene 100 barre, lo script verrà eseguito 100 volte. L’esecuzione avverrà anche ad ogni aggiornamento dati real time.