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 Probabilistic 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 QuantConnect.Indicators.CandlestickPatterns; namespace QuantConnect.Algorithm.CSharp { public partial class TestAlgo : QCAlgorithm { //**************************************************************************************************************************************** // INITIALIASE BLOCK //**************************************************************************************************************************************** public override void Initialize() { SetStartDate(2017, 1, 1); SetEndDate(2017, 1, 31); SetAccountCurrency(_AccountCurrency); SetCash(100000); // Loop through our list of symbols and add them to our subscription manager foreach (var _symbol in _MySymbolList) { var _Forex = AddForex(_symbol, _Res, Market.Oanda, true, 20m); //var _ForexTick = AddForex(_symbol, Resolution.Tick, Market.Oanda, true, 20m); /// UNCOMMENT TO GET THE ERROR DataDico.Add(_symbol, new SymbolData(this, _Forex.Symbol, _Forex.BaseCurrencySymbol)); } SetWarmUp(TimeSpan.FromDays(_WarmUpPeriod)); SetBrokerageModel(BrokerageName.OandaBrokerage, AccountType.Margin); } //**************************************************************************************************************************************** // ONDATA BLOCK //**************************************************************************************************************************************** public override void OnData(Slice data) { //Loop through our dictionary foreach (var symbolData in DataDico.Values) { if(!data.ContainsKey(symbolData.Symbol)) { return; } //Check if algorithm is warming up and if indicators are ready, if not break if(IsWarmingUp) { return; } if(!symbolData.IsReady()) { return; } if(!symbolData.ConsolidatorFlag) { return; } symbolData.ConsolidatorFlag = false; symbolData.Price = data[symbolData.Symbol].Close; //symbolData.TickBarStartTime = symbolData.TickBarsWin[0].Time; /// UNCOMMENT TO GET THE ERROR //symbolData.TickBarEndTime = symbolData.TickBarsWin[0].EndTime; /// UNCOMMENT TO GET THE ERROR //Debug($"TickBar start time: {symbolData.TickBarStartTime.ToString()} | TickBar end time: {symbolData.TickBarEndTime.ToString()}"); } } } }
namespace QuantConnect.Algorithm.CSharp { public partial class TestAlgo : QCAlgorithm { //**************************************************************************************************************************************** //USER VARIABLES //**************************************************************************************************************************************** private static string _AccountCurrency = "USD"; Resolution _Res = Resolution.Hour; // Reference resolution for our custom TradeBar private int _WarmUpPeriod = 200; public decimal _PctRisk = 0.10m; private decimal _StopLossPct = 0.05m; //***Symbol List*** Dictionary <string, SymbolData> DataDico = new Dictionary <string, SymbolData>(); List <string> _MySymbolList = new List <string> { "EURUSD", "USDJPY", "GBPUSD", "USDCHF", "USDCAD", }; private decimal _TotalEquity; } }
namespace QuantConnect.Algorithm.CSharp { public partial class TestAlgo : QCAlgorithm { public class SymbolData { //***Consolidator parameters*** public static int barPerTimeSpan = 24; // Number of block of data per custum TradeBar public readonly TimeSpan barPeriod = TimeSpan.FromHours(barPerTimeSpan); // Set the size of our custum TradeBar public QuoteBarConsolidator Consolidator; public TickQuoteBarConsolidator TickConsolidator; public static int tickBarPeriod = 1000; public bool ConsolidatorFlag = false; // Flag whether a new custom TradeBar has been fully consolidated; used to prevent ONDATA block code to be executed otherwise //***General*** public readonly QCAlgorithm algorithm; public readonly Symbol Symbol; public readonly string BaseSymbol; public readonly string AccountSymbol; public readonly RollingWindow<IBaseDataBar> BarsWin; public readonly RollingWindow<IBaseDataBar> TickBarsWin; public readonly int windowSize = 5; public decimal Holding; public decimal Price; public decimal Price_P1; //***Tick Bar parameters*** public DateTime TickBarStartTime; public DateTime TickBarEndTime; //***SymbolData class constructor which initializes a new instance of SymbolData*** public SymbolData(QCAlgorithm algorithm, Symbol symbol, string baseSymbol) { this.algorithm = algorithm; Symbol = symbol; BaseSymbol = baseSymbol; Consolidator = new QuoteBarConsolidator(barPeriod); TickConsolidator = new TickQuoteBarConsolidator (tickBarPeriod); BarsWin = new RollingWindow<IBaseDataBar>(windowSize); TickBarsWin = new RollingWindow<IBaseDataBar>(windowSize); Consolidator.DataConsolidated += (sender, baseData) => { var _bar = (IBaseDataBar)baseData; ConsolidatorFlag = true; BarsWin.Add(_bar); }; algorithm.SubscriptionManager.AddConsolidator(symbol, Consolidator); // Adding this consolidator to the Subscription Manager so it gets auto updates /* /// UNCOMMENT TO GET THE ERROR TickConsolidator.DataConsolidated += (sender, baseData) => { var _tickBar = (IBaseDataBar)baseData; TickBarsWin.Add(_tickBar); }; //algorithm.SubscriptionManager.AddConsolidator(symbol, TickConsolidator); */ } //***Returns true if all the data in this instance is ready*** public bool IsReady() { return BarsWin.IsReady; } } } }