Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
using System; using System.Globalization; using Newtonsoft.Json; using QuantConnect.Algorithm; using QuantConnect.Data; using QuantConnect.Data.Market; namespace QuantConnect { public class TestingCustomDataAlgo : QCAlgorithm { public static QCAlgorithm Instance; public override void Initialize() { SetStartDate(new DateTime(2015, 03, 01)); SetEndDate(2015, 04, 01); AddData<Bitcoin>("BTC"); Instance = this; } public void OnData(Bitcoin data) { if (!Portfolio.Invested) { MarketOrder("BTC", 100); } TestingCustomDataAlgo.Instance.Log("lkjl"); } } public class Bitcoin : BaseData { //Set the defaults: /// <summary> /// Open Price /// </summary> public decimal Open = 0; /// <summary> /// High Price /// </summary> public decimal High = 0; /// <summary> /// Low Price /// </summary> public decimal Low = 0; /// <summary> /// Closing Price /// </summary> public decimal Close = 0; /// <summary> /// Volume in BTC /// </summary> public decimal VolumeBTC = 0; /// <summary> /// Volume in USD: /// </summary> public decimal WeightedPrice = 0; /// <summary> /// Default Constructor Required. /// </summary> public Bitcoin() { Symbol = "BTC"; } /// <summary> /// Source URL's of Backtesting and Live Streams: /// </summary> public override string GetSource(SubscriptionDataConfig config, DateTime date, DataFeedEndpoint datafeed) { var source = ""; switch (datafeed) { //Historical backtesting data: case DataFeedEndpoint.FileSystem: case DataFeedEndpoint.Backtesting: source = "http://www.quandl.com/api/v1/datasets/BITCOIN/BITSTAMPUSD.csv?sort_order=asc"; break; //Live socket for bitcoin prices: case DataFeedEndpoint.LiveTrading: //Live refreshing endpoint. source = "https://www.bitstamp.net/api/ticker/"; break; } return source; } /// <summary> /// Backtesting & Live Bitcoin Decoder: /// </summary> public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, DataFeedEndpoint datafeed) { Bitcoin coin = new Bitcoin(); switch (datafeed) { //Example Line Format: //Date Open High Low Close Volume (BTC) Volume (Currency) Weighted Price //2011-09-13 5.8 6.0 5.65 5.97 58.37138238, 346.0973893944 5.929230648356 case DataFeedEndpoint.FileSystem: case DataFeedEndpoint.Backtesting: try { string[] data = line.Split(','); coin.Time = DateTime.Parse(data[0]); coin.Open = Convert.ToDecimal(data[1], CultureInfo.InvariantCulture); coin.High = Convert.ToDecimal(data[2], CultureInfo.InvariantCulture); coin.Low = Convert.ToDecimal(data[3], CultureInfo.InvariantCulture); coin.Close = Convert.ToDecimal(data[4], CultureInfo.InvariantCulture); coin.VolumeBTC = Convert.ToDecimal(data[5], CultureInfo.InvariantCulture); coin.WeightedPrice = Convert.ToDecimal(data[7], CultureInfo.InvariantCulture); coin.Symbol = "BTC"; coin.Value = coin.Close; } catch { /* Do nothing, skip first title row */ } break; //Example Line Format: //{"high": "441.00", "last": "421.86", "timestamp": "1411606877", "bid": "421.96", "vwap": "428.58", "volume": "14120.40683975", "low": "418.83", "ask": "421.99"} case DataFeedEndpoint.LiveTrading: try { var liveBTC = JsonConvert.DeserializeObject<LiveBitcoin>(line); coin.Time = DateTime.Now; coin.Open = liveBTC.Last; coin.High = liveBTC.High; coin.Low = liveBTC.Low; coin.Close = liveBTC.Last; coin.VolumeBTC = liveBTC.Volume; coin.WeightedPrice = liveBTC.VWAP; coin.Symbol = "BTC"; coin.Value = coin.Close; } catch { /* Do nothing, possible error in json decoding */ } break; } return coin; } } /// <summary> /// Live data structure /// </summary> public class LiveBitcoin { public int Timestamp = 0; public decimal Last = 0; public decimal High = 0; public decimal Low = 0; public decimal Bid = 0; public decimal Ask = 0; public decimal VWAP = 0; public decimal Volume = 0; } }