Overall Statistics |
Total Trades 217 Average Win 0.62% Average Loss -0.20% Compounding Annual Return 28.896% Drawdown 8.000% Expectancy 1.505 Net Profit 43.147% Sharpe Ratio 1.517 Loss Rate 39% Win Rate 61% Profit-Loss Ratio 3.10 Alpha 0 Beta 0 Annual Standard Deviation 0.12 Annual Variance 0.014 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
using System; using System.Linq; using System.Collections; using System.Collections.Generic; using QuantConnect.Securities; using QuantConnect.Models; namespace QuantConnect { public partial class QCUWeatherBasedRebalancing : QCAlgorithm { //Initialize: Storage for our custom data: //Source: http://www.wunderground.com/history/ //Make sure to link to the actual file download URL if using dropbox. //private string url = "https://www.dropbox.com/s/txgqzv2vp5lzpqc/10065.csv"; private decimal fraction; private int rebalanceFrequency = 2, tradingDayCount = 0; private Symbol symbol = QuantConnect.Symbol.Create("CORNUSD", SecurityType.Cfd, Market.Oanda); ///<summary> /// Initialize our algorithm: ///</summary> public override void Initialize() { SetStartDate(2013, 1, 1); SetEndDate(2014, 5, 31); SetCash(25000); SetBenchmark(time => 25000); SetBrokerageModel(BrokerageName.OandaBrokerage); AddCfd(symbol, Resolution.Minute); AddData<Weather>("NYCTEMP", Resolution.Minute); } //Save the instance of the weather. public void OnData(Weather data) { //Scale from -5C to +25C :: -5C == 100%, +25C = 0% invested fraction = -(data.MinC + 5m) / 30m; Plot("Weather", "Scale", fraction); } ///<summary> /// When we have a new event trigger, buy some stock: ///</summary> public void OnData(TradeBars data) { //Rebalance every 10 days: if (tradingDayCount >= rebalanceFrequency) { SetHoldings(symbol, fraction); tradingDayCount = 0; } } ///<summary> /// After each trading day ///</summary> public override void OnEndOfDay() { tradingDayCount++; } } /// <summary> /// Weather based rebalancing /// </summary> public class Weather : BaseData { public decimal MaxC = 0; public decimal MeanC = 0; public decimal MinC = 0; public string errString = ""; public Weather() { this.Symbol = "NYCTEMP"; } public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, DateTime date, bool isLive) { return new SubscriptionDataSource("https://www.dropbox.com/s/txgqzv2vp5lzpqc/10065.csv?dl=1", SubscriptionTransportMedium.RemoteFile); } public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLive) { // Header handling if (char.IsLetter(line[0])) return null; var data = line.Split(','); return new Weather() { // Make sure we only get this data AFTER trading day - don't want forward bias. Time = DateTime.Parse(data[0]).AddHours(20), MaxC = Convert.ToDecimal(data[1]), MeanC = Convert.ToDecimal(data[2]), MinC = Convert.ToDecimal(data[3]), }; } } }