using System;
using System.Globalization;
using QuantConnect.Data;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;
using QuantConnect.Indicators.CandlestickPatterns;
namespace QuantConnect.Algorithm.CSharp
{
public class CandlestickCloseMarPriorVol5minESData : QCAlgorithm
{
private string _symbol = "ES";
private ClosingMarubozu _pattern = new ClosingMarubozu();
public RollingWindow<CloseMaribos1> history = new RollingWindow<CloseMaribos1>(3);
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must be initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2016, 01, 04); //Set Start Date
SetEndDate(2016, 01, 04); //Set End Date
SetCash(100000); //Set Strategy Cash
AddData<CloseMaribos1>(_symbol);
_pattern = CandlestickPatterns.ClosingMarubozu(_symbol);
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
public void OnData(CloseMaribos1 data)
{
if (data.Time.TimeOfDay < new TimeSpan(9, 35, 00) ||
data.Time.TimeOfDay > new TimeSpan(12, 00, 00))
{
return;
}
else
{
if (_pattern == 1)// Bullish ClosingMarubozu
{
Debug(Time + " -> found Bullish ClosingMarubozu");
Debug("Vol = " + data.Volume);
history.Add(data);
Debug("Prior Vol = " + history[1].Volume);
}
}
}
}
public class CloseMaribos1 : TradeBar
{
public decimal UpperShadow { get; set; }
public decimal LowerShadow { get; set; }
public decimal HighLow { get; set; }
public decimal RealBody { get; set; }
public decimal UpperShadowPercent { get; set; }
public decimal LowerShadowPercent { get; set; }
/// <summary>
/// Return the URL external source for the data: QuantConnect will download it an read it line by line automatically:
/// </summary>
public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, DateTime date, bool isLiveMode)
{
return new SubscriptionDataSource("https://www.dropbox.com/s/nybrjl87y877flp/ES%202016-01-04%20-%202016-12-19%20-%20EST.csv?dl=1", SubscriptionTransportMedium.RemoteFile);
}
/// <summary>
/// Convert each line of the file above into an object.
/// </summary>
public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLiveMode)
{
CloseMaribos1 cmBar = new CloseMaribos1();
try
{
var data = line.Split(',');
//Required.
cmBar.Symbol = "ES";
cmBar.Time = DateTime.ParseExact(data[0] + data[1], "yyyyMMddhhmmss", CultureInfo.InvariantCulture);
//User configured / optional data on each bar:
cmBar.Open = Convert.ToDecimal(data[2], CultureInfo.InvariantCulture);
cmBar.High = Convert.ToDecimal(data[3], CultureInfo.InvariantCulture);
cmBar.Low = Convert.ToDecimal(data[4], CultureInfo.InvariantCulture);
cmBar.Close = Convert.ToDecimal(data[5], CultureInfo.InvariantCulture);
cmBar.Volume = Convert.ToInt32(data[6], CultureInfo.InvariantCulture);
//This is the value the engine uses for portfolio calculations
cmBar.Value = cmBar.Close;
if (cmBar.Close > cmBar.Open)
{
cmBar.UpperShadow = (cmBar.High - cmBar.Close);
cmBar.LowerShadow = (cmBar.Open - cmBar.Low);
cmBar.RealBody = (cmBar.Close - cmBar.Open);
}
else
{
cmBar.UpperShadow = (cmBar.High - cmBar.Open);
cmBar.LowerShadow = (cmBar.Close - cmBar.Low);
cmBar.RealBody = (cmBar.Open - cmBar.Close);
}
cmBar.HighLow = (cmBar.High - cmBar.Low);
cmBar.UpperShadowPercent = (cmBar.UpperShadow / cmBar.HighLow * 100);
cmBar.LowerShadowPercent = (cmBar.LowerShadow / cmBar.HighLow * 100);
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
return cmBar;
}
}
}