| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
using System;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Data.Market;
using QuantConnect.Orders;
using QuantConnect.Securities.Option;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Example demonstrating how to access to options history for a given underlying equity security.
/// </summary>
public class BasicTemplateOptionsHistoryAlgorithm : QCAlgorithm
{
public override void Initialize()
{
SetStartDate(2017, 11, 20);
SetEndDate(2017, 11, 26);
var equity = AddEquity("SPY", Resolution.Daily);
var option = AddOption("SPY");
//Default volatility model needs two days of data to start to return non-zero volatility for greek calcs...
//SetWarmup(TimeSpan.FromDays(2));//Require minimum warmup of 2 days for option greek calcs
}
/// <summary>
/// Event - v3.0 DATA EVENT HANDLER: (Pattern) Basic template for user to override for receiving all subscription data in a single event
/// </summary>
/// <param name="slice">The current slice of data keyed by symbol string</param>
public override void OnData(Slice slice)
{
if (!Portfolio.Invested)
{
foreach (var chain in slice.OptionChains)
{
var underlying = Securities[chain.Key.Underlying];
foreach (var contract in chain.Value)
{
Log(String.Format(@"{0},Bid={1} Ask={2} Last={3} OI={4} σ={5:0.000} NPV={6:0.000} Δ={7:0.000} Γ={8:0.000} ν={9:0.000} ρ={10:0.00} Θ={11:0.00} IV={12:0.000}",
contract.Symbol.Value,
contract.BidPrice,
contract.AskPrice,
contract.LastPrice,
contract.OpenInterest,
underlying.VolatilityModel.Volatility,
contract.TheoreticalPrice,
contract.Greeks.Delta,
contract.Greeks.Gamma,
contract.Greeks.Vega,
contract.Greeks.Rho,
contract.Greeks.Theta / 365.0m,
contract.ImpliedVolatility));
}
}
}
}
public override void OnSecuritiesChanged(SecurityChanges changes)
{
foreach (var change in changes.AddedSecurities)
{
var history = History(change.Symbol, 10, Resolution.Hour);
foreach (var data in history.OrderByDescending(x => x.Time).Take(3))
{
Log($"History: {data.Symbol.Value}: {data.Time} > {data.Close}");
}
}
}
}
}