| Overall Statistics |
|
Total Trades 19 Average Win 1.08% Average Loss -1.98% Compounding Annual Return -12.507% Drawdown 16.700% Expectancy -0.313 Net Profit -12.507% Sharpe Ratio -0.741 Loss Rate 56% Win Rate 44% Profit-Loss Ratio 0.55 Alpha -0.086 Beta 0.19 Annual Standard Deviation 0.115 Annual Variance 0.013 Information Ratio -0.572 Tracking Error 0.154 Treynor Ratio -0.449 Total Fees $0.00 |
using System;
using System.Globalization;
using QuantConnect.Data;
using QuantConnect.Data.Market;
using QuantConnect.Indicators.CandlestickPatterns;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Basic template algorithm simply initializes the date range and cash
/// </summary>
public class CandlestickClosingMarubozuDailyESData : QCAlgorithm
{
private string _symbol = "ES";
private ClosingMarubozu _pattern3 = 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(2015, 01, 01); //Set Start Date
SetEndDate(2016, 01, 01); //Set End Date
SetCash(100000); //Set Strategy Cash
AddData<CloseMarib>(_symbol);
_pattern3 = 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(CloseMarib data)
{
// Debug("Close: " + data.Close + " - AdjustedClose: " + data.AdjustedClose + " - Value: " + data.Value);
if (_pattern3 == 1)
{
// Bullish ClosingMarubozu, go long
Debug(Time + " -> found Bullish ClosingMarubozu");
SetHoldings(_symbol, 1);
}
else if (_pattern3 == -1)
{
// Bearish ClosingMarubozu, go short
Debug(Time + " -> found Bearish ClosingMarubozu");
SetHoldings(_symbol, -1);
}
}
}
public class CloseMarib : TradeBar
{
public override DateTime EndTime
{
get { return Time + Period; }
set { Time = value - Period; }
}
public new TimeSpan Period
{
get { return QuantConnect.Time.OneDay; }
}
/// <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)
{
return new SubscriptionDataSource("https://www.dropbox.com/s/bpk2i3hmzaa0c6t/ES%20daily%202015-01-01%20-%202015-12-31.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 isLive)
{
CloseMarib cmBar = new CloseMarib();
try
{
var data = line.Split(',');
//Required.
cmBar.Symbol = config.Symbol;
cmBar.Time = DateTime.ParseExact(data[0], "yyyyMMdd", 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.ToInt32(data[5]);
//This is the value the engine uses for portfolio calculations
cmBar.Value = cmBar.Close;
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
return cmBar;
}
}
}