Ejemplo n.º 1
0
        public override void OnData(Slice slice)
        {
            if (_dailyReturns.Samples == 0)
            {
                SetHoldings(spy, _spyAllocation);
                SetHoldings(tlt, _tltAllocation);
            }
            else if (_dailyReturns.IsReady)
            {
                var highestSharpe = 0m;
                for (decimal spyAllocation = 0.0m, tltAllocation = 1.0m;
                     spyAllocation <= 1.0m;
                     spyAllocation += 0.1m, tltAllocation -= 0.1m)
                {
                    var sharpe = VolatilityScaledSharpeRatio(spyAllocation, tltAllocation);
                    if (sharpe > highestSharpe)
                    {
                        _spyAllocation = spyAllocation;
                        _tltAllocation = tltAllocation;
                    }
                }

                _sd.Reset();
                _dailyReturns.Reset();
                _previousTradeBar = null;
                return;
            }

            if (_previousTradeBar != null)
            {
                UpdateDailyReturn();
            }
            _previousTradeBar = new Tuple <TradeBar, TradeBar>(slice[spy], slice[tlt]);
        }
Ejemplo n.º 2
0
 /// <summary>
 ///      Resets this indicator and all sub-indicators (StandardDeviation, LowerBand, MiddleBand, UpperBand)
 /// </summary>
 public override void Reset()
 {
     StandardDeviation.Reset();
     MiddleBand.Reset();
     UpperBand.Reset();
     LowerBand.Reset();
     base.Reset();
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Resets this indicator and all sub-indicators (StandardDeviation, LowerBand, MiddleBand, UpperBand, BandWidth, %B)
 /// </summary>
 public override void Reset()
 {
     StandardDeviation.Reset();
     MiddleBand.Reset();
     UpperBand.Reset();
     LowerBand.Reset();
     BandWidth.Reset();
     PercentB.Reset();
     base.Reset();
 }
        public void ResetsProperlyStandardDeviation()
        {
            var std = new StandardDeviation(3);

            std.Update(DateTime.Today, 1m);
            std.Update(DateTime.Today.AddSeconds(1), 5m);
            std.Update(DateTime.Today.AddSeconds(2), 1m);
            Assert.IsTrue(std.IsReady);

            std.Reset();
            TestHelper.AssertIndicatorIsInDefaultState(std);
        }
Ejemplo n.º 5
0
        public override void Initialize()
        {
            SetStartDate(2015, 1, 1);
            SetEndDate(DateTime.Now);
            SetCash(10000);

            AddSecurity(SecurityType.Equity, spy, _dataResolution);
            AddSecurity(SecurityType.Equity, tlt, _dataResolution);

            _sd           = new StandardDeviation(LookbackPeriod - 1);
            _dailyReturns = new RollingWindow <Tuple <decimal, decimal> >(LookbackPeriod - 1);

            var spyHistory    = History(spy, TimeSpan.FromDays(LookbackPeriod), _dataResolution);
            var tltHistory    = History(tlt, TimeSpan.FromDays(LookbackPeriod), _dataResolution);
            var history       = spyHistory.Zip(tltHistory, (spyBar, tltBar) => new Tuple <TradeBar, TradeBar>(spyBar, tltBar));
            var highestSharpe = 0m;

            for (decimal spyAllocation = 0.0m, tltAllocation = 1.0m; spyAllocation <= 1.0m; spyAllocation += 0.1m, tltAllocation -= 0.1m)
            {
                var previousBar = history.First();

                foreach (var tradeBar in history.Skip(1))
                {
                    var spyReturn = spyAllocation * (tradeBar.Item1.Close - previousBar.Item1.Close) / previousBar.Item1.Close;
                    var tltReturn = tltAllocation * (tradeBar.Item2.Close - previousBar.Item2.Close) / previousBar.Item2.Close;

                    _dailyReturns.Add(new Tuple <decimal, decimal>(spyReturn, tltReturn));
                    _sd.Update(tradeBar.Item1.EndTime, spyReturn + tltReturn);
                    previousBar = tradeBar;
                }

                var mean   = _dailyReturns.Select(dailyReturn => dailyReturn.Item1 + dailyReturn.Item2).Average();
                var sharpe = mean / Convert.ToDecimal(Math.Pow(Convert.ToDouble(_sd), _volatilityFactor));

                if (sharpe > highestSharpe)
                {
                    highestSharpe  = sharpe;
                    _spyAllocation = spyAllocation;
                    _tltAllocation = tltAllocation;
                }

                _sd.Reset();
                _dailyReturns.Reset();
            }
        }
Ejemplo n.º 6
0
        public void UpdateWeights()
        {
            var highestSharpe = 0m;

            for (decimal spyAllocation = 0.0m, tltAllocation = 1.0m;
                 spyAllocation <= 1.0m;
                 spyAllocation += 0.1m, tltAllocation -= 0.1m)
            {
                var sharpe = VolatilityScaledSharpeRatio(spyAllocation, tltAllocation);
                if (sharpe > highestSharpe)
                {
                    _spyAllocation = spyAllocation;
                    _tltAllocation = tltAllocation;
                    highestSharpe  = sharpe;
                }
            }

            _sd.Reset();
            _dailyReturns.Reset();
        }