From 5bb28b44a8c33b75faf018f133da66fda1bd2a59 Mon Sep 17 00:00:00 2001 From: AlexCatarino Date: Mon, 28 Oct 2019 17:49:53 +0000 Subject: [PATCH] Adds Examples for Train Feature - Adds Python version of `TrainingInitializeRegressionAlgorithm`; - Adds C# version of `TrainingExampleAlgorithm`; - Removes `TrainingScheduledRegressionAlgorithm`. --- .../QuantConnect.Algorithm.CSharp.csproj | 2 +- Algorithm.CSharp/TrainingExampleAlgorithm.cs | 51 ++++++++++++++++++ .../TrainingScheduledRegressionAlgorithm.cs | 53 ------------------- .../QuantConnect.Algorithm.Python.csproj | 1 + .../TrainingInitializeRegressionAlgorithm.py | 43 +++++++++++++++ 5 files changed, 96 insertions(+), 54 deletions(-) create mode 100644 Algorithm.CSharp/TrainingExampleAlgorithm.cs delete mode 100644 Algorithm.CSharp/TrainingScheduledRegressionAlgorithm.cs create mode 100644 Algorithm.Python/TrainingInitializeRegressionAlgorithm.py diff --git a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj index 85848761d0b9..5ad9a8f69cbc 100644 --- a/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj +++ b/Algorithm.CSharp/QuantConnect.Algorithm.CSharp.csproj @@ -179,7 +179,7 @@ - + diff --git a/Algorithm.CSharp/TrainingExampleAlgorithm.cs b/Algorithm.CSharp/TrainingExampleAlgorithm.cs new file mode 100644 index 000000000000..29f03827d293 --- /dev/null +++ b/Algorithm.CSharp/TrainingExampleAlgorithm.cs @@ -0,0 +1,51 @@ +/* + * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. + * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +using System; + +namespace QuantConnect.Algorithm.CSharp +{ + /// + /// Example algorithm showing how to use QCAlgorithm.Train method + /// + /// + /// + public class TrainingExampleAlgorithm : QCAlgorithm + { + public override void Initialize() + { + SetStartDate(2013, 10, 7); + SetEndDate(2013, 10, 14); + + AddEquity("SPY", Resolution.Daily); + + // Set TrainingMethod to be executed immediately + Train(TrainingMethod); + + // Set TrainingMethod to be executed at 8:00 am every Sunday + Train(DateRules.Every(DayOfWeek.Sunday), TimeRules.At(8, 0), TrainingMethod); + } + + private void TrainingMethod() + { + Log($"Start training at {Time}"); + // Use the historical data to train the machine learning model + var history = History("SPY", 200, Resolution.Daily); + + // ML code: + + } + } +} \ No newline at end of file diff --git a/Algorithm.CSharp/TrainingScheduledRegressionAlgorithm.cs b/Algorithm.CSharp/TrainingScheduledRegressionAlgorithm.cs deleted file mode 100644 index 87151c66a543..000000000000 --- a/Algorithm.CSharp/TrainingScheduledRegressionAlgorithm.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. - * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.Threading; -using QuantConnect.Interfaces; - -namespace QuantConnect.Algorithm.CSharp -{ - /// - /// This regression algorithm is NOT expected to fail and verifies that a periodic training - /// event created in OnData will fire and will consume 'minutes' from the leaky bucket - /// - public class TrainingScheduledRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition - { - public override void Initialize() - { - SetStartDate(2013, 10, 7); - SetEndDate(2013, 10, 11); - - AddEquity("SPY", Resolution.Daily); - - // DateRules.Tomorrow combined with TimeRules.Noon enforces that this event schedule will - // have exactly one time, which will fire between the first data point and the next day at - // midnight. So after the first data point, it will run this event and sleep long enough to - // exceed the static max algorithm time loop time and begin to consume from the leaky bucket - // the regression test sets the "algorithm-manager-time-loop-maximum" value to 30 seconds - Schedule.Training(DateRules.Tomorrow, TimeRules.Midnight, () => - { - // this will consume the single 'minute' available in the leaky bucket - // and the regression test will confirm that the leaky bucket is empty - Thread.Sleep(TimeSpan.FromMinutes(1)); - }); - } - - public bool CanRunLocally => false; - public Language[] Languages => new[] {Language.CSharp}; - public Dictionary ExpectedStatistics => new Dictionary(); - } -} \ No newline at end of file diff --git a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj index 08ab36e23a06..6eedcc1ae755 100644 --- a/Algorithm.Python/QuantConnect.Algorithm.Python.csproj +++ b/Algorithm.Python/QuantConnect.Algorithm.Python.csproj @@ -87,6 +87,7 @@ + diff --git a/Algorithm.Python/TrainingInitializeRegressionAlgorithm.py b/Algorithm.Python/TrainingInitializeRegressionAlgorithm.py new file mode 100644 index 000000000000..9237750771b3 --- /dev/null +++ b/Algorithm.Python/TrainingInitializeRegressionAlgorithm.py @@ -0,0 +1,43 @@ +# QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. +# Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from clr import AddReference +AddReference("System") +AddReference("QuantConnect.Algorithm") +AddReference("QuantConnect.Common") + +from System import * +from QuantConnect import * +from QuantConnect.Algorithm import * +from time import sleep + +### +### This regression algorithm is expected to fail and verifies that a training event +### created in Initialize will get run AND it will cause the algorithm to fail if it +### exceeds the "algorithm-manager-time-loop-maximum" config value, which the regression +### test sets to 0.5 minutes. +### +class TrainingInitializeRegressionAlgorithm(QCAlgorithm): + '''Example algorithm showing how to use QCAlgorithm.Train method''' + + def Initialize(self): + + self.SetStartDate(2013, 10, 7) + self.SetEndDate(2013, 10, 11) + + self.AddEquity("SPY", Resolution.Daily) + + # this should cause the algorithm to fail + # the regression test sets the time limit to 30 seconds and there's one extra + # minute in the bucket, so a two minute sleep should result in RuntimeError + self.Schedule.TrainingNow(lambda: sleep(150)) \ No newline at end of file