Overall Statistics |
Total Trades
40
Average Win
132.52%
Average Loss
-39.82%
Compounding Annual Return
32.097%
Drawdown
68.300%
Expectancy
1.164
Net Profit
2821.538%
Sharpe Ratio
0.947
Loss Rate
50%
Win Rate
50%
Profit-Loss Ratio
3.33
Alpha
0.199
Beta
0.917
Annual Standard Deviation
0.283
Annual Variance
0.08
Information Ratio
0.823
Tracking Error
0.235
Treynor Ratio
0.292
Total Fees
$487.72
|
namespace QuantConnect { /* * QuantConnect University: Full Basic Template: * * The underlying QCAlgorithm class is full of helper methods which enable you to use QuantConnect. * We have explained some of these here, but the full algorithm can be found at: * https://github.com/QuantConnect/Lean/tree/master/Algorithm */ /// <summary> /// Basic template algorithm simply initializes the date range and cash /// </summary> public class LRP : QCAlgorithm { //the leverage for each holding decimal leverage = 3.8m;//Config.GetValue<decimal>("leverage", 3.5m); //the days interval to perform rebalance int days = 391;//Config.GetInt("days", 30); DateTime rebalanced; decimal tlt = 0.3m;//Config.GetValue<decimal>("tlt", 0.5m); decimal spy = 0.5m;//Config.GetValue<decimal>("spy", 0.4m); decimal gld = 0.1m; /// <summary> /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized. /// </summary> public override void Initialize() { SetStartDate(2004, 11, 19); //Set Start Date SetEndDate(2017, 1, 1); //Set End Date SetCash(100000); //Set Strategy Cash. Should be 3 month T Bills. //using etf rather than futures AddEquity("SPY", Resolution.Daily, Market.USA, false, 4); AddEquity("TLT", Resolution.Daily, Market.USA, false, 4); AddEquity("GLD", Resolution.Daily, Market.USA, false, 4); gld = 1 - tlt - spy; //minimum of 0.1 gld if (gld < 0.1m || gld + tlt + spy > 1) { Quit(); } rebalanced = this.Time; Schedule.On(DateRules.EveryDay(), TimeRules.AfterMarketOpen("SPY"), () => { if (rebalanced.AddDays(days) < this.Time) { rebalanced = this.Time; SetHoldings("TLT", tlt * leverage); SetHoldings("SPY", spy * leverage); SetHoldings("GLD", gld * leverage); Debug("Rebalance"); } }); } public override void OnMarginCall(List<SubmitOrderRequest> requests) { //if (!LiveMode) //{ // this.Quit(); //} } /// <summary> /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. /// </summary> /// <param name="data">Slice object keyed by symbol containing the stock data</param> public override void OnData(Slice data) { if (!Portfolio.Invested) { SetHoldings("TLT", tlt * leverage); SetHoldings("SPY", spy * leverage); SetHoldings("GLD", gld * leverage); Debug("Purchased Stock"); } } } }