| 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 MathNet.Numerics.Statistics;
using QuantConnect.Orders.Slippage;
using System.Text;
namespace QuantConnect
{
public class MultiFeedTest : QCAlgorithm
{
const string _symbol = "AAPL";
RollingWindow<DataObject> _datawindows;
public override void Initialize()
{
SetStartDate(2015, 1, 1);
SetEndDate(2015, 2, 1);
SetCash(5000);
SetWarmup(4);
AddSecurity(SecurityType.Equity, _symbol, Resolution.Daily);
_datawindows = new RollingWindow<DataObject>(3);
}
public void OnData(TradeBars bars)
{
try
{
if (UpdateRollingWindows(bars))
{
ConductTradingLogic();
}
else
{
throw new System.Exception("ERROR in OnData(): No data in bars!");
}
}
catch (Exception ex)
{
Log("ERROR in OnData(): " + ex.Message + "\r\n\r\n" + ex.StackTrace);
}
}
public bool UpdateRollingWindows(TradeBars bars)
{
TradeBar bar = null;
bars.TryGetValue(_symbol, out bar);
if (bar != null)
{
DataObject dataobject = new DataObject(bar.Open, bar.Close, bar.High, bar.Low);
_datawindows.Add(dataobject);
Log(String.Format("NEW ITEM ADDED.\tOpen: {0:0.00}\tClose: {1:0.00}\tHigh: {2:0.00}\tLow: {3:0.00}", dataobject.Open, dataobject.Close, dataobject.High, dataobject.Low));
return true;
}
else
{
return false;
}
}
public void ConductTradingLogic()
{
if (_datawindows.IsReady)
{
bool overallchecks = CheckOne() && CheckTwo() && CheckThree();
Log(String.Format("OVERALL: {0}\tCHECK1: {1}\tCHECK2: {2}\tCHECK3: {3}", overallchecks.ToString(), CheckOne().ToString(), CheckTwo().ToString(), CheckThree().ToString()));
if (CheckOne() && CheckTwo() && CheckThree())
{
SetHoldings(_symbol, 1.0m);
}
else
{
SetHoldings(_symbol, 0.0m);
}
}
}
public bool CheckOne()
{
if (_datawindows[1].High < _datawindows[2].High)
{
return true;
}
else
{
return false;
}
}
public bool CheckTwo()
{
if(_datawindows[1].Low > _datawindows[2].Low)
{
return true;
}
else
{
return false;
}
}
public bool CheckThree()
{
if(_datawindows[0].Close > _datawindows[2].High)
{
return true;
}
else
{
return false;
}
}
}
}namespace QuantConnect
{
public class DataObject
{
private decimal _open;
private decimal _close;
private decimal _high;
private decimal _low;
public decimal Open
{
get { return _open; }
set
{
_open = value;
}
}
public decimal Close
{
get { return _close; }
set
{
_close = value;
}
}
public decimal High
{
get { return _high; }
set
{
_high = value;
}
}
public decimal Low
{
get { return _low; }
set
{
_low = value;
}
}
public DataObject(decimal open, decimal close, decimal high, decimal low)
{
Open = open;
Close = close;
High = high;
Low = low;
}
}
}