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 |
namespace QuantConnect { public class YoniAmzROICFundamentals : QCAlgorithm { // Notes /* */ // User-editable Fields public Dictionary<string, decimal> _tickerDictionary = new Dictionary<string, decimal> // ticker, weighted holdings { { "AAPL", 1.0m }, { "NFLX", 1.0m }, { "AMZN", 1.0m }, { "GOOGL", 1.0m }, }; private double _polyA = 15.998; private double _polyB = 1.548; private double _polyC = 1.376; private int _warmupdays = 30; // Class Fields private DateTime _lastRebalanceTime = DateTime.MinValue; private TimeSpan _rebalanceInterval = TimeSpan.FromDays(30); private List<SecurityObject> _consideredSecuritiesList = new List<SecurityObject>(); private List<SecurityObject> _winningSecuritiesList = new List<SecurityObject>(); private List<SecurityObject> _losingSecuritiesList = new List<SecurityObject>(); private bool _firstOnDataCall = true; // Initializer public override void Initialize() { SetStartDate(2015, 1, 5); SetEndDate(2015, 1, 6); SetCash(10000); foreach(KeyValuePair<string, decimal> entry in _tickerDictionary) { string ticker = entry.Key; decimal weightedholding = entry.Value; AddSecurity(SecurityType.Equity, ticker, Resolution.Minute); Securities[ticker].SetDataNormalizationMode(DataNormalizationMode.TotalReturn); Securities[ticker].SetLeverage(1); // ACTIVATE THESE //ROIC _roic = ROIC(entry.key, Resolution.Daily) //EnterpriseValue _enterprisevalue = ENTVAL(ticker, Resolution.Daily) //InvestedCapital _investedcapital = INVCAP(ticker, Resolution,Daily) // DEACTIVATE THESE double _roic = 0.0; double _enterprisevalue = 0.0; double _investedcapital = 0.0; _consideredSecuritiesList.Add(new SecurityObject { Ticker = ticker, HoldingsWeight = weightedholding, ROIC = _roic, EnterpriseValue = _enterprisevalue, InvestedCapital = _investedcapital }); SetWarmup(_warmupdays); } } // Event-Driven Methods public void OnData(TradeBars data) { // Abandon method if we're warming up the algorithm with historical data if (IsWarmingUp) return; // Abandon method if this is the first time the OnData() method is called (rules out first-of-day data errors) if (_firstOnDataCall) { _firstOnDataCall = false; _lastRebalanceTime = this.Time; return; } // Assess interval rules TimeSpan _timeSinceLastRebalance = this.Time.Subtract(_lastRebalanceTime); if (_timeSinceLastRebalance > _rebalanceInterval) { _lastRebalanceTime = this.Time; DefaultWinnersAndLosersToEmptyList(); AssessWinnersAndLosers(); TakeAction(); } } // Rebalance Rules Methods public void DefaultWinnersAndLosersToEmptyList() { _winningSecuritiesList = new List<SecurityObject>(); _losingSecuritiesList = new List<SecurityObject>(); } public void AssessWinnersAndLosers() { foreach (SecurityObject security in _consideredSecuritiesList) { security.DetermineValue(_polyA, _polyB, _polyC); if (security.IsOvervalued == false) { _winningSecuritiesList.Add(security); } else // Overvalued == true { _losingSecuritiesList.Add(security); } } } public void TakeAction() { // Sell our losing securities foreach (SecurityObject security in _losingSecuritiesList) { if (Portfolio[security.Ticker].HoldStock) { SetHoldings(security.Ticker, 0.0m); } } // Buy our winning securities decimal totalweightings = CalculateTotalWeightings(); foreach (SecurityObject security in _winningSecuritiesList) { decimal percentageofportfolio = _tickerDictionary[security.Ticker] / totalweightings; SetHoldings(security.Ticker, Convert.ToDouble(percentageofportfolio)); } } // Helper Methods public decimal CalculateTotalWeightings() { decimal calculatedtotalweightings = 0.0m; foreach (SecurityObject security in _winningSecuritiesList) { calculatedtotalweightings += _tickerDictionary[security.Ticker]; } return calculatedtotalweightings; } } }
namespace QuantConnect { public class SecurityObject { // Fields private string _ticker; private bool _isovervalued = false; private decimal _holdingsweight = 0.0m; // ACTIVATE THESE //private ROIC _roic; //private EnterpriseValue _enterprisevalue; //private InvestedCapital _investedcapital; // DEACTIVATE THESE private double _roic; private double _enterprisevalue; private double _investedcapital; // Properties public string Ticker { get { return _ticker; } set { _ticker = value; } } public decimal HoldingsWeight { get { return _holdingsweight; } set { _holdingsweight = value; } } // ACTIVATE THESE //public ROIC ROIC //{ // get { return _roic; } // set // { // _roic = value; // } //} //public EnterpriseValue EnterpriseValue //{ // get { return _enterprisevalue; } // set // { // _enterprisevalue = value; // } //} //public InvestedCapital InvestedCapital //{ // get { return _investedcapital; } // set // { // _investedcapital = value; // } //} // DEACTIVATE THESE public double ROIC { get { return _roic; } set { _roic = value; } } public double EnterpriseValue { get { return _enterprisevalue; } set { _enterprisevalue = value; } } public double InvestedCapital { get { return _investedcapital; } set { _investedcapital = value; } } public bool IsOvervalued { get { return _isovervalued; } set { _isovervalued = value; } } // Methods public void DetermineValue(double polyA, double polyB, double polyC) { double varX = ROIC; double varY = (polyA * Math.Pow(varX, 2)) + (polyB * varX) + (polyC); double actualY = EnterpriseValue / InvestedCapital; if (actualY >= varY) { IsOvervalued = true; } else { IsOvervalued = false; } } } }