QuantConnect / lean-cli

CLI for running the LEAN engine locally and in the cloud
https://www.lean.io/cli
Apache License 2.0
194 stars 99 forks source link

LEAN CLI's Demo "My Project" Makes 0 Trades? #40

Closed indir1 closed 2 years ago

indir1 commented 2 years ago

Confused as to why changing the date range of the "My Project" code LEAN CLI gives 0 trades. My code is identical to the LEAN CLI demo except for a different date range and warm up.

from AlgorithmImports import *

class MyProject(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2020, 1, 7)  # Set Start Date
        self.SetEndDate(2020, 10, 11)  # Set End Date
        self.SetCash(100000)  # Set Strategy Cash
        self.AddEquity("SPY", Resolution.Minute)
        self.SetWarmUp(360, Resolution.Daily)
    def OnData(self, slice):
        """OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
            Arguments:
                data: Slice object keyed by symbol containing the stock data
        """
        if self.IsWarmingUp:
            return

        if not slice.ContainsKey("SPY"):
            return

        if not self.Portfolio.Invested:
            self.SetHoldings("SPY", 1)
            self.Debug("Purchased Stock")

Running the code prints:

$ lean backtest "My Project"

20211105 12:46:58.362 TRACE:: Config.Get(): Configuration key
not found. Key: plugin-directory - Using default value:
20211105 12:46:58.375 TRACE:: Composer(): Loading Assemblies from 
/Lean/Launcher/bin/Debug
20211105 12:46:58.476 TRACE:: Python for .NET Assembly: 
Python.Runtime, Version=2.0.10.0, Culture=neutral, 
PublicKeyToken=5000fea6cba702dd
20211105 12:46:58.559 TRACE:: Config.Get(): Configuration key not 
found. Key: data-directory - Using default value: ../../../Data/
20211105 12:46:58.566 TRACE:: Config.Get(): Configuration key not 
found. Key: version-id - Using default value:
20211105 12:46:58.567 TRACE:: Config.Get(): Configuration key not 
found. Key: cache-location - Using default value: /Lean/Data
20211105 12:46:58.569 TRACE:: Engine.Main(): LEAN ALGORITHMIC 
TRADING ENGINE v2.5.0.0 Mode: DEBUG (64bit) Host: d-macbookpro
20211105 12:46:58.578 TRACE:: Engine.Main(): Started 12:46 PM
20211105 12:46:58.583 TRACE:: Config.Get(): Configuration key not 
found. Key: lean-manager-type - Using default value: 
LocalLeanManager
20211105 12:46:58.610 TRACE:: JobQueue.NextJob(): Selected 
/LeanCLI/main.py
20211105 12:46:58.710 TRACE:: Config.GetValue(): 
scheduled-event-leaky-bucket-capacity - Using default value: 120
20211105 12:46:58.711 TRACE:: Config.GetValue(): 
scheduled-event-leaky-bucket-time-interval-minutes - Using default 
value: 1440
20211105 12:46:58.712 TRACE:: Config.GetValue(): 
scheduled-event-leaky-bucket-refill-amount - Using default value: 18
20211105 12:46:58.716 TRACE:: Config.Get(): Configuration key not 
found. Key: job-organization-id - Using default value:
20211105 12:46:58.718 TRACE:: Config.Get(): Configuration key not 
found. Key: data-permission-manager - Using default value: 
DataPermissionManager
20211105 12:46:58.733 TRACE:: AlgorithmManager.CreateTokenBucket(): 
Initializing LeakyBucket: Capacity: 120 RefillAmount: 18 
TimeInterval: 1440
20211105 12:46:58.736 TRACE:: Config.GetValue(): 
algorithm-manager-time-loop-maximum - Using default value: 20
20211105 12:46:58.755 TRACE:: 
TextSubscriptionDataSourceReader.SetCacheSize(): Setting cache size 
to 71582788 items
20211105 12:46:59.094 TRACE:: Config.GetValue(): 
algorithm-creation-timeout - Using default value: 90
20211105 12:46:59.100 TRACE:: PythonInitializer.Initialize(): 
start...
PythonEngine.Initialize(): Runtime.Initialize()...
Runtime.Initialize(): Py_Initialize...
Runtime.Initialize(): PyEval_InitThreads...
Runtime.Initialize(): Initialize types...
Runtime.Initialize(): Initialize types end.
Runtime.Initialize(): AssemblyManager.Initialize()...
Runtime.Initialize(): AssemblyManager.UpdatePath()...
PythonEngine.Initialize(): GetCLRModule()...
PythonEngine.Initialize(): clr GetManifestResourceStream...
20211105 12:47:00.137 TRACE:: PythonInitializer.Initialize(): ended
20211105 12:47:00.143 TRACE:: AlgorithmPythonWrapper(): Python 
version 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:25:33)
[GCC 7.3.0]: Importing python module main
20211105 12:47:02.757 TRACE:: AlgorithmPythonWrapper(): main 
successfully imported.
20211105 12:47:02.768 TRACE:: AlgorithmPythonWrapper(): Creating 
IAlgorithm instance.
20211105 12:47:02.778 TRACE:: Config.GetValue(): 
api-data-update-period - Using default value: 1
20211105 12:47:02.933 TRACE:: Config.GetValue(): 
mute-python-library-logging - Using default value: True
20211105 12:47:02.966 TRACE:: LocalObjectStore.Initialize(): Storage
Root: /Storage/QCAlgorithm. StorageFileCount 100. StorageLimitMB 5
20211105 12:47:02.986 TRACE:: BacktestingSetupHandler.Setup(): 
Setting up job: Plan: Free, UID: 79669, PID: 949503058, Version: 
2.5.0.0, Source: WebIDE
20211105 12:47:02.993 TRACE:: Config.Get(): Configuration key not 
found. Key: security-data-feeds - Using default value:
20211105 12:47:03.170 TRACE:: 
BaseSetupHandler.SetupCurrencyConversions():
Symbol      Quantity    Conversion = Value in USD
USD: $      100000.00 @       1.00 = $100000.0
-------------------------------------------------
CashBook Total Value:                $100000.0

20211105 12:47:03.177 TRACE:: SetUp Backtesting: User: 79669 
ProjectId: 949503058 AlgoId: 1958612602
20211105 12:47:03.179 TRACE:: Dates: Start: 01/07/2020 End: 
10/11/2020 Cash: ¤100,000.00
20211105 12:47:03.182 TRACE:: BacktestingResultHandler(): Sample 
Period Set: 100.44
20211105 12:47:03.184 TRACE:: Time.TradeableDates(): Security Count:
1
20211105 12:47:03.188 TRACE:: Config.GetValue(): 
forward-console-messages - Using default value: True
20211105 12:47:03.191 TRACE:: JOB HANDLERS:
20211105 12:47:03.192 TRACE::          DataFeed:     
QuantConnect.Lean.Engine.DataFeeds.FileSystemDataFeed
20211105 12:47:03.193 TRACE::          Setup:        
QuantConnect.Lean.Engine.Setup.ConsoleSetupHandler
20211105 12:47:03.196 TRACE::          RealTime:     
QuantConnect.Lean.Engine.RealTime.BacktestingRealTimeHandler
20211105 12:47:03.197 TRACE::          Results:      
QuantConnect.Lean.Engine.Results.BacktestingResultHandler
20211105 12:47:03.198 TRACE::          Transactions: QuantConnect.Le
an.Engine.TransactionHandlers.BacktestingTransactionHandler
20211105 12:47:03.199 TRACE::          Alpha:        
QuantConnect.Lean.Engine.Alphas.DefaultAlphaHandler
20211105 12:47:03.200 TRACE::          ObjectStore:  
QuantConnect.Lean.Engine.Storage.LocalObjectStore
20211105 12:47:03.201 TRACE::          History Provider:     QuantCo
nnect.Lean.Engine.HistoricalData.SubscriptionDataReaderHistoryProvid
er
20211105 12:47:03.225 TRACE:: Debug: Launching analysis for 
1958612602 with LEAN Engine v2.5.0.0
20211105 12:47:03.237 TRACE:: Event Name "Daily Sampling", scheduled
to run at 1/7/2020 5:00:00 AM (UTC)...
20211105 12:47:03.237 TRACE:: AlgorithmManager.Run(): Begin 
DataStream - Start: 1/7/2020 12:00:00 AM Stop: 10/11/2020 11:59:59 
PM
20211105 12:47:03.259 TRACE:: AlgorithmManager.Stream(): 
WarmupHistoryRequest: SPY: Start: 8/1/2018 4:00:00 AM End: 1/7/2020 
5:00:00 AM Resolution: Daily
20211105 12:47:03.299 TRACE:: Config.GetValue(): 
data-feed-max-work-weight - Using default value: 400
20211105 12:47:03.300 TRACE:: Config.GetValue(): 
data-feed-workers-count - Using default value: 4
20211105 12:47:03.302 TRACE:: WeightedWorkScheduler(): will use 4 
workers and MaxWorkWeight is 400
20211105 12:47:03.325 TRACE:: Config.GetValue(): 
show-missing-data-logs - Using default value: False
20211105 12:47:03.628 TRACE:: AlgorithmManager.Stream(): Finished 
warmup
20211105 12:47:03.628 TRACE:: Debug: Algorithm warming up...
20211105 12:47:03.914 TRACE:: 
UniverseSelection.AddPendingInternalDataFeeds(): Adding internal 
benchmark data feed SPY,SPY,Hour,TradeBar,Trade,Adjusted,Internal
20211105 12:47:04.083 TRACE:: Debug: Algorithm finished warming up.
20211105 12:47:04.185 TRACE:: Debug: Purchased Stock
20211105 12:47:04.202 TRACE:: Synchronizer.GetEnumerator(): Exited 
thread.
20211105 12:47:04.203 TRACE:: AlgorithmManager.Run(): Firing On End 
Of Algorithm...
20211105 12:47:04.207 TRACE:: Engine.Run(): Exiting Algorithm 
Manager
20211105 12:47:04.211 TRACE:: FileSystemDataFeed.Exit(): Start. 
Setting cancellation token...
20211105 12:47:04.216 TRACE:: FileSystemDataFeed.Exit(): Exit 
Finished.
20211105 12:47:04.218 TRACE:: DefaultAlphaHandler.Exit(): Exiting...
20211105 12:47:04.226 TRACE:: DefaultAlphaHandler.Exit(): Ended
20211105 12:47:04.227 TRACE:: BacktestingResultHandler.Exit(): 
starting...
20211105 12:47:04.228 TRACE:: BacktestingResultHandler.Exit(): 
Saving logs...
20211105 12:47:04.236 TRACE:: Debug: Algorithm Id:(1958612602) 
completed in 1.01 seconds at 2k data points per second. Processing 
total of 2,082 data points.
20211105 12:47:04.236 TRACE:: StopSafely(): waiting for 'Result 
Thread' thread to stop...
20211105 12:47:04.236 TRACE:: Debug: Your log was successfully 
created and can be retrieved from: /Results/1958612602-log.txt
20211105 12:47:04.237 TRACE:: BacktestingResultHandler.Run(): Ending
Thread...
20211105 12:47:04.487 TRACE:: Config.GetValue(): 
regression-update-statistics - Using default value: False
20211105 12:47:04.490 TRACE::
STATISTICS:: Total Trades 0
STATISTICS:: Average Win 0%
STATISTICS:: Average Loss 0%
STATISTICS:: Compounding Annual Return 0%
STATISTICS:: Drawdown 0%
STATISTICS:: Expectancy 0
STATISTICS:: Net Profit 0%
STATISTICS:: Sharpe Ratio 0
STATISTICS:: Probabilistic Sharpe Ratio 0%
STATISTICS:: Loss Rate 0%
STATISTICS:: Win Rate 0%
STATISTICS:: Profit-Loss Ratio 0
STATISTICS:: Alpha 0
STATISTICS:: Beta 0
STATISTICS:: Annual Standard Deviation 0
STATISTICS:: Annual Variance 0
STATISTICS:: Information Ratio -0.42
STATISTICS:: Tracking Error 0.312
STATISTICS:: Treynor Ratio 0
STATISTICS:: Total Fees $0.00
STATISTICS:: Estimated Strategy Capacity $0
STATISTICS:: Lowest Capacity Asset
STATISTICS:: Fitness Score 0
STATISTICS:: Kelly Criterion Estimate 0
STATISTICS:: Kelly Criterion Probability Value 0
STATISTICS:: Sortino Ratio 79228162514264337593543950335
STATISTICS:: Return Over Maximum Drawdown 
79228162514264337593543950335
STATISTICS:: Portfolio Turnover 0
STATISTICS:: Total Insights Generated 0
STATISTICS:: Total Insights Closed 0
STATISTICS:: Total Insights Analysis Completed 0
STATISTICS:: Long Insight Count 0
STATISTICS:: Short Insight Count 0
STATISTICS:: Long/Short Ratio 100%
STATISTICS:: Estimated Monthly Alpha Value $0
STATISTICS:: Total Accumulated Estimated Alpha Value $0
STATISTICS:: Mean Population Estimated Insight Value $0
STATISTICS:: Mean Population Direction 0%
STATISTICS:: Mean Population Magnitude 0%
STATISTICS:: Rolling Averaged Population Direction 0%
STATISTICS:: Rolling Averaged Population Magnitude 0%
STATISTICS:: OrderListHash b7c0987ac8efab0b63bbb8254a8b28c5
20211105 12:47:04.492 TRACE:: 
BacktestingResultHandler.SendAnalysisResult(): Processed final 
packet
20211105 12:47:04.494 TRACE:: Engine.Run(): Disconnecting from 
brokerage...
20211105 12:47:04.496 TRACE:: Engine.Run(): Disposing of setup 
handler...
20211105 12:47:04.498 TRACE:: Engine.Main(): Analysis Completed and 
Results Posted.
Engine.Main(): Analysis Complete.
20211105 12:47:04.501 TRACE:: Engine.Main(): Packet removed from 
queue: 1958612602
20211105 12:47:04.502 TRACE:: LeanEngineSystemHandlers.Dispose(): 
start...
20211105 12:47:04.504 TRACE:: LeanEngineSystemHandlers.Dispose(): 
Disposed of system handlers.
20211105 12:47:04.506 TRACE:: LeanEngineAlgorithmHandlers.Dispose():
start...
20211105 12:47:04.512 TRACE:: LeanEngineAlgorithmHandlers.Dispose():
Disposed of algorithm handlers.
20211105 12:47:04.515 TRACE:: Program.Main(): Exiting Lean...
Successfully ran 'My Project' in the 'backtesting' environment and 
stored the output in 'My Project/backtests/2021-11-05_20-46-56'
indir1 commented 2 years ago

Do I have to download SPY prices for the period?

I do not see any notifications indicating that no data is found locally/ needs downloading though.

I'm not familiar with Quantconnect's pricing structure. Help would be appreciated.

JakeTheSnake3p0 commented 2 years ago

The lean installation seems to come with some data pre-installed (found in the data directory), but there isn't much there. Likely the time range you're looking at doesn't exist locally. You'll have to download it yourself. If you have a custom source you can convert it into the formats specified here. How you do that is dependent on your broker/data plan. I for example am using Interactive Brokers, so I use ib_insync with a custom python script. It has proven very difficult however to convert fundamental data into the format Lean requires (just because there's so much to go through and map).

If you want to purchase data, you can find some options here which was found using this guide.

Pricing seems quite high for those of us who just want fundamentals for a single equity for development purposes but HTH anyway.

jaredbroad commented 2 years ago

Thank you for help @JakeTheSnake3p0