using QuantConnect.Data;
using System;
using System.Globalization;
namespace QuantConnect.Algorithm.CSharp
{
public class CustomData : BaseData
{
/// <summary>
/// Opening Price
/// </summary>
public decimal Open;
/// <summary>
/// High Price
/// </summary>
public decimal High;
/// <summary>
/// Low Price
/// </summary>
public decimal Low;
/// <summary>
/// Closing Price
/// </summary>
public decimal Close;
/// <summary>
/// Volume
/// </summary>
public decimal Volume;
/// <summary>
/// Return the URL string source of the file. This will be converted to a stream
/// </summary>
public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, DateTime date, bool isLiveMode)
{
return new SubscriptionDataSource($"https://www.dropbox.com/s/j98rg1hp903l3a8/SampleData.csv?dl=1", SubscriptionTransportMedium.RemoteFile);
}
/// <summary>
/// Reader converts each line of the data source into BaseData objects. Each data type creates its own factory method, and returns a new instance of the object
/// each time it is called.
/// </summary>
public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLiveMode)
{
//New Nifty object
var index = new CustomData();
try
{
//Example File Format:
//Date, Time Open High Low Close Volume Turnover
//19-Jul-2019 09:15:00 7792.9 7799.9 7722.65 7748.7 116534670 6107.78
var data = line.Split(',');
var strDate = data[0] + " " + data[1];
index.Time = DateTime.Parse(strDate, CultureInfo.InvariantCulture);
index.Open = Convert.ToDecimal(data[2], CultureInfo.InvariantCulture);
index.High = Convert.ToDecimal(data[3], CultureInfo.InvariantCulture);
index.Low = Convert.ToDecimal(data[4], CultureInfo.InvariantCulture);
index.Close = Convert.ToDecimal(data[5], CultureInfo.InvariantCulture);
index.Symbol = config.Symbol.Value;
index.Value = index.Close;
}
catch (Exception e)
{
Console.WriteLine("ERROR: " + e.ToString());
}
return index;
}
}
}
using System;
using QuantConnect.Data;
using QuantConnect.Indicators;
using QuantConnect.Orders;
using QuantConnect.Securities;
namespace QuantConnect.Algorithm.CSharp
{
public class BacktestingData : QCAlgorithm
{
string symbol = "HAVELLS";
Security security;
private MovingAverageConvergenceDivergence _macd;
public override void Initialize()
{
SetStartDate(2019, 7, 19);
SetEndDate(2019, 7, 26);
//SetTimeZone("Asia/Kolkata");
security = AddData<CustomData>(symbol, Resolution.Minute);
// security.Subscriptions.SetDataNormalizationMode(DataNormalizationMode.Raw);
_macd = MACD(security.Symbol, 12, 26, 9, MovingAverageType.Exponential, Resolution.Minute);
}
public override void OnData(Slice slice)
{
// if (!_macd.IsReady) { return; }
Log($"{Time} | {symbol}: O:{slice[symbol].Open} H:{slice[symbol].High} L:{slice[symbol].Low} C: {slice[symbol].Close}");
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
base.OnOrderEvent(orderEvent);
}
}
}