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
{
    public class WeeklyOptionDataTest : QCAlgorithm
    {
        private int MAX_EXPIRY = 6;

        private Equity equity;
        private Symbol equity_symbol;
        private Symbol option_symbol;

        private Symbol _optionContract = string.Empty;

        /// <summary>
        /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
        /// </summary>
        public override void Initialize()
        {

            SetStartDate(2018, 9, 1);  //Set Start Date
            SetEndDate(2018, 10, 15);    //Set End Date
            SetCash(100000);             //Set Strategy Cash

            equity = AddEquity("SPY", Resolution.Minute);
            equity.SetDataNormalizationMode(DataNormalizationMode.Raw); // IMPORTANT: default
            equity_symbol = equity.Symbol;

            // Add options
            var option = AddOption("SPY", Resolution.Minute);
            option_symbol = option.Symbol;
            // Debug("Options Symbol: " + option.Symbol.ToString());
            // set our strike/expiry filter for this option chain
            option.SetFilter(u => u.IncludeWeeklys()
                             .Strikes(-1, 1)
                             .Expiration(TimeSpan.Zero, TimeSpan.FromDays(6)));
            option.PriceModel = OptionPriceModels.CrankNicolsonFD();

        	/**
	         *
	         */ 
	        Schedule.On(DateRules.EveryDay("SPY"), TimeRules.AfterMarketOpen("SPY", 0), () =>
			{
				var contracts = OptionChainProvider.GetOptionContractList(this.equity_symbol, Time);
            	var underlyingPrice = Securities[this.equity_symbol].Price;
            	var options = (from symbol in contracts
                                where (symbol.ID.Date - Time).TotalDays < 6
                                select symbol);
				if(options.Count() != 0){
					var _optionsContract = options.OrderBy(x => x.ID.Date)
                                          .ThenBy(x => (x.ID.StrikePrice - underlyingPrice))
                                          .FirstOrDefault();
					//Debug("Current time: "+Time.ToLongDateString()+", Symbol:"+_optionsContract +" Last trading date: "+_optionsContract.ID.Date.ToLongDateString());
					Log("Current time: "+Time.ToLongDateString()+", Symbol:"+_optionsContract +" Last trading date: "+_optionsContract.ID.Date.ToLongDateString());
					
				} else {
					//Debug("Current time: "+Time.ToLongDateString()+", No Weekly Found");
					Log("Current time: "+Time.ToLongDateString()+", No Weekly Found");
				}
	     	});
        }

        /// <summary>
        /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
        /// </summary>
        /// <param name="data">Slice object keyed by symbol containing the stock data</param>
        public override void OnData(Slice data)
        {
        }
        
        

    }
}