| Overall Statistics |
|
Total Trades 83 Average Win 1.63% Average Loss -0.34% Compounding Annual Return 36.525% Drawdown 31.700% Expectancy 1.615 Net Profit 23.028% Sharpe Ratio 0.706 Loss Rate 55% Win Rate 45% Profit-Loss Ratio 4.78 Alpha 0.542 Beta 0.569 Annual Standard Deviation 0.865 Annual Variance 0.748 Information Ratio 0.567 Tracking Error 0.863 Treynor Ratio 1.073 Total Fees $0.00 |
namespace QuantConnect
{
public class LongShortUniverseAlgorithm : QCAlgorithm
{
private int _lastMonth = -1;
private Symbol _longUniverse = QuantConnect.Symbol.Create("LONG", SecurityType.Equity, Market.USA);
private Symbol _shortUniverse = QuantConnect.Symbol.Create("SHORT", SecurityType.Equity, Market.USA);
public override void Initialize()
{
SetStartDate(2016, 1, 1); //Set Start Date
SetEndDate(2016, 8, 30); //Set End Date
SetCash(100000); //Set Strategy Cash
// Find more symbols here: http://quantconnect.com/data
AddUniverse(new FuncUniverse(GetConfig(_longUniverse), UniverseSettings, SecurityInitializer, selectionData => (
from c in selectionData.OfType<CoarseFundamental>()
where c.Price < 10
orderby c.DollarVolume descending
select c.Symbol).Take(3)
));
AddUniverse(new FuncUniverse(GetConfig(_shortUniverse), UniverseSettings, SecurityInitializer, selectionData => (
from c in selectionData.OfType<CoarseFundamental>()
where c.Price > 10
orderby c.DollarVolume descending
select c.Symbol).Take(3)
));
}
public override void OnData(Slice data)
{
if(_lastMonth == Time.Month) return;
_lastMonth = Time.Month;
var universeLongMembers = UniverseManager[_longUniverse].Members;
var universeShortMembers = UniverseManager[_shortUniverse].Members;
foreach (var longMember in universeLongMembers.Values)
{
SetHoldings(longMember.Symbol, 0.1m);
}
foreach (var shortMember in universeShortMembers.Values)
{
SetHoldings(shortMember.Symbol, -0.1m);
}
}
public override void OnSecuritiesChanged(SecurityChanges changes)
{
foreach (var added in changes.AddedSecurities)
{
added.FeeModel = new ConstantFeeModel(0m);
}
foreach (var removed in changes.RemovedSecurities)
{
Liquidate(removed.Symbol);
}
}
private SubscriptionDataConfig GetConfig(Symbol symbol)
{
return new SubscriptionDataConfig(typeof(CoarseFundamental), symbol, Resolution.Daily, TimeZones.NewYork, TimeZones.NewYork, false, false, true);
}
}
}