Come calcolare il valore di breve chiamata opzioni con Black-Scholes formula?
-
28-09-2019 - |
Domanda
Sto cercando di calcolare l'utile / perdita di una breve chiamata in vari momenti in futuro, ma non è venuta fuori corretta. Rispetto al momento della scadenza, quelli con tempo a sinistra hanno meno profitto al di sopra del prezzo di esercizio, ma a un certo punto al di sotto dello sciopero non fare perdere valore veloce come il t = 0 riga. Qui di seguito è la formula in pseudocodice, quello che sto facendo di sbagliato?
profit(stockprice) = -1 * (black_scholes_price_of_call(stockPrice,optionStrike,daysTillExpiration) - premium);
codice MATLAB reale:
function [ x ] = sell_call( current,strike,price,days)
if (days > 0)
Sigma = .25;
Rates = 0.05;
Settle = today;
Maturity = today + days;
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, 'EndDates',...
Maturity, 'Rates', Rates, 'Compounding', -1);
StockSpec = stockspec(Sigma, current);
x = -1 * (optstockbybls(RateSpec, StockSpec, Settle, Maturity, 'call', strike) - price);
else
x = min(price,strike-current-price);
end
end
Grazie, CP
Soluzione 2
Ho trovato il problema, aveva a che fare con l'argomento RateSpec. Quando si passa a un tasso di interesse, colpisce la valutazione delle opzioni.
Altri suggerimenti
La formula non è giusto. Non so il motivo per cui è necessario che conduce -1 come un moltiplicatore per, perché quando distribuisco fuori la "formula" è semplice:
profit(stockprice) = premium - black_scholes_price_of_call(stockPrice,optionStrike,daysTillExpiration);
semplice Abbastanza. In modo che significa che il problema è sepolto in quella funzione per il prezzo della chiamata, giusto?
Quando paragono la formula di quello che vedo come la definizione su Wikipedia, non vedo una corrispondenza a tutti. Il tuo codice MATLAB non aiuta, neanche. Dig nelle funzioni e vedere dove è andato storto.
Hai scritto quelle? Come hai fatto a prova di loro prima di assemblato in questa funzione più grande. Testare i blocchi più piccoli prima di assemblare nella cosa più grande.
Cosa basale stai testando contro? Che situazione conosciuta stai confrontando il calcolo di? Ci sono un sacco di calcolatrici B-S disponibili. Forse si può utilizzare uno di quelli.
I piacerebbe pensare che si tratta di un errore nel codice, piuttosto che MATLAB. O hai frainteso il significato dei parametri si sta passando. Guardate il vostro roba più attentamente, ri-leggere la documentazione per tale funzione, e ottenere un buon set di casi di base.