| Overall Statistics |
|
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return 183.401% Drawdown 6.000% Expectancy 0 Net Profit 0% Sharpe Ratio 1.806 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.843 Beta -0.027 Annual Standard Deviation 0.458 Annual Variance 0.21 Information Ratio 0.468 Tracking Error 0.478 Treynor Ratio -30.704 Total Fees $101.94 |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using QuantConnect.Data;
using QuantConnect.Data.UniverseSelection;
namespace QuantConnect.Algorithm.CSharp
{
public class DropboxUniverseSelectionAlgorithm : QCAlgorithm
{
private SecurityChanges _changes = SecurityChanges.None;
DateTime _liveDate;
static string _liveTime;
public override void Initialize()
{
UniverseSettings.Resolution = Resolution.Daily;
SetStartDate(2013, 01, 01);
SetEndDate(2013, 01, 10);
AddUniverse("my-dropbox-universe", Resolution.Daily, dateTime =>
{
const string liveUrl = @"https://www.dropbox.com/s/qx8hs2q81im9zmu/SymbolToday.csv?dl=1";
const string backtestUrl = @"https://www.dropbox.com/s/qx8hs2q81im9zmu/SymbolToday.csv?dl=1";
var url = LiveMode ? liveUrl : backtestUrl;
using (var client = new WebClient())
{
//if we're live check DateTime against file and pull our symbol for the day
if(LiveMode)
{
var liveFile = client.DownloadString(url);
foreach (var liveLine in liveFile.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries))
{
var liveCsv = liveLine.Split(',');
var liveSymbols = liveCsv[1];
var liveTime = liveCsv[4];
DateTime dt = DateTime.Parse(liveTime);
var dtDate = dt.ToString("mmddyyyy");
_liveDate = dt.Date;
_liveTime = dt.ToString("HH:mm:ss");
List<string> liveResults = new List<string>();
liveResults.Add(liveSymbols);
return liveResults;
return Universe.Unchanged;
}
}
//if we're backtesting only return the symbol
if(!LiveMode)
{
var file = client.DownloadString(url);
foreach (var line in file.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries))
{
var csv = line.ToCsv();
var symbols = csv[1];
List<string> results = new List<string>();
results.Add(symbols);
return results;
}
}
return Universe.Unchanged;
}
});
}
public void OnData(TradeBars data)
{
if (data.Count == 0) return;
if (_changes == SecurityChanges.None) return;
// start fresh
Liquidate();
var date = DateTime.Now.Date;//.ToString("MM/dd/yyyy");
var time = DateTime.Now.ToString("HH:mm:ss");
try
{
if (_liveDate == date)
{
Log("Match Found!");
var timeCompare = String.Compare(time, _liveTime);
if(timeCompare == 1)
{
Log("Time Found!");
}
}
}
catch{Notify.Sms("+1#######", "Time mismatch: scrape failed");}
var percentage = 1m/data.Count;
foreach (var tradeBar in data.Values)
{
SetHoldings(tradeBar.Symbol, percentage);
}
// reset changes
_changes = SecurityChanges.None;
}
public override void OnSecuritiesChanged(SecurityChanges changes)
{
_changes = changes;
}
}
}