R : i primi 30 minuti (dall’installazione al primo Trading-System) (1 Viewer)

infatti la professoressa ha assegnato tracce molto generiche in modo da darci ampia autonomia nello svolgimento...il punto è che non essendo ferrato sull'argomento (in quanto quest'argomento non è stato oggetto di lezione in aula) trovo enorme difficoltà nel creare il percorso risolutivo :help:
 

Cren

Forumer storico
infatti la professoressa ha assegnato tracce molto generiche in modo da darci ampia autonomia nello svolgimento...il punto è che non essendo ferrato sull'argomento (in quanto quest'argomento non è stato oggetto di lezione in aula) trovo enorme difficoltà nel creare il percorso risolutivo :help:
Tirati giù questi dati di opzioni e organizzali in una tabella, che nei prossimi giorni vediamo come si fa.
 
Ultima modifica:
ho scelto a caso 3 call e 2 put e riportato i rispettivi strike prices.. penso vada bene stabilire arbitrariamente anche scadenza e tassi giusto?
 
Ultima modifica:

Cren

Forumer storico
Per scaricare delle option chains dall'Eurex avevo scritto questo codice:
http://www.investireoggi.it/forum/charles-m-cottle-vt68723-164.html#post3572808
Eccezionale, sarebbe davvero da sciocchi non approfittare di quell'ottimo codice per estrarre i dati :up:

Sono rientrato da poco ma non ho sonno, vediamo se riesco a usare il bello spunto di reef per arrivare a qualcosa.

jack12, questo codice che allego nel seguito fa tutto quello che è nella consegna dell'esercizio ma solo per le Call... per le Put e quindi per uno smile completo non vorrai far fare a me tutta la fatica, no?

Quindi delle tue cinque opzioni ce ne stiamo fregando bellamente e tiriamo giù 24 ODAX Call direttamente dall'Eurex, non devi porti nemmeno il problema di quali (quelle per cui ci sono dati disponibili).

# ********************************
# *** ODAX VOLATILITY SMILE ***
# ********************************

# +---------------------------------
# | Sommario:
# |
# | 1. Installo le librerie
# | 2. Carico le librerie
# | 3. Leggo i dati dal sito dell'Eurex e li trasformo in tabella (by reef)
# | 4. Converto i dati da stringhe a valori numerici
# | 5. Calcolo il prezzo medio e creo una tabella con gli strike
# | 6. Scarico il prezzo di chiusura del DAX
# | 7. Calcolo i giorni a scadenza dell'opzione sulla base del 21° giorno del prossimo mese
# | 8. Estraggo le volatilità implicite e popolo lo smile
# | 9. Plot
# | 10. Fitting di un polinomio di II grado per la forma parametrica dello smile
# +---------------------------------

# +---------------------------------
# | 1. Installo le librerie
# +---------------------------------

install.packages('fOptions')
install.packages('RCurl')
install.packages('quantmod')
install.packages('XML')

# +---------------------------------
# | 2. Carico le librerie
# +---------------------------------

require(fOptions)
require(quantmod)
require(RCurl)
require(XML)

# +---------------------------------
# | 3. Leggo i dati dal sito dell'Eurex e li trasformo in tabella (by reef)
# +---------------------------------

url <- 'http://www.eurexchange.com/exchange-en/products/idx/dax/17252/'
doc <- htmlTreeParse(url, useInternalNodes = T)
tab_nodes <- xpathApply(doc, '//table')
tabopt <- lapply(tab_nodes[1], readHTMLTable)

# +---------------------------------
# | 4. Converto i dati da stringhe a valori numerici
# +---------------------------------

data <- tabopt[[1]]
strikePrice <- data[[1]]
strikePrice <- sub(pattern = ',', replacement = '', x = strikePrice)
bid <- data[[6]]
ask <- data[[8]]
strikePrice_ <- as.numeric(as.character(strikePrice))
bid_ <- as.numeric(as.character(bid))
ask_ <- as.numeric(as.character(ask))

# +---------------------------------
# | 5. Calcolo il prezzo medio e creo una tabella con gli strike
# +---------------------------------

mid_ <- rowMeans(cbind(bid_, ask_))
optionChain <- cbind(strikePrice_, mid_)
colnames(optionChain) <- c('Strike Price', 'Price')

# +---------------------------------
# | 6. Scarico il prezzo di chiusura del DAX
# +---------------------------------

getSymbols('^GDAXI', from = as.Date(Sys.time()) - 10)
S <- as.numeric(last(Cl(GDAXI)))

# +---------------------------------
# | 7. Calcolo i giorni a scadenza dell'opzione sulla base del 21° giorno del prossimo mese
# +---------------------------------

optionChain_ <- na.omit(optionChain)
currentDate <- as.Date(Sys.time())
fromTo <- paste(currentDate, '/', currentDate + 365, sep = '')
futureDates <- timeBasedSeq(fromTo)
Time <- futureDates[format(futureDates, '%d') == '21'][1] - currentDate

# +---------------------------------
# | 8. Estraggo le volatilità implicite e popolo lo smile
# +---------------------------------

volSmile <- NULL

for(i in 1:nrow(optionChain_))
{
volSmile <- GBSVolatility(price = optionChain_[i,2], TypeFlag = 'c', S = S, X = optionChain_[i,1], Time = as.numeric(Time) / 365, r = 0, b = 0)

}

# +---------------------------------
# | 9. Plot
# +---------------------------------

plot(volSmile ~ optionChain_[,1], type = 'b', xlab = 'Strike Price', ylab = 'Implied Volatility', lwd = 1)
grid()

# +---------------------------------
# | 10. Fitting di un polinomio di II grado per la forma parametrica dello smile
# +---------------------------------

model <- lm(volSmile ~ I(optionChain_[,1] ^ 2) + I(optionChain_[,1]))
lines(model$fitted.values ~ optionChain_[,1], lwd = 2, col = 2)
legend('topright', legend = c('Observed data', 'Fitted values'), col = 1:2, lwd = 1:2)


Il codice fa tutto da solo, come al solito: installa e carica le librerie, scarica i dati da Eurex e Yahoo, li sistema e li pulisce, estrae lo smile di volatilità implicita e ci fa sopra il fitting di un polinomio di II grado di cui allego i coefficienti al momento in cui scrivo in modo che sia riproducibile anche dove non ci sono prezzi (velleitario :rolleyes:).

Call:
lm(formula = volSmile ~ I(optionChain_[, 1]^2) + I(optionChain_[, 1]))

Residuals:
Min 1Q Median 3Q Max
-0.0052363 -0.0008095 0.0000297 0.0009373 0.0041115

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.819e+01 3.498e-01 51.99 <2e-16 ***
I(optionChain_[, 1]^2) 1.808e-07 3.779e-09 47.85 <2e-16 ***
I(optionChain_[, 1]) -3.614e-03 7.275e-05 -49.68 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.001978 on 21 degrees of freedom
Multiple R-squared: 0.9986, Adjusted R-squared: 0.9985
F-statistic: 7683 on 2 and 21 DF, p-value: < 2.2e-16

Avvertenze:
1. avevo poca voglia di stare a pensare ad un modo per prendere il prossimo terzo venerdì del mese come scadenza automatica delle opzioni, quindi o inserite la data di scadenza a mano, o giocate voi con le xts oppure vi accontentate sempre del 21° giorno del mese (tanto a fini didattici cambia poco);
2. il tasso privo di rischio è posto a 0% (inserite un valore realistico, eventualmente);
3. il cost of carry è posto a 0% (stimatevi il dividend yield dai futures, eventualmente).​
Come esercizio per jack12 ma anche per tutti gli altri ricavare lo stesso per le Put e mettere tutto assieme, verificando incidentalmente che vale il teorema di parità Put-Call e la forma dello skew (basta usare lo stesso codice cambiando URL, fondamentalmente).

Come esercizio ulteriore, cambiare anche scadenza (è sempre sufficiente cambiare URL) e provare a graficare tutto assieme... o magari la IVTS stessa :)

Mi è venuto sonno, vado a dormire :mumble:
 

Allegati

  • Rplot.png
    Rplot.png
    7,9 KB · Visite: 434
Ultima modifica:

reef

...
Eccezionale, sarebbe davvero da sciocchi non approfittare di quell'ottimo codice per estrarre i dati :up:

Eccezionale, caso mai, è la mole di lavoro che sviluppi qui per i più svariati motivi.
(non condivido del tutto il fatto che "fai i compiti" agli studenti, ma tant'è...)

Uno come te, come minimo, dovrebbe fare il docente in un laboratorio universitario, dove gli studenti uscirebbero, oltre che arricchiti dal punti di vista scientifico e professionale, con un'esperienza "umana" (nel senso di disponibilità e dedizione del corpo docente) che nelle nostre università è praticamente sconosciuta.

E' un continuo rammarico, ovunque si guardi... :rolleyes:
 

cammello

Forumer storico
buondì e buone feste a tutti.
Approfitto di questi giorni per portarmi in pari con questo 3d e quello che ha scritto Cren sul FOL.

ho installato il RandFriends RAndFriendsSetup2152V3.2-9-1, che avevo scaricato a giugno; tutto ok, a parte due punti:
- non riesco a modificare il file Rprofile.site, "è in uso da altro programma"
- ? non funziona: cerca di aprire una pagina che non esiste http : // 127.0.0.1 : 28154 / library / stats / html / lm.html (lo fa per qualsiasi argomento di ?)
ps: gli spazi nell'url non ci sono, li ho messi altrimenti dava una indicazione errata

Idee e suggerimenti?

grazie

C
 
Ultima modifica:

Cren

Forumer storico
ho installato il RandFriends RAndFriendsSetup2152V3.2-9-1, che avevo scaricato a giugno; tutto ok, a parte due punti:
- non riesco a modificare il file Rprofile.site, "è in uso da altro programma"
- ? non funziona: cerca di aprire una pagina che non esiste http : // 127.0.0.1 : 28154 / library / stats / html / lm.html (lo fa per qualsiasi argomento di ?)
ps: gli spazi nell'url non ci sono, li ho messi altrimenti dava una indicazione errata

Idee e suggerimenti?
- Cerchi di modificarlo con R aperto, per caso?
- Ma quello dovrebbe essere sul tuo PC, infatti per me il manuale di lm sta ad esempio all'indirizzo http://127.0.0.1:28955/library/stats/html/lm.html.

Forse ci sono problemi con l'installazione di R :mmmm:
 

massimo ceraldo

[::..|..::]
Eccezionale, caso mai, è la mole di lavoro che sviluppi qui per i più svariati motivi.

Uno come te, come minimo, dovrebbe fare il docente in un laboratorio universitario, dove gli studenti uscirebbero, oltre che arricchiti dal punti di vista scientifico e professionale, con un'esperienza "umana" (nel senso di disponibilità e dedizione del corpo docente) che nelle nostre università è praticamente sconosciuta.

Untitled Document :D
 

Users who are viewing this thread

Alto