| 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.Globalization;
using QuantConnect.Data;
using QuantConnect.Indicators.CandlestickPatterns;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Basic template algorithm simply initializes the date range and cash
/// </summary>
public class CandlestickClosingMarubozuAlgorithm : QCAlgorithm
{
private string _symbol = "INDEX_SPY";
private ClosingMarubozu _pattern = new ClosingMarubozu();
/// <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(2014, 01, 01); //Set Start Date
SetEndDate(2014, 12, 31); //Set End Date
SetCash(100000); //Set Strategy Cash
AddData<CloseMar>("INDEX_SPY");
_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>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public void OnData(CloseMar data)
{
if (_pattern == 1)
{
// Bullish ClosingMarubozu, go long
SetHoldings(_symbol, 1);
}
else if (_pattern == -1)
{
// Bearish ClosingMarubozu, go short
SetHoldings(_symbol, -1);
}
}
}
public class CloseMar : BaseData
{
public decimal Open = 0;
public decimal High = 0;
public decimal Low = 0;
public decimal Close = 0;
public decimal AdjustedClose = 0;
public decimal Volume = 0;
public CloseMar()
{
this.Symbol = "";
}
/// <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 isLive)
{
var startDate = new DateTime(2010, 01, 01).ToString("yyyy-MM-dd");
var endDate = DateTime.Now.ToString("yyyy-MM-dd");
//QUANDL WRAPPER ON YAHOO FINANCE API TO SORT DATA:
//https://www.quandl.com/api/v1/datasets/YAHOO/INDEX_SPY.csv?trim_start=2010-01-01&trim_end=2015-12-31&sort_order=asc
return new SubscriptionDataSource("https://www.quandl.com/api/v1/datasets/YAHOO/" + config.Symbol + ".csv?trim_start=" + startDate + "&trim_end=" + endDate + "&sort_order=asc&exclude_headers=true", 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 isLive)
{
CloseMar cmBar = new CloseMar();
try
{
string[] data = line.Split(',');
//Required.
cmBar.Symbol = config.Symbol;
cmBar.Time = DateTime.ParseExact(data[0], "yyyy-MM-dd", CultureInfo.InvariantCulture);
//User configured / optional data on each bar:
cmBar.Open = Convert.ToDecimal(data[1]);
cmBar.High = Convert.ToDecimal(data[2]);
cmBar.Low = Convert.ToDecimal(data[3]);
cmBar.Close = Convert.ToDecimal(data[4]);
cmBar.Volume = Convert.ToDecimal(data[5]);
cmBar.AdjustedClose = Convert.ToDecimal(data[6]);
//This is the value the engine uses for portfolio calculations
cmBar.Value = cmBar.AdjustedClose;
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
return cmBar;
}
}
}