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/TrainingInitializeRegressionAlgorithm.cs b/Algorithm.CSharp/TrainingInitializeRegressionAlgorithm.cs
index 477fd6c698ab..630cef1b3a90 100644
--- a/Algorithm.CSharp/TrainingInitializeRegressionAlgorithm.cs
+++ b/Algorithm.CSharp/TrainingInitializeRegressionAlgorithm.cs
@@ -38,7 +38,19 @@ public override void Initialize()
// 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
- Schedule.TrainingNow(() => Thread.Sleep(TimeSpan.FromMinutes(2.5)));
+ Train(() => Thread.Sleep(TimeSpan.FromMinutes(2.5)));
+
+ // DateRules.Tomorrow combined with TimeRules.Midnight 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
+ Train(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;
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..b727cb34c0e4
--- /dev/null
+++ b/Algorithm.Python/TrainingInitializeRegressionAlgorithm.py
@@ -0,0 +1,52 @@
+# 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.Train(lambda: sleep(150))
+
+ # DateRules.Tomorrow combined with TimeRules.Midnight 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
+ self.Train(self.DateRules.Tomorrow, self.TimeRules.Midnight, lambda: sleep(60))
+ # this will consume the single 'minute' available in the leaky bucket
+ # and the regression test will confirm that the leaky bucket is empty
\ No newline at end of file