| Overall Statistics |
|
Total Trades 473 Average Win 0.47% Average Loss -0.60% Compounding Annual Return -8.156% Drawdown 22.200% Expectancy -0.048 Net Profit -8.149% Sharpe Ratio -0.181 Loss Rate 47% Win Rate 53% Profit-Loss Ratio 0.78 Alpha -0.058 Beta 0.073 Annual Standard Deviation 0.265 Annual Variance 0.07 Information Ratio -0.631 Tracking Error 0.285 Treynor Ratio -0.661 Total Fees $473.00 |
namespace QuantConnect
{
public class ConsolidatorAlgorithm : QCAlgorithm
{
public Dictionary<Symbol, SymbolData> _symbolData = new Dictionary<Symbol, SymbolData>();
public string[] tickers = new string[] { "WFM", "SPY" };
public DateTime sampledToday = DateTime.Now;
//Initialize the data and resolution you require for your strategy:
public override void Initialize()
{
SetStartDate(2014, 01, 01);
SetEndDate(2015, 01, 01);
SetCash(25000);
foreach(var ticker in tickers)
{
var security = AddSecurity(SecurityType.Equity, ticker, Resolution.Minute);
var fifteenMinute = new TradeBarConsolidator(TimeSpan.FromMinutes(15));
fifteenMinute.DataConsolidated += OnFifteenMinuteData;
SubscriptionManager.AddConsolidator(security.Symbol, fifteenMinute);
// define our 15 minute money flow indicator
var mfi15M = new MoneyFlowIndex(14);
RegisterIndicator(security.Symbol, mfi15M, fifteenMinute);
_symbolData.Add(security.Symbol, new SymbolData(
security.Symbol,
MFI(security.Symbol, 14, Resolution.Daily),
mfi15M));
}
}
// THis is 15 minute activities
public void OnFifteenMinuteData(object sender, TradeBar bar)
{
if (!_symbolData[bar.Symbol].IsReady) return;
var mfi15m = _symbolData[bar.Symbol].Fifteen;
if (mfi15m < 20)
{
Order(bar.Symbol, 100);
Debug(string.Format("Buy {0}. Below 20 mfi15 is {1}", bar.Symbol, mfi15m));
}
if (mfi15m > 80)
{
Order(bar.Symbol, -100);
Debug(string.Format("Sell {0}. Above 80 mfi15 is {1}", bar.Symbol, mfi15m));
}
}
//THis is every one minute activities
public void OnData(TradeBars data)
{
}
}
public class SymbolData
{
public Symbol Symbol;
public MoneyFlowIndex Daily;
public MoneyFlowIndex Fifteen;
public bool IsReady { get { return Daily.IsReady && Fifteen.IsReady; } }
public SymbolData(Symbol symbol, MoneyFlowIndex daily, MoneyFlowIndex fifteen)
{
Symbol = symbol;
Daily = daily;
Fifteen = fifteen;
}
public override string ToString()
{
return IsReady
? string.Format("SymbolData for {0}: Daily: {1}. M15: {2}", Symbol, Daily, Fifteen)
: "Indicators are not ready for " + Symbol;
}
}
}