Esempio n. 1
0
        public void ScanPyConsolidator()
        {
            using (Py.GIL())
            {
                var module = PyModule.FromString(Guid.NewGuid().ToString(),
                                                 "from AlgorithmImports import *\n" +
                                                 "class CustomConsolidator():\n" +
                                                 "   def __init__(self):\n" +
                                                 "       self.ScanWasCalled = False\n" +
                                                 "       self.InputType = QuoteBar\n" +
                                                 "       self.OutputType = QuoteBar\n" +
                                                 "       self.Consolidated = None\n" +
                                                 "       self.WorkingData = None\n" +
                                                 "   def Scan(self,time):\n" +
                                                 "       self.ScanWasCalled = True\n");

                var customConsolidator = module.GetAttr("CustomConsolidator").Invoke();
                var wrapper            = new DataConsolidatorPythonWrapper(customConsolidator);

                var time   = DateTime.Today;
                var period = TimeSpan.FromMinutes(1);

                wrapper.Scan(DateTime.Now);

                bool called;
                customConsolidator.GetAttr("ScanWasCalled").TryConvert(out called);
                Assert.True(called);
            }
        }
        public void OutputTypePyConsolidator()
        {
            using (Py.GIL())
            {
                var module = PythonEngine.ModuleFromString(Guid.NewGuid().ToString(),
                                                           "from clr import AddReference\n" +
                                                           "AddReference(\"QuantConnect.Common\")\n" +
                                                           "from QuantConnect import *\n" +
                                                           "from QuantConnect.Data.Market import *\n" +
                                                           "class CustomConsolidator():\n" +
                                                           "   def __init__(self):\n" +
                                                           "       self.InputType = QuoteBar\n" +
                                                           "       self.OutputType = QuoteBar\n" +
                                                           "       self.Consolidated = None\n" +
                                                           "       self.WorkingData = None\n");

                var customConsolidator = module.GetAttr("CustomConsolidator").Invoke();
                var wrapper            = new DataConsolidatorPythonWrapper(customConsolidator);

                var time   = DateTime.Today;
                var period = TimeSpan.FromMinutes(1);

                var type = wrapper.OutputType;
                Assert.True(type == typeof(QuoteBar));
            }
        }
        public void AttachAndTriggerEvent()
        {
            using (Py.GIL())
            {
                var module = PythonEngine.ModuleFromString(Guid.NewGuid().ToString(),
                                                           "from clr import AddReference\n" +
                                                           "AddReference(\"QuantConnect.Common\")\n" +
                                                           "from QuantConnect import *\n" +
                                                           "from QuantConnect.Data.Consolidators import *\n" +
                                                           "from datetime import *\n" +
                                                           "class ImplementingClass():\n" +
                                                           "   def __init__(self):\n" +
                                                           "       self.EventCalled = False\n" +
                                                           "       self.Consolidator = CustomConsolidator(timedelta(minutes=1))\n" +
                                                           "       self.Consolidator.DataConsolidated += self.ConsolidatorEvent\n" +
                                                           "   def ConsolidatorEvent(self, sender, bar):\n" +
                                                           "       self.EventCalled = True\n" +
                                                           "class CustomConsolidator(QuoteBarConsolidator):\n" +
                                                           "   def __init__(self,span):\n" +
                                                           "       self.Span = span");

                var implementingClass  = module.GetAttr("ImplementingClass").Invoke();
                var customConsolidator = implementingClass.GetAttr("Consolidator");
                var wrapper            = new DataConsolidatorPythonWrapper(customConsolidator);

                bool called;
                implementingClass.GetAttr("EventCalled").TryConvert(out called);
                Assert.False(called);

                var time   = DateTime.Today;
                var period = TimeSpan.FromMinutes(1);
                var bar1   = new QuoteBar
                {
                    Time        = time,
                    Symbol      = Symbols.SPY,
                    Bid         = new Bar(1, 2, 0.75m, 1.25m),
                    LastBidSize = 3,
                    Ask         = null,
                    LastAskSize = 0,
                    Value       = 1,
                    Period      = period
                };

                wrapper.Update(bar1);
                wrapper.Scan(time.AddMinutes(1));
                implementingClass.GetAttr("EventCalled").TryConvert(out called);
                Assert.True(called);
            }
        }
        public void UpdatePyConsolidator()
        {
            using (Py.GIL())
            {
                var module = PythonEngine.ModuleFromString(Guid.NewGuid().ToString(),
                                                           "from clr import AddReference\n" +
                                                           "AddReference(\"QuantConnect.Common\")\n" +
                                                           "from QuantConnect import *\n" +
                                                           "from QuantConnect.Data.Market import *\n" +
                                                           "class CustomConsolidator():\n" +
                                                           "   def __init__(self):\n" +
                                                           "       self.UpdateWasCalled = False\n" +
                                                           "       self.InputType = QuoteBar\n" +
                                                           "       self.OutputType = QuoteBar\n" +
                                                           "       self.Consolidated = None\n" +
                                                           "       self.WorkingData = None\n" +
                                                           "   def Update(self, data):\n" +
                                                           "       self.UpdateWasCalled = True\n");

                var customConsolidator = module.GetAttr("CustomConsolidator").Invoke();
                var wrapper            = new DataConsolidatorPythonWrapper(customConsolidator);

                var time   = DateTime.Today;
                var period = TimeSpan.FromMinutes(1);
                var bar1   = new QuoteBar
                {
                    Time        = time,
                    Symbol      = Symbols.SPY,
                    Bid         = new Bar(1, 2, 0.75m, 1.25m),
                    LastBidSize = 3,
                    Ask         = null,
                    LastAskSize = 0,
                    Value       = 1,
                    Period      = period
                };

                wrapper.Update(bar1);

                bool called;
                customConsolidator.GetAttr("UpdateWasCalled").TryConvert(out called);
                Assert.True(called);
            }
        }
Esempio n. 5
0
        public void OutputTypePyConsolidator()
        {
            using (Py.GIL())
            {
                var module = PyModule.FromString(Guid.NewGuid().ToString(),
                                                 "from AlgorithmImports import *\n" +
                                                 "class CustomConsolidator():\n" +
                                                 "   def __init__(self):\n" +
                                                 "       self.InputType = QuoteBar\n" +
                                                 "       self.OutputType = QuoteBar\n" +
                                                 "       self.Consolidated = None\n" +
                                                 "       self.WorkingData = None\n");

                var customConsolidator = module.GetAttr("CustomConsolidator").Invoke();
                var wrapper            = new DataConsolidatorPythonWrapper(customConsolidator);

                var time   = DateTime.Today;
                var period = TimeSpan.FromMinutes(1);

                var type = wrapper.OutputType;
                Assert.True(type == typeof(QuoteBar));
            }
        }
        /// <summary>
        /// Add a custom python consolidator for the symbol
        /// </summary>
        /// <param name="symbol">Symbol of the asset to consolidate</param>
        /// <param name="pyConsolidator">The custom python consolidator</param>
        public void AddConsolidator(Symbol symbol, PyObject pyConsolidator)
        {
            IDataConsolidator consolidator = new DataConsolidatorPythonWrapper(pyConsolidator);

            AddConsolidator(symbol, consolidator);
        }