| 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 QuantConnect.Securities.Option;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Intraday price variation of a selected option contract.
/// </summary>
public class OptionsHistoryAlgorithm : QCAlgorithm
{
private const string UnderlyingTicker = "GLD";
public readonly Symbol Underlying = QuantConnect.Symbol.Create(UnderlyingTicker, SecurityType.Equity, Market.USA);
public readonly Symbol OptionSymbol = QuantConnect.Symbol.Create(UnderlyingTicker, SecurityType.Option, Market.USA);
private OptionRight optType = OptionRight.Put;
private readonly DateTime targetExpiry = DateTime.Parse("2011-12-17");
private readonly decimal targetStrike = 165.0m;
public override void Initialize()
{
SetStartDate(2011, 9, 21);
SetEndDate(2011, 9, 21);
SetCash(10000);
var equity = AddEquity(UnderlyingTicker);
var option = AddOption(UnderlyingTicker);
equity.SetDataNormalizationMode(DataNormalizationMode.Raw);
//option.PriceModel = OptionPriceModels.CrankNicolsonFD();
//option.EnableGreekApproximation = true;
//option.SetFilter(-10, +1, TimeSpan.FromDays(7), TimeSpan.FromDays(180));
int expDaysAhead = (targetExpiry - Time).Days;
option.SetFilter(universe => from symbol in universe
.Expiration(TimeSpan.FromDays(expDaysAhead - 1), TimeSpan.FromDays(expDaysAhead + 1))
where
symbol.ID.OptionRight == optType &&
Math.Abs(targetStrike - symbol.ID.StrikePrice) < 1.0m
select symbol);
}
public override void OnData(Slice slice)
{
OptionChain chain;
if (!Portfolio.Invested)
{
if (slice.OptionChains.TryGetValue(OptionSymbol, out chain))
{
var contr = chain
.OrderBy(x => Math.Abs((x.Expiry - targetExpiry).Days))
.ThenBy(x => Math.Abs(targetStrike - x.Strike))
.FirstOrDefault();
if (contr == null)
{
Debug("No matching contract found");
return;
}
Log(String.Format(@"{0},Bid={1} Ask={2} Last={3} OI={4}; Underlying={5}",
contr.Symbol.Value,
contr.BidPrice,
contr.AskPrice,
contr.LastPrice,
contr.OpenInterest,
contr.UnderlyingLastPrice
));
}
}
}
}
}