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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top