Overall Statistics |
Total Trades 49 Average Win 0.56% Average Loss -3.24% Compounding Annual Return 28.101% Drawdown 18.400% Expectancy 0.148 Net Profit 26.346% Sharpe Ratio 1.371 Loss Rate 2% Win Rate 98% Profit-Loss Ratio 0.17 Alpha 0.268 Beta -0.074 Annual Standard Deviation 0.188 Annual Variance 0.035 Information Ratio 0.569 Tracking Error 0.22 Treynor Ratio -3.508 |
using System; using System.Collections; using System.Collections.Generic; using QuantConnect.Securities; using QuantConnect.Models; using System.Linq; namespace QuantConnect { // Name your algorithm class anything, as long as it inherits QCAlgorithm public class RebalanceAlgorithm : QCAlgorithm { DateTime _lastRebalance = new DateTime(); List<string> _assets = new List<string>() { "LWAY", "UUP", "MUB", "VTI", "SPY" }; string symbol_active = "SPY"; int qtyTranch = 777; List<decimal> prices = new List<decimal>(); List<decimal> takeprofits = new List<decimal>(); //"VYM", "MUB", SHV , UUP //Initialize the data and resolution you require for your strategy: public override void Initialize() { // SetStartDate(2013, 1, 1); // SetEndDate(DateTime.Now.AddDays(-1)); SetStartDate(2014, 1, 1); SetEndDate(2015, 12, 30); SetCash(600000); foreach (var symbol in _assets) { AddSecurity(SecurityType.Equity, symbol, Resolution.Minute); } } //Simplest implementation of asset rebalancing. public void OnData(TradeBars data) { if (!Portfolio.Invested) { Order(symbol_active, qtyTranch); // // SetHoldings("VTI", 0.3); // SetHoldings("UUP", 0.1); // SetHoldings("MUB", 0.6); } // Day if ( _lastRebalance.Date != Time.Date) { // decimal.Multiply( data[symbol_active].Close, Decimal.Parse("0.97") ) ; prices.Add( decimal.Multiply( data[symbol_active].Close, Decimal.Parse("0.975") ) ); takeprofits.Add( decimal.Multiply( data[symbol_active].Close, Decimal.Parse("1.03") ) ); if(Portfolio.TotalUnrealizedProfit>1000) { //Order(symbol_active, -qtyTranch); Liquidate(); SetHoldings(symbol_active, 0.9); } if(data[symbol_active].Open<prices.Max()) { Order(symbol_active, qtyTranch); prices.Clear(); // Liquidate(); // SetHoldings("VTI", 0.3); // SetHoldings("UUP", 0.1); // SetHoldings("MUB", 0.6); } _lastRebalance = Time; } } } }
using System; using System.Collections; using System.Collections.Generic; using QuantConnect.Securities; using QuantConnect.Models; namespace QuantConnect { /* * Average True Range: * * Find the volatility of the market based on the average movement between bars. * * Typically a 14 Day-Period ATR * */ public class AverageTrueRange { //Get the current ATR value for this stock. public decimal ATR { get {return _atr;} } //Let to caller know when the indicator is ready to use: public bool Ready { get { return (_samples >= _period); } } //Initialize a new ATR Class: public AverageTrueRange(int period = 14) { _period = Convert.ToDecimal(period); } //Working variables: private decimal _samples = 0; private decimal _atr = 0; private decimal _tr = 0; private decimal _period = 14; private TradeBar _lastBar = new TradeBar(); /* * Add a new tradebar sample to the ATR: */ public decimal AddSample(TradeBar bar) { //Start calculation on second bar. if (_samples <= _period) _samples++; if (_samples == 1) { _lastBar = bar; return 0; } //Abs Maximum of the Following Ranges: decimal range1 = Math.Abs(bar.High - _lastBar.Low); decimal range2 = bar.High - bar.Low; decimal range3 = Math.Abs(bar.Low - _lastBar.Close); //True Range of this Bar: _tr = Math.Max(range1, Math.Max(range2, range3)); //Set first values: if (_samples == 1) _atr = _tr; //Find the ATR: _atr = (((_period - 1) * _atr) + _tr) / _period; //Save bar: _lastBar = bar; return _atr; } } }