domenica 20 marzo 2016

Principali test sulle strategie di trading

I metodi principali per testare le strategie di trading sono:


  • Backtesting: permette di testare una strategia di trading sulla base di dati passati. Invece di applicare una strategia sui dati che verranno rilevati in istanti di tempo a venire (cosa che potrebbe richiedere anni), il trader può effettuare una simulazione della sua strategia utilizzando dati rilevanti del passato, così da verificarne l'efficienza. La maggior parte delle strategie di analisi tecnica vengono testate con questo approccio. Il difetto principale del backtesting, però, è che i risultati ottenuti dipendono fortemente dai movimenti avvenuti nel periodo di tempo testato. Eseguire il backtest su una teoria suppone che ciò che si verifica nel passato avverrà anche nel futuro e questa supposizione può portare a dei potenziali rischi per la strategia.

  • Forward testing: conosciunto anche come paper trading, permette di testare la strategia facendo ricorso ai dati reali che man mano arrivano sul mercato. E' anche chiamato paper trading in quanto tutti gli scambi avvengo solo su carta: ossia, le entrate e le uscite vengono documentate insieme ai profitti e alle perdite, ma nessuna operazione avviene realmente. Un aspetto molto importante della performance di questo test sta nel seguire esattamente la logica del sistema, altrimenti diventa difficile - se non impossibile - valutare accuratamente ogni passo della strategia. I trader devono essere onesti su ogni operazione in entrata e in uscita ed evitare di non riportare operazioni con motivazioni del tipo "nella realtà non avrei mai fatto questa cosa". Se l'operazione sarebbe capitata seguendo la logica del sistema, allora deve essere documentata e valutata. Molti broker offrono account di trading simulati, dove i trader possono effettuare operazioni come se l'account fosse reale, così da registrare ogni perdita e ogni profitto. Usare una logica si questo tipo, basata su un account di trading simulato, può creare un'atmosfera semi-realistica, su cui poter praticare la propria strategia e affinare il sistema. Ovviamente i limiti di questo test sono il tempo che richiede per testare la strategia, che potrebbe dilungarsi anche per anni, a seconda dei dati su cui si lavora.

  • Curve fitting: su basa sull'utilizzo di tecniche di ottimizzazione per generare il più alto numero di operazioni che generano profitto massimo su dati del passato usati appunto per il test. Nonostante possa sembrare un buon metodo, in realtà il curve fitting può portare a processi inaffidabili, in quanto i risultati sono relativi solo a quei determinati dati e a quel determinato periodo.

  • Simulazioni: testare strategie con backtest assumendo che se queste si comportano bene con dati del passato allora si comporteranno più o meno alla stessa maniera con dati del futuro è un atteggiamento abbastanza ingenuo, così come non è molto fattibile ricorrere a forward test per l'enorme quantità di tempo che questi richiedono. Proprio per questo motivo, può essere utile ricorrere a metodi simulativi: tra i più famosi, c'è sicuramente il Metodo Monte Carlo. Il Metodo Monte Carlo si basa sull'idea che le operazioni avvenute nel passato ricorreranno anche nel futuro, anche se in un ordine diverso e sconosciuto. Mischiando l'ordine delle operazioni, saranno generate diverse curve di equità. Malgrado ci siano alcune circostanze dove il Metodo Monte Carlo non è appropriato, per la maggior parte delle strategie di trading l'analisi è valida può fornire degli spunti utili sul sistema di trading. Semplicemente, viene registrato il risultato di ogni operazione e poi vengono selezionate operazioni in vario ordine così da creare una curva di equità. I computer, ovviamente, eseguono questo processo in maniera molto rapida e sono in grado di creare migliaia di curve di equità simulate. Una volta analizzate migliaia di simulazioni di Monte Carlo, si ottengono statistiche su quale potrebbe essere il più grande calo di un investimento, sul ritorno annuo possibile e sul rischio di rovina. Se si hanno performance oggettive per i risultati simulati, allora si può facilmente osservare se la propria strategia raggiunge gli obiettivi. Non c'è alcuna maniera per avere lo stesso tipo di informazione prendendo come riferimento dati passati.

Fonte:

http://www.investopedia.com/articles/trading/10/backtesting-walkforward-important-correlation.asp
http://www.investopedia.com/terms/b/backtesting.asp#ixzz48kpVjfUZ 
http://www.futuresmag.com/2014/09/30/building-trading-strategy-after-testing-and-optimization

venerdì 18 marzo 2016

Indicatori tecnici degli strumenti finanziari


Gli indicatori sono dei segnali visuali che vengono tracciati sui grafici e sono il risultato di calcoli matematici che prendono in considerazione dati come il volume ed il prezzo variabile in un determinato periodo temporale.
Questi segnali indicano il comportamento della nostra serie e, se interpretati correttamente, danno segnali importanti sulla direzione futura.

Per prima cosa, è utile distinguere il concetto di indicatore dal concetto di oscillatore.
L'indicatore è disegnato direttamente sul grafico e indica la situazione della serie. L'oscillatore, invece, è tracciato al di fuori del grafico principale e si muove entro valori di riferimento o all'interno di un minimo e di un massimo.

Di seguito vengono riportati gli indicatori più utilizzati.

La media mobile


La misurazione della media mobile viene utilizzata per interpretare il prezzo medio di una serie in un periodo temporale e per comprendere se il mercato si trova in un momento di espansione o di correzione.
Esistono diversi indicatori per misurare la media mobile. Il più conosciuto è il Simple Moving Average, o più semplicemente Moving Average.

Il moving average, conosciuto anche con il nome abbreviato di MA o SMA, è il risultato della media dei prezzi di chiusura di un cross. Graficamente corrisponde a una linea che attraversa le candele del grafico e ne indica il trend corrente.

Nell'immagine in basso è riportata la media mobile applicata a un grafico EUR/USD a 60 minuti.


Nel grafico la linea blu che attraversa i prezzi è una media mobile semplice. Si può applicare decidendo l’arco temporale: se, per esempio, si vuole inserire una media mobile a 15 periodi, sul grafico comparirà una linea che segnerà la somma di tutti i prezzi di chiusura degli ultimi 15 periodi, divisi per 15.


La formula della media mobile semplice è la seguente:
SMA = (P1 + P2 + P3 + … + Pn) / n.
Dove n corrisponde al numero di periodi che vuoi prendere in esame. 

Gli altri tipi di media mobile che si possono posizionare sul grafico sono l’esponenziale, la triangolare e la media mobile pesata (o ponderata).

Un utilizzo ulteriore della media mobile semplice è quello dell’incrocio. Sul grafico si inserisce una media mobile semplice a 15 periodi e successivamente una seconda media mobile semplice a 50 periodi. Se l’incrocio delle due medie volge verso l’alto, si tratta di un’indicazione che il trend sarà in salita ed è quindi consigliato aprire posizioni long (comprare). Al contrario, se l’incrocio volge verso il basso, c’è da aspettarsi un downtrend ed è quindi utile considerare posizioni short.

Di seguito viene riportata la situazione appena illustrata:




Media Mobile Esponenziale (Exponential Moving Average)

Questo indicatore prende anche il nome di EMA e calcola i prezzi di chiusura in modo diverso al simple moving average. L’Exponential Moving Average introduce il concetto che i dati più recenti sono i più significativi per calcolare correttamente l’evoluzione di un trend. Di fatto questa caratteristica rende l’EMA più “reattivo”.
L’EMA viene calcolato ottenendo il primo valore medio attraverso una media semplice, ed i prezzi successivi con l’introduzione di un coefficiente, calcolato in questo modo:
Coeff2 / (n + 1)
Dove n rappresenta i periodi temporali.
La formula dell EMA è quindi la seguente:
EMA = (Prezzo close – EMA precedente) * Coeff + EMA precedente
In figura puoi vedere la differenza tra une media mobile semplice (in blu) ed una media mobile esponenziale (in viola):

Media Mobile Ponderata o Pesata (Weighted Moving Average)

Questo indicatore è conosciuto anche con il nome di WMA. Allo stesso modo dell’EMA, questo tipo di misurazione assegna un maggior valore ai dati più recenti. Al contrario della media esponenziale, esso non si avvale del coefficiente moltiplicativo, ma attribuisce un peso differente per ogni prezzo in esame nell’arco temporale.
I dati più recenti contribuiscono in misura maggiore alla media, mentre ai prezzi precedenti viene data un’importanza minore, quindi i pesi del periodo più lontano hanno il valore 1, i prezzi del periodo subito successivo hanno valore 2 e i prezzi successivi assumono un peso di un’unità crescente (3, 4, 5 ecc…).
In figura si può osservare la Media Mobile Pesata (in azzurro) accostata alla Media Mobile Semplice (blu) e a quella Esponenziale (viola):

Le bande di Bollinger
Le bande di Bollinger sono utilizzate per misurare la volatilità  e la direzione dei mercati. Nel forex questo indicatore fornisce in modo grafico segnali operativi di acquisto o vendita.
Le bande di Bollinger consistono principalmente in tre curve, disegnate in relazione con l’andamento dei prezzi di un cross. La banda centrale, ovvero la Media Mobile Lineare, misura i trend di medio termine. La banda superiore viene calcolata prendendo in esame la Media Mobile Lineare e sommando 2 volte la deviazione standard, mentre la banda inferiore è data dalla Media Mobile Lineare – 2 volte la deviazione standard.

Più è grande l’ampiezza delle bande, più è segno di un’elevata volatilità . Diversamente bande convergenti indicano una volatilità  in diminuzione. Molti trader utilizzano questo strumento per determinare i livelli minimi e massimi per di un cross: una strategia molto utilizzata è vendere quando i prezzi raggiungono la banda superiore ed acquistare quando invece il valore del cross tocca la banda inferiore.
Quando si viene a creare una situazione in cui i prezzi diventano variabili e volatili, le bande che vengono a delinearsi sul grafico sono ampie. Quando le bande hanno un assottigliamento, è possibile che avvenga un cambiamento improvviso del prezzo.
Se i prezzi raggiungono la banda superiore è prevedibile che vi sia un rimbalzo interno alla banda, ovvero una flessione dei prezzi. Più i prezzi forzano la banda superiore, più il segnale di ribasso diviene realistico. In questo caso è altamente consigliato non aprire nuove posizioni e chiudere quelle già  aperte. Gli andamenti delle curve in senso opposto, ossia prezzi che toccano la banda inferiore, indicano una discesa eccessiva dei prezzi, ed è quindi possibile un un rimbalzo interno alla banda, con una conseguente crescita dei prezzi. In questo caso è consigliabile aprire nuove posizioni di acquisto.
Le bande di Bollinger possono essere un ottimo strumento per chi volesse scoprire la fine di un trend e prevedere l’inizio di nuove tendenze. Tuttavia queste previsioni possono spesso essere disattese, poiché è facile che si creino “falsi allarmi”: i margini di errore sono alti ed è quindi necessario un discreto numero di tentativi prima di avere successo.
A ogni modo, questo indicatore è molto potente ed è oggi considerato uno degli strumenti di analisi tecnica più eleganti e sofisticati. Le bande di Bollinger sono oggi diventate uno strumento estremamente importante per moltissimi traders di tutto il mondo.

Il Momentum

Il Momentum è un indicatore che misura la velocità di cambiamento dei prezzi. E’ anche utile per valutare il volume delle transazioni nel mercato.
Prende in esame la differenza tra il prezzo corrente e il prezzo di un numero n di periodi, che è un valore variabile. In un grafico giornaliero (D1), un periodo equivale a un giorno. 
La linea dell’indicatore oscilla tra valori positivi o negativi, che non hanno teoricamente limiti. Valori positivi vengono registrati quando il prezzo del periodo attuale è superiore al prezzo dei periodi precedenti. Al contrario quando la linea si sposta verso valori negativi significa che il prezzo attuale è inferiore al prezzo passato.

Valori del Momentum troppo alti o troppo bassi sono segnali che la valuta è estremamente comprata (overbuy) o venduta (oversell).

I periodi consigliati per misurare il momentum su un grafico variano tra gli 8 e 14. 

Nell’immagine successiva è riportato l’indicatore a 8 periodi sotto al grafico di riferimento EUR/USD a 240 minuti. Si tratta di una singola linea che oscilla e che dà indicazioni sul movimento del prezzo.


Non è consigliato usare l’indicatore con periodi inferiori a 8, perchè con valori bassi vengono a formarsi onde più marcate che potrebbero creare falsi allarmi. Periodi superiori ai 20 sono altrettanto sconsigliati, perchè creano onde poco marcate che rendono difficile l’analisi. 
Quando il Momentum diventa positivo significa che ci troviamo in un trend rialzista. Al contrario quando l’indicatore si porterà a livelli negativi ci troviamo in un trend al ribasso.
L'indicatore Stocastico
Lo stocastico è un indicatore che misura il rapporto tra il prezzo di chiusura di un cross e il range dei suoi prezzi in un periodo di tempo variabile. Viene utilizzato per identificare gli eccessi del mercato.
Lo stocastico misura il momentum attraverso i prezzi di chiusura minimi e massimi degli ultimi nperiodi, dove n è un numero variabile. E’ formato da due linee, %K e %D, che indicano la posizione relativa all’ultima chiusura rispetto alle chiusure precedenti. Quando l’indicatore raggiunge livelli massimi significa che ci troviamo in un trend positivo. Al contrario quando le linee scendono a livelli bassi o minimi, ci troviamo in un periodo di downtrend.


Sul grafico le due linee dell’indicatore sono colorate in modo diverso: la linea %K, che in figura è la linea azzurra, rappresenta la posizione in percentuale della chiusura attuale, determinata in base al range di prezzi raggiunti negli ultimi n periodi. Viene calcolata nel seguente modo:
%K = 100 [(C-Ln) / (Hn – Ln) ]
dove C rappresenta il prezzo di chiusura più recente, Ln il minimo storico delle n sessioni precedenti, Hn il massimo storico degli ultimi n periodi.
La linea %D, che sul grafico è tratteggiata in rosso e rappresenta la linea più lenta, misura la media mobile di n periodi di %K. I periodi possono essere personalizzati nel momento in cui inserisci il grafico, ma in genere per %K vengono presi in esame gli ultimi 14 o 15 periodi e per %D gli ultimi 3 periodi.
Le due linee dello stocastico oscillano in un range che varia da 0 a 100. Se entrambe oscillano entro il range 0 – 20 è probabile che continui il trend al ribasso.

Nel momento in cui tale livello viene superato è possibile un’inversione del trend. La fascia 20 – 80 è una zona “neutra”, in cui assistiamo alla prosecuzione del trend in corso. Nel range 80 – 100 i prezzi raggiungono nuovi massimi.
Quando le due linee si trovano al di sopra di 70, significa che ci troviamo in una situazione di ipercomprato. Quando invece di trovano al di sotto di 30, il mercato è in ipervenduto. In una situazione di ipercomprato potrebbero verificarsi segnali di vendita. Al contrario in situazioni di ipervenduto potrebbe avvenire un reversal con segnali di acquisto.
Infine un modo per individuare un’inversione del trend è quella di guardare i prezzi che oscillano tra i livelli 20 e 80: se vengono tagliati è probabile che avvenga un reversal.
Stop and Reverse (SAR) Parabolico
Il SAR Parabolico è uno strumento di analisi tecnica che viene ampiamente utilizzato per via della sua semplicità. E’ un indicatore di Momentum che serve a determinare le probabilità di inversione di un trend.
Il SAR parabolico non è un oscillatore, ma viene inserito all'interno del grafico al di sopra o al di sotto delle candele. Serve per determinare non tanto un punto di ingresso nel trade, quanto un punto di uscita. 
Di seguito, si ha una rappresentazione grafica. Le due linee tratteggiate in verde sono il nostro indicatore. Esse seguono una traiettoria parabolica in corrispondenza dei prezzi open e close delle candele.

Una curva parabolica si trova al di sotto delle candele in un trend ascendente, mentre in un trend discendente avviene l’opposto. La curva che viene a formarsi definisce un livello di trailing stop: quando viene toccata dalla candela, la posizione sul mercato va chiusa e invertita. Quando i puntini si trovano vicini alla candela significa che è stato raggiunto un nuovo massimo o un nuovo minimo, a seconda del trend in corso.
L’indicatore è utile in qualsiasi time frame, ma viene particolarmente apprezzato per chi fa trading sul breve periodo. Non è per niente affidabile e andrebbe evitato l’impiego in un mercato laterale, ovvero quando c’è assenza di tendenza.

L’indicatore RSI

RSI è l’acronimo di “relative strenght index”. Questo indicatore viene applicato per misurare il cambiamento di un prezzo e stabilire se il nostro cross si trova in ipercomprato o ipervenduto.

L’indice di forza relativa – questo è il nome italiano dell’indicatore – è uno strumento di analisi tecnica che viene applicato allo studio dei grafici. E’ simile allo stocastico ed è utile per determinare segnali di vendita o di acquisto.


Il periodo “standard” utilizzato dall’RSI è di 14, ma si può impostare uno diverso. Aumentando il numero di periodi si avrà un indicatore meno reattivo, con curve meno marcate. Diversamente impostando valori inferiori l'RSI sarà più “reattivo” sul grafico. Un utilizzo con periodi troppo alti o troppo bassi è però sconsigliato, perché aumenta il numero di falsi positivi.

L’RSI sul grafico appare come una linea che oscilla tra valori compresi fra 0 e 100:



Tra 0 e 100 si trovano due aree importanti, identificate l’una al di sopra del valore 70 e l’altra al di sotto del valore 30. Sono aree importanti perché al di sotto di 30 si può essere certi che il nostro cross viene scambiato in una situazione di ipervenduto, mentre al di sopra di 70 ci si trova in una condizione di ipercomprato.
Ogni volta che la linea dell’indicatore raggiunge la zona di ipercomprato oppure scende nell’area dell’ipervenduto, è possibile che avvenga un’inversione o una correzione del prezzo.
In modo simile la linea centrale, definita a 50, è utile per comprendere la direzione prevalente del cross, a seconda che la linea oscilli dal basso verso l’alto o viceversa.
Un metodo che può essere utilizzatoper avere una maggiore certezza su un’inversione imminente, è quello di individuare una divergenza tra la direzione del grafico a candele e l’oscillatore,  oppure si può applicare una media mobile, come descritto di seguito.

Metodo di Trading con RSI + Media Mobile

Purtroppo non sempre situazioni di overbought o oversell sono sinonimo di inversione. Molto spesso l’istinto porta a prendere la decisione affrettata di vendere se ci si trova in ipercomprato, perché si ha la certezza che il trend potrebbe subire un cambiamento imminente.
Questo è vero ma non è possibile sapere quando ciò avverrà. La situazione di overbought potrebbe durare ancora  giorni o settimane, e nel frattempo si rischia di perdere denaro prezioso andando nella direzione opposta del cross.
Per avere un’arma in più a nostro favore si può utilizzare una tecnica consolidata che consiste nell’inserire l’RSI abbinato ad una media mobile.
Quando l’RSI perfora al ribasso la media mobile, il cross diminuisce di valore ed è quindi consigliato aprire posizioni short. Al contrario quando la media mobile viene attraversata verso l’alto il cross sale di prezzo ed è il momento di andare long.


Come si evince in figura, ogni volta che il nostro RSI taglia la media mobile, viene a formarsi un segnale. L’ultima indicazione (7) fornita dal grafico è un segnale di vendita. Il cross EUR/USD sta continuando un periodo bearish e la nostra valuta sta indebolendosi nei confronti del dollaro. In questo caso è consigliato spostare lo stop loss in caso avessi posizioni long già aperte, oppure aprire nuove posizioni short.
Un ulteriore abbinamento che si può fare è quello di inserire l’incrocio tra medie mobili, per avere segnali più forti ed una certezza maggiore.
Fonte:
www.areaforex.com


Tipi elementari del linguaggio


  • VB.NET

(Si fa riferimento a Visual Basic 2015)
Nella tabella riportata di seguito vengono illustrati i tipi di dati Visual Basic, i relativi tipi di supporto in Common Language Runtime, la relativa allocazione di memoria nominale e gli intervalli di valori corrispondenti.
Tipo Visual Basic
Struttura dei tipi in Common Language Runtime
Allocazione di memoria nominale
Intervallo di valori
Dipende dalla piattaforma di implementazione
True False
1 byte
Da 0 a 255 (senza segno)
Char (carattere singolo)
2 byte
Da 0 a 65535 (senza segno)
8 byte
Dalle 0.00.00 (mezzanotte) dell'1 gennaio 0001 alle 23.59.59 del 31 dicembre 9999
16 byte
Da 0 a +/-79.228.162.514.264.337.593.543.950.335 (+/-7,9...E+28)  senza decimali; da 0 a +/-7,9228162514264337593543950335 con 28 posizioni decimali;
il numero più piccolo diverso da zero è +/-0,0000000000000000000000000001 (+/-1E-28) 
Double (virgola mobile a precisione doppia)
8 byte
Da -1,79769313486231570E+308 a -4,94065645841246544E-324  per i valori negativi;
Da 4,94065645841246544E-324 a 1,79769313486231570E+308  per i valori positivi
4 byte
Da -2.147.483.648 a 2.147.483.647 (con segno)
Long (valore long integer)
8 byte
Da -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 (9,2...E+18 ) (con segno)
Object (classe)
4 byte su piattaforma a 32 bit
8 byte su piattaforma a 64 bit
In una variabile di tipo Object è possibile memorizzare qualsiasi tipo
1 byte
Da -128 a 127 (con segno)
Short (valore short integer)
2 byte
Da -32.768 a 32.767 (con segno)
Single (virgola mobile a precisione singola)
4 byte
Da -3,4028235E+38 a -1,401298E-45  per i valori negativi;
Da 1,401298E-45 a 3,4028235E+38  per i valori positivi
String (lunghezza variabile)
String (classe)
Dipende dalla piattaforma di implementazione
Da 0 a circa 2 miliardi di caratteri Unicode
4 byte
Da 0 a 4.294.967.295 (senza segno)
8 byte
Da 0 a 18.446.744.073.709.551.615 (1,8...E+19 ) (senza segno)
(eredita da ValueType)
Dipende dalla piattaforma di implementazione
Ciascun membro della struttura presenta un intervallo determinato dal relativo tipo di dati e indipendente dagli intervalli degli altri membri
2 byte
Da 0 a 65.535 (senza segno)
 In notazione scientifica, la lettera "E" si riferisce a un potenza di 10. 3,56E+2 corrisponde pertanto a 3.56 x 10 2 o 356 e 3,56E-2 corrisponde a 3.56 / 10 2 o 0,0356.
  • C#

In C# sono supportati tutti i tipi di dati disponibili in Java e in più i numeri senza segno e un nuovo tipo a virgola mobile ad alta precisione a 128 bit.
Per ogni tipo di dati primitivo di Java, la libreria delle classi di base fornisce una classe wrapper che lo rappresenta come oggetto Java. La classeInt32, ad esempio, esegue il wrapping del tipo di dati int, mentre la classe Double esegue il wrapping del tipo di dati double.
Tutti i tipi di dati primitivi di C# sono invece oggetti nello spazio dei nomi System. Per ogni tipo di dati, viene fornito un nome breve, o alias. Ad esempio, int è il nome breve di System.Int32 e double è il nome breve di System.Double.
Nella tabella riportata di seguito è incluso l'elenco dei tipi di dati di C# e dei relativi alias. È possibile notare che i primi otto tipi di dati corrispondono ai tipi primitivi disponibili in Java. La parola chiave boolean di Java è denominata bool in C#.
Nome breve
Classe .NET
Tipo
Larghezza
Intervallo (bit)
byte
Valore integer senza segno
8
Da 0 a 255
sbyte
Valore integer con segno
8
Da -128 a 127
int
Valore integer con segno
32
Da -2.147.483.648 a 2.147.483.647
uint
Valore integer senza segno
32
Da 0 a 4294967295
short
Valore integer con segno
16
Da -32.768 a 32.767
ushort
Valore integer senza segno
16
Da 0 a 65535
long
Valore integer con segno
64
Da -922337203685477508 a 922337203685477507
ulong
Valore integer senza segno
64
Da 0 a 18446744073709551615
float
Tipo a virgola mobile e precisione singola
32
Da -3,402823e38 a 3,402823e38
double
Tipo a virgola mobile e precisione doppia
64
Da -1,79769313486232e308 a 1,79769313486232e308
char
Singolo carattere Unicode
16
Simboli Unicode utilizzati nel testo
bool
Tipo booleano logico
8
True o false
object
Tipo di base per tutti gli altri tipi
string
Sequenza di caratteri
decimal
Tipo frazionario o integrale esatto che può rappresentare numeri decimali con 29 cifre significative
128
Da ±1.0 × 10e−28 a ±7.9 × 10e28
Fonti:

https://msdn.microsoft.com/it-it/library/47zceaw7.aspx
https://msdn.microsoft.com/it-it/library/ms228360(v=vs.90).aspx