Compare commits

...

929 Commits
13402 ... 16142

Author SHA1 Message Date
Martin-Molinero
3f3d13a1df Update readme.md 2024-01-05 18:02:58 -03:00
Jared
f497a0206c Update BacktestingResultHandler.cs (#7675) 2024-01-05 18:00:02 -03:00
Martin-Molinero
0ba796c4cf Add project owner to API project read (#7674) 2024-01-05 16:58:03 -03:00
Roman Yavnikov
50ccec9a01 feat: gdax -> coinbase (#7633)
* feat: gdax -> coinbase

* feat: defaultBrokerageModel gdax -> coinbase

* refactor: coinbaseBrokerageModel
fix: gdax test

* feat: add coinbase market hours

* feat: symbolPropDB gdax -> coinbase

* fix: gdax to coinbase tests

* fix: coinbase Fees data

* remove: gdax market-hours

* revert: stopMarket order Type by date + test

* fix: coinbase test (fee was changed)
revert: old test with stopMarket gdax
fix: pandas padding

* refactor: gdaxLiveTrading -> CoinbaseLiveTrading
remove: gdax configs

* remove: old gdax testdata files

* refactor: gdax route -> coinbase route
feat: add deprecated gdax info
feat: some string "gdax" -> "coinbase"

* fix: style brackets

* fix: config coinbase data-queue-handler

* revert: public StablePairsGDAX collection

* rename: GdaxBrokerageModel to CoinbaseBrokerageModel in tests
rename: gdax -> coinbase in DefaultMarketMap
rename: gdaxBrokerageModelTest to Coinbase...

* revert: coinbase changes in toolbox (deprecated)

* remove: override Clone() in GDAX\Coinbase-OrderProperties

* typo: ops missing brackets

* rename: Market.Gdax -> Coinbase in Test
remove: ref on gdax

* test: compatibility of GDAXOrderProperties

* fix: coinbase brokerageName enum number

* feat: readonly to stablePairs Gdax/Coinbase
remove: GetFeeModel() in GDAXBrokerageModel {}

* test: gdax market name compatible with coinbase

* rename: config to old ones

* feat: coinbase CanUpdateOrder()

* rename: plus to commit 4135c91

* feat: coinbase fee model + test

* fix: stable fees data

* update: coinbase symbol-properties-database.csv

* fix:  validation of MinimumOrderSize in SubmitOrder()

* feat: gdax -> coinbase

* feat: defaultBrokerageModel gdax -> coinbase

* refactor: coinbaseBrokerageModel
fix: gdax test

* feat: add coinbase market hours

* feat: symbolPropDB gdax -> coinbase

* fix: gdax to coinbase tests

* fix: coinbase Fees data

* remove: gdax market-hours

* revert: stopMarket order Type by date + test

* fix: coinbase test (fee was changed)
revert: old test with stopMarket gdax
fix: pandas padding

* refactor: gdaxLiveTrading -> CoinbaseLiveTrading
remove: gdax configs

* remove: old gdax testdata files

* refactor: gdax route -> coinbase route
feat: add deprecated gdax info
feat: some string "gdax" -> "coinbase"

* fix: style brackets

* fix: config coinbase data-queue-handler

* revert: public StablePairsGDAX collection

* rename: GdaxBrokerageModel to CoinbaseBrokerageModel in tests
rename: gdax -> coinbase in DefaultMarketMap
rename: gdaxBrokerageModelTest to Coinbase...

* revert: coinbase changes in toolbox (deprecated)

* remove: override Clone() in GDAX\Coinbase-OrderProperties

* typo: ops missing brackets

* rename: Market.Gdax -> Coinbase in Test
remove: ref on gdax

* test: compatibility of GDAXOrderProperties

* fix: coinbase brokerageName enum number

* feat: readonly to stablePairs Gdax/Coinbase
remove: GetFeeModel() in GDAXBrokerageModel {}

* test: gdax market name compatible with coinbase

* rename: config to old ones

* feat: coinbase CanUpdateOrder()

* rename: plus to commit 4135c91

* feat: coinbase fee model + test

* fix: stable fees data

* update: coinbase symbol-properties-database.csv

* fix:  validation of MinimumOrderSize in SubmitOrder()

* fix: skipped gdax name to coinbase

* feature: visible Symbol prop in DefaultOrderBook
2024-01-05 16:57:19 -03:00
Martin-Molinero
1d52e5b14a Update readme.md 2024-01-04 16:41:41 -03:00
Daniel Suh
50ab04e30d Implement Time Series Forecast Indicator (#7654)
* initialize TimeSeriesForecast

* tests pass

* spy_tsf.csv added

* added csv to tests

* comment

* fix requested changes

* remove commented out code

* remove ds_store and sln

---------

Co-authored-by: Daniel Suh <daniel.suh@duke.edu>
2024-01-04 16:20:29 -03:00
Ronit Jain
ff83d72487 add required options for local reuslt service (#7660) 2024-01-04 16:18:56 -03:00
Martin-Molinero
3db813c9ae Minor git ignore addition (#7658) 2024-01-04 11:48:26 -03:00
Ricardo Andrés Marino Rojas
eeb44d841a Add partial support for live algorithm redeployment with custom data (#7655)
* First Draft of the solution

Handle the case where the security has already been added in the
algorithm

* Improve implementation

* Improve changes

* Add unit test

* Improve unit tests

* Fix bugs in unit tests

* Nit changes

* Nit changes

* Improve implementation

* Solve bugs in unit tests

* Add more unit tests
2024-01-04 11:13:52 -03:00
Martin-Molinero
e0fdbb2618 Plotting Limits Handling Improvements (#7657)
* Plotting Limits Handling Improvements

- Improve the handling and enforcement of plotting limits
- Increase local default limits

* Minor plotting test fix
2024-01-03 14:21:13 -03:00
Jhonathan Abreu
b75ed58411 Fix combo order quantity update (#7651)
* Fix combo order quantity update

* Minor changes

* Fix unit tests

* Cleanup
2024-01-03 11:11:23 -04:00
Martin-Molinero
aaab65fd7f Fix disabled subsampling (#7656)
- Fix disable subsampling which was adjusting series point times,
  updating unit tests to reproduce issue
2024-01-02 20:54:19 -03:00
Martin-Molinero
65f8590d94 Clean up unused toolbox classes (#7652)
- Remove QuantQuoteConverter program
- Remove QC Visualizer
2024-01-02 18:55:32 -03:00
Martin-Molinero
2525824390 ConsolidateChartPoints method override type (#7650) 2023-12-29 13:24:29 -03:00
Ricardo Andrés Marino Rojas
1b8f396f1a Fix bug in GetLastKnownPrices() method (#7649)
* First draft

* Update regression algos and add unit tests
2023-12-29 13:24:18 -03:00
Ricardo Andrés Marino Rojas
2020f12825 Fix bug in UniverseSelection.Top() method (#7647)
* Solve bug and fix regression test

* Add regression tests

* Improve implementation

* Nit change
2023-12-28 14:49:30 -03:00
Martin-Molinero
3e00abb2e4 Fix Live trading OrderEvents Serialization format (#7646)
- Live trading result handler was storing order events with a different
  format since it wasn't using the expected json converter
2023-12-27 19:19:01 -03:00
Ricardo Andrés Marino Rojas
0f47ba657d Solve race condition bug in LocalObjectStore (#7645)
* Solve bug and add unit tests

The bug was raised due to a race condition when writing a file and
deleting it. In order to stop it, a check condition was added at the end
of the PersistData() method to remove files that have just been deleted.

* Nit changes

* Add a different constructor for the test
2023-12-27 19:18:02 -03:00
Jhonathan Abreu
8cdb2d4c10 Add options and future chain providers to composer (#7644) 2023-12-27 14:42:21 -04:00
Ricardo Andrés Marino Rojas
d8a68afc3f Add Support to Run Algos Without Specifying the Algorithm Language (#7643)
* First draft  of the feature

* Improve implementation

* Add more unit tests
2023-12-26 19:18:54 -03:00
Martin-Molinero
a76fad952d Allow disabling subsampling (#7642)
- Optionally allow disabling subsampling, adding unit tests
2023-12-26 11:06:34 -03:00
Martin-Molinero
939b14a6e8 ApiConnection Improvements (#7640)
- Add support for async API calls
- Reuse HttpAuthenticator when possible
2023-12-22 13:30:02 -03:00
Jhonathan Abreu
9601155e28 Remove Polygon from Toolbox (#7638)
* Remove Polygon from Toolbox

* Minor changes
2023-12-21 13:08:53 -03:00
Martin-Molinero
51c70f6c46 Adjust for high/low sampling values (#7639) 2023-12-20 18:05:10 -03:00
Martin-Molinero
dbad754a93 Reduce latency of initial results (#7634)
- Reduce latency of initial Lean results, from 30 to 5 seconds
2023-12-19 20:02:12 -03:00
Martin-Molinero
cd2e4edeb1 Update readme.md 2023-12-15 17:01:17 -03:00
Derek Melchin
3eb9dbb55c Update Alpha.cs (#7630)
The old description is incorrect. A stock can have positive Alpha but have negative Beta. In this case, if the benchmark increases, the performance of the stock may be dominated by its negative Beta, causing it to underperform the benchmark.
2023-12-15 15:59:23 -03:00
Ricardo Andrés Marino Rojas
9bd69a5032 Fix bugs related with Culture Format (#7626)
* Fix bugs related with Culture Format

* Change .Parse method to .TryParse

* Change NumberStyles.Currency to NumberStyles.Any
2023-12-15 15:58:21 -03:00
Alexandre Catarino
d30357db5f Fixes Parse Future Symbol (#7624)
* Adds Unit Tests for ParseFutureSymbol

Tests:
- Ambiguous year with missing decade
- Non-ambiguous known year
- Expiring before 2000

* Fixes Missing Decade Tests

If the ticket doesn't provide a decade, VXZ2, we assume the current decade. So VXZ2 expires on Dec 2022.

* Fixes SymbolRepresentation.ParseFutureSymbol

Use the value of `futureYear` to handle contracts that expire before 2000. (E.g.: NQZ99).
Tickers from live trading may not provide futureYear. Use the current decade (2020).
2023-12-14 20:25:26 -03:00
Ricardo Andrés Marino Rojas
bc313a999b Add PyObject Constructor Overload for FuncRiskFreeRateInterestRateModel (#7625)
* Add overload and regression tests

* Nit changes

* Nit change

* Nit change
2023-12-14 11:04:42 -03:00
Jhonathan Abreu
442dd771a3 Remove dynamic options filter behavior (#7620)
* Make options filter non-dynamic by default and explicitly set

* Deprecate ContractSecurityFilterUniverse.OnlyApplyFilterAtMarketOpen

* Add regression algorithm

* Remove dynamic option chain filter behavior
2023-12-14 10:56:52 -03:00
Martin-Molinero
59b9e571a1 Minor series sampling improvements (#7627)
- Fix bug where there might not be any data to sample. Adding unit test
- Fix bug where candlestick sampling might add point which shouldn't be
  there. Adding unit tests
- Adjust series json converter to serialize any base series type. Adding
  unit test
2023-12-14 09:57:20 -03:00
Derek Melchin
eefa74baaa Add Sortino ratio to statistics and report (#6698)
* Add Sortino ratio to statistics and report

* Adds Sortino Ratio to Report Key Statistics

* Addresses Peer-Review

Reuse `SharpeRatioReportElement` and change the template.

* Reuse Calculations Across Statistics and PortfolioStatistics

* Adds Sortino Ratio to Regression Algorithms

* Removes Sortino Ratio from Optimization Result Table

---------

Co-authored-by: Alexandre Catarino <AlexCatarino@users.noreply.github.com>
2023-12-12 21:06:13 -03:00
Martin-Molinero
fd2a8f84b9 Add support for null chart points (#7622)
* Add support for null chart points

- Add support for null value chart points, updating existing and adding
  new unit tests

* Minor selfreview tweaks

* Address review & fix deserialization bug

* Ignore null values when using NullResultValueTypeJsonConverter

* Narrow NullResultValueTypeJsonConverter conversion support

* Allow inherit of series sampler
2023-12-12 20:26:58 -03:00
Alexandre Catarino
bf30c7d437 Remove Empty Line After Class Summary (#7621)
The empty line causes a problem parsing the summary as the class description.
Removes `&` from S&P.
2023-12-12 20:23:23 -03:00
Ricardo Andrés Marino Rojas
882dcd44b5 Fix Ultimate Oscillator divide by zero exception (#7618)
* Solve bug and add unit test

The bug was raised when the sum of the True Range values was zero. Since
the Ultimate Oscillator provides a more reliable indicator of momentum,
if the prices don't change, its value should be zero, as there is no
acceleration of a security's price.

* enhance implementation
2023-12-08 15:21:07 -03:00
Jhonathan Abreu
b53d76ff3a Bump pythonnet version to 2.0.26 (#7616) 2023-12-08 13:38:39 -04:00
Martin-Molinero
93e63a6250 Add stockplot series type (#7615) 2023-12-07 19:50:17 -03:00
Alexandre Catarino
b84774388c Index.IsTradable Can Be Set (#7610)
* Index.IsTradable Can Be Set

Indices are not tradable. LEAN will not set it to `true`, but the users can for backtesting.

* Adds Regression Tests

* Revert Changes to ProcessSecurityChanges
2023-12-06 21:02:10 -03:00
Ricardo Andrés Marino Rojas
a6580b33fe Update SPDB and add unit test (#7613) 2023-12-06 20:39:40 -03:00
Ricardo Andrés Marino Rojas
09530be51a Solve Invariant of Culture bugs (#7608)
After running the regression tests in my local pc, I found some of them
were failing in the stats. Then, after debugging them I realized it was
because some of the strings were being casted without using
InvariantCulture parameter.
2023-12-05 15:32:03 -03:00
Ricardo Andrés Marino Rojas
dcb5f8ee4e Merge branches 7501 and 7506 (#7605)
* Update Future-cme-[*] and Future-cme-ES

Acoording to `pandas_market_calendars` there were some dates in
Future-cme-[*] who wasn't early_closes, so they needed to be removed
from there. On the other hand, the early closes list of Future-cme-ES were
shifted by 1 hour according to CME webpage. Besides, there were some
missing dates.

* Update CME Future entries in MHDB

* Rebase

* nit change

* Fix unit tests

* Resume after early close/halts

* Add missing dates in MHDB and fix bugs in it

* Fix bug, add more unit tests and add docs

* fix regression algos

* address required changes

* Update failing regression test stats

After debugging the tests it was found they were failing due to the last
change on SecurityExchangeHours.IsOpen(). That method wasn't taking into
account that even if there is a late open after an early close if the
timespan is after the early close but before the late open, the market
is still close.

* enhance solution

* Update and fix bugs in MHDB

* Address required changes and update stats

* Update stats after rebase

* Nit change

* Missing update to regression test

* Use MHDB instead of USHoliday for Expiration Dates

VIX expiry function now relies completely on MHDB. However, it had to be
created an entry in MHDB for VIX since there wasn't one for it. CBOE
webpage only provided 2023 holidays so only those dates were considered
in the Holidays entry in MHDB. Therefore, some unit tests failed so it
was necessary to change also the VIX entry in FuturesExpiryFunctionsTestData.xml.

* Remove Global.cs/USHolidays class

* Use a lazy implementation

* First draft of the solution

* Use MHDB in FuturesExpiryFunctions.cs

* Remove unused class and fix indentation errors

* Fix indentation errors

* Nit changes

* Merge branches 7501 and 7506

* Merge changes in 7501 and 7506

In order to check compatibility between those branches, a new branch
was created out of branch 7501 and then it was merged with branch 7506.
2 regression tests and 8 unit tests failed, the regression tests failed on
the DataPoint stats. On the other hand, the unit tests failed since the
default parameter UseEquityHoliday was removed from
FuturesExpirtyUtilityFunctions.AddBusinessDays() and from other methods in
the same class too.

* Add missing changes

* Remove repeated good fridays

* Address minor review

---------

Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
2023-12-04 18:09:57 -03:00
Martin-Molinero
e5ab96a306 Update readme.md 2023-12-04 12:40:11 -03:00
Martin-Molinero
67472b62c6 Future daily settlement model fix (#7607)
- Future daily settlement model fix. Adding unit test reproducing issue
2023-12-04 12:10:18 -03:00
Roman Yavnikov
639ae479a8 feat: ETFConstituentsModel overloading constructor (#7598)
* feat: ETFConstituentsModel overloading constructor
* test

* feat: new constructor of ETFConstituentsUniverse
test: support all constructor on c#

* feat: cached symbol in ETFConstituentsUniverse.py
test: validate getting symbol from cahed collection

* remove: extra ctor in ETFConstituentsUniverseSelectionModel

* refactor: add miss condition secType in py
refactor: rename out existTicker -> Symbol
refacotr: rewrite test

* feat: new ETFConstituentsFrameworkAlgos

* refactor: more neat ETFConstituentsAlgos

* fix: CompositeUniverse to SetUniverse
2023-12-01 17:20:52 -03:00
Martin-Molinero
cdedac9eda Update readme.md 2023-11-29 15:04:12 -03:00
Martin-Molinero
e85ccb3e36 Minor SerializedOrderEvent Tweak (#7603) 2023-11-29 11:19:56 -03:00
Martin-Molinero
f1627a9c96 Minor foundation update (#7602)
* Minor foundation update

* Add Xtransformers test
2023-11-28 18:23:43 -03:00
Jhonathan Abreu
82ee9f3599 Ensure crypto futures case is considered in time-in-force-checks (#7601)
Also ensure crypto futures ticks can be read from a line
2023-11-27 19:44:16 -03:00
Adrian Tkacz
f4b41c5793 Alpha Indicator #6985 (#7566)
* Alpha Indicator #6985

* Switched to RateOfChange and Beta

* Added RiskFreeRate param

* Added overload method (without name)

* Changed how Return is calculated
Code refactoring

* Use interest rate provider to automatically get the risk free rate

* Removed InterestRateProvider

* Applied Risk-Free Interest Rate Model

---------

Co-authored-by: Adrian Tkacz <adrian.tkacz@creatdy.com>
2023-11-24 11:31:15 -03:00
Martin-Molinero
c67dcfcc69 Order PriceAdjustmentMode & LeanManager tweaks (#7595)
- Relax PriceAdjustmentMode set property restriction to facilitate
  testing
- Set LocalLeanManager protected
2023-11-22 17:20:22 -03:00
Jhonathan Abreu
f8ca85cb5d Risk-Free Interest Rate Model (#7594)
* Implement risk free interest rate as an algorithm model

* Use risk free insterest rate model in Sharpe Ratio indicator

* Address peer review

Also added python wrapper

* Take pyobject as interest rate model in Sharpe Ratio indicator

* Minor fix

* Minor fix

* Address peer review
2023-11-22 16:17:34 -04:00
Roman Yavnikov
4c034bd40f Brokerage.Eze, launcher config (#7593)
* feature: eze config in launcher

* feat: add support IndexOption
2023-11-22 10:23:35 -03:00
Jhonathan Abreu
4b1f751adb Update Pythonnet version to 2.0.25 (#7591) 2023-11-21 17:25:36 -04:00
Martin-Molinero
7498d2e6e2 QuantBook Universe Selection (#7587)
* QuantBook Universe Selection

- QuantBook universe selection helper method. Adding new unit tests.
- Universe selection data sets improvements

* QuantBook API renames
2023-11-21 17:05:02 -03:00
Martin-Molinero
adaa2f5862 Cleanup data cache provider in tests (#7588) 2023-11-21 16:48:36 -03:00
Jhonathan Abreu
a761c769be Fix brokerage transaction handler null object access bug (#7586)
* Fix using brokerage transaction handler algo befor set

Brokerage open orders are being set before algorithm is set to the transaction handler, so SetPriceAdjustmentMode needs to get the algo to use

* Update unit tests
2023-11-20 11:00:55 -03:00
Gustavo Aviles
6cc2bc64c0 Update enum docs to match others (#7583) 2023-11-20 10:49:02 -03:00
Jhonathan Abreu
314a334e88 Price adjustment mode Order property (#7582)
* Add new Order.PriceAdjustmentMode property

* Minor fix and unit test

* Minor fix and regression algorithms' stats update

* Unit test fixes

* Minor fix

* Set order price adjustment mode to raw always for live trading
2023-11-17 16:09:03 -04:00
Martin-Molinero
830df29f73 Avoid termination on empty live cash balance (#7581)
- Avoid algorithm termination on empty live cash balance if there was no
  error
2023-11-17 11:16:00 -03:00
Martin-Molinero
5e9901c667 Shortable modeling improvements (#7579)
* Shortable modeling improvements

- Do not limit live trading because of shortable model, will send
  algorithm warning
- Add Interactive brokers shortable provider
- Minor LocalDiskShortableProvider API changes

* Fix shorted order update

- Fix shorted order update. Updating regression algorithm

* Minor improvement

* Address reviews
2023-11-16 16:25:56 -03:00
Alexandre Catarino
1a66846f9e Improves Error Handling in OptionPriceModelResult.Evaluate (#7575)
* Improves Error Handling in OptionPriceModelResult.Evaluate

Use the maturity calculation to calculate dividend and risk free discount to prevent the `negative time` error.

Adds Exception Message and StackTrade to `DebuggingEnabled` messages.

* Set Evaluation Date Before Every Calculation

Adds loggings to record the reference date which is set by the `Settings.setEvaluationDate` method.
2023-11-16 16:05:47 -03:00
Martin-Molinero
408ffc0067 Add null slippage model (#7580)
- Add null single instance slippage model
2023-11-16 16:03:37 -03:00
Martin-Molinero
e983383e0e Revert "Store traded securities' subscriptions in results (#7567)" (#7578)
This reverts commit 145ead7cec.
2023-11-15 21:01:15 -03:00
Martin-Molinero
428d620203 Revert "Disable traded securities configs storage for live trading (#7574)" (#7577)
This reverts commit 9029c70a99.
2023-11-15 21:00:36 -03:00
Martin-Molinero
de10a1d669 Remove securities from algorithm collection (#7573)
- Once a security has been delisted or no longer selected by any
  universe it will be remove from the main algorithm securities
  collection but kept in the new Complete collection, this improves
  performance in long running backtests where security collection can
  get enumerated in different cases
- Minor refactor for security exchange local time to avoid having to set
  it explicitly
2023-11-15 17:09:43 -03:00
Jhonathan Abreu
9029c70a99 Disable traded securities configs storage for live trading (#7574)
* Disable storing trades securities configs for live trading

* Minor change

* Minor change
2023-11-15 11:25:47 -04:00
Grzegorz Wodnicki
3f818dc878 correlation as lean indicator #6983 (#7543)
* correlation as lean indicator #6983

* correlation as lean indicator #6983, added SPY QQQ test and Spearman test

* correlation as lean indicator #6983

* correlation as lean indicator #6983, fixes after review

* correlation as lean indicator #6983, fixes after review

* correlation as lean indicator #6983, fixes after review

* correlation as lean indicator #6983, added AcceptsQuoteBarsAsInput Test

* Minor review changes

---------

Co-authored-by: Grzegorz Wodnicki <info@funchips.co.uk>
Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
2023-11-13 20:40:14 -03:00
Jhonathan Abreu
145ead7cec Store traded securities' subscriptions in results (#7567)
* Store traded securities subscription data configs to disk

* Delegate traded subscriptions storage to the data monitor

* Add unit tests

* Address peer review

* Minor changes
2023-11-13 20:39:57 -03:00
Ricardo Andrés Marino Rojas
5c226319b0 Use MHDB in VIX FutureExpiryFunction (#7564) 2023-11-10 20:31:34 -03:00
Jhonathan Abreu
81723ddf46 Get ZipDataCacheProvider timer from config (#7563) 2023-11-10 14:07:00 -03:00
Roman Yavnikov
dd27a65960 Eze: remove extra internal accessors (#7561)
* feat: init eze-brokerage

* remove: eze from market collection

* remove: extra comma

* feat: add missing Security support

* feat: add Eze Order Properties

* feat: description, less code, remove extra configs

* Minor changes

* remove: internal accessor from EzeOrderProperties

---------

Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
2023-11-10 13:55:00 -03:00
Martin-Molinero
978494c12c Update readme.md 2023-11-06 19:13:57 -03:00
Martin Molinero
1f22299036 Cleanup 2023-11-06 18:57:05 -03:00
Martin-Molinero
e78d3083c5 Async universe selection (#7556)
* Async universe selection

- Add support for async universe selection, which will happen ahead of
  time in the data stack for a performance improvement

* Thrown if using Coarse+Fine Asynchronous Universe selectioon
2023-11-06 18:46:20 -03:00
Roman Yavnikov
e0251bdb23 Feature/eze support (#7526)
* feat: init eze-brokerage

* remove: eze from market collection

* remove: extra comma

* feat: add missing Security support

* feat: add Eze Order Properties

* feat: description, less code, remove extra configs

* Minor changes

---------

Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
2023-11-06 12:35:38 -03:00
Martin-Molinero
c5eaf34b4e Update readme.md 2023-11-02 18:27:02 -03:00
Jhonathan Abreu
a9d26084f9 Options algorithm performance enhancement (#7555)
* Ignore non-market universe data for security cache storage

This is a performance enhancement

* Minor refactor
2023-11-02 17:20:54 -04:00
Martin-Molinero
2f75c68312 Minor test brokerages fixes (#7552)
* AlgorithmStub Lazy Pandas Converter Set

* Fix brokerages tests adding orders twice
2023-11-01 18:23:30 -03:00
Jhonathan Abreu
d2f8c73d31 Invalidate option orders during a stock split (#7550)
* Invalidate option orders during a stock split

* Add unit test

* Minor changes

* Minor comments

* Options orders on split one time warning
2023-11-01 17:07:04 -03:00
Martin-Molinero
7c176910d7 Make sure algorithmstubs initializes python (#7551)
- Make sure the test algorithm stubs class initializes python before
  trying to set the pandas data converter which requires python
2023-11-01 15:09:00 -03:00
Martin-Molinero
4237d40173 Minor fix for python history tests (#7549)
* Minor fix for python history tests

* Add comment explaning why

* Handle enumerator throwing exception
2023-10-31 18:49:57 -03:00
Martin-Molinero
9f79016975 Fix new fundamental python deadlock 2 (#7548)
Fix new fundamnental python history usecase deadlock
2023-10-31 15:44:52 -03:00
Jhonathan Abreu
c0801afdbe Fix using custom data with Bybit brokerage model (#7547)
* Fix using custom data with Bybit brokerage model

* Add unit tests
2023-10-31 14:19:17 -03:00
Martin-Molinero
b21b6b9859 Fix deadlock on python new fundamentals (#7546) 2023-10-31 10:27:19 -03:00
Martin-Molinero
43585ac194 Add missing local OOS optimization config (#7545) 2023-10-30 19:12:52 -03:00
Martin-Molinero
4b06ca9147 Out of sample support tweaks (#7542)
* Add backtest job end date handling

* Fixes & rebases

* Refactor out of sample configuration handling

* Minor datetime format tweak
2023-10-27 18:23:21 -03:00
Louis Szeto
7d3733ccb7 Slippage model by market impact factors (#7513)
* Add Market Impact Slippage Model

* Add unit tests

* Add regression tests and random seeds

* Address peer review 1

* Add non-negative logic choice

* address peer review 2

* timezone setting adjustment

* Address peer review 2

* address second review

* minor updates

* minor updates

* Nit

* fix regression tests

* fix CI

* Rebase and fix CI

* regression test
2023-10-27 17:43:44 -03:00
Alexandre Catarino
f5d4bc4f7b Beta Indicator Supports QuoteBar (#7540)
* Adds Unit Test to Assert Beta Accepts QuoteBar

Beta must support QuoteBar for Forex/CDF and QuoteBarConsolidators

* Beta Indicator Supports QuoteBar
2023-10-27 13:12:39 -04:00
Martin-Molinero
265fbf7e60 Minor tweak for fundamental datetime type (#7541) 2023-10-27 11:51:26 -03:00
Jhonathan Abreu
2963936695 Bump Pythonnet version to 2.0.24 (#7539) 2023-10-27 10:02:08 -04:00
Jhonathan Abreu
d81f57b7a6 Bybit futures backtesting support (#7530)
* Add Bybit brokerage model regression algorithm

* Add BibytFutures brokerage model name and Bybit backtesting regression algorithms

* Add Bybit margin calculations unit tests

* Minor changes in data

* Unify Bybit Spot and Futures brokerage model into one class

* Add new Bybit configurations

* Revert config change
2023-10-26 20:03:10 -03:00
Martin-Molinero
88c7f7ff3b Fix QuantBook fundamental unit test (#7537) 2023-10-26 18:37:45 -03:00
Martin-Molinero
2e2136f7b8 Add missing multiperiod fields fundamental properties (#7536) 2023-10-26 13:15:05 -03:00
Martin-Molinero
f8b258d329 New Fundamental Data (#7490)
* New Fundamental Data

* Minor CIK lookup fix

* Handle live mode & delete unexisting properties

* Minor coarse fundamental adjustment

* Add fundamental history support

* Fix unit tests

* Performance improvements

* Fixes

* Minor regression algorithm fix

* Improvements. Add FundamentalUniverseSelectionModel

* Change default values

* Fix unit test

* Minor tweaks

* Fix unit test

* Minor error handling improvement

* Fix rebase
2023-10-25 15:47:42 -03:00
Martin-Molinero
4411d4a8fc Add missing Shimmy dependency (#7532)
- Add missing shimmy dependency
- Update, to normalize arm libraries with amd
2023-10-24 20:21:21 -03:00
Alexandre Catarino
99affdebef Updates Beta Indicator (#7533)
Adds a new constructor overload that matches the pattern in Lean: Symbol, Symbol, other types.
Adds a new constructor that infers the indicator name: "B(period)".
2023-10-24 19:57:47 -03:00
Martin-Molinero
8fa1f3659c Reduce foundation size (#7527)
- Reduce foundation size and minor library update
2023-10-23 13:14:46 -03:00
Martin-Molinero
005bebe224 Add new libraries and updates (#7522)
* Add new libraries and updates

* ARM foundation update

- Deleting creme library which has been merged into already included river, because it causes copulae build to fail
- Deleting Riskfolio-Lib which would try to install old numpy and fail
2023-10-20 19:19:32 -03:00
Jhonathan Abreu
1df11c0c64 Add Pythonnet's ClrBubbledException interpreter (#7523)
* Add ClrBubbleExceptionInterpreter

* Add ClrBubbledExceptionInterpreter tests

* Bump pythonnet version to 2.0.23

* Minor changes

* Minor change

* Minor fix

* Fix failing unit tests
2023-10-20 11:26:47 -03:00
Martin-Molinero
fff037b9c9 Bybit coinapi support (#7519) 2023-10-18 10:36:35 -03:00
Martin-Molinero
2959581d19 Update to pythonnet 2-0-22 (#7515) 2023-10-13 10:23:05 -03:00
Jhonathan Abreu
2232861c64 Modify AggregationManager implementation to improve reutilization (#7514) 2023-10-12 11:44:49 -03:00
Ricardo Andrés Marino Rojas
33eb9dec9b Solve missing bug with TimeZones (#7511) 2023-10-11 15:44:39 -03:00
Jhonathan Abreu
07fbbe65bb Default market hours to Always Open for base securities without subscription (#7509)
* Set default always open market hours entry for base security without subscription

Also return proper matching subscription for custom data symbols wihtout subscription.

* Minor changes

* Minor change
2023-10-11 15:36:38 -03:00
Alexandre Catarino
6e854550aa Adds Logging to OptionPriceModelResult.Evaluate (#7510)
To investigate zero Implied Volatility and Greeks.
2023-10-11 11:00:00 -03:00
Alexandre Catarino
93086b06db Improves Expiration/SetFilter Documentation (#7508)
The minimum and maximum expiration description was not correct.
2023-10-10 21:01:06 -03:00
Ricardo Andrés Marino Rojas
b86f001f8a Remove wrong Holiday from MHDB (#7503)
* Fix bug and add unit tests

* Update regression test
2023-10-09 20:49:37 -03:00
Ricardo Andrés Marino Rojas
844602c04a Fix bug with custom data subscription with the same symbol from multiple exchanges (#7500)
* Fix bug and add regression algo

* nit changes

* nit changes
2023-10-04 18:27:25 -03:00
Jhonathan Abreu
1a5a08175b New Terminal Link order properties (#7499)
* Add Account, Broker and Strategy TerminalLink order properties

* Minor changes
2023-10-04 18:16:39 -03:00
Alexandre Catarino
cbccb6e5cf Adds SimpleCustomFillModel to CustomModelsAlgorithm (#7498)
* Adds `SimpleCustomFillModel` to `CustomModelsAlgorithm`

The simple fill model shows how to implement a simpler version of the most popular order fills: Market, Stop Market and Limit.

This model was tested on QuantConnect Cloud, and will serve as additonal example, since we don't have an example that does not reuse the method of the base class.

* Handles Tick Resolution Case

Tick-resolution data doesn't have TradeBar. We can use the security price, since it represents a trade (`TickTrade`).
2023-10-04 18:07:32 -03:00
Martin-Molinero
78a9b80bbf Minor live result handler sampling fix (#7497)
- Make sure in live trading the result handler will correctly update the
  algorithm equity
2023-10-03 14:41:55 -04:00
Ricardo Andrés Marino Rojas
a0914e2ab1 Copy Data folder (#7496) 2023-10-03 09:48:56 -03:00
Jhonathan Abreu
fb3409d8a2 Custom data sourced from the object store (#7493)
* Support sourcing custom data from ObjectStore

* Add Python regression algorithm

* Wire engine to pass ObjectStore down to the stream readers

* Minor changes

* Minor unit tests fixes

* Remove unused SetupHandlerParameters.ObjectStore

* Minor changes

* Minor changes

* Support single-file zipped data to be sourced from object store

* Assert object store custom data history requests in regression algorithms

* Add custom object store data live data feed unit test

* Add multi-file object store custom data regression algorithms

* Minor fix
2023-10-02 15:54:57 -03:00
Ricardo Andrés Marino Rojas
b4bad69772 Dynamically Adjust Risk Free Rate of Return (#7489)
* First attempt to solve the bug

* Enhance implementation

* Enhance implementation

* Simplify implementation

* Rebase regression stats

* Solve unit test bugs

* Review

* Update Rolling.Sharpe() method

* Update regression stats

* Update unit tests

* Update missing regression algos

* Update Rolling.cs

---------

Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-10-02 13:42:28 -03:00
Ricardo Andrés Marino Rojas
b29e009d4d Remove unused methods (#7494)
All of the methods removed were used in the Statistics.Generate()
method, which is used no more in LEAN (See commit fac6f46)
2023-09-29 20:13:56 -03:00
Jhonathan Abreu
28eb1a4da4 Wire ROC for updates in risk parity PCM (#7485) 2023-09-26 11:28:12 -03:00
Ricardo Andrés Marino Rojas
2a1539cce6 Add Notes field in FixOrderProperties (#7491) 2023-09-26 11:27:03 -03:00
Martin-Molinero
b08fc979cf Update readme.md 2023-09-26 09:24:30 -03:00
Martin-Molinero
2128630389 Add Terminal Link Custom Order Notes (#7488) 2023-09-25 13:13:05 -03:00
Sebastian Karasek
6d35bfd3bc Ignore duplicate brokerage data (#7487) 2023-09-25 13:09:43 -03:00
Jhonathan Abreu
d12772d8eb Fix race condition in OptionModelsConsistency algorithms regarding log handler (#7482) 2023-09-22 12:01:33 -04:00
Louis Szeto
3db538d690 Add missing documentation attributes (#7481)
* Add missing documentation attributes

* Address peer review
2023-09-22 11:10:07 -03:00
Jhonathan Abreu
1c85ab164f Updated UniverseDefinitions.ETF|Index overloads for Python compatibility. (#7480)
Calling UniverseDefinition.ETF("TICKER",...) in Python was resolving the UserDefinition.ETF(Symbol...) overload due to Symbol's implicit string operator, causing the symbol to be wrongly created.
2023-09-21 18:12:27 -03:00
Ricardo Andrés Marino Rojas
d9923929b9 Solve bug in Tick Consolidator for Quote and Trade Tick types (#7475)
* Changes up to the date

* Revert "Changes up to the date"

This reverts commit 45dc9756bc.

* First attempt to solve bug

* Improve solution

* Add unit tests

* Fix bugs and add regression tests

* Solve bugs
2023-09-21 11:31:16 -03:00
Jhonathan Abreu
39f5f55b17 Avoid adding extra index subscriptions in AddOptionContract (#7479)
* Check for existing subscription before adding underlying in AddOptionContract

* Minor change
2023-09-21 11:30:05 -03:00
Martin-Molinero
a6c5448bb2 Add Bybit stable currencies & fix test log (#7474) 2023-09-20 13:56:59 -03:00
Martin-Molinero
0e182ae75f Add terminal link order properties (#7471) 2023-09-18 19:03:34 -03:00
Martin-Molinero
621d16eea8 Adjust order processor set location (#7468) 2023-09-18 12:17:55 -03:00
Martin-Molinero
fbad58161b Update readme.md 2023-09-18 11:47:33 -03:00
Sebastian Karasek
8a243059b0 Add Bybit integration (#7442)
* Add Bybit integration (#5898)

* Bybit order property update

XML docs

* Revert changes to Exchange.cs

* Cleanup

* Add bybit to config.json

* Fix default markets

* Update symbol properties

* Add file headers

* Fix possible order status for updating

* Update spdb

* Fix spdb

* Fix spdb
Remove orderbook depth settings

* Throws exception when spot brokerage is created with margin account
Fix tests

* Remove USDC contracts
2023-09-18 11:08:40 -03:00
Martin-Molinero
d276d6382d Update Binance SPDB (#7466)
* Update Binance SPDB

- Update Binance & BinanceUS SPDB

* Fix unit tests
2023-09-15 20:05:42 -03:00
Martin-Molinero
489fc5bd5f Fix chart api fetching and deserialization (#7467) 2023-09-15 20:04:46 -03:00
Ricardo Andrés Marino Rojas
fb489daa3e Feature trading technologies order properties (#7465)
* Create TradingTechnologiesOrderProperties

* Add XML docs

* Nit change

* Abstract FIX order properties
2023-09-15 12:50:47 -03:00
Alexandre Catarino
7e27ab74bb Deprecates IAlgorithmSettings.DataSubscriptionLimit (#7457)
* Deprecates IAlgorithmSettings.DataSubscriptionLimit

We will let the brokerage check and notify users that they have subscribed to datafeeds beyond their quota.

* Removes Unit Test

Also remove usage in `EmptyEquityAndOptions400Benchmark`.
2023-09-08 19:41:52 -03:00
Martin-Molinero
f93c9edfcb Update readme.md 2023-09-08 18:22:35 -03:00
Jhonathan Abreu
60a69cbf1d Fix brokerage tests race condition (#7458)
* Fix brokerage tests filled order modification race condition

* Listen to fill event in test setup in brokerage tests

* Minor changes

* Address peer review

* Minor changes
2023-09-07 19:35:29 -03:00
Henrik Strand
eccd1e7931 Fix typo (#7460) 2023-09-07 19:27:34 -03:00
Jhonathan Abreu
90a6d2f68f Insight and PortfolioTarget tag (#7456)
* Add Tag property to Insight

* Add PortfolioTarget Tag property

* Minor change

* Minor unit test fix
2023-09-07 16:59:01 -04:00
Jhonathan Abreu
372c197890 One-time warning for mismatching canonical/contracts security models (#7452)
* Send one-time warning about mismatching canonicals/contracts models

* Add regression algorithms
2023-09-06 10:57:16 -04:00
Martin-Molinero
f0c253c50b Update readme.md 2023-08-30 17:23:15 -03:00
Martin-Molinero
76c0ab01ee Update readme.md 2023-08-30 13:56:24 -03:00
Ricardo Andrés Marino Rojas
e47b4e63ab Collective2 module modernization and finalization (#7448)
* Removed platformId support from C2.
Modernized C2 API calls to APIv4.
Added C2 rate limiters (RateGate).
Added response logging so users can easily debug their code.
Added a few symbols for the demo.

* Address requested changes

* Address requested changes

---------

Co-authored-by: Francis Gingras <francis@collective2.com>
2023-08-30 13:48:10 -03:00
Landon Wilkins
f70cf97dee [typo] Update readme.md (#7449) 2023-08-30 12:59:29 -03:00
Ricardo Andrés Marino Rojas
b9f3b1a4a4 Add support for Fill models with COMBO orders in Python (#7446)
* Add support for Combo Orders with Fill Model

- Override ComboMarketFill, ComboLimitFill, ComboLegLimitFill in
  FillModelPythonWrapper.cs
- Modify FillModel.Fill() to use Python Fill model if it exists when the
  order is COMBO
- Add regression algorithm ComboOrdersFillModelAlgorithm.py

* Add regression algorithm

* Add regression algos

* Fix bug
2023-08-29 10:06:32 -03:00
Martin-Molinero
1645f9877e Minor serialization tweak (#7447) 2023-08-28 10:30:34 -03:00
Martin-Molinero
52c6d43d2e Update readme.md 2023-08-25 15:56:05 -03:00
Martin-Molinero
04fc0d5093 Update readme.md 2023-08-25 15:36:49 -03:00
Martin-Molinero
56164f636a Fix for continuous contract mapping (#7445)
- Remove mapping mode from map file since it can be reused and make it
  an argument when mapping. Adding unit test
2023-08-25 14:19:51 -03:00
Martin-Molinero
dc64a340ba Minor live performance improvements (#7441) 2023-08-23 19:20:46 -03:00
Ricardo Andrés Marino Rojas
8e0e823f66 Add Lumber Futures LBR (#7440)
* Update SB, MHDB and ExpirationFunctions

* Add unit tests

* Address required changes

* Nit change

* Nit change
2023-08-23 19:19:16 -03:00
Ricardo Andrés Marino Rojas
18e848853d Approximate order price for options when using IB Fee model (#7436)
* Modify IB Fee model to work without order.Price

* Fix bugs and add unit tests

* Update regression tests

* Solve bug and address changes

* Nit change

* Fix stats
2023-08-23 09:56:23 -03:00
Martin-Molinero
038d7a26b2 Update readme.md 2023-08-21 11:56:59 -03:00
Martin-Molinero
4ca5526461 Refactor object store file handling (#7438)
- Add FileHandler for local object store file operations
2023-08-21 10:11:07 -03:00
Louis Szeto
d9e4dba687 Change default American Option Pricing model to Binomial CRR model (#7426)
* Add unit test and test data

* Add unit test for model greeks accuracy and comparison

* Add regression test

* Correction on previous unit test to use realtime official IB Greeks

* Switch default American option price model to CRR model

* Address peer review
2023-08-18 14:34:46 -03:00
Martin-Molinero
5f2bae1de5 COrrectly handle subt generation failure (#7434) 2023-08-17 13:06:54 -03:00
Ricardo Andrés Marino Rojas
e065c752cc Fix bugs in InteractiveBrokersFeeModel.cs for Combo Market Order fees (#7432)
* Draft of unit test to reproduce error

* Fix bug and regression tests

* Remove draft unit test

* Check fees in ComboMarketOrderAlgorithm.cs

* Fix bug in fees for combo orders

- Update regression tests
- Solve bug in fees when combo orders had legs with different quantity
- Solve bug in fees when combo orders had legs with different security
  types
- Update IB comission rate for options where the price is higher than 0.1 USD

* Add explaining comments

* Use leg security fee model
2023-08-14 19:18:53 -03:00
Martin-Molinero
bc34c33c77 Update readme.md 2023-08-10 14:49:09 -03:00
Martin-Molinero
8f1dc76c7f Fix optimization candlestick handling (#7430)
* Fix optimization candlestick handling

- Fixes for optimization candlestick handling
- Centralize deserialization of ChartPoint into new
  ChartPointJsonConverter

* Minor fixes

- Update failing tests
- Update CI to fail if anything fails
2023-08-10 13:34:19 -03:00
Martin-Molinero
505ea3bd72 Update readme.md 2023-08-10 10:16:50 -03:00
Martin-Molinero
eecafbea09 Update readme.md 2023-08-10 09:48:29 -03:00
Martin-Molinero
0b47c84b8a Update readme.md 2023-08-09 15:10:30 -03:00
Ricardo Andrés Marino Rojas
4c3658f9d4 Fix bug in Momentum indicator (#7424)
* First attempt to fix bug

* Address requested changes

* Do not hide WarmUpPeriod property
2023-08-09 14:56:24 -03:00
Martin-Molinero
d8c58fb9e2 Minor candlestick json converter backwards compatility fix (#7428)
- Minor bug fix for candlestick json converter backwards compatibility,
  detected running the new report generator on an old lean backtest
  result json
2023-08-09 14:53:00 -03:00
Ricardo Andrés Marino Rojas
1fd0dd3566 Do not embellish parameters key names (#7427) 2023-08-09 14:27:10 -03:00
Jhonathan Abreu
6109ac8f1b Candlestick charts (#7425)
* Candlestick charts base implementation

* Series and Candlestick series json serialization

* Some cleanup

* Add AddPlot method for candlestick series to QCAlgorithm

* Remove Values property from ISeriesPoint

* Add candlestick QCAlgorithm.Plot trade bar methods

* Implement candlestick series re-sampling

* Add more SeriesSampler unit tests

* Add examples of candlestick charts usage to exisiting charting algorithm

* Address peer review

* Address peer review

* Derive Candlestick from Bar

* Sampler changes

* Add new series types from the cloud

* Add more candlestick series sampler tests

* Minor cleanup

* Minor changes
2023-08-08 17:52:46 -03:00
Ricardo Andrés Marino Rojas
aae4771b7e Fix Overflow bug in RandomDataGenerator (#7423)
* First attempt to fix the bug

* Allow the splitFactor to change over time

- Add unit test

* Nit change

* Address required changes

* Address required changes

* Adjust upper bound
2023-08-08 16:40:01 -03:00
Jhonathan Abreu
76b19161cb Fix updating StopLimitOrder.StopTriggered flag globally (#7407) 2023-08-08 16:37:47 -03:00
Henrik Strand
6e9df75d32 Replace chat badge (Slack -> Discord) (#7420) 2023-08-08 12:07:42 -03:00
Arthur Asenheimer
aae3f8b4d9 Fix minimum price variation for LE future (#7421)
* Adds IndicatorBatchUpdate

* Revert "Adds IndicatorBatchUpdate" (#3)

* Update symbol-properties-database.csv (#4)

Minimum price fluctuation for LE is supposed to be 0.00025 according to CME. (See also: https://www.cmegroup.com/markets/agriculture/livestock/live-cattle.contractSpecs.html)
2023-08-08 12:07:23 -03:00
Martin-Molinero
04bb2b503f Update readme.md 2023-08-04 15:54:57 -03:00
Martin-Molinero
df13e34e9e Update readme.md 2023-08-03 11:04:32 -03:00
Martin-Molinero
4976fc9a99 Revert breaking plotly update (#7415) 2023-08-03 10:57:22 -03:00
Ricardo Andrés Marino Rojas
aa1ebd0e65 Bug parameters in report bug (#7413)
* Solve bug in the parameters of the Report

Before, when the number of keys were odd a part of the raw template was
shown in the report generated. Additionally, the user couldn't define
the number of columns of the parameters table

* Add unit tests

* Enhance unit tests

* Nit change
2023-08-02 15:28:48 -03:00
Martin-Molinero
d1b8c13318 Dependency update and cleanup (#7411)
- Update Math.Numerics & QLNet to latest
- Remove unused old FSharp core causing issues
2023-08-01 19:26:20 -03:00
Martin-Molinero
a139aac522 Update readme.md 2023-08-01 14:46:37 -03:00
Ricardo Andrés Marino Rojas
3338486b52 Enable Report generator to use custom HTML template (#7410)
* Add support for custom HTML file in Report

* Add support for custom crisis HTML template

* Revert "Add support for custom crisis HTML template"

After considering this option carefully, the QC team has decided to
add this functionality in a different way.

This reverts commit aead1ff850.

* Get parameters and crisis HTML custom templates

* Move parameters html template to a file

* Nit change

* Remove template.crisis.html and add unit tests

* Nit change

* Nit change

* Add unit tests for the fail cases
2023-08-01 12:55:14 -03:00
Martin-Molinero
0c0eedf547 Update readme.md 2023-07-28 20:19:05 -03:00
Martin-Molinero
e8c1b0df48 Fix for CI python stubs (#7405) 2023-07-28 20:13:03 -03:00
Martin-Molinero
ed1362c8b0 Update readme.md 2023-07-28 18:56:46 -03:00
Jhonathan Abreu
906ab20bee Trailing stop orders (#7402)
* Add trailing stop orders base implementation

* Handle trailing stop order prices rounding

* Implement trailing stop orders fill logic

* Minor fill model changes

* Add ApplySplit to fill model interface for models that might need to be aware of splits.

Filling trailing stop orders require keeping track of min/max prices, which need to be split adjusted.

* Add brokerage order updated event for communicating certain order types prices changes

* Add order update event args class for brokerage side order updates

* Revert IFillModel.ApplySplit

* Add trailing stop orders regression algorithm

* Updated order ticket demo algorithm to include trailing stop orders

* Some cleanup

* Support trailing stop orders in IB brokerage model

* Some cleanup

* Fix failing tests

* Fix failing regression algorithm

* Address peer review

* Add trailing stop price calculation unit tests

* Minor changes

* Minor change
2023-07-28 17:49:58 -04:00
Jhonathan Abreu
10a9f31d65 Return valid default value for indicator Previous property (#7404) 2023-07-28 18:36:13 -03:00
Ricardo Andrés Marino Rojas
0817101bcd Include AlgorithmConfiguration.Parameters in the report generated and allow to override stylesheet (#7401)
* Add algorithm configurations to Report

* Add just Parameters section in the Report

* Revert "Add just Parameters section in the Report"

This reverts commit 775255127a212db81fc1cc1e23a35b7c60214eac.

* Include just AlgorithmConfiguration.Parameters

* Create ParametersReportElement

* Generate parameters into HTML dynamically

* Enable the user to modify CSS content throu

* Enable CSS override file to be passed through cmdline

* Check CSS Override file exists

* Fix bugs

* Address required changes

* Address required changes

* Address required changes
2023-07-28 18:33:24 -03:00
Ricardo Andrés Marino Rojas
3e9fc57bb0 Implement RangeConsolidator (#7385)
* Implement RangeConsolidator

It turned out that the behavior of RangeConsolidator was similar to
ClassicRenkoConsolidator. Then, some of the ClassicRenkoConsolidator
methods, were abstracted to new class called BaseTimelessConsolidator.cs,
from which both RangeConsolidator and ClassicRenkoConsolidator could
inherit, therefore resusing code. The following tasks were done:

- Create RangeConsolidator.cs
- Create RangeBar.cs
- Create BaseTimelessConsolidator.cs
- Create RangeConsolidatorTests.cs
- Modify ClassicRenkoConsolidator.cs

* Allow intermediate/Phantom RangeBar's

- Enhance unit tests
- Nit changes
- Allow intermediate/Phantom RangeBar's on RangeConsolidator

* Nit changes

* Create ClassicRangeConsolidator and more changes

- Add regression tests
- Enhance unit tests

* Address required changes

* Address requested changes

* Address requested changes

* Add regression tests with Tick Resolution

* Address required changes

* Increase Range for RangeConsolidatorWithTickAlgo

* Add more unit tests and solve bugs

* Nit change
2023-07-27 10:02:02 -03:00
Martin-Molinero
e442586a0d Test CI workaround (#7399)
- Replace default container gh ci support for custom action to enable
  cleaning up host
2023-07-24 19:23:16 -03:00
Arthur Asenheimer
adca9ea5b3 Fixed minimum price variation for Futures LE and HE (#7394)
* Adds IndicatorBatchUpdate

* Revert "Adds IndicatorBatchUpdate" (#3)

* Fixed minimum price variation for Futures ZL and HE
2023-07-24 11:15:23 -03:00
Martin-Molinero
947a3fc93b Delete mounted tools (#7396) 2023-07-21 13:40:39 -03:00
Jhonathan Abreu
b1b9680880 Handle API backtest charts read null requests (#7395) 2023-07-21 13:40:26 -03:00
Martin-Molinero
7aabea102b Update readme.md 2023-07-20 20:29:36 -03:00
Jhonathan Abreu
2522a14050 Fix naked index option margin requirement percentage (#7391) 2023-07-20 19:29:02 -03:00
Jhonathan Abreu
69eea5419c Make symbol-count optional and dependent on tickers in random data generator (#7390) 2023-07-20 19:23:50 -03:00
Martin-Molinero
a6283b0ab7 Fix unsupported configuration warnings filter (#7386) 2023-07-19 12:10:10 -03:00
Martin-Molinero
2a941e73e2 Add warning for unsupported live configurations (#7383)
- Add warning for unsupported live configurations
2023-07-18 16:18:56 -03:00
Martin-Molinero
1c3180b681 Do not transition from canceled to invalid order (#7382)
- Minor adjustment not to transition from canceled to invalid order
  status, which can happen in some cases in live trading as a race
  condition. Adding unit test
- Make sure open order status is set to submitted if none provided,
  adjusting existing test
2023-07-18 16:16:08 -03:00
Martin-Molinero
ffcfb4eeb2 Adjust debugger version for pycharm 2023.1.4 (#7381) 2023-07-18 16:15:58 -03:00
Martin-Molinero
e2ee42a0e2 Respect minimum time in universe always (#7379)
- Always respect the minimum time in universe even if we haven't gotten
  any data point yet. This is specially useful for live trading options
  which are illiquid
2023-07-17 14:57:29 -03:00
Lehonti Ramos
026ba6ed5b Modernization of syntax used in argument check exceptions (#7380)
* Changed argument exceptions so that they used the nameof() operator for parameter names

* Update IQSocket.cs

---------

Co-authored-by: John Doe <john@doe>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-07-17 14:53:17 -03:00
Martin-Molinero
3a3dbe29ea Bug chain selection improvements (#7376)
* Contract chain selection improvements

- Adjust contract chain selection behavior for futures and options so we
  are sure to use the correct local time when filtering expirations.
  Adding unit test reproducing issue

* Update futures regression algorithms

* Address reviews
2023-07-13 20:34:45 -03:00
Martin-Molinero
663d0ff094 Remove expire check for live universe subscriptions (#7377)
- Remove expiration check for live universe subscription causing errors
2023-07-13 20:33:24 -03:00
Ricardo Andrés Marino Rojas
bfca56c4a8 Improve Tradier Brokerage Model (#7373)
* Check the TimeInForce in Tradier orders is not GTD

* Add unit tests

* Nit changes
2023-07-13 13:00:26 -03:00
Martin-Molinero
28fe8a1e7c Fix contract security filter universe (#7374)
* Fix contract security filter universe

- Fix for contract security filter universe which would would use .Time
  to filter expirations which could be yesterdays time at midnight
  localtime. Adding unit tests reproducing issue

* Update regression algorithms
2023-07-12 20:46:17 -03:00
Martin-Molinero
492490e2c5 Fix download CI unit test (#7372) 2023-07-12 19:59:18 -03:00
Ricardo Andrés Marino Rojas
bfb820c617 Update MHDB CME Group Futures on Good Friday (#7368)
* Update MHDB CBOT Futures on Good Friday

* Update MHDB CME Futures on Good Friday

* Update MHDB CBOT Futures on Good Friday

* Update MHDB CME Futures on Good Friday

* Update MHDB comex and nymex futures on good friday

* Revert "Update MHDB comex and nymex futures on good friday"

Since all nymex and comex futures had a holiday on Good Friday, it's
better to add the holiday on `Future-nymex-[*]` and `Future-comex-[*]`

This reverts commit e111c8e461.

* Remove Good Friday holiday for cme and cbot futures

- Remove Good Friday holiday from `Future-cme-[*]` and `Future-cbot-[*]`
- Add Good Friday holiday for specific cme and cbot futures

* Add unit tests and update MHDB

- Add unit tests asserting LEAN reads correctly Good Friday holidays and
  early closes for CME Group Futures
- Update the holidays for other CME group Futures on MHDB

* Fix bugs

* Enhance unit tests
2023-07-12 16:04:22 -03:00
Martin Molinero
bdfe9399da IB gateway Typo 2023-07-12 13:50:10 -03:00
Martin-Molinero
240e84dd3d Revert to IB 10.19.2a (#7371) 2023-07-12 13:43:42 -03:00
Martin-Molinero
62fb61929f Update readme.md 2023-07-11 20:49:03 -03:00
Jhonathan Abreu
72e7dca7af Bump Pythonnet version to 2.0.21 (#7367)
* Add security dynamic properties unit and regression tests.

These assert that dynamic properties that are instances of python classes that inherit c# classes keep their python object references.

* Minor change

* Bump pythonnet version to 2.0.21

* Fix security dynamic properties cast from PyObject

* Minor change
2023-07-11 20:43:49 -03:00
Martin-Molinero
1ea0cd9d82 Check continuous future mapped symbol is not expired in live (#7364)
- In Live trading check the continuous future mapped symbol is not expired
  before subscribing to the data queue handler. Adding unit tests
2023-07-11 20:43:36 -03:00
Martin-Molinero
a099b9fb71 Minor tweaks to avoid CI tests random failures (#7370)
* Minor tweaks to avoid CI tests random failures

- Increate timeout of research start test, using default value
- Minor tweaks for rate gate to improve performance

* Clean up rategate tests
2023-07-11 20:43:22 -03:00
Martin-Molinero
54413e99b4 Live Option Chain Source Fix (#7369)
- Fix live option chain sources handling
2023-07-11 20:43:11 -03:00
Ricardo Andrés Marino Rojas
03df6c5ccb Update MHDB with 3rd/4th July Holiday hours (#7366)
* Update MHDB with NYSE and ICE holiday hours

- Update holidays and early closes for ´Equity-usa-[*]´
- Update holidays for certain products from Ice Futures US

* Add missing holiday hours in MHDB for CME-G Futures

- The missing holiday hours were from 3 July 2023

* Remove duplicates
2023-07-11 15:21:51 -03:00
Martin-Molinero
329ce54ca9 Update readme.md 2023-07-11 12:12:45 -03:00
Martin-Molinero
2f21a27023 Revert trade builder api change (#7365)
- Revert trade builder api change, add SecurityManager setter, to be
  called by the algorithm
2023-07-11 10:54:29 -04:00
Jhonathan Abreu
e562b8c99c Fix IsExchangeIpen bar check in FillModel and EquityFillModel (#7363)
* Fix market-open bar checks for non-daily resolutions in fill models

* Address peer review

* Minor change
2023-07-10 18:41:17 -03:00
Ricardo Andrés Marino Rojas
f8b79b8d6b Make indicators work with RenkoBars and VolumeRenkoBars (#7360)
* Address JB comment

* Remove repeated fields in BaseRenkoBar

- Add new unit test to all indicators that inherit from
  IndicatorBase<TradeBar>. This test asserts the indicators can receive
  RenkoBar's as input

* Add Regression test and improve unit tests

- Change `Volume` property from `RenkoBar.cs` since RenkoBar's don't
  have Volume. Now it throws an error when accessed

* Address required changes

* Add Python regression test and enhance unit tests

* Enhance unit and regression tests

* Assert indicator current value at the end

* Allow more indicators to use Renko/VolumeRenkoBar
2023-07-10 11:27:03 -03:00
Martin-Molinero
9dbeb3255d Update python debuggers (#7361)
- Update python debuggers
2023-07-10 10:55:50 -03:00
Martin-Molinero
7e81693d3c Add UnrealizedPnLPercent to holdings (#7358) 2023-07-10 10:55:00 -03:00
Jhonathan Abreu
bc05aa03f9 Fix win/loss count statistics for options assignments (#7354)
* Add ITM option assignment trade as win in trade statistics

* Add TradeStatistics unit tests

* Add unit tests

* Add OptionTrade class to abstract IsWin method

* Keep track of winning/losing trades

* Add more unit tests

* Change Trade.IsWin to a property calculated by the trade builder

* Improve regression algorithm

* Handle ITM option sell win/loss statistics

* Update regression algorithms statistics

* Revert accidental unwanted changes

* Address peer review

* Keep track of winning and losing transactions for portfolio statistics

* Add more SecurityPortfolioModel unit tests

* Fix failing unit tests

* Minor changes

* Address peer review

* Minor fix
2023-07-10 10:20:29 -03:00
Martin-Molinero
c75d0d8a6d Update readme.md 2023-07-07 12:12:19 -03:00
Martin Molinero
4c9a455a08 Delete data folder before generating stubs in CI 2023-07-06 19:51:41 -03:00
Martin-Molinero
f17a8e4d92 Update readme.md 2023-07-06 15:19:52 -03:00
Martin-Molinero
6ccafe9640 Minor fix for invalid update events (#7357)
- Handler brokerage invalid update order event once the order has
  already been filled by the brokerage. Adding unit test reproducing the
  issue
2023-07-06 15:13:03 -03:00
Martin-Molinero
ddbc654d53 Update readme.md 2023-07-05 19:21:27 -03:00
Martin-Molinero
c86b005564 Add exchange post fix for wolverine order properties (#7355) 2023-07-05 19:17:43 -03:00
Martin-Molinero
0303cf079f Remove Capacity from Runtime Statistics (#7353) 2023-07-05 11:23:59 -03:00
Martin-Molinero
626f64e37d Update IB gateway to 1023 (#7351) 2023-07-04 14:05:35 -03:00
Martin-Molinero
1ca007faa3 Update readme.md 2023-07-03 14:49:46 -03:00
Jhonathan Abreu
d39a9420d5 Fix Security.IsMarketOpen for cases outside regular MH and last bar (#7343)
* Fix Security.IsMarketOpen for cases outside regular MH and last bar

* Minor changes

* Move bar check of IsMarketOpen into FillModel

* Minor changes

* Minor changes

* Minor changes
2023-07-03 14:40:31 -03:00
Martin-Molinero
240d7db8e2 Update readme.md 2023-07-03 11:00:34 -03:00
Martin-Molinero
49b6c56fe8 Fix for stack tracer code cleaner null reference (#7346) 2023-07-03 10:56:38 -03:00
Jhonathan Abreu
af0de8d2e9 Deployment target and running mode algorithm properties (#7337)
* Add algorithm's mode and deployment target properties source from job packet

* Address peer review

* Add Python regression algorithm
2023-07-03 09:55:21 -04:00
Ricardo Andrés Marino Rojas
b47619e7b9 Remove EnableAutomaticWarmUp and IIndicatorWarmUpPeriodProvider impl from RVA (#7344)
* Remove EnableAutomaticWarmUp for RVA indicator

* Remove `IIndicatorWarmUpPeriodProvider` impl
2023-06-30 16:15:27 -03:00
Martin-Molinero
092dcda143 Adding new packet types (#7341) 2023-06-30 16:14:03 -03:00
Ricardo Andrés Marino Rojas
e029b96229 Fix bug in VolumeWeightedAveragePriceIndicator (#7336)
* Fix bug

- Add `ResetHandler()` and `IsReset` field in `CompositeIndicator.cs`
- Modify `CompositeIndicator.Reset()` to invoke the IsReset event
- Modify `VolumeWeightedAveragePriceIndicator.Reset()` method to reset
  its composite indicator
- Modify `IndicatorExtensions.WeightedBy()` to register an event to the
  returned composite indicator `IsReset` field

* Enhance implementation

* Address Requested changes

* Nit changes

* Nit change

* Nit change

* Address chages

- Make ResetCompositeIndicator inherit from CompositeIndicator and
  override `Reset()` method
- Add ResetCompositeIndicator unit tests
- Modifiy IndicatorExtensions to keep returning the same type in
  `WeightedBy()` method

* Avoid modify other IndicatorExtensions methods

* Nit changes

* Reset inner indicators and add more unit tests
2023-06-30 13:36:44 -03:00
Martin-Molinero
25d664e349 Update readme.md 2023-06-30 11:23:01 -03:00
Martin-Molinero
7952db992b Revert IB gateway update (#7345) 2023-06-30 11:18:27 -03:00
Martin-Molinero
936350cf45 Feature update foundation (#7342)
* Update foundation image

* Update python packages tests

- Fix bug in python initializer path priority for virtual envs

* ARM foundation update
2023-06-29 18:06:28 -03:00
Martin-Molinero
d173c5d65e Update DockerfileLeanFoundation 2023-06-28 10:03:24 -03:00
Jhonathan Abreu
a02309f2c6 Fix indicator name generation method (#7335)
* Fix indicator name generation method

* Minor change

* Add period to Beta indicator name
2023-06-27 16:03:43 -03:00
Jhonathan Abreu
956428b7bf Security cache dynamic collection for custom properties (#7327)
* Dynamic security properties for quick objects storage

* Documentation and other minor changes

* Add Security indexer to access custom properties

* Address peer review

* Minor changes

* Improve regression algorithms

* Bumped pythonnet to version 2.0.19

* Bumped pythonnet to version 2.0.20

* Address peer review
2023-06-27 10:39:20 -04:00
Martin-Molinero
df935aa608 Avoid research CI timeouts (#7334) 2023-06-23 11:17:18 -03:00
Ricardo Andrés Marino Rojas
4fd58ce180 Fix bug in Insight Weighted PCM (#7333)
* Fix bug and add unit tests

- Modify `InsightWeightingPortfolioConstructionModel.cs/py` to take the
  absolute value in its `GetValue()` method
- Modifiy `InsightsReturnsTargetsConsistentWithDirection()` unit test to
  consider also the case where the direction is Down and the weight is
  negative

* Nit changes
2023-06-23 10:08:45 -03:00
Martin-Molinero
96b56f06d5 Minor Packet type addition (#7332) 2023-06-22 13:42:32 -03:00
Martin-Molinero
05ab723b63 Update readme.md 2023-06-21 15:42:32 -03:00
Ricardo Andrés Marino Rojas
14b256846d Handle potential Error Code returned by CrunchDAO (#7330)
When a user tries to get its last submission ID with an empty API key,
CrunchDAO returns an Error Code, therefore we need to handle that case
2023-06-21 15:27:17 -03:00
Derek Melchin
c4c66c2aba Update crunchdao demo algorithm (#7292) 2023-06-21 15:27:06 -03:00
Ricardo Andrés Marino Rojas
1996498af5 Modify DonchianChannel.cs and spy_with_don50.csv (#7329) 2023-06-21 15:26:58 -03:00
Martin-Molinero
e22565c849 C# stacktrace exception normalization (#7328)
- Following the Py pattern of exception handling we will normalize stack
  traces for C# too, adding unit test
2023-06-21 10:51:17 -03:00
Jhonathan Abreu
177531651c QCAlgorithm.BrokerageName property (#7325)
* Add QCAlgorithm.BrokerageName property

* Add QCAlgorithm.BrokerageName property in python algorithm

* Address peer review

* Address peer review

* Address peer review
2023-06-20 11:24:27 -04:00
Ricardo Andrés Marino Rojas
a309322ae5 Fix CustomPartialFillModelAlgorithmFails.cs/py (#7321)
* Fix bug

The algorithm `CustomPartialFillModelAlgorithm.cs` was not working as
expected with short orders because in its Fill model, the variable
`absoluteRemaining` instead of decrease was being increased since
the `FillQuantity` in each call to this method was negative. Therefore
when this amount was substracted to `absoluteRemaining`, instead of
substract, it was added. Hence the method created more partial orders
than expected, specifically: 580 short orders for SPY with Quantity -10.

* Fix `CustomPartialFillModelAlgorithm.py`

* Address required changes

* Nit change

* Address required changes
2023-06-20 09:46:11 -04:00
Jhonathan Abreu
5ddc8c3766 Add unit tests to assert pandas dataframe multiindex slicing support (#7324) 2023-06-19 17:52:25 -03:00
Jhonathan Abreu
5d6110f38c Make summary statistics available to algorithms at runtime (#7320)
* Make statistics available at runtime to algorithms

* Re-calculate statistics on every call

* Housekeeping

* Add regression algorithms

* Address peer review

* Support for custom summary statistics at runtime

* Minor changes

* Address peer review

* Address peer review

* Minor changes

* Minor changes
2023-06-19 17:34:59 -03:00
Ricardo Andrés Marino Rojas
eeb512fac6 Fix RenkoConsolidator (#7317)
* Fix bug and add unit tests

The bug was raised because rounding the first point inserted in the
RenkoConsolidator didn't get the closest y-multiple of the given number
x, where y is the bar-size. In order to compute the first y-multiple of
the given number x, we need to first compute x mod y := x - y*Floor(x/y),
once we get this number we divide it by y to know if we should round x
to minimum y-multiple greater than x, or should round x to the maximum
y-multiple smaller than x. If (x mod y)/y < 0.5 we round down, otherwise we round up (the amount (x mod y)/y is always less than one and higher than 0). See the Art of Computer Programming, Vol I. Donald E. Knuth.

- Add `GetClosestMultiple()` method in `RenkoConsolidator.cs`
- Add more unit tests

* Nit change

* Add XML docs

* Address required changes and add more unit tests
2023-06-16 18:36:56 -03:00
Martin-Molinero
2547af1ccc Update readme.md 2023-06-15 12:42:27 -03:00
Martin-Molinero
b21fcc98be Add language model packet types (#7318) 2023-06-15 12:38:39 -03:00
Jhonathan Abreu
60aba9efa4 Make order ticket available from order event (#7316)
* Make order ticket available from order event

* Add regression algorithms

* Address peer review

* Address peer review
2023-06-15 11:11:06 -04:00
Jhonathan Abreu
94572f571c Fix Equity MOO and MOC orders fill for tick subscriptions (#7315)
Properly selecting the official open/close and opening/closing prints
trade condition flags from trade ticks.
2023-06-15 11:02:55 -04:00
Jhonathan Abreu
501dc01399 Indicators history rolling window (#7314)
* Implement indicator history through a rolling window

* Minor changes and extend unit tests

* Add regression algorithms

* Minor changes

* Update regression algorithms examples

* Move resizing logic from IndicatorBase to RollingWindow

* Add unit tests and other minor changes

* Minor fix

* Add unit tests and other minor changes

* Add unit test
2023-06-13 15:07:09 -03:00
Martin-Molinero
d1171500e3 Update readme.md 2023-06-13 10:51:47 -03:00
Jhonathan Abreu
d32bf13b4d Option strategy position group buying power calculation for single securities (#7308)
* Fix position group BP calculation

* Fix position group BP calculation

* Extend option startegy buying power unit tests

* Fix option strategy buying power calculation to account for order direction
2023-06-13 10:34:08 -03:00
Martin-Molinero
4d55493000 Future and option universe selection improvements (#7313)
* Normalize universe selection future and option creation

- Normalize universe selection future and option creation to include
  canonical securities enabling continuous future support

* Update existing regression algorithms

* Self review

* Address review

* Extra regression test check
2023-06-13 10:32:26 -03:00
Martin-Molinero
24820fe92c Minor future margin model improvements (#7306)
- Refresh margin requirements daily
- Refactor margin requirements so they are fetch once per future symbol
2023-06-12 10:46:41 -03:00
Martin-Molinero
73c71c6913 Add missing GC future auxiliary data (#7312)
* Add missing GC future auxiliary data

- For improved testing add missing GC comex future auxiliary data.
  Updating regression tests

* Update regression algorithm expected data points
2023-06-09 19:43:34 -03:00
Ricardo Andrés Marino Rojas
3c9f9aae20 Fix bug in MarketProfile indicator (#7310)
* Fix bug, add unit tests and nit changes

The bug was raised because if two inputs points with repeated close values were inserted,
and the second one had 0 volume, when the first one is removed from
_oldDataPoints, as the reamaining value of it in _volumePerPrice is
zero, that entry is removed from _volumePerPrice. Therefore, when
the second input point is removed from _oldDataPoints, this entry
is not found in _volumePerPrice. Then the changes made were:

- Modify MarketProfile.Add() method to check every removed data point is
  still in _volumePerPrice
- Add unit tests to covert this change
- Nit changes in VolumeProfileTests.cs

* Fix bugs and add more unit tests

- The Fill Forward bars shouldn't be considered in the calculations as
it's not real data.

- If bar inserted is not FF but has zero volume, it could remove a price
  value from VolumePerPrice and leave this sorted list empty, then each
  time we access that list we need to first check it's not empty

* Enhance ComputeNextValue() and add more unit tests
2023-06-09 19:14:45 -03:00
Martin-Molinero
ff47ede36c Minor fix for automatically added option underlying (#7311)
- Lean engine will automatically add an options underlying if not
  present, but in most cases the option chain will select the underlying
  too, so let's make sure the configurations match. Previous to this
  change 'fill forward' setting could be different causing the
  underlying to be duplicated in the data stack
2023-06-09 19:03:35 -03:00
Martin-Molinero
1a3138d0cd Update readme.md 2023-06-08 17:57:37 -03:00
Jhonathan Abreu
756a61b8e0 ShortCallCalendarSpread and ShortPutCalendarSpread strategies helper factory methods (#7304)
* Add ShortCallCalendarSpread and ShortCalendarPutSpread strategies helper factory methods

* Housekeeping
2023-06-08 15:22:45 -04:00
Jhonathan Abreu
b479300587 Add IronCondor strategy helper factory methods (#7305) 2023-06-08 14:48:24 -04:00
Martin-Molinero
d2d3cdcc0f Update readme.md 2023-06-08 13:37:11 -03:00
Martin-Molinero
bae69aaa0a Add ARM foundation image (#7299)
- Readding ARM foundation image without Interactive brokers support
2023-06-08 13:29:42 -03:00
Martin-Molinero
ee3cea805e FactorFiles bases live auxiliary events (#7293)
- Adjusting live stack to emit live auxiliary events based on factor files.
    Updating existing tests
  - Minor improvements for map & factor file provider daily refresh time.
    Adding unit tests
2023-06-08 13:27:55 -03:00
Jhonathan Abreu
ad6046fea5 ShortButterflyCall and ShortButterflyPut strategies helper factory methods (#7302)
* Add ShortButterflyCall and ShortButterflyPut strategies helper factory methods

* Reduce duplication by adding the base OptionStrategyFactoryMethodsBaseAlgorithm algorithm class

* Housekeeping
2023-06-08 11:55:48 -03:00
Martin-Molinero
cc9a061cb1 Fix python Interpret unit test (#7301) 2023-06-07 18:05:16 -03:00
Jhonathan Abreu
90a2c06a4c Add ShortStaddle and ShortStrangle strategies helper factory methods (#7300) 2023-06-07 16:55:47 -03:00
Jhonathan Abreu
615827f259 NakedCall and NakedPut strategies helper factory methods (#7298)
* Add NakedCall and NakedPut strategies helper factory methods

* Housekeeping
2023-06-07 10:43:01 -04:00
Ricardo Andrés Marino Rojas
b64169fd20 Fix Beta chart in Report (#7295)
* Fix bug in Beta statistics

- Beta in Report was calculated using equity points and not daily
  performance points, as it's done in Backtest
- Performance points were not being divided by 100, as it's done in
  StatisticsBuilder
- Benchmark points were not being converted into a percentage daily
  performance of the benchmark, as it's done in StatisticsBuilder

* Improve implementation and add unit tests

* Enhance implementation and add more unit tests

* Enhance implementation

* Nit change

* Nit changes
2023-06-07 11:10:10 -03:00
Jhonathan Abreu
cb0661c79e Add CoveredPut and ProtectivePut strategies helper factory methods (#7297) 2023-06-07 10:01:49 -04:00
Jhonathan Abreu
5d148683b7 CoveredCall and ProtectiveCall strategies helper factory methods (#7296)
* Add CoveredCall strategy helper factory method

* Add ProtectiveCall strategy helper factory method

* Housekeeping
2023-06-06 18:22:30 -03:00
Jhonathan Abreu
0df6366301 Options premium in margin calculations (#7294)
* Make maintenance margin zero for long options

* Use OptionIntialMargin in OptionMarginModel

* Add naked call and put strategies unit tests

* Minor fix
2023-06-06 13:07:32 -03:00
Jhonathan Abreu
bdcb6d9474 Account for premium in options strategies margin (#7290)
* Account for premium in option strategies margin

* Minor fixes

* Add OptionInitialMargin class to separate strategies margin and premium

* Minor fix

* Minor fix

* Cleanup, docs and other minor changes

* Minor changes

* Minor changes

* Minor changes

* Address peer review
2023-06-05 12:58:48 -03:00
Ricardo Andrés Marino Rojas
b14bda2dc0 Add SetAccountCurrency() override (#7284)
* Add SetAccountCurrency overload

- Add SetAccountCurrencyOverload to allow the user to set also account
  currency quantity
- Add regression and unit tests to cover the changes

* Add regression algos

* Simplifiy SetAccountCurrency implementation

* Minor changes

* Minor changes
2023-06-01 17:44:45 -03:00
Martin-Molinero
1283f52de1 Add multi symbols tick history warning (#7289)
- Add warning message when using the multi symbol tick type history
  algorithm api
2023-06-01 17:42:40 -03:00
Martin-Molinero
64d0eaefab Update readme.md 2023-05-31 20:07:56 -03:00
Martin-Molinero
e42d84319d Support overriding position group margin requirements (#7286)
* Add support for Null SecurityPositionGroupModel

- Add support for algorithms to set the null security position group
  model which will not group securities together but rather return the
  single group buying power model. Adding regression algorithms

* Add Null Margin python regression & cleanup

- Add python regression algorithm & minor regression algorithms clean up
2023-05-31 19:53:50 -03:00
Martin-Molinero
cc73f5bca8 Add missing MHDB 'holidays' entry for backwards compatibility (#7287) 2023-05-31 17:58:26 -04:00
Jhonathan Abreu
0ff3622d1e Fix position group HasSufficientBuyingPowerForOrder (#7285)
* Fix position group HasSufficientBuyingPowerForOrder

Comparing computed delta BP -- which already considers every impacted
group -- with the right available buying power (the remaining margin)

* Minor changes
2023-05-31 13:14:14 -03:00
Martin-Molinero
ef01980b07 Python history improvements (#7283)
* Pandas frame include all ticks

- Pandas data framde history response will include all ticks. Updating
  existing and adding new tests

* Python pandas converter performance improvement
2023-05-31 10:22:21 -03:00
Jhonathan Abreu
82b3468ab7 Add naked single-option strategies (#7231)
* Handle liquidating option position with an option strategy

* Handle liquidating option position with an option strategy

* Minor changes

* Minor fix in default margin model margin call order generation
2023-05-30 15:59:28 -03:00
Martin-Molinero
bce3fb41bb Update readme.md 2023-05-30 13:51:08 -03:00
Ricardo Andrés Marino Rojas
7f6da62e5d Add TriggerPrice field when applying a split (#7279)
* Add TriggerPrice field when applying a split

If one stock is split in k parts, the new TriggerPrice in an order for that stock should be also scaled by a factor of k/10. It was made:
- Modify `DefaultBrokerageModel.ApplySplit()` to adjust `TriggerPrice` field
- Regression and unit test was added

* Check Limit Price for LimitIfTouched

* Nit change
2023-05-30 13:36:49 -03:00
Martin-Molinero
9aa9f715ec Minor MHDB Concurrent Usage Fix (#7281)
- Fix race condition with multiple threads creating the MHDB
2023-05-30 13:35:29 -03:00
Martin-Molinero
c33ce2f8c3 MHDB Merge Common Holidays, LateOpens & EarlyCloses (#7278)
* MHDB will merge common entry

- The MHDB will merge the market and security common entry holidays,
  early closes and late opens

* Normalize & reuse future US holidays

- Normalize & reuse future US holidays

* Update existing unit tests expected stats
2023-05-30 11:54:28 -03:00
Martin-Molinero
383acc06d2 Update readme.md 2023-05-26 18:58:49 -03:00
Jhonathan Abreu
5c5201944a Fix position group order quantity calculation for delta/target buying power (#7230)
* Fix PositionGroupBuyingPowerModel quantity for delta calculation

The model was calculation the order size that required a margin equal to
the given delta. This fix makes it so that it calculates the position
group order quantity required to get the given buying power delta,
taking into account the holdings for the existing position group in the portfolio.

* Fix PositionGroupBuyingPowerModel quantity for delta calculation

* Add unit tests

* Add unit tests

* Add unit tests

* Housekeeping

* Housekeeping

* Adapt unit tests and move messages to Messages class

* Improve quantity calculation for target BP loop

- PositionGroup.Quantity is now always positive.
- Added PositionGroupExtensions.Closes method and use it to check if reducing a position in PositionGroupBuyingPowerModel.GetPositionGroupBuyingPower. This is necessary since now a PositionGroup side is always "long" (see first bullet point).

* Improvements

* Improvements and new PositionGroup unit tests

* Unit tests improvements

- HasSufficientBuyingPowerForOrder test cases were completely updated to
  make it accurate in terms of Lean's margin calculation.
- BuyingPowerForPositionGroupCalculation test was fixed in order to get
  the correct expected result.

* Fixes for failing tests

* Added additional check to OptionStrategyMarginCallEventsAlgorithm

* Improve documentation comments

* Fix option strategies BuyingPowerForPositionGroupCalculation unit test

* Fix PositionGroupBuyingPowerModel.GetPositionGroupBuyingPower

Also address peer review

* Minor changes

* Update unit tests for new inverse strategies

Also fixed PositionGroupExtensions.WithQuantity to resolve inverse
strategy

* Minor fix

* Allow target/delta to go to the opposite direction of the position group

* Housekeeping

* Handle quantity for target/delta BP request for different reference position group

* Revert removal of PositionGroupBuyingPowerParameters.Direction

* Minor changes

* Peer review

* Minor tweaks on the position group buying power model

* Minor fix
2023-05-26 17:22:58 -04:00
Martin-Molinero
410956bf9f FreePortfolioValuePercentage Trailing Behavior (#7272)
* Implement Trailing FreePortfolioValue

- Implement Trailing FreePortfolioValue by default, users will be able
  to set it to a fixed number if desired. Adding regression algorithm
- Setting the default 'MinimumOrderMarginPortfolioPercentage' from 0 to
  0.1% of the TPV to avoud tiny trades by default

* Update existing regression algorithms

* Address reviews

- Send warning message to the user if a trade does not happen due to the
  default setting of the minimum order margin percentage value

* Address reivews

* Rename TotalPortfolioValueLessFreeBuffer

* Update new regression algorithm
2023-05-25 18:48:04 -03:00
Martin-Molinero
2147d868d8 Minor fix CrunchDAO Symbology (#7276)
* Minor fix CrunchDao Symbology

- Minor fix for CrunchDao Symbology. Updating existing tests

* Add missing symbol mapping

- Add IAlgorithm.Ticker(Symbol) functionality which will return the
  latest ticker for the requested symbol at the current algorithm time
- SignalExporters will use Ticker to get the current symbol ticker

* Rename SecId GetTicker to Ticker
2023-05-25 17:51:40 -03:00
Martin-Molinero
1e70673e00 Replace QC500 for SPY ETF (#7277)
- Replace manual QC500 universe for SPY ETF universe
2023-05-25 17:44:45 -03:00
Martin-Molinero
4823cca7ef Multiple Symbol Selection Universe (#7273)
- Add support and example algorithms for multiple symbol selection universe
 including custom data types.
2023-05-25 15:23:18 -03:00
Martin-Molinero
46d5d46aca Remove Alpha Licence References (#7275) 2023-05-25 12:51:33 -03:00
Ricardo Andrés Marino Rojas
3712786301 Enable custom Python optimizer in C# MeanVarianceOptimizationPortfolioConstructionModel (#7274)
* Solve bug and add regression test

The bug was raised because, when trying to use C#
MeanVarianceOptimizationPortfolioConstructionModel from a Python
algorithm, there wasn't a constructor that accepted a portfolio optimizer
as a PyObject. Additionally, there wasn't also a Python Wrapper to wrapp
that portfolio optimizer.

- Add PortfolioOptimizerPythonWrapper.cs
- Add constructor in
  MeanVarianceOptimizationPortfolioConstructionModel.cs that accepts
  portfolio optimizer as a PyObject
- Add regression algorithms to cover the changes

* Improve constructor overload implementation

* Change implementation to follow API pattern

* Enhance implementation and add unit tests

* Enhance implementation and add more unit tests

* Enhance implementation
2023-05-25 10:15:56 -03:00
Martin-Molinero
97489dfc57 Implement UnregisterIndicator helper method (#7271)
* Implement Unregister helper method

- Implement Unregister helper method, each indicator which hold a
  reference to the consolidators updating it. Adding regression
  algorithms

* Fix for QuantBook indicators

* Address reviews
2023-05-24 17:35:02 -03:00
Martin-Molinero
278401cfcf Custom data universe selection market hours (#7270)
- Custom data universe selection market hours. Adding regression test
  asserting the behavior. Updating existing tests due to market hours
  change, triggering selection always, even the 4th of July 2018
2023-05-24 13:50:43 -03:00
Jhonathan Abreu
6e7b69da44 Short call/put calendar spreads (#7269)
* Add short call calendar spread strategy and review margin calculation

* Add short Put calendar spread strategy and fixed naked short options margin calculation

* Minor changes

* Minor changes

* Minor changes
2023-05-24 13:09:31 -03:00
Martin-Molinero
b5ced1635e Chain Providers will filter expired (#7267)
- Future and option chain providers will always filter expired contracts
  from their result. Update existing tests
2023-05-23 18:33:07 -03:00
Martin-Molinero
f01ac9be3a Fix NDX index data timezone (#7268)
- Fix for NDX index data timezone
2023-05-23 17:24:21 -03:00
Jhonathan Abreu
2b045bfd35 Short straddle and strangle strategies (#7264)
* Add short straddle and strangle strategies

* Minor unit tests fixes
2023-05-23 13:39:41 -03:00
Jhonathan Abreu
96f8a89c0d Butterfly call/put spreads margin unit test review (#7266) 2023-05-23 13:35:28 -03:00
Martin-Molinero
da706dbd8e Add QuantBook memory recycle (#7263)
- Add QuantBook memory recycle timer to avoid managed memory creep
2023-05-23 10:02:54 -03:00
Martin-Molinero
c5790f3e20 Fix Collective2 future & option symbology (#7262)
* Fix Collective2 future & option symbology

- Fix collective2 future & option symbology. Adding unit tests &
  updating existing

* Minor fixes after live test
2023-05-22 19:11:45 -03:00
Jhonathan Abreu
794835772a Minor bear/bull call spreads unit tests fixes (#7260) 2023-05-22 16:03:51 -03:00
Ricardo Andrés Marino Rojas
a043313004 Change misleading error message while registering an indicator in Python (#7257)
* Solve the bug and add unit test

- The bug was raised because if something went wrong trying to register an indicator with a C# or a custom consolidator the exception raised was lost, because the catch sentence didn't return it with another exception

- A unit test was added asserting a exception with a related message was raised each time something went wrong with the consolidator

* Fix bugs and enhance unit tests

* Fix bug
2023-05-22 15:07:04 -03:00
Ricardo Andrés Marino Rojas
c9dde8a0df Improve Tradier Brokerage Model (#7256)
* Handle unsupported orders and add unit tests

- Capture more Tradier Brokerage order limitations
- Add unit tests to cover this changes

* Enhance implementation and add more unit tests

* Enhance implementation and add unit test

* Remove IsMarketOrderGTC condition

* Remove error message MarketOrderIsGtc
2023-05-22 14:59:44 -03:00
Martin-Molinero
5eb6026180 Covered and protective call put (#7258)
* Covered and Protective Call and Put

- Improve covered call and put margin requirements based on IB
- Add missing protective call and puts strategies (inversion of a
  covered call). Adding unit tests

* Fixes

* Add missing tests
2023-05-22 11:21:12 -03:00
Martin-Molinero
bbe2e31cb8 Revert "Improve Tradier Brokerage Model (#7249)" (#7254)
This reverts commit 014ec3453d.
2023-05-18 18:59:01 -03:00
Alexandre Catarino
fd76171604 Expire Instead of Clear Insights In Base PCM In OnSecuritiesChanged (#7251)
* Expire Instead of Clear Insights In Base PCM In OnSecuritiesChanged

* Fixes Regression Test

The regression was incorrect because `_removedSymbols` didn't retain the removed symbols from previous `OnSecuritiesChanged` calls, and the algorithm relances once per month. E.g. On day 1, SPY and FB were removed, on day 3 AAPL and IBM were removed and `removedSymbols` would only include AAPL and IBM.

We should hve fixed this problem before with:

```csharp
if (_removedSymbols == null) _removedSymbols = new List<Symbol>();
_removedSymbols.AddRange(changes.RemovedSecurities.Select(x => x.Symbol));
```

However the change to use Expire fixes the issue.

* Removes Unused List of Removed Symbols
2023-05-18 11:20:17 -03:00
Ricardo Andrés Marino Rojas
a1d5b1bd31 Change misleading message when order is not large enough for Binance brokerage (#7252)
* First attempt to fix the bug

* Enhance Message returned and unit tests

* Enhance implementation and unit tests

* Nit change
2023-05-18 10:38:28 -03:00
Martin-Molinero
dba6a04196 Improve handling of invalid order update & cancel (#7247)
- Avoid exceptions when updating or cancelling an invalid order. Adding
  unit tests reproducing the issue
2023-05-18 10:37:03 -03:00
Ricardo Andrés Marino Rojas
014ec3453d Improve Tradier Brokerage Model (#7249)
* Handle unsupported orders and add unit tests

- Capture more Tradier Brokerage order limitations
- Add unit tests to cover this changes

* Enhance implementation and add more unit tests

* Enhance implementation and add unit test
2023-05-18 10:21:54 -03:00
Ricardo Andrés Marino Rojas
0db0f10ee9 Fix potential bug in KrakenOrderProperties (#7248)
* Fix potential bug and add more docs

As FeeInBase and FeeInQuote are mutually exclusive, if one was set to true, the other one should be set to false. It was added information about where it's used and how fee currency selection works in Kraken.

* Nit change

* Simplify XML docs
2023-05-15 19:19:31 -03:00
Martin-Molinero
1a22f20340 Avoid expiring insights twice (#7243)
- Avoid expiring insights twice. Adding unit test
2023-05-15 10:01:07 -03:00
Martin-Molinero
5c078cd2a9 Remove 'data-directory' usage (#7241) 2023-05-12 18:24:12 -03:00
Martin-Molinero
08e1f31271 Minor live logging improvements (#7240) 2023-05-12 18:13:37 -03:00
Ricardo Andrés Marino Rojas
7f15202dfc Fix bug in LeastSquaresMovingAverage (#7238)
* Fix bug and fix unit test

* Enhance unit test

* Simplify LSMA.ComputeNextValue()
2023-05-11 14:55:27 -03:00
Ricardo Andrés Marino Rojas
4e56af487c Fix bug in RandomDataGenerator for Option data at Minute resolution (#7237)
* Fix the bug and add unit tests
- The bug was raised by different conditions.

First, the tick created in tick generator for Open Interest was not of type Open Interest.

Second, TickAggregator.cs was made to use daily resolution for OpenInterest always.

Third, the RandomValueGenerator, generated a random friday as expiration date for the option created but this one needed first two underlying data points, so if the expiration date was before the start date plus 3 days, RandomDataGenerator just generated OpenInterest data for the option.

* Add docs
2023-05-11 12:54:45 -03:00
Vinh Hung Nguyen
3bb390779b Add Missing Python Version of TickDataFilteringAlgorithm (#7219) (#7222)
* Add Missing Python Version of TickDataFilteringAlgorithm (#7219)

* Change to SecurityDataFilter

* Modify PR #7222

* Address reviews

* Minor improvement

---------

Co-authored-by: Ricardo Andrés Marino Rojas <47573394+Marinovsky@users.noreply.github.com>
Co-authored-by: hungv <hungv@compatibl.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-05-10 19:48:54 -03:00
Jhonathan Abreu
f12bcb39a6 Unit tests for OptionStrategyPositionGroupBuyingPowerModelTests (#7234)
* Add option strategy position group BPM tests

Tests added for calculating order quantity for a delta buying power

* Add option strategy position group BPM margin calculation tests

* Add option strategy position group BPM margin calculation tests

* Add option strategy position group BPM margin calculation tests

* Add option strategy position group available BPM calculation tests

* Add option strategy position group impact buying power calculation

* Housekeeping

* Unit tests improvements

* Unit tests improvements

* Add more unit tests

* Address peer review
2023-05-10 19:47:26 -03:00
Derek Melchin
17639c399d Update Numerai Demo Algorithms (#7233)
* Update Numerai Demo Algorithm

* Remove Numerai demo algorithms that use portfolio state

* Address review
2023-05-03 20:16:34 -03:00
Martin-Molinero
fbca273807 Add forward data only fill model example (#7232)
* Add forward data only fill model example

- Add forward data only custom fill model C# & PY example.
- Minor adjustment for 'MarketOrderFillTimeout' to be zero always in
  backtesting

* Address reviews
2023-05-03 16:16:03 -03:00
Martin-Molinero
e838319a56 Update readme.md 2023-05-02 16:24:22 -03:00
Martin-Molinero
884bfe4482 Add support for brokerage side new orders (#7228)
* Add support for brokerage side new orders

- Add support for brokerage side new order events for liquidation cases

* Minor cash delta fix

* Improve account cash logging

* Fix null reference exception for open orders
2023-05-02 16:21:19 -03:00
Ricardo Andrés Marino Rojas
416d38271b Solve bugs in BrokerageModelPythonWrapper.cs (#7229)
* Implement ShortableProviderPythonWrapper.cs

- Modify AllShortableSymbolsCoarseSelectionRegressionAlgorithm.cs and ShortableProviderOrdersRejectedRegressionAlgorithm.cs to use ShortableProvider from Security and not from the Brokerage model
- Add SetShortableProvider() overload method in Security.cs to set a custom shortable provider from Python
- Remove AllShortableSymbols() method from LocalDiskShortableProvider.cs
- Remove DefaultShortableProvider class
- Add regresion algorithms in C# to cover the changes done

* Revert "Merge process"

This reverts commit 775a4b8ec1, reversing
changes made to bcc3e790f6.

* Revert "Revert "Merge process""

This reverts commit aa18fb40ee.

* Solve bugs

- Solve bugs in DefaultMarkets, CanUpdateOrder() and CanSubmitOrder() methods from BrokerageModelPythonWrapper.cs
- Add regression algos in both Python and C# to cover the changes

* Catch potential errors and add unit tests

* Add more unit tests

* Nit change

* Enhance implementation, add more unit tests
2023-05-02 15:09:16 -03:00
Martin-Molinero
b657365da7 Add IndexOptionPriceVariationModel (#7227)
* Add IndexOptionPriceVariationModel

- Add IndexOption price variation model to handle price based minimum
  price variation. Adding unit tests

* Minor improvements for VIX & VIXW
2023-05-02 11:23:20 -03:00
Louis Szeto
991ac4595f Improves Export Signal Algorithms (#7210)
* Update Collective2PortfolioSignalExportDemonstrationAlgorithm

* Update Collective2SignalExportDemonstrationAlgorithm

* Update CrunchDAOPortfolioSignalExportDemonstrationAlgorithm

* Update CrunchDAOSignalExportDemonstrationAlgorithm

* Update NumeraiPortfolioSignalExportDemonstrationAlgorithm

* Update NumeraiSignalExportDemonstrationAlgorithm

* Address peer review

* Add logic to handle warm up

* Update unit test statistics
2023-05-01 12:14:54 -03:00
Martin-Molinero
a7516b80ea Daily future cash settlement (#7226)
* Refactor settlement mode api

- Add new Scan method on ISettlementModel API. To be used by
  futures settlement model mark to market handling
- Use 'Parameters' classes for 'ISettlementModel'

* Address reviews

* Daily future settlement

- Implement daily future settlement. Adding unit & regression tests

* Address reviews

* Assert cash balance every day
2023-05-01 11:25:37 -03:00
Martin-Molinero
8b2eb5bd68 Refactor Settlement Model API (#7225)
* Refactor settlement mode api

- Add new Scan method on ISettlementModel API. To be used by
  futures settlement model mark to market handling
- Use 'Parameters' classes for 'ISettlementModel'

* Address reviews
2023-05-01 11:23:31 -03:00
yuriyarabskyyPro
6ce418ca5c Add missing side multiplier in returns per trade chart (#7224)
* Add missing side multiplier

* Minor build fix

---------

Co-authored-by: Yuriy Arabskyy <yuriy.arabskyy@gmail.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-05-01 11:16:41 -03:00
Jhonathan Abreu
c61b8da167 Add contractDepthOffset parameter to History methods (#7213)
* Add contractDepthOffset parameter to every history api method overload

* Address peer review
2023-04-27 14:31:42 -03:00
Jhonathan Abreu
c8890c3da9 Multiple option position groups liquidation (#7221)
* Fix multiple option strategies liquidation

When holding multiple position groups of the same underlying, reverting
one of the groups was not possible because of the presence of the other
position groups, which caused no matching groups to be formed for the
order.

* Make OptionStrategyPositionGroupResolver not group single position

* Revert make OptionStrategyPositionGroupResolver not group single position
2023-04-27 14:29:30 -03:00
Louis Szeto
baf2dbcefa Add example algorithm on brokerage activities (#7214)
* Add example algorithm on brokerage activities

* Add brokerage activities event handlers on live feature algorithm

* add boolean flag
2023-04-27 14:17:58 -03:00
Ricardo Andrés Marino Rojas
4d5e0fb73a Modify OpenInterestFutureUniverseSelectionModel to work with Python (#7220)
* Implement ShortableProviderPythonWrapper.cs

- Modify AllShortableSymbolsCoarseSelectionRegressionAlgorithm.cs and ShortableProviderOrdersRejectedRegressionAlgorithm.cs to use ShortableProvider from Security and not from the Brokerage model
- Add SetShortableProvider() overload method in Security.cs to set a custom shortable provider from Python
- Remove AllShortableSymbols() method from LocalDiskShortableProvider.cs
- Remove DefaultShortableProvider class
- Add regresion algorithms in C# to cover the changes done

* Revert "Merge process"

This reverts commit 775a4b8ec1, reversing
changes made to bcc3e790f6.

* Revert "Revert "Merge process""

This reverts commit aa18fb40ee.

* Solve bug

- Add new constructor overload in OpenInterestFutureUniverseSelectionModel.cs that accepts future chain symbol selector as PyObject
- Add a private static method in OpenInterestFutureUniverseSelectionModel that converts Python lambda function to Func<DateTime, IEnumerable<Symbol>>
- Add a regression algorithm in Python to cover changes. In these case, add Python version of OpenInterestFuturesRegressionAlgorithm.cs

* Nit changes

* Nit change

* Minor docs tweak

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-04-27 10:04:10 -03:00
Oleksii Rychko
3122edcaf9 RBI brokerage setup (#7216)
* Added RBIBrokerageModel, RBIFeeModel

* added RBIOrderProperties, added RBI to BrokerageName, config.json

* feature: changed config.json

* fix: changed config.json and UnsupportedOrderType message

---------

Co-authored-by: m00nler <91968598+m00nler@users.noreply.github.com>
Co-authored-by: raideNNdev <raideNNdev@proton.me>
2023-04-27 10:03:04 -03:00
Martin-Molinero
1965a2868d Update readme.md 2023-04-26 10:03:31 -03:00
Ricardo Andrés Marino Rojas
3e86712c1a Implement ShortableProviderPythonWrapper.cs (#7209)
* Implement ShortableProviderPythonWrapper.cs

- Modify AllShortableSymbolsCoarseSelectionRegressionAlgorithm.cs and ShortableProviderOrdersRejectedRegressionAlgorithm.cs to use ShortableProvider from Security and not from the Brokerage model
- Add SetShortableProvider() overload method in Security.cs to set a custom shortable provider from Python
- Remove AllShortableSymbols() method from LocalDiskShortableProvider.cs
- Remove DefaultShortableProvider class
- Add regresion algorithms in C# to cover the changes done

* Implement ShortableProviderPythonWrapper.cs

- Modify AllShortableSymbolsCoarseSelectionRegressionAlgorithm.cs and ShortableProviderOrdersRejectedRegressionAlgorithm.cs to use ShortableProvider from Security and not from the Brokerage model
- Add SetShortableProvider() overload method in Security.cs to set a custom shortable provider from Python
- Remove AllShortableSymbols() method from LocalDiskShortableProvider.cs
- Remove DefaultShortableProvider class
- Add regresion algorithms in C# to cover the changes done

* Solve bugs and nit change

* Address review

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-04-25 19:55:44 -03:00
Jhonathan Abreu
8943dc6535 Add dataNormalizationMode parameter to every history api method overload (#7208) 2023-04-25 17:19:39 -03:00
Vinh Hung Nguyen
c8a646c0f0 Feature 7182 missing python version crypto future algorithms (#7206)
* Solve Report Generation Conversion Rate Error bug (#7183)

* Solve bug

Remove if sentence that checked if Portfolio contained securities that
needed a conversion, like Forex, Crypto or Cfd. It didn't take into
account CryptoFutures so when the backtest result used that kind of
security types it never found a conversion for them. Making a git blame
for Report.PortfolioLooper constructor it was found the if sentence was
not needed so it was removed and then different reports were made for
algorithms that used security types different than Forex,Crypto,Cfd and
CryptoFutures to check everything was still working as expected.

* Solve bug

Remove if sentence that checked if Portfolio contained securities that
needed a conversion, like Forex, Crypto or Cfd. It didn't take into
account CryptoFutures so when the backtest result used that kind of
security types it never found a conversion for them. Making a git blame
for Report.PortfolioLooper constructor it was found the if sentence was
not needed so it was removed and then different reports were made for
algorithms that used security types different than Forex,Crypto,Cfd and
CryptoFutures to check everything was still working as expected.

* Missing Python Version of Crypto Future Algorithms - Issue 7128

* Address reviews

---------

Co-authored-by: hungv <hungv@compatibl.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-04-24 11:27:38 -03:00
Jhonathan Abreu
0b81cf0218 Add dataMappingMode parameter to History methods (#7204)
* Add dataMappingMode parameter to every history api method overload

* Minor unit tests fixes

* Update regression algorithm stats

* Minor changes

* Minor changes
2023-04-21 17:24:14 -03:00
Louis Szeto
6b1f859f5a Fixes bug in Hilbert Transform indicator (#7203)
* Fix bug on calculation, renew test data from correct TV script

* Add comment to explain changes
2023-04-21 12:01:52 -03:00
Martin-Molinero
6fb9cf8521 Cache folder usage improvements (#7200)
- Validate cache folder exists before using it
- Avoid duplication fetching factor & map files path
- Adding helper method to check if directory is empty. Adding unit tests
2023-04-20 11:24:19 -03:00
Ronit Jain
0d6abf5dde Add optimization-id for optimization backtests (#7202)
* add organizatin-id in backtests

* self review
2023-04-20 10:49:04 -03:00
Ricardo Andrés Marino Rojas
6b7be767f5 Implement SecurityDataFilterPythonWrapper.cs (#7201)
- Create `SecurityDataFilterPythonWrapper.cs`
- Modifiy `Security.cs` to set a data filter, whether is a C#, Python derivative or custom data filter custom
- Add Python and C# regression algorithms to assert the changes
2023-04-20 10:45:59 -03:00
Jhonathan Abreu
3888896ed4 Add extendedMarket parameter to History methods (#7191)
* Add extendedMarket parameter to every history api method overload

* Rename extendedMarketHours parameter

New name is extendedHours as in the History API to standarize parameters naming

* Update generic history overloads to use every matching subscription

* Update regression algorithms stats

* Centralize period-based history error for tick resolution

* Rename extended market hours parameter to extendedMarketHours

* Minor changes

* Minor changes

* Minor unit tests changes

* Minor unit tests changes

* Minor changes

* Minor unit tests changes

* Minor unit tests changes
2023-04-20 10:41:32 -03:00
Martin-Molinero
fb383dc73c Minor foundation update (#7196)
* Added PyStan Library in DockerfileLeanFoundation

* Add new libraries and unit tests

---------

Co-authored-by: Ivan Radigales Creus <ivanrdgc@gmail.com>
2023-04-19 15:19:07 -03:00
Louis Szeto
5891f44312 Implement Hilbert Tranform indicator (#7197)
* Implement Hilbert Transform Indicator

* Assign proper names to variables

fixes
https://github.com/QuantConnect/Lean/pull/7148#discussion_r1152325967
https://github.com/QuantConnect/Lean/pull/7148#discussion_r1152328259

* Add license

fixes https://github.com/QuantConnect/Lean/pull/7148#discussion_r1152336946

* Change `_v1` computation to operation instead of `FunctionalIndicator`

and more related changes
fixes https://github.com/QuantConnect/Lean/pull/7148#discussion_r1152332642

* Replace `updatesCount` with `Samples` field

* Implement `inPhase3` and `_quadrature2` as `Delay` indicators

* Minor fix to `WarmUpPeriod`

* Add descriptive names to indicators

* Reset all indicators

https://github.com/QuantConnect/Lean/pull/7148#discussion_r1152338785

* Minor fix

* Rename rest of parameters

* Implement helper method

* Renaming for LEAN's pattern

* Update 3rd party data source

* Refactor and fix bug on HT calculation

* Fix unit test's logic

---------

Co-authored-by: Alexander Myltsev <alexander.myltsev@gmail.com>
2023-04-19 14:41:05 -03:00
Martin-Molinero
841e6f12c2 Update readme.md 2023-04-18 19:14:27 -03:00
Martin-Molinero
afabedbfda Update readme.md 2023-04-18 18:30:59 -03:00
Ricardo Andrés Marino Rojas
02e54d0242 Implement OptionExerciseModelPythonWrapper.cs (#7193)
* Implement `OptionExerciseModelPythonWrapper.cs`
- Modifiy `Option.cs` to set the automatic exercise model, even if it's a python custom option model exercise model
- Add `QuantConnect.Orders.OptionExercise` in `AlgorithmImports.py`
- Add regression algorithms in C# and Python showing how to specify a custom option exercise model

* Address required changes

- Remove unnecessary constructor in
´CustomOptionExerciseModelRegressionAlgorithm.cs´
- Change `.Dispose()` in `OptionExerciseModelPythonWrapper.OptionExercise(9` to ´using´ keyword
- Change `Option.SetOptionExerciseModel()` XML docs

* Minor tweaks

* Update CustomOptionExerciseModelRegressionAlgorithm.cs

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-04-18 16:54:53 -03:00
Martin-Molinero
430b30b2ac Update readme.md 2023-04-18 15:09:23 -03:00
Martin-Molinero
c3cdeea0ee Update readme.md 2023-04-18 14:11:25 -03:00
prasom
a4f2c03015 Python ConstantAlphaModel Constructor is Missing an Argument (#7189)
* Python ConstantAlphaModel Constructor is Missing an Argument #7185

* Minor tweak

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-04-17 20:03:49 -03:00
Martin-Molinero
d1a2b95ddc Update reserved chart names (#7190) 2023-04-17 20:02:27 -03:00
Jhonathan Abreu
f1076020af Add fillForward parameter to History methods (#7180)
* Add fillForward parameters to every History method

* Remove conflicting Python history method

* Undo removing conflicting Python history method

* Minor changes

* Minor changes

* Minor changes

* Add fillForward and extendedMarket parameters to history request factory

* Minor changes

* Minor changes

* Minor changes

* Minor changes

* Minor unit tests changes

* Rename fillForward parameter in History API

New name if fillDataForward as in the Add*Security API to standarize
parameters naming

* Rename fillForward parameter

Using the shorter fillForward in every API
2023-04-17 16:42:13 -03:00
prasom
cd88806e93 Start research returns permission denied when run inside a devcontainer in VS Code (#7139) (#7188) 2023-04-17 10:45:55 -03:00
Ricardo Andrés Marino Rojas
b5087bf42a Solve Report Generation Conversion Rate Error bug (#7183)
* Solve bug

Remove if sentence that checked if Portfolio contained securities that
needed a conversion, like Forex, Crypto or Cfd. It didn't take into
account CryptoFutures so when the backtest result used that kind of
security types it never found a conversion for them. Making a git blame
for Report.PortfolioLooper constructor it was found the if sentence was
not needed so it was removed and then different reports were made for
algorithms that used security types different than Forex,Crypto,Cfd and
CryptoFutures to check everything was still working as expected.

* Solve bug

Remove if sentence that checked if Portfolio contained securities that
needed a conversion, like Forex, Crypto or Cfd. It didn't take into
account CryptoFutures so when the backtest result used that kind of
security types it never found a conversion for them. Making a git blame
for Report.PortfolioLooper constructor it was found the if sentence was
not needed so it was removed and then different reports were made for
algorithms that used security types different than Forex,Crypto,Cfd and
CryptoFutures to check everything was still working as expected.
2023-04-13 14:43:56 -03:00
Martin-Molinero
4ad0288110 Add missing optimizer launcher reference (#7181) 2023-04-12 19:35:02 -03:00
Martin-Molinero
35469154c4 Update readme.md 2023-04-12 15:39:32 -03:00
Martin-Molinero
9c893e83a2 Minor optimizer improvement (#7179)
- Handle optimization backtest name
- Allow configurable optimizer for Optimizer.Launcher project
2023-04-12 15:35:54 -03:00
Jhonathan Abreu
8134b099fa Updated EMA indicator description (#7178) 2023-04-11 18:58:35 -03:00
Jhonathan Abreu
8d54438eac Add support for iterating FutureHistory and OptionHistory (#7176)
This adds support for accessing the history slices in research
environment
2023-04-11 18:54:58 -03:00
Martin-Molinero
b23bc870e2 Minor regression test update after EMA merge (#7177)
- Minor regression test update after EMA merge
2023-04-11 18:26:48 -03:00
Ricardo Andrés Marino Rojas
9e51f10b77 Add Feature Signal Exports feature (#7145)
* Add Collective2SignalExportClass
Add SignalExportTarget interface

* Collective2SignalExport test working

Add SignalExportManager
Add draft of CrunchDAOSignalExport

* Modify SignalExportManager

Instantiate SignalExportManager in QCAlgorithm constructor
Draft of CrunchDAOSignalExport

* Improve SignalExportManager

- Add regression tests SignalExportDemonstrationAlgorithm in C# and
  Python

* Improve SignalExportDemonstrationAlgorithm

Address requested changes in Collective2SignalExport, SignalExportManger and SignalExportTargetTests.cs

* Add CrunchDAOSignalExport.cs

Add CrunchDAOSignalExport unit tests in SignalExportTargetTests.cs

* Add NumeraiSignalExport.cs

Modify SignalExportDemonstrationAlgorithm.cs to test NumeraiSignalExport
Add unit test in SignalExportTargetTests to test NumeraiSignalExport

* Address required changes

- Add BaseSignalExport.cs
- Add SignalExportParameters.cs
- Add PortfolioSignalExportDemonstrationAlgorithm.cs/py
- Improve Error handling in SignalExport provider classes
- Collective2SignalExport now gets the correct number of shares for each holding
- SignalExportManager now computes the correct holding percentage of each portfolio target
- SignalExportManager now takes into account if the algorithm is in live mode
- Demonstration algorithms now are more simple

* Address last required changes

- PortfolioSignalExportDemonstrationAlgorithm.cs/py now inherits from SignalExportDemonstrationAlgorithm.cs/py
- Add more unit tests to assert SignalExportManager gets the correct percentage quantity for each holding
- Change Collective2SignalExport, CrunchDAOSignalExport and NumeraiSignalExport Send() method to return true if there was no error while sending the signals and false otherwise
- Nit changes

* Remove exceptions thrown

- Add more unit tests and more test cases
- Enhance BaseSignalExport.Dispose() method

* Add Collective2SignalExportClass
Add SignalExportTarget interface

* Collective2SignalExport test working

Add SignalExportManager
Add draft of CrunchDAOSignalExport

* Modify SignalExportManager

Instantiate SignalExportManager in QCAlgorithm constructor
Draft of CrunchDAOSignalExport

* Improve SignalExportManager

- Add regression tests SignalExportDemonstrationAlgorithm in C# and
  Python

* Improve SignalExportDemonstrationAlgorithm

Address requested changes in Collective2SignalExport, SignalExportManger and SignalExportTargetTests.cs

* Add CrunchDAOSignalExport.cs

Add CrunchDAOSignalExport unit tests in SignalExportTargetTests.cs

* Add NumeraiSignalExport.cs

Modify SignalExportDemonstrationAlgorithm.cs to test NumeraiSignalExport
Add unit test in SignalExportTargetTests to test NumeraiSignalExport

* Address required changes

- Add BaseSignalExport.cs
- Add SignalExportParameters.cs
- Add PortfolioSignalExportDemonstrationAlgorithm.cs/py
- Improve Error handling in SignalExport provider classes
- Collective2SignalExport now gets the correct number of shares for each holding
- SignalExportManager now computes the correct holding percentage of each portfolio target
- SignalExportManager now takes into account if the algorithm is in live mode
- Demonstration algorithms now are more simple

* Address last required changes

- PortfolioSignalExportDemonstrationAlgorithm.cs/py now inherits from SignalExportDemonstrationAlgorithm.cs/py
- Add more unit tests to assert SignalExportManager gets the correct percentage quantity for each holding
- Change Collective2SignalExport, CrunchDAOSignalExport and NumeraiSignalExport Send() method to return true if there was no error while sending the signals and false otherwise
- Nit changes

* Remove exceptions thrown

- Add more unit tests and more test cases
- Enhance BaseSignalExport.Dispose() method

* Fix failing regression tests

* Fix failing unit tests

* Nit changes

* Nit change

* Nit change

* Fix failing unit tests

* Changes required

- Break regression algos `SignalExportDemonstrationAlgorithm.cs/py` nad `PortfolioSignalExportDemonstrationAlgorithm.cs/`y` into three ones, one for each signal export provider
- Change SignalExportManager constructor to receive current algorithm as a parameter
- Fix bug in `SignalExportManager.GetPortfolioTargets()`, now it computes the correct percentage for each holding
- Make `BaseSignalExport.DefaultAllowedSecurityTypes` overrdible
- Handle case were `Collective2SignalExport.ConvertPercentageToQuantity()` returns null
- Clean unnecessary code in `Collective2SignalExport()`, `CrunchDAOSignalExport()` and `NumeraiSignalExport()`

* Nit change

* Nit change

* Minor tweaks after review

* Remove indexes from signal exports

* Required changes
- Change EMA indicators period from 200, 300 to 10,100 in regression algorithms
- Remove Indices from regression algorithms
- Add more XML documentation to regression algorithms
- Change `Log.Error` to `_algorithm.Error` in Signal export providers. Besides, fix error message format
- Change default value for `platformId` parameter in `Collective2SignalExport.cs` constructor
- Solve small bugs in SignalExportProvider when verificating the amount of porfolio targets is greater than zero and each portfolio target is allowed
- Handle case when `PortfolioTarget.Percent()` returns null in `Collective2SignalExport.ConvertPercentageToQuantity()`
- Handle error format message from Collective2 API
- Check every ticker signal is between 0 and 1 (inclusive) in `CrunchDAOSignalExport.cs`
- Modifiy `NumeraiSignalExport.cs` constructor to take into account filename given in the arguments
- Fix small bug with the return value of `ConvertTargetsToNumerai()` method in `NumeraiSignalExport.cs`
- Modify `SignalExportManager.cs` to return true when the algorithm being ran is not in live mode
- Remove indices from CrunchDAO unit tests

* Enhance ´CrunchDAOSignalExport.cs´ implementation

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-04-11 17:45:07 -03:00
Jhonathan Abreu
ed92e6653b Fix EMA first value calculation (#7173)
* Fix EMA indicator first value calculation

As done by TALib and TradingView, the first EMA value after warmup is
the SMA of the first period.

* Update TSI indicator test data

Data was exported from TradingView

* Update TRIX indicator test data from TradingView

* Update AccumulationDistributionOscillator indicator test data from TradingView

* Update Double EMA indicator test data from TradingView

* Update McClellanSummationIndex indicator test data

* Update SchaffTrendCycle indicator test data

* Update TripleExponentialMovingAverage indicator test data from TradingView

* Update stats for algorithms using EMA

* Update failing unit tests
2023-04-11 17:43:25 -03:00
Martin-Molinero
08a1f84f91 Fix continuous futures back month contracts (#7175)
- Fix continuous futures back month contracts setting which was ignored.
  Updating regression algorithms
2023-04-11 17:42:46 -03:00
Jhonathan Abreu
8e54918378 Account for time zone on MOC orders time buffer check (#7174)
* Use UTC times when checking if MOC order is not past the allowed buffer

* Add unit test
2023-04-11 17:42:34 -03:00
Martin-Molinero
fcab09effb Update LiveTradingDataFeedTests.cs
See https://github.com/QuantConnect/Lean/pull/7169/files
2023-04-10 17:31:10 -03:00
Jhonathan Abreu
5436c72fad Handle margin call orders for position groups (#7137)
* Handle position group margin calls

* Minor changes

* Update regression algorithms

* Minor changes

* Minor changes

* Added regression algorithm

* Peer review

* Peer review

* Peer review

* Peer review

* Minor changes

* Minor changes

* Add unit test

* Allow sufficient buying power when closing position group

* Add unit test

* Improve regression algorithms
2023-04-10 12:42:08 -03:00
Martin-Molinero
f152652f5b Fix api account deserialization (#7172)
- Fix API account deserialization. Adding unit test
2023-04-10 12:38:38 -03:00
Martin-Molinero
f9bbec1e16 Remove internal subscriptions from future chain (#7169)
- Remove internal subscription from slive future chain collection.
  Adding regression algorithm reproducing the bug
2023-04-05 18:23:04 -03:00
Ricardo Andrés Marino Rojas
20c92b0350 Fix bug: Report Color Map Does Not Include Crypto Futures (#7168)
* Fix ReportCharts color_map bug

- Add ´CryptoFuture´ entry in `color_map` dict using color #E55812
- Make ´ReportCharts.py´ color_map a class attribute
- Change ´ReportChartsTests.cs´ to use color_map dict from ´ReportCharts.py´
- Add unit test that fails every time a new SecurityType is added

* Improve unit test

* Nit change

* Nit change
2023-04-05 17:51:16 -03:00
Jhonathan Abreu
375af2ebd2 Updated MHDB and CME currencies futures expiry functions (#7166)
* Updated MHDB and CME currencies futures expiry functions

Some expiry functions needed to take into consideration the security
holidays

* Add more holidays to CME securities in MHDB
2023-04-05 14:49:42 -03:00
Jhonathan Abreu
daae49cc4f Updat AlphaVantageDataDownloaderTests to make it time independent (#7167) 2023-04-05 13:00:54 -03:00
Martin-Molinero
227ade63ed Refactor automatic option assignment (#7165)
- Refactor automatic option assignment to allow overriding behavior.
  Adding & updating existing tests
2023-04-04 17:40:31 -03:00
Jhonathan Abreu
9524f48a33 Fix maximum lots calculation methods in SecurityPositionGroupBuyingPowerModel (#7163)
One of the methods was multiplying the resulting quantity times the lot
size, which is not accurate.
2023-04-04 17:29:22 -03:00
Louis Szeto
d977eb2181 Refactor MACD Alpha Model (#7140)
* Update regression test to check number of insights

* Update model to have insight manager ref and cancel insight when signal goes flat

* Update unit tests and regression tests

* Address peer review: using Insights.Clear
2023-04-04 17:22:15 -03:00
Martin-Molinero
e15614a18f Add live log limit to controls (#7162) 2023-04-04 13:57:38 -03:00
Jhonathan Abreu
2e20b4803d Accounting for the position quantity in margin requirements (#7161)
* Invalidate option strategies orders when short selling over margin

When shorting an option strategy with margin requirements that cannot be
met, the order should be invalidated. The buying power model is now able
to detect said situation and result in unssuficient buying power.

The OptionsMarginModel now uses the parameters instance values instead
of the security holdings to compute margin requirements. This fixes the
situation when calculation buying power for a first time position with
no holdings.

* Add and fix unit tests

* Update regression algorithms

* Peer review
2023-04-03 18:51:05 -03:00
Martin-Molinero
cb0c7b0814 Update KeyStringSynchronizerTests.cs 2023-04-03 14:24:41 -03:00
Martin-Molinero
645e1ca88c Downloader Data Provider Improvements (#7159)
* Downloader data provider fixes

- Fix stored data time zone, which is expected in data time zone
- Minor logging improvements
- LeanData Parse handles etf universes path. Adding unit test
- LeanDataWrite will only map if there's something to map to

* Fix download data provider synchronization

* Synchronization improvements after more testing

- KeyStringSynchronizer will handle reentrancy. Adding unit tests
- Define a unique Synchronizare for downloading data, since not related
  to disk reading & writting
2023-03-31 18:29:55 -03:00
Martin-Molinero
84bb72fddb Remove unrequired csharp debugger (#7156)
- Remove unused & outdated csharp debugger netcoredbg
2023-03-30 19:05:31 -03:00
Martin-Molinero
4d32119576 Unzip to folder from byte[] (#7152)
- Unzip data to folder from a given byte[]. Adding unit tests
2023-03-29 16:06:42 -03:00
Martin-Molinero
c836c62945 LeanDataWriter can handle mapping (#7150)
* LeanDataWriter can handle mapping

- Adjust LeanDataWrite so that it can handle symbol mapping if required.
  Adding unit tests

* Fix Lean Data path parsing
2023-03-29 16:04:23 -03:00
Alexandre Catarino
2069833361 Updates HistoricalReturnsAlphaModel to Cancel Insights Not Emit Flat (#7151)
* Updates Regression Algorithm to Assert the Number of Insights

* Updates HistoricalReturnsAlphaModel to Cancel Insights Not Emit Flat

We expect fewer insights after this change, but no changes to any regression algorithm.

* Updates Regression Algorithm

Assert the new expected number of generated insights.

* Use InsightCollection Clear Method
2023-03-29 16:03:27 -03:00
Alexandre Catarino
b46b50fa50 Adds HistoricalReturnsAlphaModelFrameworkRegressionAlgorithm (#7149) 2023-03-28 16:08:47 -03:00
Derek Melchin
4d77431ae1 Refactor RsiAlphaModel (#7125)
* Update regression tests to check consolidators are removed

* Update model

* Address review
2023-03-28 16:07:08 -03:00
Alexandre Catarino
1bce9bcb71 Improves Validates_SetEndTime Test (#7147)
Uses the "Now" in algorithm default timezone, since that's how `EndDate` is initialized in QCAlgorithm.
2023-03-28 11:01:04 -03:00
Martin-Molinero
2dc40f0477 Update readme.md 2023-03-27 19:34:09 -03:00
Martin-Molinero
403814d64f Handle error sending notification (#7146) 2023-03-27 15:31:53 -07:00
Martin-Molinero
384ec3dbad Update readme.md 2023-03-27 17:10:30 -03:00
Martin-Molinero
708d38d4e5 Update readme.md 2023-03-27 16:49:52 -03:00
Martin-Molinero
03bc23ed8c Add project id for api notification (#7144) 2023-03-27 15:59:51 -03:00
Shukri
73c26ee7ec Fix some typos (#7138)
* Fix typo

who often -> how often

Signed-off-by: hsm207 <hsm207@users.noreply.github.com>

* Fix typo

sometimes bug -> sometimes be buggy

Signed-off-by: hsm207 <hsm207@users.noreply.github.com>

* Correct number of options to run research nbs

Signed-off-by: hsm207 <hsm207@users.noreply.github.com>

---------

Signed-off-by: hsm207 <hsm207@users.noreply.github.com>
2023-03-27 10:29:52 -03:00
Martin-Molinero
ce33c393e6 Update Extensions.cs 2023-03-24 09:40:50 -03:00
Louis Szeto
279a306758 Update TrailingStopRiskManagementModel model to cancel insights (#7131)
* Update risk model to cancel insight

* Updates Regression Tests

---------

Co-authored-by: Alexandre Catarino <AlexCatarino@users.noreply.github.com>
2023-03-23 15:29:04 -03:00
Alexandre Catarino
0247b95edd Adds TrailingStopRiskFrameworkRegressionAlgorithm (#7132)
Replaces old `TrailingStopRiskFrameworkAlgorithm` for `TrailingStopRiskFrameworkRegressionAlgorithm` that inherits from `BaseFrameworkRegressionAlgorithm` as a member of the framework regression tests.
2023-03-23 13:43:09 -03:00
Jhonathan Abreu
d47e073d90 Use data end time to timestamp fundalmental data dictionaries (#7126)
* Use data end time to timestamp fundalmental data dictionaries

* Peer review
2023-03-23 13:41:03 -03:00
Louis Szeto
6d75aee0ce Add regression test for MaximumSectorExposureRiskManagementModel (#7123) 2023-03-23 12:37:30 -03:00
Martin-Molinero
bbbf6f3a74 Minor downloader data provider improvements (#7130)
- Improve start time request for daily/hour files
- Skip custom data since it's not supported by the LeanDataWriter
2023-03-23 12:27:34 -03:00
Louis Szeto
3362a976fa Avoid Invalid historical data piping in StandardDeviationExecutionModel (#7086)
* Remove invalid historical warm up in STD Execution

* refactor

* peer review

* Use `Consolidator.InputType`

* Update regression test
2023-03-23 12:24:42 -03:00
Louis Szeto
f684940a7c Update MaximumUnrealizedProfitPercentPerSecurity model to cancel insights (#7121)
* Update regression test

* Update model to expire insights

* Avoid remove insights

* Update regression test

* Use InsightManager Cancel to Expire All Insights

* Update CompositeRiskManagementModelFrameworkAlgorithm

This regression also depends on `MaximumUnrealizedProfitPercentPerSecurity` and `MaximumDrawdownPercentPerSecurity` but `MaximumDrawdownPercentPerSecurity` doesn't close positions.

---------

Co-authored-by: Alexandre Catarino <AlexCatarino@users.noreply.github.com>
2023-03-23 12:23:42 -03:00
Derek Melchin
9c92a67510 Update MaximumDrawdownPercentPortfolio model to cancel insights (#7105)
* Remove OnEndOfAlgorithm and update expected trades

* Update models to cancel insights

* Update expected results

There are 3 trades instead of 2 because the PCM does a rebalance

* Remove `Remove` method call

* Update to use the new `Cancel` method
2023-03-23 12:02:04 -03:00
Derek Melchin
b401fde07e Update MaximumDrawdownPercentPerSecurity model to cancel insights (#7103)
* Remove OnEndOfAlgorithm and update expected trade count

* Update models to cancel insights

* Update expected results

* Remove `Remove` method call

* Update to use the new `Cancel` method
2023-03-23 11:11:27 -03:00
Martin-Molinero
7db8df3f8d Add Insight expiration helper methods (#7127)
- Add InsightManager expiration helper methods. Adding unit tests
2023-03-22 19:15:47 -03:00
Alexandre Catarino
7feb46fec5 Fixes time zone (#7128)
If we use `.astimezone(dt.tzinfo)`, the new time was convering the timezone from local (e.g. PST) to GMT (dt.tzinfo). In this case, we only want to remove the timezone to enable the operation.
2023-03-22 19:02:11 -03:00
Martin-Molinero
1c81f5d028 Update readme.md 2023-03-22 17:43:50 -03:00
Alexandre Catarino
3b2e165254 Adds BaseFrameworkRegressionAlgorithm and New Regression Algorithms (#7116)
* Renames and Updates BaseAlphaModelFrameworkRegressionAlgorithm

The `BaseFrameworkRegressionAlgorithm ` will be used for multiple framework regression tests

* Updates and Renames EmaCrossAlphaModelFrameworkAlgorithm

Adds "Regression" to inform that it's a regression algorithm.

* Updates and Renames MaximumPortfolioDrawdownFrameworkAlgorithm

Adds "Regression" to inform that it's a regression algorithm, and use the model name: `MaximumDrawdownPercentPortfolio`

* Adds New Regression Algorithms
2023-03-22 11:21:30 -03:00
Martin-Molinero
44d1454ed7 Handle downloader data provider no MHDB entry (#7115)
* Handle downloader data provider no MHDB entry

* Address review: log once
2023-03-21 17:26:09 -03:00
Martin-Molinero
a58f6b679d Minor fake data queue handler fixes (#7114)
- Minor fake data queue handler fixes. Adding unit tests
2023-03-21 15:10:03 -03:00
Alexandre Catarino
761ea2571a Adds BaseAlphaModelFrameworkRegressionAlgorithm (#7107)
* Adds BaseAlphaModelFrameworkRegressionAlgorithm

`BaseAlphaModelFrameworkRegressionAlgorithm` will be used to validate Alpha Model regression algorithm with the same universe.

- HistoricalReturnsAlphaModelFrameworkAlgorithm
- EmaCrossAlphaModelFrameworkAlgorithm
- MacdAlphaModelFrameworkAlgorithm
- RsiAlphaModelFrameworkAlgorithm
- BasePairsTradingAlphaModelFrameworkAlgorithm

* Addresses Peer-Review
2023-03-21 13:22:34 -03:00
Jhonathan Abreu
0b661e70c1 Fix combo order direction determination (#7066)
* Fix fill quantity using group order quantity for combo orders

* Add Order's ComboQuantity property

* Add Order's ComboDirection property

* Minor changes and regression algorithms update

* Minor changes

* Update algorithms stats

* Minor changes and regression algorithms update

* Store the full quantity for each combo order leg in Quantity property instead of the ratio

* Minor changes and regression algorithms update

* A few fixes after pair programming

* Handle grouping position reduction

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-03-21 12:26:50 -03:00
Alexandre Catarino
f1d55c3b0b Improves MinimumVariancePortfolioOptimizer Values Handling (#7106)
* Improves MinimumVariancePortfolioOptimizer Values Handling

The C# version of the `MinimumVariancePortfolioOptimizer` generated NaN resulting in unit tests failing.
If the solver returns NaN for an item, we set it to zero. if all items are NaN or Zero, we return the initial guess, since the sum cannot be zero.

* Fixes `RiskParityPortfolioConstructionModelTests`

We need to add insights to insight manager before we call `CreateTargets`.
2023-03-21 11:24:58 -03:00
Alexandre Catarino
497ac8497a Fixes Consolidator Removal from Subscription Manager in Python Algorithms (#7102)
* Adds Unit Test

Asserts that we can remove a consolidator that was previously added.

* AddConsolidator Method Only Wraps Non-C# Consolidators

This behavior was implemented in `QCAlgorithm.RegisterIndicator` to avoid wrapping an object unnecessarily.
2023-03-21 11:08:49 -03:00
Martin-Molinero
1877d59daa Improve aggregation helper methods (#7100)
- Improve LeanData aggregation helper methods to use shared consolidator based implementation
- Adding Tick to tradeBar aggregation
- Adding more unit tests
2023-03-20 16:08:25 -03:00
Martin-Molinero
56881e64fe Expand result state attributes (#7097)
- Add order, insight & log count into result algorithm state
2023-03-20 15:00:57 -03:00
Martin-Molinero
52de357b27 Terminal Link Minor Fixes (#7093)
- Fix data-queue-handler configuration initialization using paper brokerage
- Fix for downloader data provider request times
- Fix null reference exception in live result handler if algorithm is
  null
2023-03-20 12:24:16 -03:00
Derek Melchin
70acb30546 Test EmaCrossAlphaModel (#7081) 2023-03-17 18:08:43 -03:00
Alexandre Catarino
7c68e3f37a Refactor Portfolio Construction Models to Use Insight Manager (#7077)
* Asserts Number of Insights In One PCM Regression Test

If the `EqualWeightingPortfolioConstructionModel` interacts with the `QCAlgorithm.Insights`, the number of elements in the collection should not the sum of emitted insights.

* Refactor Portfolio Construction Models to Use Insight Manager

`PortfolioConstructionModel` will use `QCAlgorithm.Insights" instead of class property `InsightCollection` to manage the insights. It no longer adds insights to the collection, but it removes them if they expire or the securities are removed from the universe.

Updates PCMs that were affected by the change.

* Updates Unit Tests

We need to add the insights to the insight manager before we call `PortfolioConstruction.CreateTargets`
2023-03-17 18:00:43 -03:00
Louis Szeto
8a087f2166 Change python optimizer to Newton, added unit tests and regression test (#7085) 2023-03-17 15:23:31 -03:00
Martin-Molinero
a9c88ad25c ResultHandler state file improvements (#7078)
- Adjust start/end time string format
- In live trading will store the status file at the start, every 10 min
  and at the end
2023-03-16 18:24:49 -03:00
Martin-Molinero
bc6ac5470b Minor IndexOption underlying TZ fix (#7072)
* Minor IndexOption underlying TZ fix

- Fix for option universe chain underlying TZ which might not match the
  options one, bug affected IndexOption specifically.

* Update affected regression tests
2023-03-15 18:41:52 -03:00
Martin-Molinero
06bec5fb8e Add more logs for regression tests (#7073)
- Add holdings & cashbook logs from regression result handler, useful
  for debugging & developing
2023-03-15 18:25:26 -03:00
Martin-Molinero
d6f894eb3b Fix fill forward unit tests (#7070)
- Fix for some fill forward unit tests that were failing when run
  individually due to cache state in the
  TextSubscriptionDataSourceReader.
2023-03-15 12:45:04 -03:00
Martin-Molinero
8ed5f69ea6 Minor fill forward enumerator fix (#7068)
- Make sure the fill forward enumerator does not fill forward beyond the
  subscription end time. Adding tests
2023-03-15 10:18:43 -03:00
Alexandre Catarino
1c6be6438d Removes Cash Account Restriction for Framework Algorithms (#7067)
The user will be responsible for chosing/using models that fit the brokerage account type.
2023-03-14 19:25:20 -03:00
Martin-Molinero
2f03c92e30 Fill forward runtime adjustment (#7065)
- Fix for fill forward adjustment at runtime since the data stack runs
  async, we will remove and readd afected subscriptions.
2023-03-14 18:00:22 -03:00
Martin-Molinero
069246dda5 Performance Improvements (#7064)
* Performance Improvements

- Remove Immutable collection from position groups to improve
  performance. Adding more tests
- Remove ConcurrentDictionary from PortfolioTargetCollection &
  DataManager. Adding more tests
- Add Securities enumerator keys & values cache

* Add test for PortfolioTargetCollection remove by reference
2023-03-14 12:00:42 -03:00
Jhonathan Abreu
fbf8ffd924 Handle price discontinuity on volatility models (#7058)
* Apply splits and dividends to volatility models

* Apply splits and dividends to volatility models using history requests

* Add new ScaleRaw data normalization mode

Handling the new mode in the price scale enumerator.

* DataNormalizationMode.ScaledRaw history requests

* Minor changes

* Minor changes

* Disable new normalization mode in AddSecurity methods and other minor changes

* Peer review

* Minor changes

* Peer review

* Minor changes

* Peer review

* Peer review

* Peer review

* Add scaled raw history regression algorithm

* Add more regression algorithms

* Add more regression algorithms

* Add Slice.TryGet unit tests

* Peer review

* Peer review

* Peer review

* Peer review

* Peer review

* Update algorithms stats

* Peer review

* Peer review
2023-03-13 13:11:30 -03:00
Martin-Molinero
c6322956d9 Live trading holdings key (#7043)
* Fix live trading holdings uniqueness

- Fix live trading holdings key uniqueness

* Fix existing & add new test
2023-03-13 09:51:00 -03:00
Alexandre Catarino
aab5391d80 Fixes Limit Price Above/Below Open Case (#7060)
* Adds Unit Test For Limit Price Above/Below Open

See `LimitOrderFillsAtOpenWithFavorableGap`

* Fixes Limit Price Above/Below Open

If we place a buy/sell limit order below/above the current market price in TWS it fills immediately, so we model this behavior by filling with the opening price of the first trade bar.

* Updates Regression Tests

The number of trades did not change as expected. The fills are better because orders are filling with the open price when the new condition is met.
2023-03-10 14:23:45 -03:00
Martin-Molinero
bbbab6d9a8 Refactor alpha statistics phase I (#7055)
* Refactor alpha statistics

- Refactor alpha statistics, cleaning up and simplifying no longer required calculations and scoring
- Adding new InsightEvaluator abstraction, adding C# & PY regression
  algorithms

* Optimization backtest result json converter update

* Address reviews

- Remove IAlphaHandler, move insight storage responsability to IResultHandler
  and centralizing insight collection on the QCAlgorithm.Insights to be
  reused by the framework models
- Fix portfolio turnover single day backtests and duplicate time
  sampling handling. Updating regression algorithms

* Add InsightCollection tests and minor fixes

* Adding more & improved tests
2023-03-10 13:12:23 -03:00
Alexandre Catarino
4c909f33b9 Reuse Code To Find Best Effort TradeBar (#7057)
The `LimitFill`, `LimitIfTouchedFill` and `StopMaketFill` methods require `TradeBar` data to test price levels. We create a method to serve these methods as well other methods that will require this information.

Removes `Price > 0` check for `TradeType.Trade` data. Unecessary check, since a tick price cannot be less or equal to zero.
2023-03-09 11:06:26 -03:00
Martin-Molinero
e07c6265df Run TensorflowProbability Test Alone (#7056)
- For stability run TensorflowProbability test by itself
2023-03-08 17:18:58 -03:00
Alexandre Catarino
9069246519 Fixes EquityFillModel.StopMarketFill (#7042)
* Adds Unit Tests for Stop Market Fill

These unit tests covers new scenarios:
- Cannot trigger on quote data (QuoteBar or TickRype.Quote);
- Adds missing test for tick data (TickType.Trade)
- Unfavorable gap (see QuantConnect#4545)

* Fixes EquityFillModel StopMarketFill

Use the entire tick history to find the trigger price
Fill price is the stop price, unless there is an unfavorable gap (see #4545).

* Update Regression Tests

All regression tests keep the total trades. The difference are due to the time that the stop market orders are triggered and the prices that are filled. The `StopLossOnOrderEventRegressionAlgorithm` and the `UpdateOrderRegressionAlgorithm` observe the unfavorable gap case.

* Addresses Peer-Review

* Updates Regression Test

New `OrderListHash` because of the change in the fill on open case message.
2023-03-08 16:49:34 -03:00
Louis Szeto
0ed6d7e8b0 Remove annualization in MeanVarianceOptimizationPCM (#7053)
* remove annualization

* Update python optimizer to best fit in convex problem

* rerun test

* test metric

* Add comment to explain using simple return

* Add unit test on PR
2023-03-08 14:13:38 -03:00
Louis Szeto
11c182ed16 Add McClellanOscillator & McClellanSummationIndex Indicator (#7038)
* Add `McClellanOscillator` Indicator

* Add helper class in QCAlgorithm.Indicator

* Add `McClellanSummationIndex` indicator

* typo

* Fix MSI implementation

* Address peer review

* free `MOSC` in `MSI`

* fix bug

* Minor tweaks. Addressing review

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-03-07 16:19:24 -03:00
Martin-Molinero
a5586ba562 Enqueable Enumerator Performance Improvement (#7049)
- Refactor enqueable enumerator not to require read lock most of the
  time
2023-03-06 15:40:55 -03:00
Martin-Molinero
1393ce4c5d Performance Securities & CashBook Collections (#7050)
- Improve performance of Securities & CashBook collections
2023-03-06 15:39:32 -03:00
Alexandre Catarino
694ffbbb80 Removes PythonTools from Solution (#7044)
* Removes PythonTools from Solution

Missing removal from #6967.
It results in a runtime error if we use dotnet to list the packages:
`dotnet list ../Lean/QuantConnect.Lean.sln package`

* Update QuantConnect.Lean.sln

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-03-06 12:44:02 -03:00
Martin-Molinero
642fe96fde Update Binance Symbol Properties DB (#7040)
- Update Binance SPDB
- Minot fix for ExchangeInfoUpdater
2023-03-03 19:41:53 -03:00
Martin-Molinero
c4433098c3 Refactor Framework Statistics (#7041)
* Refactor framework statistics

* Further insight chart cleanup
2023-03-03 19:40:29 -03:00
Martin-Molinero
38f5a9c60c Bump to pythonNet 2.0.18 (#7036) 2023-03-03 13:11:03 -03:00
Louis Szeto
f4827f2f22 Modify advance decline indicators (#7032) 2023-03-02 15:48:20 -03:00
Jhonathan Abreu
81d1bb5095 Sample exposure for non invested portfolio (#7030) 2023-03-02 15:23:10 -03:00
Jhonathan Abreu
cdcd8fdacd Apply splits to TradeBuilder (#7020)
* Apply splits to TradeBuilder

* Minor tests changes

* Minor changes

* Add regression algorithm
2023-03-02 15:15:40 -03:00
Martin-Molinero
eebe0425d8 Rollback base image to focal (#7033)
* Rollback base image to focal

* Python env blame hang & crash
2023-03-02 12:43:23 -03:00
Martin-Molinero
caadaf62b2 Update readme.md 2023-03-01 20:12:05 -03:00
Louis Szeto
19df3e1e48 Normalization of Minimum Variance Optimizer's output weight (#6999)
* Update Optimizers to use absolute total weight for budgeting

* Update regression test

* address peer review

* added remarks
2023-03-01 17:20:58 -03:00
Martin-Molinero
66c016b284 Feature foundation update (#7028)
* Foundation Update

* Adding more foundation packages

* Update existing libraries

* Further package updates

* Image cleanup

- Update base image to ubuntu 22.04
- Some clean up on dockerfile
- Remove ARM base image

* Test updates

- Minor docker file tweaks
- Update existing python environment tests

* Add more tests & fix Julia

* Remove jupyter-dash

* Remove R from foundation

* Remove Julia

* Remove Tensorforce
2023-03-01 16:30:46 -03:00
Jhonathan Abreu
0c77be0ba8 Allow closed orders tag update (#7016)
* Allow closed orders tag update

* Minor changes
2023-02-27 18:42:24 -03:00
Wayne Adams
47bfdae372 docs: updates python version in vs instructions (#7014) 2023-02-27 10:19:02 -03:00
Jhonathan Abreu
3a2cae037f Fix UniverseDefinitions.ETF|Index overloads (#7006)
* Fix UniverseDefinitions.ETF|Index methods call ambiguity

* Minor changes
2023-02-24 16:35:35 -03:00
Martin-Molinero
b9e6781c96 Add missing exchanges (#7011)
* Add missing exchanges

- Add missing exchange definitions

* Fix and add more tests
2023-02-24 16:31:51 -03:00
Alexandre Catarino
2a6771c1c0 Fixes Liquidate Existing Holdings Behavior for SetHoldings for Multiple Targets (#7009)
* Adds Regression Test

The new regression test asserts that the total trades is 2.

* Fixes Liquidate Existing Holdings Bug

Liquidate existing holdings before open new postions.

* Addresses Peer-Review
2023-02-24 14:46:12 -03:00
Martin-Molinero
56270464cc IsOption Use Underlying Holidays and Early Closes if Empty (#7007)
* IsOption uses underlyings holidays

- Option assets will use underlyings holidays, early closes and late
  opens if their own are not defined

* Update regression algorithms
2023-02-24 12:49:51 -03:00
Alexandre Catarino
8bcd588602 Fixes EquityFillModel.FillModel (#7005)
* Adds Unit Tests

The `LimitFill` method should not fill using `QuoteBar` or `Tick` with `TickType.Quote` type.
Adds missing test for tick data (`TickType.Trade`).

* Fixes EquityFillModel.FillModel

Use `Tick` with `TickType.Trade` or `TradeBar` information to fill limit orders.

* Update Regression Test Expected Statistics

The regression tests changed because of different fills.
The `ExtendedMarketTradingRegressionAlgorithm` has different number of trades because of an extra fill on the 4th order generated by TradeBar with a Low lower than than the QuoteBar.Ask Low:

> 20230222 13:56:24.251 TRACE:: Log: Time: 10/10/2013 12:01:00 OrderID: 4 EventID: 2 Symbol: SPY Status: Filled Quantity: 10 FillQuantity: 10 FillPrice: 143.8998 USD

> asset.Cache.GetData<QuoteBar>().ToString()
"SPY: Bid: O: 144.2457 Bid: H: 144.2629 Bid: **L: 144.2457** Bid: C: 144.2629 Ask: O: 144.2543 Ask: H: 144.2889 Ask: **L: 144.2543** Ask: C: 144.2889 "

> asset.Cache.GetData<TradeBar>().ToString()
"SPY: O: 144.2543 H: 144.4532 **L: 143.4156** C: 144.2716 V: 75423"

* Improves Tick Resolution Unit Test

* Fixes Tick Resolution Case Handling

`master` only considers the latest trade, missing possible fills in the batch of trades.

* Adds Unit Test for Gap

See https://github.com/QuantConnect/Lean/issues/963

* Addresses Fill Optimistic Assumption

If we have a bar that gaps in our favor, we accept the limit price to avoid optimitic fills.

* Fixes Regression Tests

All regression tests with limit orders have worst performance after we remove the optimitic assumption, and use the limit price instead.
2023-02-24 10:35:34 -03:00
Alexandre Catarino
9cd05e9f1f Fixes BasePairsTradingAlphaModel (#7003)
* Updates the PearsonCorrelationPairsTradingAlphaModelFrameworkAlgorithm

Change the `PearsonCorrelationPairsTradingAlphaModelFrameworkAlgorithm` logic to show that it doesn't remove the consolidators used in the Alpha Model's indicators.

* Fixes `BasePairsTradingAlphaModel`

The `BasePairsTradingAlphaModel` will create indicators with class constructors and register them to consolidators that will be removed when the security is removed from the universe.

* Addresses Peer-Review
2023-02-24 10:20:01 -03:00
Jhonathan Abreu
40bff6efb7 Oanda trading hours update (#6998)
* Update Oanda's Forex and Metals CFDs trading hours in the MHDB

* Fix failing unit tests

* Update regression algorithm statistics

* Fix failing unit tests

* Minor changes
2023-02-24 10:14:55 -03:00
Jhonathan Abreu
f5e8966eea Uset GoodTilDate TIF for MOO and MOC orders (#7001)
* Uset GoodTilDate TIF for MOO orders

* Uset GoodTilDate TIF for MOC orders

* Add one-time warning for TIF validation
2023-02-23 17:38:44 -03:00
Ronit Jain
1596ed9846 remove force breakpoint (#7004) 2023-02-23 12:41:52 -03:00
Martin-Molinero
c1c4114dca Newtonsoft & Protobuf & RecyclableMemoryStream Updates (#7002)
* Dependency updates

- Update Newtonsoft to 13.0.2, protobuf to 3.2.0, RecyclableMemoryStream
  to 2.3.1

* Downgrade protobuf to 3.1.33
2023-02-23 12:11:01 -03:00
abhi-kr-2100
6acbcf0832 Brokerage Models Order Supported Types Check (#6989)
* Fix Issue #6937

Some brokerage models don't check the order type in `CanSubmitOrder`.
As a result, unimplemented order types don't cause `CanSubmitOrder`
to return false as it should.

This commit fixes these issues for:
* `FTXBrokerageModel.cs`
* `InteractiveBrokersBrokerageModel.cs`
* `SamcoBrokerageModel.cs`
* `TradierBrokerageModel.cs`
* `ZerodhaBrokerageModel.cs`

Brokerage implementations can be found at
https://github.com/orgs/QuantConnect/repositories. For example, the
Zerodha Brokerage implementation is available at
https://github.com/QuantConnect/Lean.Brokerages.Zerodha.

Signed-off-by: Abhishek Kumar <abhi.kr.2100@gmail.com>

* Use HashSet instead of an array

Checking if an object is contained within a HashSet is faster than
checking the same in an array.

Signed-off-by: Abhishek Kumar <abhi.kr.2100@gmail.com>

* Minor adjustments and normalization

* Add missing OptionExercise for IB

---------

Signed-off-by: Abhishek Kumar <abhi.kr.2100@gmail.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-02-21 13:11:04 -03:00
Jhonathan Abreu
5675e71a32 Handle prices getting stuck on data generation (#6995)
* Handle prices getting stuck on data generation

* Add more unit tests
2023-02-21 13:09:31 -03:00
Martin-Molinero
48914b08db Chart Series Settings Lost (#6997)
* Fix live trading chart series index

- Fix Series loosing their index when handled by the
  LiveTradingResultHandler
- Some clean up for Series.cs

* Fix SeriesSampler loosing Series settings
2023-02-21 13:07:56 -03:00
Martin-Molinero
852c963bbf Remove unsupported HKFE from MHDB (#6990)
* Remove HKFE from MHDB

- Remove unsupported HKFE from MHDB

* Update tests
2023-02-20 20:19:42 -03:00
Alexandre Catarino
99848a1221 Adds NullBuyingPowerModel (#6977)
* Adds NullBuyingPowerModel

The `NullBuyingPowerModel` considers that we have sufficient buying power for all orders.

Adds example using a bull call spread since a equity buy and hold would not show the impact of this model in the position group buing power model.

* Define NullBuyingPowerModel.GetMaintenanceMargin

The `NullBuyingPowerModel.GetMaintenanceMargin` returns a `MaintenanceMargin` of zero. It means the total margin used is always zero and margin calls will not be triggered.

This feature is inspired on the  `ConstantBuyingPowerModel`. We don't inherit from that class, because `ConstantBuyingPowerModel.GetInitialMarginRequirement` gives us very small initial margin that leads to a very large quantity if we use `SetHoldings` or `CalculateOrderQuantity`
2023-02-20 19:50:24 -03:00
Martin-Molinero
7178be4f55 Remove Yahoo auxiliary data generator (#6993)
- Remove yahoo auxiliary data generator and failing tests
2023-02-20 19:23:31 -03:00
Martin-Molinero
017837c5a5 Remove Oanda cash account support (#6994)
- Oanda only supports margin account types
2023-02-20 19:21:50 -03:00
Martin-Molinero
c7294adfe4 Fix OrderQuantityLessThanLotSize typo (#6991) 2023-02-20 19:21:25 -03:00
Martin-Molinero
61fb997f07 Delete unsupported AlgoSeek Option Converter (#6992)
- Delete unsupported algoseek option converter
2023-02-20 19:21:15 -03:00
Alexandre Catarino
7cc6e31c43 Fixes Insight Period Calculation (#6978)
The calculations of `CloseTimeUtc` are correct and consistent: if the exchange is closed when the insight expires, `CloseTimeUtc` is the next open.

However, the definition of the `Period` was not consistent. Normally, it is defined by the different between `CloseTimeUtc` and `GeneratedTimeUtc`, but when we create an Insight with the Resolution and bar count overload, the period was defined by them:

```csharp
insight.Period = Resolution.ToTimeSpan().Multiply(BarCount);
```

which is incorrect, since it doesn't take the days the exchange is closed into account. The `ComputePeriod` method enforced consistency between the Resolution and bar Count overload and the `DateTime` overload, so the period for this overload was also incorrect.
2023-02-20 16:23:13 -03:00
Alexandre Catarino
b5ca1ac461 Removes UncorrelatedUniverseSelectionModel (#6976)
Framework models must have a C#, and Python implementation and algorithms that use them.
2023-02-20 16:21:53 -03:00
Jhonathan Abreu
2a54da9e2c Custom data type history API usage in Python (#6971)
* Custom data type history request in python

* Potential solutions

* Minor changes

* Use Slice.Get(Type) for getting python custom data history

* Minor changes

* Add unit tests

* Add unit tests

* Udpdate regression algorithms

* Peer review

* Peer review

* Add research regression tests

* Minor changes

* Minor changes

* Minor tweaks

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-02-20 16:21:37 -03:00
Martin-Molinero
6fd1a002fe Adjust index option data timezone (#6970)
* Fix index option data timezone

- Fix index option data timezone which was 1 hour late than expected

* Update existing index option tests

- Update existing index option tests.
- Disable index option daily resolution support
2023-02-16 17:35:10 -03:00
Martin-Molinero
ace1a1f20d Define MaximumContractDepthOffset (#6969) 2023-02-16 17:23:56 -03:00
Martin-Molinero
75f86f555e Delete unused PythonToolbox (#6967) 2023-02-16 17:23:38 -03:00
Martin-Molinero
20655b334b Update readme.md 2023-02-15 15:16:55 -03:00
Martin-Molinero
3507c91640 Fix future daily price scale factor update (#6963)
* Fix future daily price scale factor update

- Fix future daily price scale factor update which was happening 1 day
  late due to data and exchange time zone differences.
  Adding regression algorithm reproducing and asserting it.

* Address review
2023-02-14 20:09:59 -03:00
Jhonathan Abreu
ebb31d0fb4 Unsettled cash conversion rate update (#6961)
* Update unsettled cashbook cash conversion rates

Also moved conversion rate holding from Cash to the CurrencyConversion
instance

* Minor fixes

* Peer review

* Minor fixes

* Minor fixes

* Minor fixes
2023-02-14 18:19:25 -03:00
Ronit Jain
dcd60d0551 Add support for HTML reports conversion to PDF (#6960)
* add wkhtmltopdf to lean image

* convert html to pdf

* avoid black stripts at bottom of each page

* address reviews

* address review

* address reviews

* self review

* address review
2023-02-14 15:50:19 -03:00
Martin-Molinero
dc2c68c754 Fix security cache reset (#6959)
* Fix security cache reset

- Fix security cache reset so it only happens when no universe has it as
  a member. Adding regression algorithm reproducing issue

* Avoid non deterministic FillForward behavior
2023-02-14 12:09:27 -03:00
Jhonathan Abreu
2791765c94 Make Consolidate Calendar overload with tick type public (#6957) 2023-02-13 16:01:30 -03:00
Martin-Molinero
f270f25eca Fix default future chain universe selection (#6958)
* Fix default future chain universe selection

- Fix default future chain universe selection that should always return
  empty, no selection. In some cases it would allos some contracts
  though. Adding regression algorithm reproducing issue.

* Address review
2023-02-13 15:56:48 -03:00
Martin-Molinero
8235de42a0 Minor debugging improvements (#6954)
* Minor debugging improvements

- Improve exception message if user provides empty/null ticker
- Log margin information on algorithn initialization
- Add unit test asserting option strategy position groups resolve
  correctly for existing holdings

* Symbol Lazy SecurityDefinitionSymbolResolver

- Symbol will have a lazy SecurityDefinitionSymbolResolver instance
  resolution
2023-02-13 10:49:10 -03:00
Martin-Molinero
c2e21df18b Fix combo order prechecks (#6953)
- Apply combo order prechecks before submitting orders. Adding unit test
2023-02-10 19:11:45 -03:00
Jhonathan Abreu
35dfcd73ab Index options MHDB review (#6890)
* Index options MHDB review

* Update MHDB

* Update regression algorithms stats

* Update regression algorithms stats

* Add index and index options holidays

* Peer review

* Update algorithms stats
2023-02-10 14:37:44 -03:00
Jhonathan Abreu
3783900eef Move Brokerages namespace's messages to Messages folder (#6915) 2023-02-10 13:49:15 -03:00
Jhonathan Abreu
9fea859323 Symbol to industry-standard security identifier conversion (#6893)
* Implement SecurityDefinitionSymbolResolver backwards conversion (symbol -> standard id)

* Peer review

* Peer review

* Peer review
2023-02-10 13:12:13 -03:00
Jhonathan Abreu
6e2744af7c Move Securities namespace's messages to Messages folder (#6922)
* Move Securities namespace's messages to Messages folder

* Rebase related fixes

---------

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-02-10 11:31:11 -03:00
Martin-Molinero
962b91fc12 Fix Messages namespace collision 2023-02-10 10:50:03 -03:00
Louis Szeto
cf00d3c9f3 OptionStrategies for put calendar spread index weeklies example (#6951) 2023-02-10 10:44:47 -03:00
Louis Szeto
8af5c8b6f2 OptionStrategies for put butterfly index weeklies example (#6950) 2023-02-10 10:42:40 -03:00
Louis Szeto
1fcef8c024 OptionStrategies for Index Option Call Butterfly (#6949)
* OptionStrategies for call butterfly index weeklies example

* fix typo
2023-02-10 10:42:07 -03:00
Jhonathan Abreu
a912638496 Move QuantConnect namespace's messages to Messages folder (#6924) 2023-02-10 10:41:05 -03:00
Jhonathan Abreu
5611b5508a Binance crypto futures fee models (#6874)
* Add Binance Futures and Binance Coin Futures fee models

* Add unit tests

* Add unit tests

* Minor changes

* Peer review

* Peer review
2023-02-09 19:25:27 -03:00
Jhonathan Abreu
b3bd15d3c2 Move Notifications, Optimizer and Python namespaces' messages to Messages folder (#6931) 2023-02-09 19:23:39 -03:00
Jhonathan Abreu
25ab8bdacc Move small namespaces' messages to 'Messages' folder (#6930)
* Move Benchmarks, Exceptions and Indicators namespaces' messages to Messages folder

* Move Command namespace's messages to Messages folder
2023-02-09 19:17:40 -03:00
Jhonathan Abreu
38c5ef3e2b Add CME Ether futures to symbols database (#6884)
* Add Ether futures to symbols database

* Change ETH futures exchange time zone to US/Central

* Add new contracts FuturesExpiryFuntions

* Remove BTIC Micro BTC and BTIC Micro Ether securities

* Add Ether futures IB fees and price multiplier entry

* Update Ethereum price multiplier
2023-02-09 18:42:19 -03:00
Jhonathan Abreu
194f01e621 Move Algorithm namespace's messages to Messages folder (#6916) 2023-02-09 18:35:29 -03:00
Martin-Molinero
61b5231c50 Research GetOptionHistory Weekly Index Improvement (#6946)
- Improve research GetOptionHistory weekly index option support. Adding
  unit test
2023-02-09 18:35:20 -03:00
Louis Szeto
4a06fcdda0 OptionStrategies for Index Option Bull Put Spread (#6945) 2023-02-09 16:10:14 -03:00
Louis Szeto
8325fd18ca OptionStrategies for Index Option Bull Call Spread (#6944) 2023-02-09 16:07:43 -03:00
Louis Szeto
2bc8783082 OptionStrategies for Index Option Bear Put Spread (#6943) 2023-02-09 16:07:00 -03:00
Louis Szeto
0d9f011758 OptionStrategies for Index Option Bear Call Spread (#6942) 2023-02-09 16:06:12 -03:00
Jhonathan Abreu
6dfc6c710c Add algorithm parameters to result (#6878)
* Add algorithm parameters to result's AlgorithmConfiguration

* Peer review
2023-02-09 12:55:30 -03:00
Jhonathan Abreu
e30232e21b Portfolio.UnsettledCashBook update when quote currency is not the account currency (#6871)
* Tracking unsettled cash for non-USD account currency

* Add unit tests

* Peer review

* Move and rename CashBook.UpdateType to Globals
2023-02-09 12:53:52 -03:00
Louis Szeto
8730eeb8a9 Volume Renko Consolidator & Bar (#6888)
* Volume Renko Consolidator & Bar

* address peer review

* Minor fix on tests

---------

Co-authored-by: LouisSzeto <hke0073@hotmail.com>
2023-02-09 10:46:02 -03:00
Jhonathan Abreu
914485c595 Rename SubscriptionRequest.TradableDates to TradableDatesInDataTimeZone for clarity (#6892)
Usages were reviewed to make sure all of them expect it to be in data
time zone instead of exchange time zone
2023-02-08 20:28:37 -03:00
Jhonathan Abreu
02f085ee9e Validate date on security identifier generation (#6897) 2023-02-08 20:26:37 -03:00
Martin-Molinero
f4cf7b6733 Fix SPXW option strategies (#6939)
- Fix SPXW option strategies. Adding regression algorithm
2023-02-08 20:24:30 -03:00
Jhonathan Abreu
d427970762 Check minimum Forex limits in IB Brokerage Model (#6881)
* Checking both min and max forex order size limits in IB brokerage model

Also updated the limits table

* Address peer review
2023-02-08 16:40:18 -03:00
Jhonathan Abreu
66ff14b3bd Patch for missing tick data in history call (#6932)
* Patch for missing tick data in history call

* Update TODO comment to include info on the proposed solution
2023-02-06 13:50:59 -08:00
Jhonathan Abreu
a7a4af6b70 Add Security.SetMarginInterestRateModel methods and its python wrapper (#6879) 2023-02-06 07:57:55 -08:00
Alexandre Catarino
b1a6aa686c Replace Nodes Endpoint in SDK (#6899)
* Adds `project/nodes` Endpoint to SDK

* Removes `nodes` Endpoint from SDK

* Fixes Documentation for `ProjectNodesResponse`
2023-02-05 09:35:11 -08:00
Louis Szeto
14b10f5e81 Add example of bull/bear call spread using index option (#6889)
* Add example of bear call spread using index option

* consistency

* Add bull call spread

* peer review

* peer review

* address peer review

* bug fix

* fix filter

* Address peer review
2023-02-02 13:01:47 -08:00
Louis Szeto
4d85f27f00 Add bull/bear put spread sample algorithms for index weeklies (#6914)
* bear put spread

* bull put spread
2023-02-02 12:34:26 -08:00
Louis Szeto
c2efa65048 Add Call/Put Butterfly sample algorithms for index weeklies (#6913)
* Add index weeklies' Call/Put Butterfly sample algo

* Address peer review
2023-02-02 12:34:04 -08:00
Louis Szeto
75eaf21e43 Add example algo of call & put calendar spread with SPXW (#6907)
* Add example algo of call calendar spread with SPXW

* Add similar example for put calendar spread

* Refine

* consistency

* address peer review

* fix bug

* bug fix

* update

* Improved efficiency

* Address peer review
2023-02-02 12:33:17 -08:00
Louis Szeto
72a6ea9d31 Add SPXW Iron Condor example algorithm (#6880)
* Add SPXW Iron Condor example algorithm

* review

* peer review

* Address peer review
2023-02-02 12:26:34 -08:00
Jhonathan Abreu
2b9662c12e Fix quote tick python consolidate call (#6876) 2023-01-26 18:22:34 -08:00
Jhonathan Abreu
98314d98ed User-facing messages organization (first phase) (#6912)
* Move user-facing order-related messsages to the Messages class

* Group Messages by class

* Move more orders messages

* Minor changes and docs
2023-01-26 16:14:57 -08:00
Jhonathan Abreu
a860cfc32f Combo orders reduced size validation (#6864)
* Combo order legs ratio validation

* Minor changes and unit tests

* Minor changes

* Minor changes

* Minor changes

* Minor changes
2023-01-16 21:11:08 -03:00
Martin-Molinero
6563d6e394 Use any resolution for chain provider (#6860)
* Use any resolution for chain provider

- Use any data resolution available to source symbols for the file based
  chain provider. Adding unit test

* Fix selection timezone bug

- Fix universe selection timezone bug. Updating regression algorithms
2023-01-16 16:10:07 -03:00
Martin-Molinero
11cc062628 Combo limit orders price calculation (#6858)
* Fix limit price calculation for combo limit orders fills

* Update regression algorithms

* Address reviews

* Fix thread race condition

Co-authored-by: Jhonathan Abreu <jdabreu25@gmail.com>
2023-01-13 18:02:25 -03:00
Alexandre Catarino
e8b95b80e1 Polygon Handles Data Subscriptions with One Security Type (#6855)
* Handles Data Subscriptions with One Security Type

Polygon sells data subscriptions for security types separately, so we should not test whether the users have all three subscriptions, Equity, Forex, and Crypto. Users just need the type they will use.

Adds new crypto markets, and unit tests for them. Adapt unit test.

* Fixes ToolBox Downloader

Adds `--api-key` argument.
Closes #6687

* Address reviews

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-01-12 17:37:29 -03:00
Martin-Molinero
a52822853d Expand Index option support (#6849)
* Expand Index option support

- Adjust APIs so that the same underlying can be used
  for different options, adding support for SPX weekly options. Adding
  regression tests

* Fix IndexOption.IsStandard

* Add IndexOption test
2023-01-12 16:39:02 -03:00
ChadBett
73e46cc9ae TensorFlow Placeholder Fix (#6852)
Fixed this error from happening when running this code:

tf.placeholder() is not compatible with eager execution.
  at placeholder
    raise RuntimeError("tf.placeholder() is not compatible with "
 in array_ops.py: line 3341
  at NetTrain
    xs = tf.compat.v1.placeholder(tf.float32 in /QuantConnect/backtesting/./cache/algorithm/project/main.py: line 57
2023-01-11 11:18:47 -03:00
Ronit Jain
a9c4d29776 Feature add algorithm state information in result packets (#6839)
* add state to backtesting result packets

* self review

* add state in live results

* set runtime error in algorithm

* set hostname in job packets

* Set state when algorithm is null

* address review

* address reviews

* set runtime error when algorithm is not available during runtime
2023-01-11 10:54:38 -03:00
Jhonathan Abreu
6ed8cb5cae Backtest progress calculation (#6847)
* Fix backtest progress calculation

* Backtest progress monitor class

* Minor changes

* Lazy calculating the processed days count

* Minor changes

* Minor changes
2023-01-11 10:33:38 -03:00
Jhonathan Abreu
1d1dc07dfb Set DataNormalizationMode on AddSecurity method (#6845)
* Set DataNormalizationMode on AddSecurity method

* Minor changes
2023-01-10 13:03:00 -03:00
Jhonathan Abreu
bddebe279d Algorithm asserting options stategy orders with large quantities (#6843) 2023-01-09 14:21:16 -03:00
Martin-Molinero
81a334c525 Add Leg.Create method (#6842)
- Add Leg.Create method for sugar syntax, specially for python
2023-01-09 14:20:32 -03:00
Martin-Molinero
af26b66481 Update readme.md 2023-01-06 21:10:08 -03:00
Martin-Molinero
d7ead851a1 Update readme.md 2023-01-06 19:27:32 -03:00
Martin-Molinero
f428398900 Update readme.md 2023-01-06 19:22:07 -03:00
Martin-Molinero
19483702f8 Update readme.md 2023-01-06 18:36:42 -03:00
Martin-Molinero
146be2d0ba Update readme.md 2023-01-06 18:09:40 -03:00
Jhonathan Abreu
b54281b262 Combo orders (#6813)
* Feature combo orders

- Add support for combo orders

* Make fill model wait for all grouped orders to emit fills

* Add ComboFill to model multiple fills for combo orders

* Fill combo limit orders

Add some regression algorithms

* Add fill implementation for combo leg limit orders

* Add IFill as common interface for Fill and ComboFill

* Refactor combo orders removing IGroupOrder interface

Move the group order manager to the base Order class

* Update algorithms

* Handle combo order events atomically

* Refactor brokerage transaction event handler

* Refactor combo fill models

* Process fills in batch

* Combo orders fill model tests

* Combo leg limit orders algorithm

* Regression algorithms cleanup

* Fill and combo fill classes cleanup

* Housekeeping

* Refactor equity fill model to derive from base fill model

* Address review changes request

* Handling the new types of orders in the OrderJsonConverter

* Add regression algorithm to test combo orders update/cancel

* Add regression algorithm to test combo orders update/cancel

* Housekeeping

* Address review changes request

* Minor changes

* Security transaction handler method for setting order request id

* Extend public interface for placing combo orders

* Combo order tickets demo algorithm python version

* Tweaks and updates

* Minor fixes

* Minor changes

* Minor fixes

* Address reviews minor fixes

* Minor fixes

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2023-01-06 17:58:43 -03:00
Martin-Molinero
f12e8fc08e CryptoFutures adjustments (#6836)
* CryptoFutures adjustments

- Address reviews of CryptoFutures:
- Add new Slice MarginInterestRates collection
- Add new regression tests asserting funding rate application behaves
  the same no matter the resolution
- Add auxiliary data by type into the security cache
- Revert BuyingPowerModel changes

* Make interest rate application time deterministic
2023-01-05 18:07:01 -03:00
Alexandre Catarino
6b6ca5b460 Saves Dividend Payments to Security Holdings (#6830)
* Saves Dividend Payments to Security Holdings

Saves information about dividend payments to `SecurityHoldings`. This information will be used to factor in dividend payments to the `Profit` and `NetProfit`.
Adds `SecurityPortfolioManager.TotalNetProfit` to sum all the `SecurityHoldings.NetProfit`.

Adds regression and unit tests.

* Addresses Peer-Review

Improves Regression Test.
2023-01-03 18:37:00 -03:00
Martin-Molinero
ab4c3bf55e Live margin interest rate bug (#6833)
* Fix for live MarginInterestRate

* Add unit tests
2023-01-03 14:13:11 -03:00
hsm207
9c69ee5536 Update link to Lean CLI getting started (#6832) 2023-01-02 11:14:06 -03:00
Alexandre Catarino
89493b1546 Adds Pre-Market for LBS (#6831)
The lumber pre-opening window is from 6am to 9am Chicago.
https://www.cmegroup.com/trading-hours.html#foi=F&search=Lumber
2022-12-30 18:00:07 -03:00
Martin-Molinero
ee683933a3 Feature Perpetual Crypto Futures (#6807)
* WIP

* Add base currency cash

* Symbol properties and data processing

* Add basic template algorithm

* Add hourly crypto future algorithm

* Minor fixes after live trading testing

* CoinApiDataQueueHandler CryptoFuture support

* Address reviews

* Fix regression algorithms after update
2022-12-30 13:58:11 -03:00
Martin-Molinero
e87c98def8 Update readme.md 2022-12-28 15:39:59 -03:00
Martin-Molinero
239406ef5c Update ib gateway to latest (#6819) 2022-12-28 15:35:52 -03:00
Martin-Molinero
e13066273c Update readme.md 2022-12-26 17:25:34 -03:00
Martin-Molinero
7677b99bf6 Handle OnOptionNotification race condition (#6821)
- Handle OnOptionNotification race condition to take into account sell
  orders too. Updating unit tests
2022-12-26 17:21:51 -03:00
Ronit Jain
c21dd716ed use data channel property (#6826) 2022-12-26 15:23:18 -03:00
Martin-Molinero
f87eb88f27 Update holidays Christmas New Years 2022/23 (#6824) 2022-12-26 13:58:05 -03:00
Martin-Molinero
1d363e2c35 Fix brokerages tests order id update (#6822)
- Fix for brokerage test brokerage order id update handling
2022-12-22 20:02:35 -03:00
Martin-Molinero
98273097e5 Update readme.md 2022-12-22 10:43:39 -03:00
Martin-Molinero
cbdf25d713 Update readme.md 2022-12-21 21:19:44 -03:00
Martin-Molinero
dcfdbd8c82 Add OnOrderIdChangedEvent (#6816)
* Add OnOrderIdChangedEvent

- Add OnOrderIdChangedEvent so that brokerages can change the brokerage
  order ids on the original order directly

* Fix bug
2022-12-21 20:53:39 -03:00
Louis Szeto
b5b317f490 Basic template algorithm for continuous futures rollover (#6803)
* Basic template algorithm for continuous futures rollover handling

* update regression metric

* Update to multi-contract versions

* SymbolData implementation

* minor bug

* peer review

* order hash

* more abstraction
2022-12-20 11:37:32 -03:00
Martin-Molinero
0eecf5d139 Update gh-actions.yml 2022-12-20 11:12:43 -03:00
Alexandre Catarino
bc513ce0e7 Changes Crumb Location from Yahoo Downloader (#6812)
Yahoo has changed the location from the crumb which is no longer located in "CrumbStore",
2022-12-20 10:33:52 -03:00
Roman Yavnikov
019ce5aa76 TDAmeritrade brokerage fix (#6806)
* remove: support SecurityType.Future

* add SecurityType.Index and IndexOption
fix: error message in orderType support

* Update TDAmeritradeBrokerageModel.cs

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-12-16 19:47:03 -03:00
Martin-Molinero
c4329c4132 More resilient object store file read (#6800) 2022-12-13 15:25:47 -03:00
Roman Yavnikov
9618c376bf Feature tdameritrade brokerage setup (#6791)
* TDAmeritrade LEAN integration

* feature: update order model for TDAmeritrade brokerage
fix: typos

* fix: typo in license

* refactor: remove extra multiple op

* refactor: TDAmeritrade naming api-key

* remove: extra configs

* fix: PR comment

* Rename file

* feature: add to config `SubscriptionDataReaderHistoryProvider`

* remove: extra logic

* Address review

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-12-12 18:14:21 -03:00
Alexandre Catarino
3aabb11315 Allows Market-On-Close Orders Outside Buffer Period (#6769)
* Allows Market-On-Close Orders Outside Buffer Period

Market-On-Close orders can be submitted before and after the buffer period from 15:45 to 16:00 (Tested with TWS) meaning that we can submit MOC when the market is closed and, consequently, use daily resolution data.

* Adds Regression Test with Extended Market Hours

- Removes `nextMarketClose > Time` condition since it's unnecessary. If the algorithm Time is greater than the close of that day, `nextMarektClose` refers to the next day.

* Updates Unit Test

Updates `OrderQuantityConversionTest` because the MOC orders are submitted. They are placed at 7 pm and invalid before this pull request.

* Updates Summary of new Regression Tests
2022-12-08 19:46:58 -03:00
Jhonathan Abreu
4d2723f851 Update CME options scaling factors (#6774) 2022-12-06 16:41:04 -03:00
Jhonathan Abreu
86b74e0a09 Add IB weekly restart time entry to config file (#6773) 2022-12-06 14:52:46 -03:00
Jhonathan Abreu
41a730bc68 OTM option excerise orders improvements (#6767)
* Set fill price to zero in OTM exercise orders.

Improved the OTM exercise orders message.

* Update regression algorithms and unit tests

* Add IsInTheMoney property to OrderEvent

* Update SerializedOrderEvent

* Properly setting the option exercise order price to strike price or zero

* Minor changes

* Minor changes
2022-12-06 14:30:40 -03:00
Jhonathan Abreu
6b2dfb6b8c Update equity default settlement days (#6766) 2022-11-28 13:26:56 -03:00
Jhonathan Abreu
7a4ca7898e Add estimate option to optimizer for optimization estimate (#6763)
* Add 'estimate' option to optimizer launcher

* Add 'estimate' option to optimizer launcher

* Unit tests and minor tweaks

* Minor tweaks
2022-11-25 19:08:28 -03:00
Mathieu Paquette
60028ad48a fix(ToolBox/IQFeed): increase default buffer size (#6762)
fixes #6761
2022-11-25 10:40:52 -03:00
Derek Melchin
e9d690b35a Add missing </summary> tag (#6760) 2022-11-23 10:20:27 -03:00
Alexandre Catarino
db2cb57a3f Handles NaN or Infinity from QLNet Calculations (#6757) 2022-11-18 18:25:13 -03:00
Jhonathan Abreu
3c784e5b04 Revisit futures contract multipliers (#6753) 2022-11-18 18:24:45 -03:00
Jhonathan Abreu
31f8561330 Allow optional selector in classic renko consolidator in Python and C# (#6755) 2022-11-18 17:14:03 -03:00
Martin-Molinero
38b87d941a Update readme.md 2022-11-18 14:36:51 -03:00
Alexandre Catarino
83d59b5f9a Removes Volatility Model Warm Up Requirement (#6752)
* Fixes Regression Algorithm Testing No Warm Up Requirement

* Removes Volatility Model Warm Up Requirement

If the volatiliy model is not ready, we will use the Brenner and Subrahmanyam (1988) approximation (BS88).
Lean will not set the volatility model if the user doesn't, since the BS88 can handle the null model case.
2022-11-18 14:34:56 -03:00
Martin-Molinero
f19d8cb700 Add missing exchanges (#6754)
* Add missing exchanges

* Add missing conversion handling
2022-11-18 14:11:13 -03:00
Martin-Molinero
fcee43b56e Update readme.md 2022-11-17 14:38:14 -03:00
Martin-Molinero
7898e74148 Update readme.md 2022-11-17 13:50:31 -03:00
Louis Szeto
b34cea4458 Calculate Option Greeks with Implied Volatility (#6720)
* Using IV to calculate Greeks, and remove single-step stochastic approximation

* Correct calculation for theta, vega, rho

* Add calculation from Black Calculator and peer review

* Address peer review and added unit test

* Update some tests and correct vega/eho

* Fix Unit Test and Improve Comments

Fixes `IndexOptionCallITMGreeksExpiryRegressionAlgorithm` since `Vega` was really non-zero.

* Fix regression test and add IV calculation

* refactor and bug fixing on peer review

* refactor and bug fixing on peer review

* for rerun test

* add warning on IV estimation not coveraged and edit speed unit test to not exceed 2s per 1000 iteration

* update logging

* update logging and description

* Add default option pricing models and unit tests

* address review

* Added Fed interest rate as risk-free rate with unit tests and set as default for option greeks calculation, added regression algorithms, addressed peer review

* refactor structure of interest rate

* Skip Saturday and Sunday

* regression test fix

* peer review

* Fixes Interest Rate Provider Logic

* Minor tweaks

* Fix start date

* Minor test tweak

* Update interest rates

* Fix unit tests

* Add minor log

Co-authored-by: Alexandre Catarino <AlexCatarino@users.noreply.github.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-11-17 13:35:42 -03:00
Jhonathan Abreu
e9edb8ac29 Fix IndicatorExtensions for Python indicators (#6748)
* Fix using python custom indicators with extensions

* Minor changes to the algorithm

* Address PR comments
2022-11-16 18:36:46 -03:00
Jhonathan Abreu
33c57bbde4 Use selector on indicator warm up (#6746) 2022-11-15 19:59:59 -03:00
Jhonathan Abreu
94b9b13530 Make PlotIndicator able to receive IndicatorBase (#6745)
* Make PlotIndicator able to receive IndicatorBase

* Minor changes
2022-11-15 11:49:55 -03:00
Jhonathan Abreu
682b9aa760 Restrict index and cash-settled options exercise in IB brokerage (#6744)
* Limit exercise in IB brokerage for limit and cash-settled options

* Add regression algorithm

* Assert that index option is automatically exercised in regression algorithm
2022-11-15 11:03:43 -03:00
Jhonathan Abreu
98c6023748 Forbid european options exercise before expiry (#6734)
* Forbid european options exercise before expiry

* Minor tweaks

* Minor tweaks to tests
2022-11-11 19:32:44 -03:00
Martin-Molinero
dacc679d42 Wolverine brokerage setup (#6733)
* Wolverine LEAN integration

* Wolverine Lean integration - adjusting comments and restrict to Equity only

* fix 0.005$ per share fee

* remove PostOnly from Wolverine as its not needed

* AccountType.Margin and also removed check for USD only currency

* fix Market Wolverine -> USA

* change config

* Minor tweaks

Co-authored-by: Mark Virchenko <mark.virchenko@redduck.io>
2022-11-10 17:59:36 -03:00
Jhonathan Abreu
3e76716b07 Fix ppply options filter on market open only when using OnlyApplyFilterAtMarketOpen (#6731) 2022-11-10 12:46:09 -03:00
Jhonathan Abreu
55b09a1ea6 Data monitor (#6725)
* Data monitor (FIRST TEST)

* Calculate data request frequency in data monitor

* Detecting universe data usage in data monitor

* Json data monitor report generation

* Data monitor refactor

* Log and store data monitor report

* Data monitor report tests

* Clean up

* Clean up

* Address changes request

* Address changes request

* Wire data monitor only for backtest, not for live or research

* Minor tweaks

* Some minor tweaks

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-11-09 17:38:34 -03:00
Martin-Molinero
5539e27905 Fix tradier default config (#6727)
- Tradier brokerage is no longer a history provider, after refactor https://github.com/QuantConnect/Lean.Brokerages.Tradier/pull/7
2022-11-08 15:55:15 -03:00
Martin-Molinero
42ed7cf2a7 Update readme.md 2022-11-08 12:17:56 -03:00
Martin-Molinero
62d1321d74 Object Store Limit Validation (#6726)
- Minor object store limit validation on saving a new entry
2022-11-08 11:51:16 -03:00
Derek Melchin
0fa2ea19bc Reset trailing stop model highwater mark upon security liquidation (#6724)
* Fix trailing stop reset

* Add regression algorithm
2022-11-07 17:46:46 -03:00
Martin-Molinero
e155f620e1 Update readme.md 2022-11-03 11:23:15 -03:00
Alexandre Catarino
897e16c484 Changes SuperTrend Indicator Type from TradeBarIndicator to BarIndicator (#6717) 2022-11-01 10:19:13 -03:00
Martin-Molinero
6477b40661 Fix Options Strategies Names (#6715)
- Minor fix for options strategies names. Update regression algorithm
  order hash due to tag
2022-10-31 15:17:07 -03:00
Derek Melchin
5bfe2491c3 Add Sortino indicator (#6696)
* Add sortino indicator and helper indicators

* Address review

* Address review
2022-10-28 18:12:33 -03:00
Martin-Molinero
03f1bacd3f Update readme.md 2022-10-25 17:23:55 -03:00
Martin-Molinero
9849a11933 Update readme.md 2022-10-25 14:22:41 -03:00
Martin-Molinero
8e6dd5a338 Update readme.md 2022-10-25 12:45:15 -03:00
Martin-Molinero
2738c0f006 Refactor multi IDQH frontier (#6709)
* Refactor multi IDQH frontier

- Fix for multi IDQH frontier support, specially for IB + QC
- Adding new CompositeTimeProvide. Adding unit tests

* Adjust solution to fix new data available event
2022-10-25 11:59:21 -03:00
Martin-Molinero
a0c4d7b741 Update readme.md 2022-10-24 12:02:49 -03:00
Martin-Molinero
7095dc1559 Update gateway to 1019 (#6706)
- Update gateway to latest 1019
- Fix bug in IB data subscription limit, not applying when using
  multiple data queue handlers
2022-10-24 12:01:13 -03:00
Jhonathan Abreu
2d7afa798a Make NDAX use the same fill model as the other crypto brokerages (#6705) 2022-10-21 16:42:42 -03:00
Martin-Molinero
b8bcc4796f Create directory & replace link (#6704) 2022-10-21 15:55:10 -03:00
Martin-Molinero
0fc9555121 Update readme.md 2022-10-21 15:22:35 -03:00
Martin-Molinero
45e13bb35b Memory Related Performance improvements (#6700)
* Memory Related Performance improvements

- Make sure we cleanup & dipose of python related objects during pandas
  data generation.
- Disable memoizing enumerable use while creating pandas data frames,
  since we do not require it
- Reduce unrequired object creations
- Replace concurrentCollections for ordinary locks

* Decimal parsing typo fix
2022-10-21 15:11:18 -03:00
Martin-Molinero
5773d29419 Research Libraries Fixes (#6702)
- Replace old conda libc for OS version
- Remove unrequired LD_LIBRARY_PATH added for a mono issue at https://github.com/QuantConnect/Lean/pull/5380
2022-10-21 15:09:44 -03:00
Jhonathan Abreu
8f3bdcfe6c Fix adding Python additional paths in research (#6699)
* Add python additional paths for research

* Delegate adding additional paths to pythonpath to PythonInitializer

* Add new way to keep algorithm location at the beginning of pythonpath

* Add switch to disable BeginAllowThreads in PythonInitializer

* Add switch to disable BeginAllowThreads in PythonInitializer

* Address changes request
2022-10-21 12:11:10 -03:00
Alexandre Catarino
736e5d1fe0 Adds Support to Visual Studio Code Dev Container (#6680)
* Adds Support to Visual Studio Code Dev Container

Adds support and documentation to VSCode Dev Container.

* Address Peer Review

- Adds Dockerfile to install QuantConnect Stubs to enable Python autocomplete.
- Adds settings.json to enable Python autocomplete and LF line ending.
- Removes autobuilder task.
- Fixes Research Laucher

* Launcher and Task Impromevents

Fixes line endings issue
Fixes Launcher to point to right config.json file
Improve readme formatting

* Simplify Jupyter Notebook Deployment
2022-10-19 16:41:57 -03:00
Alexandre Catarino
c5e5de3416 Fixes Index Option Assignment Simulation (#6697)
Cash settlements do not open a position for the underlying, so we don't need to calculate the cost of closing the position.
2022-10-19 10:45:55 -03:00
Martin-Molinero
39735941ec FillForward delisting handling (#6692)
- In some rare cases the FillForwardEnumerator was missing to register
  the delisting date of an asset because it was the first data it got.
  Adding unit test reproducing issue
2022-10-14 20:29:40 -03:00
Martin-Molinero
fc6835cace Normalize time in universe behavior (#6693)
* Normalize time in universe behavior

- Normalize Option & Future chain universe behavior regarding their
  assets time in universe. They will now respect the universe settings
  time in universe value. Adding new regression algorithms asserting the
  behavior

* Address reviews & cleanup
2022-10-14 15:13:59 -03:00
Derek Melchin
dba0fd0824 Update description (#6691) 2022-10-13 20:21:52 -03:00
Martin-Molinero
a0fd2b193f Option greeks improvements (#6690)
- Update QLNet library to latest version from 6/2019 -> 11/2021
- Fix evaluation date which was using settlement date. Adding unit tests
  reproducing issue
2022-10-13 20:00:17 -03:00
Martin-Molinero
0fa471f4e5 Resource related improvements (#6683)
- Add resource controls logs
- Make sure the OS CPU performance counter thread is only created when
  desired, not in research
2022-10-12 17:25:56 -03:00
Martin-Molinero
b899aa4767 Make UserDefinedUniverse thread safe (#6682)
- Make UserDefinedUniverse thread safe. Adding regression test
2022-10-12 15:06:01 -03:00
Martin-Molinero
fed1b6e780 Add pyvinecopulib to foundation (#6679)
- Adding pyvinecopulib to foundation. Adding unit test
2022-10-11 16:30:57 -03:00
Martin-Molinero
f528c39700 Foundation update (#6677)
- Add new python packages to foundation images. Adding tests
2022-10-10 20:03:33 -03:00
Jhonathan Abreu
6a0fdd63a8 Add algorithm directory before any additional paths to pythonpath (#6674) 2022-10-06 20:04:47 -03:00
Alexandre Catarino
ca4187290b Normalize Algorithm EndDate Initilization (#6672)
Use `SetEndDate` to set `EndDate` in `QCAlgorithm` constructor. It will ensure that the `EndDate` is independent of the time the algorithm is executed if `SetEndDate` is not called in `Initilaize`.

Some users don't implement `SetEndDate` to run the algorithm to the latest datapoint, but this is not true if we run the algorithm during the day as the latest datapoint will be 24 hours before the execution time while there is data until the current day midnight.
2022-10-05 20:20:16 -03:00
Jhonathan Abreu
a0491a9b74 python-additional-paths config file setting (#6667)
* Add python-additional-paths setting in config file

* Configure python additional paths in JobQueue instead of PythonInitializer
2022-09-30 16:52:17 -03:00
Alexandre Catarino
abeb841a0c Adds Additional Condition to Parse SecurityIdentifier Properties (#6658)
* Adds Additional Condition to Parse SecurityIdentifier Properties

A string can pass the previous conditions and create an invalid `SecurityIdentifier` (e.g. "Sharpe ration").  If it is invalid, the Market is not supported (e.g. "378").

* Adds Unit Test to Pandas Indexing

* Log Only Once if TryParseProperties Cannot Parse

Use cache to increase speed and remove redundant logging
2022-09-29 10:13:45 -03:00
Martin-Molinero
783805ccf9 Allow running start from python (#6662)
* Allow running start from python

- Allow running start.py from python as well as IPython, so C# can be
  called. Adding unit test

* Address review
2022-09-28 12:57:47 -03:00
Alexandre Catarino
848d812bf2 Fixes Buying Power Model Selection for Cash Account (#6652)
`DefaultBrokerageModel` was selecting `CashBuyingPowerModel` for securities not supported by this model as it only supports Crypto and Forex.
2022-09-26 12:50:08 -03:00
Derek Melchin
96b07e6916 Add PyObject overload to ETFConstituentsUniverseSelectionModel (#6616) 2022-09-26 12:47:25 -03:00
Martin-Molinero
7796868da7 Fix research image typo (#6650)
Fix research image typo
2022-09-22 10:58:23 -03:00
Martin-Molinero
108bfa6c0a Enable debugging worker threads (#6647)
- Enable debugging worker threads in python
2022-09-21 16:29:37 -03:00
Martin-Molinero
7f44c3d605 Update readme.md 2022-09-19 19:34:02 -03:00
Martin-Molinero
59eae963be Fix order cancel using order ticket (#6640)
- If cancel request failed, allow user to retry. Adding unit test
  reproducing the issue
2022-09-19 18:36:51 -03:00
Louis Szeto
c48979e986 Remove alpha stream from docker image (#6638) 2022-09-19 17:48:07 -03:00
Martin-Molinero
e54fe3ae95 Pin clr loader version (#6641) 2022-09-19 17:04:24 -03:00
Martin-Molinero
ee685ea045 Add new python libraries to foundation (#6629) 2022-09-19 13:20:54 -03:00
Ryan Russell
11f13be75b docs(VixDualThrustAlpha): readability improvements (#6632)
* docs(VIXDualThrustAlpha): `determine` fixup

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* docs(VixDualThrustAlpha): `unsubscribe` fixup

Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-09-19 13:17:18 -03:00
Ryan Russell
188506b5da docs(ShareClassMeanReversionAlpha): dollar-neutral fixup (#6631)
Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-09-19 13:17:10 -03:00
Ryan Russell
ca83e8443f docs(BasicTemplateIndiaIndexAlgorithm): readability fixups (#6633)
* docs(BasicTemplateIndia): `Prperties` -> `Properties`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* docs: `Intialization` -> `Initialization`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-09-19 13:16:54 -03:00
Ryan Russell
ac0cdb20f5 docs: formatted readability fix (#6627)
Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-09-16 17:32:44 -03:00
Ryan Russell
a131a4849a docs: automatic readability fixes (#6626)
Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-09-16 17:32:28 -03:00
Jhonathan Abreu
31b603593d Get history for a specific bar type in Python (#6611)
* Get history of a given bar type in python

* Separate GetDataFrame in sub methods to avoid dynamic type resolution

* Housekeeping and unit tests update

* Use all requests in python type method history method

* Address changes request

* Reverted some requested changes
2022-09-13 10:26:47 -03:00
Jhonathan Abreu
f62f110b1b Handle non-unique multi-index error in history dataframe creation (#6617)
* Handle non-unique multi-index error for Ticks in data frame creation

* Update unit tests

* Update unit tests and add comments

* Add regression algorithm
2022-09-08 19:40:57 -03:00
Derek Melchin
ede2991823 Add ETF universe selection model and example algos (#6604)
* Add ETF universe selection model and example algos

* Address review

* address peer review
2022-09-07 21:32:51 -03:00
Martin-Molinero
3b65f4b9a1 Fix micro crude oil future expiration (#6614)
* Fix micro crude oil future expiration

- Fix micro crude oil future expiration. Adding unit test

* Add MicroCL for ExpiriesPriorMonth
2022-09-07 21:06:28 -03:00
Alexandre Catarino
f755b91158 Fixes PythonData.EndTime (#6602)
* Fixes PythonData.EndTime

The `EndTime` property of `PythonData` didn't override the base implementation in `BaseData`. Therefore `EndTime` was always set as `Time`.

Fixes Regression Tests
- The C# version of `Bitcoin` class needs to implement `EndTime`-
- Fixes regression tests

* Minor tweaks and rebase

- Add support for python data types just setting EndTime. Adding unit
  tests for PythonData
- Fix for DynamicData EndTime property being fetched. Updating unit
  tests

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-09-07 14:53:05 -03:00
Martin-Molinero
7d1cd79618 Fix warmup live time zone (#6612)
- Fix live trading warmup timezone issue. Adding unit test
- Adding useful configuration values to main config.json
2022-09-02 18:30:46 -03:00
Martin-Molinero
a0ba23a7f0 Update readme.md 2022-09-02 17:24:35 -03:00
Jhonathan Abreu
4415468d96 Update CME futures market hours (#6607)
* Update CME futures market hours

* Update regression algorithms stats

* Update regression algorithms stats

* Update expected values in unit tests

* Additional mhdb updates

* Update mhdb
2022-09-02 12:33:50 -03:00
Louis Szeto
dff92ac85e Fix BlackLittermanPortfolioConstructionModel (#6603)
* Remove redundant dimension that throw error

* Fix bug

* Fix bug

* Add dimension test

* Fix test and bug

* Fix python bug

* Address peer review

* Update python workflow

* Update python and test
2022-09-01 16:43:23 -03:00
Martin-Molinero
dc4a903727 Fix ObjectStore limits enforcement (#6609)
- Fix object store limits enforcement. Adding unit tests
2022-09-01 13:52:11 -03:00
Martin-Molinero
5e7651f699 Update dotnet interactive (#6608) 2022-09-01 12:43:02 -03:00
Martin-Molinero
fcd48ecdbb Object Store Improvements (#6605)
- Fix for cache behavior, finer grained writting and loading
- Add Keys and Clear to the object store API. Adding tests
2022-08-31 20:50:00 -03:00
Martin-Molinero
8e8aa74fb0 Add project id to algorithm (#6600)
- Add projectId for algorithm usage
2022-08-30 20:56:28 -03:00
Jhonathan Abreu
548a6998e3 Report generation with non-default algorithm settings (#6589)
* Add algorithm settings to backtest results

* Use algorithm result settings in report generation

* Add unit tests

* Housekeeping

* Changes for live result report

* Housekeeping

* Housekeeping

* Housekeeping

* Add unit tests
2022-08-30 19:23:25 -03:00
Jhonathan Abreu
9a062e4b5d Include trades and quotes in tick history request (#6595)
* Include both quotes and trades in Tick history request

* Regression algorithm

* Housekeeping

* Housekeeping
2022-08-30 19:03:11 -03:00
Jhonathan Abreu
82f2aa7a63 Parsing all currencies in a number with currency (#6599)
* Correctly stripping out currency symbol from numbers with currency

* Fixes
2022-08-30 19:02:21 -03:00
Martin-Molinero
46aa62bd0c Improve object store key support (#6598) 2022-08-30 18:18:50 -03:00
Martin-Molinero
250230e79f Global object store (#6594)
* Refactor object store

* Address reviews

* Simplify implementation

- Remove base64 encoding
- Refactor object store api to allow a single path argument

* Fix bug

* Adjust storage controls

* Fix unit tests
2022-08-30 16:40:01 -03:00
Martin-Molinero
0be339d75f Update python install instructions (#6590) 2022-08-26 18:51:32 -03:00
Martin-Molinero
3eb2b94070 Minor logging improvements (#6588)
- Add virtual env name in init log
- Log account type with cashbook
- Consolidate job handlers log. Adding DataProvider
2022-08-26 14:18:28 -03:00
Louis Szeto
b655bd776e Addition of Risk Parity Portfolio Construction Model (#6577)
* /

* Models

* Models

* Partial test

* Complete test and fix bug

* Address peer review

* Address review and fix bugs

* Fix regression result

* Fix regression result
2022-08-26 12:23:31 -03:00
Martin-Molinero
2bc41e0e32 Websocket improvements (#6585)
* Dynamically set wait time on WS error

- Dynamically adjust wait time on websocket error

* Avoid subscribing multiple times to message events

- Avoid websocket subscription multiple times to message events during
  disconnection/connection cycle

* Add Dispose Brokerage WebSocket Subscription Manager
2022-08-26 10:53:28 -03:00
Martin-Molinero
d6d3514ae2 Live warmup resolution check (#6586)
- Add check for live warmup history request, making sure there is at
  least room for a single bar between start and end. Avoid sending
  start==end when rouded down by the resolution causing some history
  providers to fail
2022-08-26 10:50:02 -03:00
Martin-Molinero
575f17c6ec Order command improvements (#6584)
- Create SubmitOrderRequest method in algorithm API to reduce
  duplication of code and responsability.
- Add order command tests for different failure and success cases
- Fix null reference exception in equity fill model, when there is no
  data for an asset.
2022-08-25 15:53:11 -03:00
Jhonathan Abreu
3c6ae2f1e7 Fix report's exposure plot colors and other bugs (#6580)
* Use correct colors in report's exposure plot

* Add 12 month rolling sharpe to report plot

* Housekeeping

* Fix failing unit tests
2022-08-25 12:28:22 -03:00
Martin-Molinero
19f3d8b305 Fix python memory leak (#6579)
* Fix python memory leak

- Fix python memory leak. Adding unit test

* Update pythonnet to 2.0.17
2022-08-24 18:24:07 -03:00
Jhonathan Abreu
475f295ce0 Support market orders for futures and FOPs on extended hours (#6575)
* Allow market orders for futures and FOPs on extended market hours

* Update regression algorithms stats

* Add futures fill model to allow extended market hours

* Add unit tests

* Update regression algorithms stats

* Update regression algorithms stats

* Housekeeping
2022-08-24 11:04:52 -03:00
Martin-Molinero
7fdedbe98f Rename python environments (#6572)
* Rename python environments

* Rename to Foundation-Py/C#-Default
2022-08-23 19:06:19 -03:00
Martin-Molinero
24605c6788 Add missing PY.GIL when shutting down (#6571) 2022-08-23 17:40:20 -03:00
Martin-Molinero
c8a80e361c Update readme.md 2022-08-23 15:53:29 -03:00
Martin-Molinero
dc7b2faa6b Fix launcher potential null reference (#6567)
- Fix launcher potential null reference if the job is null
2022-08-22 19:03:32 -03:00
Ryan Russell
9cd38a388b chore(.NET 6): Update references from dotnet 5 to dotnet 6 #6560 (#6565)
* docs(dotnet6): `dotnet 5` -> `dotnet 6`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* `.Net 5` -> `.Net 6`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-08-22 17:51:24 -03:00
Martin-Molinero
04723df362 Fix ARM foundation image (#6566)
- Remove unsupported libraries
2022-08-22 17:50:11 -03:00
Martin-Molinero
3f42101f6d Update to python38 and libraries (#6558)
* Update to python38

- Update to python38
- Update libraries

* Create latest virtual environment. Add CI unit tests

* Further update python packages

* Virtual env fixes

- Refactor python virtual env setup
- Adding CI unit tests for python packages and virtual envs

* Adding more python packages

- Adding NBeats, Ax-platform, Riskfolio-Lib

* Rename pomegranate venv
2022-08-22 13:54:02 -03:00
Jhonathan Abreu
eddd28243b Show backtest and live runtime days in report (#6561)
* Show backtest and live runtime days in report

* Show live or backtest runtime days in report stats

* Housekeeping
2022-08-22 12:12:19 -03:00
Jhonathan Abreu
8e35155c40 Fix IB futures commission fees (#6557)
* Adapted futures commission fees for IB

* Unit tests

* Some cleanup

* Fix exchange fees

* Update regression algorithms stats

* Update unit tests
2022-08-18 18:35:49 -03:00
Ryan Russell
98fa4464ce docs: excersizing -> exercising (#6559)
* docs: `excersizing` -> `exercising`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* docs: fix `exercising for exercising`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* docs: `migth` -> `might`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-08-18 11:00:26 -03:00
Jhonathan Abreu
539011274c Support extended market hours for futures (#6522)
* Support extended market hours in AddFuture()

* Support extended market hours in AddFutureContract()

* Add C# regression algorithm

* Add Python regression algorithm

* Add regression algorithm for future contracts

* Add regression algorithm checking market hour ranges

* Fixed future regression algorithms to use extended market hours

* Fixed future regression algorithms to use extended market hours

* Fixed future regression algorithms to use extended market hours

* Fixed AddFutureOptionContractFromFutureChainRegressionAlgorithm to use extended market hours

* Update future market hours to include extended in market hours database

* Fixed AddFutureOptionContractDataStreamingRegressionAlgorithm to use extended market hours

* Fixed AddFutureOptionContractFromFutureChainRegressionAlgorithm to use extended market hours

* Fixed AddFutureContractWithContinuousRegressionAlgorithm to use extended market hours

* Fixed BasicTemplateContinuousFutureAlgorithm to use extended market hours

* Fixed BasicTemplateFuturesAlgorithm to use extended market hours

* Fix BasicTemplateFuturesDailyAlgorithm to use extended market hours

* Fixed BasicTemplateFuturesFrameworkAlgorithm to use extended market hours

* Fixed BasicTemplateFuturesHistoryAlgorithm to use extended market hours

* Fixed ContinuousBackMonthRawFutureRegressionAlgorithm to use extended market hours

* Fixed ContinuousFutureBackMonthRegressionAlgorithm to use extended market hours

* Fixed ContinuousFutureHistoryRegressionAlgorithm to use extended market hours

* Fixed ContinuousFutureLimitIfTouchedOrderRegressionAlgorithm to use extended market hours

* Fixed ContinuousFutureRegressionAlgorithm to use extended market hours

* Fixed DelistedFutureLiquidateRegressionAlgorithm to use extended market hours

* Fixed AutomaticIndicatorWarmupDataTypeRegressionAlgorithm to use extended market hours

* Fixed ConsolidateRegressionAlgorithm to use extended market hours

* Fixed DelistingFutureOptionRegressionAlgorithm to use extended market hours

* Fixed EqualWeightingPortfolioConstructionModelFutureRegressionAlgorithm to use extended market hours

* Fixed FutureContractsExtendedMarketHoursRegressionAlgorithm to use extended market hours

* Fixed FutureMarketOpenAndCloseRegressionAlgorithm to use extended market hours

* Fixed FutureMarketOpenConsolidatorRegressionAlgorithm to use extended market hours

* Fixed FutureOptionBuySellCallIntradayRegressionAlgorithm to use extended market hours

* Fixed FutureOptionCallITMExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionCallITMGreeksExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionCallOTMExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionDailyRegressionAlgorithm to use extended market hours

* Fixed FutureOptionHourlyRegressionAlgorithm to use extended market hours

* Fixed FutureOptionMultipleContractsInDifferentContractMonthsWithSameUnderlyingFutureRegressionAlgorithm to use extended market hours

* Fixed FutureOptionPutITMExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionPutOTMExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionShortCallITMExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionShortCallOTMExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionShortPutITMExpiryRegressionAlgorithm to use extended market hours

* Fixed FutureOptionShortPutOTMExpiryRegressionAlgorithm to use extended market hours

* Fixed FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm to use extended market hours

* Fixed FuturesExpiredContractRegression to use extended market hours

* Fixed FutureSharingTickerRegressionAlgorithm to use extended market hours

* Fixed HistoryWithDifferentContinuousContractDepthOffsetsRegressionAlgorithm to use extended market hours

* Fixed HistoryWithDifferentDataMappingModeRegressionAlgorithm to use extended market hours

* Fixed HistoryWithDifferentDataNormalizationModeRegressionAlgorithm to use extended market hours

* Fixed LimitOrdersAreFilledAfterHoursForFuturesRegressionAlgorithm to use extended market hours

* Fixed OpenInterestFuturesRegressionAlgorithm to use extended market hours

* Fixed RegisterIndicatorRegressionAlgorithm to use extended market hours

* Fixed SetHoldingsFutureRegressionAlgorithm to use extended market hours

* Fixed WarmupFutureRegressionAlgorithm to use extended market hours

* Fixed AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm to use extended market hours

* Fixed AlgorithmHistoryTests to use extended market hours for futures

* Fixed AlgorithmTradingTests to use extended market hours for futures

* Fixed BrokerageSetupHandlerTests to use extended market hours for futures

* Fixed TimeRulesTests to use extended market hours for futures

* Fixed FutureOptionMarginBuyingPowerModelTests to use extended market hours for futures

* Fixed FutureMarginBuyingPowerModelTests to use extended market hours for futures

* Fixed FileSystemDataFeedTests to use extended market hours for futures

* Fixed QuantBookHistoryTests to use extended market hours for futures

* Split BasicTemplateContinuousFutureAlgorithm to have an extended market version

* Fixed FutureMarketOpenAndCloseRegressionAlgorithm to use extended market hours

* Split BasicTemplateFuturesAlgorithm to have an extended market version

* Split BasicTemplateFuturesAlgorithm to have an extended market version

* Split BasicTemplateFuturesFrameworkAlgorithm to have an extended market version

* Split BasicTemplateFuturesHistoryAlgorithm to have an extended market version

* Revert AddFutureContractWithContinuousRegressionAlgorithm

* Revert AddFutureOptionContractDataStreamingRegressionAlgorithm and added data

* Revert AddFutureOptionContractFromFutureChainRegressionAlgorithm

* Revert AddFutureOptionSingleOptionChainSelectedInUniverseFilterRegressionAlgorithm

* Revert ConsolidateRegressionAlgorithm

* Revert Algorithm.CSharp/ContinuousBackMonthRawFutureRegressionAlgorithm.cs

* Revert ContinuousFutureBackMonthRegressionAlgorithm

* Revert ContinuousFutureHistoryRegressionAlgorithm

* Revert ContinuousFutureLimitIfTouchedOrderRegressionAlgorithm

* Revert ContinuousFutureRegressionAlgorithm

* Revert Algorithm.CSharp/DelistedFutureLiquidateRegressionAlgorithm.cs

* Revert EqualWeightingPortfolioConstructionModelFutureRegressionAlgorithm

* Split FutureMarketOpenAndCloseRegressionAlgorithm to have an extended market version

* Split FutureMarketOpenConsolidatorRegressionAlgorithm to have an extended market version

* Revert FutureOptionBuySellCallIntradayRegressionAlgorithm

* Revert FutureOptionCallITMExpiryRegressionAlgorithm

* Revert FutureOptionDailyRegressionAlgorithm

* Revert FutureOptionPutITMExpiryRegressionAlgorithm

* Revert FutureSharingTickerRegressionAlgorithm

* Revert FuturesAndFuturesOptionsExpiryTimeAndLiquidationRegressionAlgorithm

* Revert FuturesExpiredContractRegression

* Revert HistoryWithDifferentContinuousContractDepthOffsetsRegressionAlgorithm

* Revert HistoryWithDifferentDataMappingModeRegressionAlgorithm

* Revert HistoryWithDifferentDataNormalizationModeRegressionAlgorithm

* Revert OpenInterestFuturesRegressionAlgorithm

* Revert RegisterIndicatorRegressionAlgorithm

* Revert SetHoldingsFutureRegressionAlgorithm

* Revert WarmupFutureRegressionAlgorithm

* Revert AutomaticIndicatorWarmupDataTypeRegressionAlgorithm

* Some cleanup

* Address changes request

* Address changes request

* Add more Class III Milk data to fix DelistingFutureOptionDailyRegressionAlgorithm
2022-08-18 10:56:44 -03:00
Martin-Molinero
6f3208eded Python Virtual Environments Support (#6556)
- Add support to use a python virtual environment if defined in the
  algorithm job. Adding tests
2022-08-17 16:40:52 -03:00
Ryan Russell
62493f8986 docs: algorithm readability improvements (#6554)
docs: `algorthm` -> `algorithm`
2022-08-17 10:39:57 -07:00
Ryan Russell
35afe3da84 docs: portfolio readability fixes (#6553)
* docs: `portolio` -> `portfolio`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* docs: `porfoltio` -> `portfolio`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-08-17 10:23:40 -03:00
Jhonathan Abreu
b07680688f Fix FormatException on estimated capacity rendering during report generation (#6551)
* Fix FormatException on non-USD currency capacity in report generator

* Improve currency removal from capacity string

Applied this improvement to OptimizationBacktestJsonConverter.WriteJson

* Address changes request
2022-08-16 11:08:36 -03:00
Ryan Russell
e4647ea146 docs: epected -> expected (#6552)
Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-08-16 10:12:30 -03:00
Ryan Russell
052e20cbf4 refactor(Algorithm): readability improvements (#6547)
* refactor(Algorithm): Correct `Intrinino` -> `Intrinio` references

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* refactor(Algorithm): Update `evemts` -> `events`

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* refactor(BubbleAlgorithm): readability improvements

Signed-off-by: Ryan Russell <git@ryanrussell.org>

* refactor(OrderTicketDemoAlgorithm): readability improvements

Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-08-15 10:52:07 -03:00
Jhonathan Abreu
771cc11b3a Fix KeyError in report generator due to missing color mappings (#6546)
* Fix KeyError when rendering exposure chart in report with some security types

* Update exposure chart colors and add unit tests

* Updated json test file
2022-08-12 18:52:15 -03:00
Ronit Jain
0d882b8201 Refactor handle lean-cli commands for live deployments (#6527)
* handle multiple command files

* remove default useage

* add tests for verify files are read in order

* add comment

* change reuslt file name

* add comment

* liquidate using given symbol values

* remove redundant

* accept ticker, market, security type to build symbol, to be used by CLI commands

* use null leverage

* symbol can be null if ticker, market, security type values are provided

* reject the default value of security type

* cleanup

* cleanup

* check if status is not invalid

* cleanup

* abstraction to remove duplication

* fix name

* address reviews

* use counter

* add test to validate symbol/ticker agrumnets

* remove hardcoded values
2022-08-12 18:12:33 -03:00
Ryan Russell
95c1f752ac docs: Readability improvements (#6545)
Signed-off-by: Ryan Russell <git@ryanrussell.org>

Signed-off-by: Ryan Russell <git@ryanrussell.org>
2022-08-12 16:56:26 -03:00
Martin-Molinero
37dca9d458 Remove log packet aggregation (#6538)
- Remove log packet aggregation
- Clean up Queue api usage
2022-08-11 19:06:11 -03:00
Jhonathan Abreu
2dd3a0cb94 Fix 'GetParameter()' ambiguous call error when no default parameter is provided (#6541)
* Fix QCAlgorithm.GetParameter() ambiguous call error when no default parameter is provided

* Add unit tests

* Add regression algorithms
2022-08-11 18:45:00 -03:00
Jhonathan Abreu
aa8a3a241b GetParameter number conversion overloads (#6535)
* Add numeric conversion overloads to QCAlgorithm.GetParameter()

* Add unit tests

* Address changes request
2022-08-10 18:15:04 -03:00
Louis Szeto
cfa4a4c1c1 Update readme information in Equity data (#6536)
* Update readme

* Update equity readme

* Add quote info

* Fix typo

* Add back QuoteQuant as pre-2007 vendor

* Fix typo
2022-08-10 18:11:20 -03:00
Ronit Jain
3064c1ed4b update config value (#6537) 2022-08-10 18:10:02 -03:00
Jhonathan Abreu
9e7690754a Forbid tick resolution period-based history requests (#6533)
* Detect implicit tick resolution in period-based history requests and throw

* Add regression algorithms
2022-08-09 18:19:08 -03:00
Jhonathan Abreu
460ef10ff4 Add more info to python runtime error message (#6526) 2022-08-09 17:56:23 -03:00
Jhonathan Abreu
6f70606f3e Allow tick history request without tick subscription (#6534) 2022-08-09 17:51:25 -03:00
Louis Szeto
9eb71e1543 Mean Reversion Portfolio Construction Model (#6519)
* MRP

* Fix bug

* Rename

* Provide virtual `GetPriceRelative` function to override for any variants in future

* SymbolData class within model

* Address peer review

* fix bug

* revise unit test and fix bug in python model

* revise unit test and fix bug in model

* Revise regression statistics

* Revise regression statistics

* Revise regression statistics

* Revise regression statistics

* Revise regression statistics

* Address peer review

* Updated unit tests according to peer review

* Address peer review
2022-08-04 11:20:11 -03:00
Martin-Molinero
3f7d339463 Fix live result Handler null reference (#6521)
- Fix live result handler null reference, that could happen if the
  algorithm explodes mid initialization. Adding unit test
2022-08-03 19:57:03 -03:00
Martin-Molinero
3f2bcc1784 Add missing CancellationTokenSource dispose (#6512)
- Add missing CancellationTokenSource disposals to avoid memory leaks
2022-08-01 11:12:01 -03:00
Martin-Molinero
30d137e9cc Track CPU usage (#6520)
- Track CPU usage, useful for debugging
2022-08-01 11:10:52 -03:00
Martin-Molinero
ab9ad75c93 Update readme.md 2022-07-29 15:52:57 -03:00
Jhonathan Abreu
1440842d87 Fix LocalMarketHours.GetMarketClose for extended market hours (#6516)
* Fix LocalMarketHours.GetMarketClose to get the actual next market close time with extended market hours

The method was not properly considering gaps between regular hours close and extended market open

* Revert some changes to fix errors
2022-07-29 12:31:10 -03:00
Martin-Molinero
2df01c4d2e Update readme.md 2022-07-28 20:54:04 -03:00
Martin-Molinero
82aab246a8 Update readme.md 2022-07-28 20:43:32 -03:00
Martin-Molinero
f665d693b7 Update readme.md 2022-07-28 20:30:15 -03:00
Martin-Molinero
ef531e09bd Add Lean commands (#6513)
* Add Lean commands

- Add Lean commands to common project

* Address reviews

- Address reviews, refactor command interfaces and classes

* Rename FileCommandQueueHandler to FileCommandHandler
2022-07-28 16:44:40 -03:00
Jhonathan Abreu
3db470de52 Add fill forward and extended market parameters to QuantBook's history methods (#6515) 2022-07-28 15:29:15 -03:00
Martin-Molinero
a43bdaf1c7 Fix crypto hash leak (#6511)
- Fix crypto sha256 memory leak
- Minor improvements to reduce improve performance
2022-07-26 20:00:23 -03:00
Martin-Molinero
e0f483c46b Fix ARM IB gateway java version check (#6509)
- Fix for ARM IB gateway java version check.
  See https://github.com/QuantConnect/lean-cli/issues/114
2022-07-26 10:35:47 -03:00
Martin-Molinero
8093df31cc Update readme.md 2022-07-25 20:11:25 -03:00
Ronit Jain
9df9d76081 get value from config, default to local (#6502) 2022-07-22 11:08:46 -03:00
Jhonathan Abreu
ad844e9411 Fix checking market open for post market segments (#6500)
* Consider post-market segments when getting market open

* Consider post-market segments when getting market open

* Fixes and more unit tests
2022-07-22 10:57:01 -03:00
Derek Melchin
e7e9153fbf Update indicator source links (#6501) 2022-07-21 17:50:14 -03:00
Martin-Molinero
24627f5efa Fix optimization json converter (#6499)
- Fix optimization json converter, not handling correctly different
  account currencies. Updating unit test to reproduce issue
2022-07-21 17:43:14 -03:00
Martin-Molinero
440282c138 Update compare_benchmarks.py 2022-07-20 20:04:33 -03:00
Martin-Molinero
3d3f04abbc Update python autocomplete readme (#6498)
- Updating the python autocomplete readme to suggest adding
 `from AlgorithmImports import *`
2022-07-20 18:40:52 -03:00
Martin-Molinero
0a64462e50 Add performance gh action (#6497)
* Add performance gh action

- Add new performance github action, running python and csharp benchmark
  algorithms
- Adjusting algorithms length so they are not too long or too short

* Checkout master branch benchmark reference
2022-07-20 18:15:38 -03:00
Martin-Molinero
c43f472503 Fill model will use internal configurations (#6494)
- Fill model will take into account internal configurations, this is
  specially relevant for continuous future mapped contracts. Updating
  regression algorithms and unit tests.
- Allowing internal configurations to update trade builder information
2022-07-19 19:00:35 -03:00
Jhonathan Abreu
6c93af96a1 Disable MOO orders for futures out of regular market hours (#6480)
* Remove suppport for market orders and MOO orders for futures

* Add regression algorithm to assert that limit orders are filled on after hours for futures

* Remove suppport for market orders and MOO orders for futures in DefaultBrokerageModel

* Update regression algorithms stats

* Fixed regression algorithm and clean up

* Add unit tests

* Fix regression algorithms

* Address changes request
2022-07-19 16:18:06 -03:00
Martin-Molinero
b3cb24a16f Update readme.md 2022-07-19 14:39:14 -03:00
Jhonathan Abreu
38f7e72dbe Add delisted futures and FOP regression algorithms with daily resolution (#6493)
* Add regression algorithms for delisted futures with daily resolution

* Add regression algorithms for delisted futures options with daily resolution

* Updated documentation
2022-07-18 17:53:43 -03:00
Martin-Molinero
a9073396bd Add WarmUpResolution pass through (#6487)
- Add new WarmUpResoltuion pass through version for friendly
user experience. Adding unit test
2022-07-18 13:47:04 -03:00
Martin-Molinero
b7df632294 Correctly handle Polygon authentication sequence (#6485)
- Correctly handler Polygon data queue handler authentication sequence
2022-07-18 13:40:21 -03:00
Martin-Molinero
38772a5a89 Do not apply split during live warmup (#6488)
- Do not apply split during live warmup. Adding unit tests asserting the
  behavior for live dividends and splits during warmup and non warmup
2022-07-15 18:17:26 -03:00
Martin-Molinero
7540af454c Warmup resolution respected (#6467)
* Respect warmup resolution given

- The data feed will respect the warmup resolution given and override
  the resolution used by the algorithm when adding a subscription.
  Updating regression algorithm to keep previous statistics. Adding new
  regression algorithm asserting the desired behavior

* Testing improvements

- Add more unit tests and regresion test
- Add missing data for crypto
- Fix bug with FFed data crossing after the end time of the warmup
  request

* Add more Warmup resolution regression algorithms

- Adding more warmup resolution regression algorithms, using
  Settings.WarmupResolution and an option selection case

* Add more warmup regression tests

- Adding more warmup regression tests.
- Will no longer skip universe selection subscriptions from warmup
  resolution enforcement. Updating regression algorithms data points

* Fix bug with data rounding

- Fix data rounding bug when warmup resolution is set to a different
  value than the original configuration. Updating regression algorithms
  to assert the expected behavior

* Address reviews

- Revert regression algorithms changes to use Resolution during warmup.
  Updating their stats.
- Adding new regression algorithms asserting the behavior warming up
  using a timespan and no warmup resolution
- Fix bug where data used to warmup the 'normal' enumerator will make it
  through into the warmup time span. Updating tests

* Address reviews

- Add missing comments, explaning warmup algorithms time span
  calculations.
- Revert changes in existing `WarmupOptionTimeSpanRegressionAlgorithm`
  to reduce diff to minimum
- Adding new warmup unit tests asseting algorithm warmup start time, for
  different combinations of bar count, timespan, resolution
2022-07-15 13:05:06 -03:00
Derek Melchin
cd06e87493 Update data normalization mode comments (#6486)
* Update Data Normalization Mode enum descriptions

* Extend descriptions
2022-07-15 11:10:52 -03:00
Ricardo Andrés Marino Rojas
5200a9e593 Add ReadBacktestOrders() and ReadLiveOrders() methods (#6329)
* First commit

* Any change

* Add more unit tests

* Nit changes

* Changes requested

* Fix bugs and requested changes

* Requested changes

* More changes

* Check ongoing backtest orders

* Read ongoing backtest does not fail

* nit change

* Fixes for standarized API orders response

- Fixes for a standarized API read orders reponse

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-07-14 16:02:58 -03:00
Martin-Molinero
07aa5625e1 Avoid division by zero error in backtesting result handler (#6484)
* Minor improvements

- Avoid division by zero error in backtesting result handler. Race
  condition where the SetAlgorithm implementation would still be running
  and we try to loop through the update method
- Improvement nullreference exception message
- Cleanup resolution to timespan extension method

* Address reviews

- Cleanup data config fill forward conditional statement for tick
  resolution
2022-07-14 12:54:55 -03:00
Martin-Molinero
31fc7ac236 Do not generate Equity Quote Daily data (#6483)
- Fix for so the random data generator does not try to create daily
  equity quote data
2022-07-14 10:20:34 -03:00
Martin-Molinero
e6f8a7535e Fix live future and option universe selection daily resolution (#6482)
* Fix live future and option universe selection daily resolution

- Adding unit test reproducing issue for option and future universe
  chain using daily resolution, since was rounding down in UTC TZ the
  date might not change and it would re emit the same data point

* Address reviews

- Add more test cases
- Adding locks around RegisteredSecurityDataTypesProvider to allow it to
  be used by multiple threads at the same time without exploding
2022-07-13 19:10:13 -03:00
Martin-Molinero
778d436b94 Removed mapped futures contract is non tradable (#6479)
* Minor fixes for mapped futures contract

- Future security was never able to be non tradable
- Skip remove future contracts from live holdings. Adding unit test
  reproducing issue and regression algorithm

* Fix removal of continuous futures

- The canonical continuous future would leave behind an OpenInterest
  subscription when removed because of a different in the way the
  configurations were built, this will now be centralized in a single
  method. Adding unit tests reproducing issue
- FillForwarding setting of the continuous future was not being
  respected. Updating algorithm reproducing the issue to assert the
  behavior failing in master

* Address reviews

- Minor refactors addressing reviews
2022-07-13 15:36:24 -03:00
Martin-Molinero
36ddf1c618 Update config.json 2022-07-13 15:33:48 -03:00
Martin-Molinero
632833caaa Minor live related testing changes (#6481)
- The history provider manager will log the underlying instances it's using.
- Allow brokerage test suites to reuse the algorithm stubs class
2022-07-13 15:26:45 -03:00
Martin-Molinero
6200988ad5 Fix result handler live holdings (#6478)
* Fix result handler live holdings

- Live result handler live holdings will include future assets
  associated with continuous futures. Adding unit tests

* Fixed for live holdings price rounding

- Live holdings will use the SPDB minimum price variation for rounding.
  Adding unit tests
2022-07-12 18:31:35 -03:00
Martin-Molinero
826f2cbbf9 Minor refactor messaging handler (#6472) 2022-07-11 16:24:26 -03:00
Jared
e54cc3e948 Update readme.md 2022-07-08 11:32:05 -07:00
Louis Szeto
413a084254 Add Price in CoarseFundamental (#6464)
* Update CoarseFundamental.cs

* Fix typo

* Add virtual/override
2022-07-06 13:28:57 -03:00
Martin-Molinero
8c0b60cd2f Refactor work queue scheduling (#6465)
- Remove thread in charge of sorting and updating the queues weight.
  This will be handled by each worker thread instead. Avoid cases where
  the work count is so high that the sorting thread in master would not
  be able to update all the weights, causing data to be enqueued beyond
  the max prefetch limit. Adding benchmark algorithm reproducing issue
2022-07-06 12:13:32 -03:00
Martin-Molinero
64f0a9e0a2 Fix for ApiDataProvider (#6461)
- Avoid race condition while downloading data.
- Reused http client for downloads
2022-07-05 18:43:58 -03:00
Martin-Molinero
3f407cd80f Smaller live warmup history requests (#6455)
- Smaller live warmup history requests, will keep track of the last point
  we got from the file based enumerator and start our history enumeration from this point
2022-07-05 13:15:23 -03:00
Jhonathan Abreu
5758b65099 Added configuration parameters to Python QCAlgorithm.History() method that takes custom data source type (#6448)
* Add new Python QCAlgorithm.History() method with all parameters and type

* Add regression algorithms

* Using all parameters in History()

* Use private methods to reuse History() code

* Use private methods to reuse History() code

* Add unit tests for QCAlgorithm.Python.History()

* Add unit tests for QCAlgorithm.Python.History()

* Add unit tests for QCAlgorithm.Python.History()

* Add unit tests for QCAlgorithm.Python.History()

* Add unit tests for QCAlgorithm.Python.History()

* Add unit tests for QCAlgorithm.Python.History()

* Asserting history count
2022-07-05 13:14:08 -03:00
Louis Szeto
c1db23250e Update enum values in comments (#6460) 2022-07-05 10:29:28 -03:00
Martin-Molinero
b426483e1d Rebase org- branches on trunk (#6456)
- Adding github actions to automatically rebase org- branches on trunk
  when master get's a merge
2022-07-01 12:24:03 -03:00
Louis Szeto
30e47f3e8b Add basic template algorithm for Cfd and FutureOption (#6454) 2022-07-01 12:20:45 -03:00
Martin-Molinero
506e3a1c2c Add default value for GetParameter (#6452)
- Allow providing a default value for GetParameter. Updating regression
  test to use it
2022-06-29 18:58:09 -03:00
Alexandre Catarino
ab228e8eca Adds typing Import to AlgorithmImports (#6450) 2022-06-29 15:37:43 -03:00
Martin-Molinero
dc043f8c09 Fix future chain data normalization mode (#6445)
- Similar to the OptionChainUniverse, the future chain universe should
  also add it's contracts using the raw data normalization mode. Adding
  regression algorithm reproducing issue
2022-06-28 15:15:09 -03:00
Martin-Molinero
05bfad729c Fix custom fine universe selection model (#6447)
- For for custom fine universe selection model so it can return
  Universe.Unchanged. Adding regression tests
2022-06-28 15:11:04 -03:00
Martin-Molinero
5c6a779f4d Period consolidator adjusments (#6444)
- Replace logic to convert TimeSpan based PeriodConsolidator into count
  based, by an override of the 'potentialStartTime' in the case we could
  be falling into a look ahead consolidated bar end time
2022-06-27 19:17:20 -03:00
Martin-Molinero
630503bf9c Remove deprecated inspect.getargspec (#6443)
- Remove deprecated python `inspect.getargspec` usage, replace for new
  `getfullargspec`. Adding unit tests reproducing issue
2022-06-27 18:49:46 -03:00
Martin-Molinero
18eec48a3d Avoid PythonNet runtime stash on shutdown (#6441)
* Can't relesase the GIL after shutdown

* Bump version to pythonnet 2.0.16
2022-06-27 13:04:01 -03:00
Jhonathan Abreu
e9409bf207 Add contractDepthOffset parameter to QCAlgorithm.History() (#6438)
* Add contract depth offset parameter to big History() methods

- Added unit tests
- Added little more ED daily data

* Add C# regression algorithm

* Add Python regression algorithm

* Update regression algorithms stats

* Address changes request
2022-06-27 10:04:33 -03:00
Martin-Molinero
867682c923 Set default object store settings from config (#6437)
- Will set default object store settings from config like research
2022-06-24 18:44:00 -03:00
Martin-Molinero
59ac2f57ed Shutdown python manually (#6439) 2022-06-24 18:43:44 -03:00
Martin-Molinero
4c3afa6ff1 Add OpenInterestAnnual (#6436)
- Adding OpenInterestAnnual where the contract maps when any of the back month
  contracts of the next year have a higher volume that the current front month.
- Add support for backwards compatible data mapping mode additions
- Updating ES map and factor files. Adding a little daily data too
2022-06-23 19:22:24 -03:00
Jhonathan Abreu
9128ce1260 Add data normalization mode parameter to QCAlgorithm.History() (#6435)
* Add data normalization mode parameter to big History() methods

* Add C# regression algorithm

* Add Python regression algorithm
2022-06-23 17:02:50 -03:00
Jhonathan Abreu
505ef17565 Add data mapping mode parameter to QCAlgorithm.History() (#6415)
* Add dataMappingMode parameter to QCAlgorithm.History()

* Add C# regression algorithm

* Add Python regression algorithm

* Cleanup

* Add data mapping mode parameter only to big History() methods

* Fix regression algorithms and add required data

* Fix unit test

* Update regression algorithms stats
2022-06-22 19:25:30 -03:00
Martin-Molinero
a12a43c1ef Update VX futures market hours (#6417) 2022-06-22 17:25:18 -03:00
Alexandre Catarino
e3313c7c45 Fixes Contract Multiplier for Treasury Futures (#6418) 2022-06-22 17:25:00 -03:00
Martin-Molinero
f0b59a72fd Fix Train method during warmup (#6416)
- During warmup period the algorithms initial time might not be a rounded date
  value, so it's important to take into account hours/minutes. Adding
  regression algorithm reproducing and asserting issue
2022-06-21 10:05:27 -03:00
Martin-Molinero
a42a53671f Add missing Py.Gil in base PCM (#6414)
- Add missing python Py.Gill in base PortfolioConstructionModel. Adding
  unit test reproducing issue, seg fault
2022-06-20 19:44:31 -03:00
Martin-Molinero
bb0c27fefd Period timespan consolidation improvements (#6408)
* Period timespan consolidation improvements

- If user is trying to consolidate a period providing data of a bigger
  period we will now throw an exception. Adding tests
- If both consolidated and given data share the same period, gently
  adjust the consolidator into a data count of 1. Adding tests
- Fixing bug in QuoteBarConsolidator period double accounting. Adding unit tests

* Add Period and Count regression algorithm
2022-06-20 15:14:44 -03:00
Martin-Molinero
299cb79832 OnWarmupFinished always called (#6413)
* OnWarmupFinished always called

- Always call OnWarmupFinished. Adding regression tests

* Assert method called with counter
2022-06-20 14:24:12 -03:00
Martin-Molinero
8fb188d567 Add missing Juneteenth holiday (#6412)
- Add missing Juneteenth holida. Reference https://www.timeanddate.com/holidays/us/juneteenth
2022-06-20 10:42:37 -03:00
Martin-Molinero
740b40ff11 Fix QuoteBar Non Time Based Consolidator Period (#6409)
* Fix QuoteBar NonTimeBased Consolidator Period

- Fix QuoteBar non timebased consolidator period, that was accounting
  twice for the initial bar period. Updating unit tests

* Improve QuoteBarConsolidator assertion

- Assert quote bar consolidated time and endtime in unit tests
2022-06-17 19:44:37 -03:00
Jhonathan Abreu
e736b28568 Add data normalization mode parameter to AddEquity method (#6407)
* Add DataNormalizationMode parameter to QCAlgorithm.AddEquity method

* Add regression algorithm

* Add Python regression algorithm

* Style changes

* Fix test error
2022-06-17 18:27:06 -03:00
Martin-Molinero
b007d9f962 Fix intermittent ZipMapFile cache test failure (#6406)
- Fix for intermittent ZipMapFile cache test failure and reducing test length
2022-06-16 15:30:20 -03:00
Martin-Molinero
4d7d7def63 Add Log.Error at OptionSymbol.IsOptionContractExpired (#6405)
- Add error log at OptionSymbol.IsOptionContractExpired in the case we
  detect an unexpected expiration time. That could be related to
  Symbol.ID.Date being incorrect
2022-06-16 15:10:17 -03:00
Jhonathan Abreu
09c4a53f95 Fix greeks all being zero on expiration date (#6401)
* Fix option price and greeks always beign zero on the expiration date

* Fix option price and greeks always beign zero on the expiration date

* Updated documentation

* Style and performace changes

* Address changes request

* Fix QL.Settings.includeReferenceDateEvents not being set on every thread

* Updated code documentation
2022-06-16 12:29:51 -03:00
Derek Melchin
714042bb69 Fix remark typos to match docs (#6404) 2022-06-16 12:00:17 -03:00
Martin-Molinero
a8e7a8b27e Reconcile the Market Opening for Futures and Scheduled Events (#6397)
- Changes taken from https://github.com/QuantConnect/Lean/pull/6227
- Rebased + a few more tweaks and added tests
2022-06-15 13:47:00 -03:00
Ronit Jain
182ee51389 Bug handle order status race condition for brokerage tests (#6400)
* update order status from event handler

* choose easy limits to less liquid markets

* increase waiting time for fill for less liquid markets
2022-06-14 17:32:34 -03:00
Jhonathan Abreu
4a41c2ea90 Detect unsupported option style in option price model (#6388)
* Add indicator for allowed option styles to QL option price models

* Add and update option price model tests

* Update option price models methods sumary to indicate allowed option styles

* Add regression algorithms for option price models for different option styles

* Update OptionPriceModel regression algorithms to use Lean local data

* Add Python regression algorithms for option price models for different option styles

* Update OptionPriceModel regression algorithms to assert that greeks are valid

* Address changes request

* Address changes request

* Update OptionPriceModel regression algorithms to check both call and put contracts

* Update OptionPriceModel regression algorithms to use correct test data

* Update OptionPriceModel regression algorithms to throw in OnData

* Address changes request

* Update OptionPriceModel regression algorithms to assert greeks are not all zero
2022-06-13 16:21:20 -04:00
Ronit Jain
c1dc981403 Feature use minimum price variation for roundoff (#6398)
* make thread safe

* use use minimumPriceVariation for roundoff

* cleanup, remove duplication
2022-06-13 11:42:59 -03:00
Martin-Molinero
15e399c96b Live T-1 selection warmup (#6395)
* Live T-1 selection warmup

- Only use BaseDataCollection class
- Reuse collection enumerator
- Remove FuturesChainUniverseSubscriptionEnumeratorFactory
- Universe selection will use Cache providers
- Add null reference check
- Add more tests
- Fixes for warmup fill forwarding. Add more tests

* Address reviews. Add missing comments
2022-06-10 17:25:20 -03:00
Martin-Molinero
3fb267f4ad Update readme.md 2022-06-10 11:24:54 -03:00
Martin-Molinero
a3f4dff299 Refactor chain providers (#6394)
* Refactor chain providers

- ChainProviders will use quote, open interest and trade information,
  which ever is first. Updating regression algorithm changing contract
  being added.
- Add base BacktestingChainProvider for shared logic, reducing
  duplication.
- ChainProviders will now use the given IDataCacheProvider and
  IMapFileProvider
- If Providers are called for a date the exchange is closed they will
  search for the previous available date where the exchange is open.
  Adding unit tests.

* Address reviews. Logging improvements
2022-06-10 11:24:09 -03:00
Martin-Molinero
cbfdd85cef Live Internal Subscription Start Time (#6392)
- Live Trading internal subscription start time will be after warmup.
  Adding unit tests.
2022-06-09 17:28:32 -03:00
Martin-Molinero
223066d6d9 Disable live trading warmup plotting (#6393)
- Disable live trading warmup plotting during warmup
2022-06-09 17:27:55 -03:00
Martin-Molinero
25871497e9 Update readme.md 2022-06-09 12:49:15 -03:00
Martin-Molinero
3ad4695354 Update readme.md 2022-06-09 12:42:46 -03:00
Ronit Jain
1c644297df Extract Tradier brokerage files and dependencies (#6387)
* use research-object-store-name key from config while creating object store for research notebooks

* remove files
2022-06-09 12:33:34 -03:00
Ronit Jain
60c9162b11 Extract Gdax brokerage files and dependencies (#6391)
* use research-object-store-name key from config while creating object store for research notebooks

* initial removal

* remove reference

* move test to private repo containing downloaders
2022-06-09 12:32:27 -03:00
Alexandre Catarino
6e32f46068 Adds Missing UpdateTriggerPrice Method (#6385)
Since there is `UpdateStopPrice`, `UpdateLimitPrice`, `UpdateQuantity` and `UpdateTag` method to make it easier to update the `OrderTicket`, we include `UpdateTriggerPrice` to cover the `LimitIfTouched` case.
Also, updated the docs or the arguments for these methods.

Updates LimitIfTouchedRegressionAlgorithm:
- Adds `UpdateTriggerPrice` call that rounds down the `TriggerPrice`.
2022-06-08 10:35:47 -03:00
Martin-Molinero
564d8507c7 Update readme.md 2022-06-07 15:58:45 -03:00
Ronit Jain
c11e24c5b2 Extract Oanda brokerage files and dependencies (#6383)
* use research-object-store-name key from config while creating object store for research notebooks

* remove oanda files
2022-06-07 14:07:24 -03:00
Martin-Molinero
f8c65d886c Update readme.md 2022-06-07 11:26:10 -03:00
Ronit Jain
c162e75bbc Extract bitfinex brokerage files and dependencies (#6382)
* use research-object-store-name key from config while creating object store for research notebooks

* remove bitfinex files

* remove redundant ref

* move test to private repo
2022-06-07 11:07:28 -03:00
Louis Szeto
ca64dd74d5 Update XML documentation comment of LimitPrice (#6381)
* Update OrderField.cs

* Typo
2022-06-07 09:57:37 -03:00
Jhonathan Abreu
5fa9dbad3d Fix Engine not running algorithm when calling Error() from Initialize() (#6379) 2022-06-06 19:33:27 -03:00
Martin-Molinero
3a00b6963c Avoid sending expired symbols to IDQH (#6378)
- Avoid sending expired symbols to the IDQH. This can happen during
  warmup period. Adding unit tests
2022-06-06 19:30:04 -03:00
Martin-Molinero
cde9be8d16 Fix 'OnWarmupFinished' callback (#6377)
- Fix missing 'OnWarmupFinished' callback for python. Adding regression
  algorithms
2022-06-06 11:56:02 -03:00
Louis Szeto
aa1883a140 C# Version of CustomVolatilityModelAlgorithm (#6373) 2022-06-03 19:47:39 -03:00
Martin-Molinero
0c0ee829a2 Warmup state minor fixes (#6367)
* Warmup minor fixes

- Result handler fix
- Centralize and normalize status update during warmup

* Address reviews

* Minor adjustments

* Add console message during warmup period

* Fix warmup percentage update
2022-06-02 18:20:02 -03:00
Jhonathan Abreu
9af7d4a1dc Extended currencies dictionary (#6368)
* Default Currencies.GetCurrencySymbol to the ticker and add ADA symbol

* Extended Currencies dictionary

* Fix failing tests
2022-06-02 17:31:38 -03:00
Martin-Molinero
cabbcf6d81 Move debugpy init log (#6366) 2022-06-02 12:13:13 -03:00
Jhonathan Abreu
df308cc2a7 Make PandasConverter.GetIndicatorDataFrame accept Python dictionary (#6365)
* Overload PandasConverter.GetIndicatorDataFrame to accept a Python dict

* Shared implementation code for PandasConverter.GetIndicatorDataFrame overloads

* Added documentation for private shared methods used by PandasConverter.GetIndicatorDataFrame

* Added unit tests for PandasConverter.GetIndicatorDataFrame

* Added unit tests for PandasConverter.GetIndicatorDataFrame Dictionary overload

* Address change requests

* Address change requests
2022-06-01 19:57:51 -03:00
Ricardo Andrés Marino Rojas
8f3ced7639 Fix bug with Coinbase Pro Stable Pairs (#6362)
* First Commit

* Change Unit tests
2022-06-01 17:19:41 -03:00
Martin-Molinero
e0b9a2735f Warmup fixes (#6293)
* Add regression test reproducing issue

* WIP

* Update regression algorithms

* Improvements

* Cleanup and more fixes

- Clean up BaseDataExchange

* RealTimeHandler fixes

* Address reviews

* More comments, tests and minor tweaks

* Avoid false test failures

* Fixes

* Minor improvements

* Scheduled Event start time fix

* Add warmup option regression algorithm and fix

* Add WarmupFutureRegressionAlgorithm

* Normalize backtesting and live future selection
2022-05-31 10:03:56 -03:00
Martin-Molinero
895dfedf81 User Account currency symbol for fees and capacity (#6359)
* User Account currency symbol for fees and capacity

* Update expected currency symbol stats
2022-05-27 16:36:44 -03:00
Jhonathan Abreu
69dd4fc638 Fixed bug for trailing stop model tracking original security price (#6356)
* Reproduce TrailingStopRiskManagementModel bug with test case

* Fix TrailingStopRiskManagementModel to make it relative to max price

* Adapted old TrailingStopRiskManagementModel test to new implementation

* Fix TrailingStopRiskManagementModel Python version

* Fixed TrailingStopRiskFrameworkAlgorithm regression tests data

* Handling both long and short positions in TrailingStopRiskManagementModel

* Traking holdings value instead of unrealized profit in TrailingStopRiskManagementModel

* Checking for position side change in TrailingStopRiskManagementModel

* Handling immediate liquidation in TrailingStopRiskManagementModel
2022-05-26 19:50:54 -03:00
Ronit Jain
fd20b5377d use research-object-store-name key from config while creating object store for research notebooks (#6355) 2022-05-26 18:12:13 -03:00
Ricardo Andrés Marino Rojas
e78c3e1eb7 Solve bug when plotting Python indicators (#6347)
* First commit

* Add unit test

* Change implementation

* Add unit tests

* Nit change

* nit change

* Remove unnecessary methods

* Add more unit tests

* Revert "Add more unit tests"

This reverts commit 1ba2ab7454.

* Add more unit tests

* Add more unit tests

* Improve Implementation

* Change unit tests

* Remove unit tests

Remove unit tests from AlgorithmRegisterIndicatorTests.cs
2022-05-26 13:03:42 -03:00
Martin-Molinero
0fbbc0e612 Revert "Coarse fine flag improvement (#6349)" (#6353)
This reverts commit fb90f118c9.
2022-05-25 16:51:33 -03:00
Martin-Molinero
fb90f118c9 Coarse fine flag improvement (#6349)
* Coarse fine flag improvement

- Coarse will check global data folder for fine existance if it's
  different than the given path to check

* Update readme.md
2022-05-24 19:46:37 -03:00
Derek Melchin
d7558406c8 Set default constructor values to match those in Python (#6348)
The Python implementation of this Alpha model sets some default values for `lookback` and `resolution`.
aaba566954/Algorithm.Framework/Alphas/PearsonCorrelationPairsTradingAlphaModel.py (L23-L24)
2022-05-23 21:31:48 -03:00
Martin-Molinero
00dd3dbd2c Bump to pythonNet 2.0.15 (#6342) 2022-05-18 13:09:45 -03:00
Martin-Molinero
cb2062debd Expand GetSecondUnevenWait usages (#6340)
* Reduce Live CPU usage

* Address selfreview
2022-05-16 20:12:22 -03:00
Martin-Molinero
4b86c78df0 Add unit test showcasing feature (#6339) 2022-05-13 20:21:08 -03:00
Jhonathan Abreu
17d57cb578 True Strength Index indicator (#6332)
* TrueStrengthIndex indicator

* TrueStrengthIndex indicator signal line

* Address change requests
2022-05-13 15:55:28 -03:00
Martin-Molinero
284b26a9bd Performance improvements and fixes (#6330)
* Reuse GUID

* Reduce Lean task usage

* Reduce CPU usage

* Address reviews
2022-05-13 15:04:09 -03:00
Martin-Molinero
0bc087954e Fix for arm image research (#6333) 2022-05-12 12:42:38 -03:00
Martin-Molinero
f5dd997ca0 Minor fix for FuncPeriodSpecification (#6334)
- Minor fix for FuncPeriodSpecification so it always uses the same
  DateTime to assert the given function. Improve documentation and
  exception message being thrown
2022-05-12 12:37:08 -03:00
Martin-Molinero
33616a44b0 Avoid coding with exceptions (#6327)
- Avoid relying on exception throwing for coding logic.
2022-05-09 10:34:50 -03:00
Derek Melchin
9bd6b46160 Fix CustomIndicatorAlgorithm (#6324) 2022-05-09 10:19:31 -03:00
Martin-Molinero
eb995b86ea Update to pythonNet 2.0.14 (#6322)
* Update to pythonNet 2.0.14

* Add unit test reproducing issue
2022-05-06 17:29:55 -03:00
Martin-Molinero
59a3912f68 Update recyclable memory nuget (#6321) 2022-05-06 11:04:19 -03:00
Martin-Molinero
1be6cccbd4 Update readme.md 2022-05-05 14:45:46 -03:00
Martin-Molinero
a658beb31e Update readme.md 2022-05-05 13:03:17 -03:00
Martin-Molinero
8cf6e073af Update readme.md 2022-05-04 16:43:01 -03:00
Martin-Molinero
2f39ac7d83 Fix research test setup (#6318) 2022-05-03 18:55:48 -03:00
Martin-Molinero
ea25e76faa Update readme.md 2022-05-03 12:18:55 -03:00
Martin-Molinero
b7a21ce4be Update to net6 (#6311)
* Update to net6

* Bump pythonNet to 2.0.13
2022-05-03 11:45:55 -03:00
Martin-Molinero
b9d3d99917 Bump pythonNet version 2.0.12 (#6310)
* Updates after pythonNet rebase

* Bump pythonNet version 2.0.12

* Fix exception types being thrown
2022-05-02 14:38:50 -03:00
Martin-Molinero
64125668db Catch expected test exception (#6317) 2022-05-02 12:44:18 -03:00
Martin-Molinero
06228a8de8 Improve python stack trace parsing (#6316)
- Improve python stack trace parsing removing base Lean path directory.
  Adding unit test
2022-05-02 11:42:36 -03:00
Martin-Molinero
813412afb2 Persist and order runtime statistics (#6314) 2022-04-29 20:59:40 -03:00
Ricardo Andrés Marino Rojas
e0d29e1da7 Charge correct fees for Coinbase Pro stable pairs (#6312)
* First commit

* Improve implementation

* Improve implementation
2022-04-29 16:29:21 -03:00
Ronit Jain
41b7ff58cf consider null cases for cloud brokerageData (#6308) 2022-04-28 13:42:11 -03:00
Ricardo Andrés Marino Rojas
6d181cc452 Fix bug with SetBenchmark() using custom data (#6304)
* First commit

* Solve the easy case

* Solve bugs

* Solve bugs

* Requested changes

* Requested changes
2022-04-27 13:58:10 -03:00
Ronit Jain
b8c8460c7a Update Tradier sandbox config as string with backwards compatibility for bool (#6306)
* add new config

* make case in-sensitive

* use string.IsnullOrEmpty
2022-04-27 13:58:00 -03:00
Louis Szeto
9fe018390e Update OrderResponseErrorCode.cs (#6303) 2022-04-26 10:36:02 -03:00
Nicholas Konovalenko
427f2a70fe Relative Moving Average Indicator (#6297)
* RelativeMovingAverage Indicator #5958

* RelativeMovingAverage #5958

Creation of the RelativeMovingAverage (RMA) indicator, based on the following equation: https://www.hybrid-solutions.com/plugins/client-vtl-plugins/free/rma.html

* Address self review

* Fix unit test

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-04-25 13:13:20 -03:00
code-review-doctor
32f49f1f92 Fix issue probably-meant-fstring found at https://codereview.doctor (#6301) 2022-04-25 10:48:58 -03:00
Martin-Molinero
b3c2303111 Zip data cache provider improvements (#6296)
- Throw on failure to store. Add unit test
- Fix handle leak
2022-04-22 13:52:30 -03:00
Martin-Molinero
fc008fe906 Update readme.md 2022-04-21 16:48:12 -03:00
Martin-Molinero
bbcf5d71a2 Update readme.md 2022-04-20 12:48:25 -03:00
Martin-Molinero
482d86a44a Update readme.md 2022-04-20 12:42:00 -03:00
Martin-Molinero
6eab53f619 Update readme.md 2022-04-19 15:04:29 -03:00
Ricardo Andrés Marino Rojas
f617d25af9 Add missing StableCoins pairs in Crypto Exchanges (#6259)
* Add missing stablecoins

* Fix bugs

* Remove MIMUSD stablecoin pair

That pair is already in the SPDB

* Add more stablecoins pairs

- Add SUSD and IDRT

* Fix bug

* Requested changes

The algorithm posted in the GH was failing because when finding a conversion between currencies BTC to USD, it wasn't taking into account BTCUSDT and that USD = USDT because is a stablecoin

* Solve bugs

* Nit changes and more tests

* Requested changes

* Nit changes

* Requested changes

* Nit change
2022-04-12 18:10:37 -03:00
Martin-Molinero
a8e104f696 Allow LeanDataWriter to merge existing ticks if desired (#6284)
* Allow DataWriter to merge existing ticks if desired

- Optionally allow lean data writer to merge new ticks with existing
- Adjust ZipStreamWriter
- Fix bug in compression lib that was leaving files open. Reproduced by
  added tests.

* Address reviews

- Define new WritePolicy to configure the behavior of the LeanDataWriter
  regarding how it should handle writing to a file: merge, overwrite,
  append
2022-04-08 18:20:23 -03:00
Ronit Jain
d1ff914e5a fix docs (#6285) 2022-04-08 17:44:01 -03:00
Martin-Molinero
574d685647 Update readme.md 2022-04-07 15:55:51 -03:00
Martin-Molinero
fbd12c7eb1 Update readme.md 2022-04-07 15:29:26 -03:00
Ronit Jain
49562c712f Extract IB brokerage files and dependencies (#6283)
* make public safe to expose test properties

* extract ib files

* remove dependencies

* refactor to use ib reference as string

* remove un-used dependencies

* remove redundant refrences
2022-04-07 14:48:10 -03:00
maciek231
73fa0461ed Added checking if algorithm is stopped in initialize method (#6282)
* Added checking if algorithm is stopped in initialize method

* Quit on initialize adjusment

- Minor adjustments to solution. Adding more regression algorithms

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-04-06 19:56:18 -03:00
Martin-Molinero
6cf537b26f Tradier handle unsupported order durations (#6281)
- Tradier will correctly handle closed orders with unsupported order
  durations. Adding unit test
2022-04-04 18:36:22 -03:00
quantify-cflynn
a374ce9b6e Update Tick.cs Time parsing (#6280)
* Update Tick.cs Time parsing

* Adjust equity tick millisecond read

* Fix tick sub millisecond precision

- DateTime.AddMilliseconds will rount to the nearest integer. So instead
  use AddTicks

* Avoid sporadic test failure

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-04-04 17:36:57 -03:00
Ronit Jain
ad34429014 Refactor changes required for brokerages extraction (#6279)
* set price currency for open orders from brokerage setup handler, remove setters from brokerage

* order already has price currency being set by brokerage transcation handler

* remove as overwritten by BrokerageSetupHandler.GetOpenOrders

* refactor because can't use internal setters in private repos

* refactor, use ctor to set attributes

* remove redundant broker dependency

(cherry picked from commit 57b071eb174ca9fe857021ebffa7a546834e86f7)

* check limit price for limit order instead for checking price

* add price agrument for MarketOrder

* remove, not required anymore

* AddUnrequestedSecurity should not return null

* assert string in not null cases
2022-04-04 17:01:36 -03:00
Martin-Molinero
cc1c305432 Update readme.md 2022-04-01 20:09:46 -03:00
Martin-Molinero
caaa506c56 Update readme.md 2022-04-01 18:45:14 -03:00
kulaj
29e426c2b6 Add localization for CSV export delimiters in CoarseUniverseGeneratorProgram (#6228) (#6275)
* Add localization for CSV export delimiters (#6228)

* Use invariant string decimal for coarse

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-04-01 18:12:47 -03:00
Ricardo Andrés Marino Rojas
368cfe0f5d SecurityExchangeHours::GetMarketHours(DateTime) check early closes and late opens (#6278)
* Update GetMarketHours()

* Nit changes

* Requested changes

* Fix bug

* Add more unit tests

* Address reviews

* Minor tweak

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-04-01 18:02:41 -03:00
Martin-Molinero
06c05c4274 Fully reset security cache (#6277)
- Fully reset the security cache when it's finally removed from the algorithm.
   Adding regression algorithm reproducing issue
- Updating regression algorithms which would trade based on data
  previously available
2022-04-01 15:00:29 -03:00
Ricardo Andrés Marino Rojas
cde4743ca7 Warm up EmaCrossAlphaModel indicators (#6270)
* Warm up EmaCrossAlphaModel

Warm Up EmaCrossAlphaModel indicators

* Fix regression test bug

When using the default `EmaCrossAlphaModel()` the period of both indicators to be ready is bigger than the difference between the start date and the end date of the algorithm. Then, as the algorithm didn't warm up the data both indicators of EmaCrossAlpha never were ready, but now as the model warms up the data both indicators are ready so we get different statistics

* Requested change

* Fix unit tests

As there wasn't items in `AddedSecurities`, when trying to remove the items in ´RemovedSecurities´ there was nothing to remove because there was never a security in `_symbolDataBySymbol`. That's why, in order to test, the behavior of `EmaCrossAlphaModel` when removing a security we need to first add one to then remove it.

* Requested changes in Python

- Requested changes in Python
- Nit changes

* Nit change

* Requested Changes

* Add RemoveConsolidators() method in Python version
2022-04-01 12:15:35 -03:00
maciek231
58e89872c1 Fix HttpClient request timeout (#6273)
* Fix HttpClient request timeout

* Update LiveOptionChainProvider.cs

Remove unrequired accepted encoding specification

Co-authored-by: maciej.tromiczak <maciej.tromiczak@96volt.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-03-30 17:34:02 -03:00
Ricardo Andrés Marino Rojas
85eb1fca9a Add History method overload For Python (#6265)
* Add requested History overload

* Add more regression tests

* Revert "Add more regression tests"

This reverts commit 71b279e917.

* Add more regression tests
2022-03-30 16:18:36 -03:00
Jovad Uribe
cc18e47cd6 Added get/set and tests (#6258)
Co-authored-by: Jovad Uribe <jovuribe@gmail.com>
2022-03-18 10:47:55 -07:00
Ronit Jain
15066ae5e1 Feature improve regression tests (#6245)
* add data count properties

* 'add history count property

* assert data counts

* update missing override

* consider override/virtual cases

* implement data count

* add message handler for regression tests

* use regression test message handler

* set algorithm manager for regression test message handler

* update data count

* check if stats are present, check if algo manager is not null

* update

* add c# algo

* make same as c# algo

* use new line

* logic shifted to RegressionTestMessageHandler

* cleanup

* auto cleanup

* skip non deterministic data count

* change data count

* use inheritance

* improve stats

* update couht

* add sma indicator to c# and customSMA to python

* call base method before executing further

* skip test

* revert to original

* add duplicate sma

* skip regression test
2022-03-15 16:51:15 -03:00
Jovad Uribe
1dc118304f Feature #6233 adds super trend getter (#6251)
* Updates SuperTrend and tests

* Requested Changes

* Address selfreviews

Co-authored-by: Jovad Uribe <jovuribe@gmail.com>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-03-14 15:01:07 -03:00
Martin-Molinero
de57cedc5a Make continuous future untradable (#6252)
* Make continuous futures untradable

- To match live trading behavior. Adjust continuous futures securities
  to be untradable

* Set ContinuousFuture as non tradable

- Set continuous futures as non tradable. Update regression algorithms
- Fixes for symbol capacity calculation
2022-03-14 14:23:26 -03:00
Louis Szeto
6273671eb7 Update readme.md (#6250)
Enclose the opened string
2022-03-11 11:44:24 -03:00
Louis Szeto
cece811cce Remove extra ; at Python files (#6248)
Co-authored-by: LouisSzeto <hke0073@hotmail.com>
2022-03-10 11:09:33 -03:00
Alexandre Catarino
0c9c8c45e5 Fixes WarmUpIndicator Overload Inconsistency (#6246)
`WarmUpIndicator` for Python indicators doesn't return the indicator anymore after #6027. So all overloads should return `void`.

Fixes `SmaCrossUniverseSelectionAlgorithm` [C# and Py].
2022-03-10 10:59:16 -03:00
Ronit Jain
7e64bd0265 add end date (#6242) 2022-03-07 19:24:16 -03:00
Ronit Jain
48a7ba77ef Feature support CI of research environment for LEAN (#6237)
* initial commit

* temp commit

* checkout master

* update files

* copy to output directory

* checkout master

* automatically update expected output

* revert

* use correct dotnet interactive version

* clean escape char before assert

* add remark

* update namespace

* remove pythonnet

* use GetExportedTypes

* update notebook result during test run

* remove dispensable escape sequences from expected output

* change location

* update summary

* docs

* docs

* update paths

* use multiple lines for output

* update paths

* suport different python location

* check if notebook are run

* update comment

* remove

* help proper debugging

* assert output first

* add comment
2022-03-04 17:40:41 -03:00
Martin-Molinero
b6de0e7222 Update readme.md 2022-03-04 16:23:57 -03:00
Martin-Molinero
7732a27c1b Nugets will copy content files to output (#6239) 2022-03-04 16:18:46 -03:00
chriscdev
adb6afc4f1 Feature 6208 add nyseliffe exchange to interactive brokers (#6209)
* Added NYSELIFFE exchange support to Interactive Brokers brokerage.

* Fixed unit test AddSecurityWithSymbol by adding market hours for Equity-nyseliffe-[*], Index-nyseliffe-[*], Option-nyseliffe-[*].

* Added NYSELIFFE exchange support to Interactive Brokers brokerage.

* Fixed unit test AddSecurityWithSymbol by adding market hours for Equity-nyseliffe-[*], Index-nyseliffe-[*], Option-nyseliffe-[*].

* Added NYSELIFFE exchange support to Interactive Brokers brokerage.

* Fixed unit test AddSecurityWithSymbol by adding market hours for Equity-nyseliffe-[*], Index-nyseliffe-[*], Option-nyseliffe-[*].

* - Added NYSELIFFE futures to Futures.cs
- Added method GetGoodFriday() to calculate Good Friday to FuturesExpiryUtilityFunctions.cs.
- Added unit tests for GetGoodFriday().
- Added NYSELIFFE futures expiries to FuturesExpiryFunctions.cs which uses GetGoodFriday() instead of hardcoding the date of Good Friday in the market-hours-database.json.
 - Added unit tests for NYSELIFFE futures expiry.
- Added NYSELIFFE to Exchange.cs
- Removed Equity-nyseliffe-[*] and Index-nyseliffe-[*] from market-hours-database.json
- Updated Option-nyseliffe-[*] to FutureOption-nyseliffe-[*] on market-hours-database.json
- Added the supported NYSELIFFE futureoptions to symbol-properties-database.csv.

* Removed blanks after India tuple

* Added the dates for 2022 and 2023 to the market-hours-database.json.
Removed "FutureOption-nyseliffe-[]" from market-hours-database.json.
Added to FuturesOptionsSymbolMappings.cs:
{ "YG", "OYG" },
{ "ZG", "OZG" },
{ "ZI", "OZI" }

* Minor tweaks for nyseliffe FOPs

Co-authored-by: Chris Coetzee <chris@polidata.ai>
Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-03-04 15:24:17 -03:00
Martin-Molinero
29588095ed Remove Atreyu order exchange destination (#6232)
- Remove Atreyu order exchange destination no longer supported. Updating
  regression test
2022-03-04 15:22:29 -03:00
Martin-Molinero
e7043bfc7e Re add ptvsd python debugger (#6236) 2022-03-01 22:11:23 -03:00
Colton Sellers
a44d7b2f92 VSCode Project Changes (#6129)
* Deprecate breakpoints

Drop Watchlist

Remove breakpoints from lean

Prep install of NetCoreDbg

Cleanup

* Install NetCoreDbg

* Update Research Images with Newer Jupyter
2022-03-01 17:41:44 -03:00
Adalyat Nazirov
18b99338fc Implement Binance US exchange (#6222)
* Binance.US base changes

* biniance exchange info update

* Binance US uses same fee rates as main Binance

* binance us brokerage model tests

* use base implementation of GetBuyingPowerModel method
2022-02-22 13:32:59 -03:00
Ronit Jain
f129ab1a09 Feature implement ExchangeInfoDownloader (#6213)
* add gdax exchange info downloader

* add downloader method to program]

* fetch currency description

* change definition to include headers

* use extension method to make request

* remove log from test

* replace WebRequest

* cleanup

* use relevant name

* implement IExchangeInfoDownloader for bitfinex, initial commit

* add default values

* use default market value

* use correct attribute for lotsize

* don't skip missing values

* handle multiple downloaders

* add gdax and bitfinex exchange downloader

* follow LEAN data directory structure

* update SPDB

* order tickers

* order tickers

* add exchange info downloader test template

* delete files

* update SPDB

* use currency mapping

* update bitfinex symbols

* update currency mapping

* sort result after old currency symbols are used

* use market of the respective brokerage

* no more unknown symbol

* change minimum order size value

* direct conversion possible

* update bitfinex symbols

* change user-agent

* add test for indirect conversion

* update stats
2022-02-22 13:00:54 -03:00
Ronit Jain
f86926bf7a Fixes HistoryProviderManager slice merging by using algortime for all slices (#6226)
* remove un-used

* use utc time for slice sync

* use utc time

* refactor

* add regression test

* use utc time

* use utc time

* make utctime required parameter

* add utcTime in slice creation

* assert warm up complete

* check if algorithm is still warmingup

* use exchange tz
2022-02-18 20:43:33 -03:00
Louis Szeto
68c046fc7b Update SamcoFeeModel.cs (#6220)
* Update SamcoFeeModel.cs

https://www.samco.in/charge-list-equities-and-equity-derivatives

* Update SamcoFeeModelTests.cs

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-02-17 20:05:31 -03:00
Alexandre Catarino
3e52816f6e Fixes GetBuyingPowerModel Method of DefaultBrokerageModel (#6215)
`CashBuyingPowerModel`, which reflected on `AlphaStreamBrokerageModel`, a margin-only brokerage.

It also didn't consider the account type, so `InteractiveBrokersBrokerageModel` was using the margin model even if `AccountType.Cash` was selected.

Removes `GetBuyingPowerModel` method from other Brokerage Models when their cases are covered by `DefaultBrokerageModel`

Fixes some typoes in `TradierBrokerageModel`

Fixes unit and regression tests. For the regression tests, we have explicitly set the brokerage model.
2022-02-17 19:41:55 -03:00
Jasper van Merle
c598a8d260 Add support for array history-provider values to QuantBook (#6219) 2022-02-17 11:24:20 -03:00
Martin-Molinero
e63bfc9127 Adjust virtual position in margin accounts (#6214)
- The BrokerTransactionHandler will also adjust virtual positions for
  margin accounts when fees are in base currency and the asset is a
  crypto or forex pair. Adding new regression tests reproducing issue
2022-02-16 15:25:47 -03:00
Martin-Molinero
e316f12394 Refactor MarginRequirementEntry. Update margins (#6210)
* Fix master

* Refactor MarginRequirementEntry to it's own file

* Update margin files

* Remove duplicate dates cases

* Update margins after fix
2022-02-15 20:24:28 -03:00
Martin-Molinero
306298a16f Update HistoryProviderManagerTests.cs 2022-02-15 12:34:00 -03:00
Adalyat Nazirov
e8160f33d5 Binance extraction (#6193)
* extract binance brokerage

* remove binance tools from main toolbox app

* modify OrderTestParameters constructor

* fix BinanceBrokerage ref config.json

* update symbol properties

* move BinanceFeeModel tests to the right place
2022-02-15 12:05:47 -03:00
Ronit Jain
ce3cb8e1a3 fix max leverage (#6207) 2022-02-14 16:42:05 -03:00
Ronit Jain
2d644d7879 Feature handle multiple history providers (#6187)
* initial commit

* get history from data providers

* merge history from history providers

* merge slice

* Add merge function in slice

* Update test

* merge aux data

* add data points in _data

* append new data points in original list

* Add test suite for HistoryProviderManager

* reduce complexity

* setup once

* add fake history provider

* doesn't count aux data

* add tests for options

* style changes

* add custom data

* merge rawDataList

* use array of history providers

* optimize

* fix formatting error

* add comment

* add tests

* simplify

* use list

* use abstraction

* split tests

* add test

* use abstraction to create generic enumertor class

* refactor

* accept list of type T

* sync history slices

* use SubscriptionDataReaderHistoryProvider for live

* rename test file

* return empty

* add tests

* cleanup

* address reviews

* optimize

* Fix method definition

* use initial time for basedata

* refactor

* re-use collection

* inherit HistoryProviderBase

* always return HistoryProviderManager

* add tests

* update rawDataList

* reset composer

* consider null elements

* add tests for binary search method

* Follow lean coding style

* revert

* remove binary search method

* convert to field
2022-02-14 11:58:00 -03:00
Colton Sellers
b80e274d4f Rename OptionsPositions.None -> Empty (#6204) 2022-02-11 19:11:30 -03:00
Martin-Molinero
9a355c9be5 Adjust INR/USD micro future scale to usd dollars (#6203) 2022-02-11 17:01:01 -03:00
Kieran Anderson
303b95ab50 Fix typo (#6201)
"buisness" --> "business"
2022-02-10 21:16:18 -03:00
Colton Sellers
d826d267f4 Update CI script with fixes for using env var (#6200) 2022-02-10 20:13:39 -03:00
Ricardo Andrés Marino Rojas
eb55311052 Feature 5157 micro futures update (#6190)
* Update MHDB and SPDB

Update MHDB and SPDB with micro futures

* Fix bugs

* Add more FutureExpiryFunctions

* Requested changes

* Nit changes

* Nit changes

- Fix some future values in SPDB
- Test LastFriday() method
- Apparently Micro CHF/USD Futures(MSF) refers to the micro of Swiss Franc Futures (6S). The same happens with Micro JPY/USD (MJY) Futures and Japanese Yen Futures (6J)

* Fix bugs

* Micro futures MultipleFactor

* Fix some futures MultipleFactor
2022-02-10 17:45:07 -03:00
Colton Sellers
27d18fa2e8 Include DataSource repos in stub generation (#6195)
* Include DataSource repos in stub generation

* Remove C# import from AlgorithmImports

* Directly import the Algorithm.CSharp namespace

* Update ci_build_stubs.sh

Case-sensitive typo

Co-authored-by: Jasper van Merle <jaspervmerle@gmail.com>

Co-authored-by: Jasper van Merle <jaspervmerle@gmail.com>
2022-02-10 15:09:08 -03:00
Adalyat Nazirov
bb0c671e7c Accept OrderSubmissionData in constructor (#6194)
* modify OrderTestParameters constructor

* add other types
2022-02-08 19:27:22 -03:00
Martin-Molinero
c8dc343c13 GetLastKnownPrices python data (#6191)
* Adding unit tests reproducing issue.

* Fix a couple of minor bugs

- IsMarketOpen will work correctly when used with daily and hourly
  resolution.
- slice.Get will work correctly with python custom data
- ExtendedDictionary will be able to dinamically access methods,
  required for python and private C# data types

* Refactor solution. Add more tests

* Remove unrequired import statement
2022-02-08 15:37:05 -03:00
Alexander Myltsev
b6815d22de Exante Brokerage initial setup (#6018)
* Exante Brokerage initial setup

* Minor exante adjustment. Address review

* Add comments to Exante config section

* Exante `GetLeverage`: handle `SecurityType.Forex`

* Exante `GetLeverage`: return 1.0 for the default case

* Cover Exante `BrokerageModel` and `FeeModel` with tests

* Add missing configurations at config.json

Fixes https://github.com/QuantConnect/Lean/pull/6018#discussion_r799527521

* Fix spaces typos

https://github.com/QuantConnect/Lean/pull/6018#discussion_r799528112

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-02-07 19:53:22 -03:00
Martin-Molinero
459f60603b Fees is base currency subtracted from quote currency (#6188)
* WIP

* Fix fees in base currency not being subtracted

- Fix fees in base currency not being subtracted from the quote currency
  for crypto cash accounts. Updating regression tests to assert
  portfolio, cashbook state and holdings state.

* Fix unit test race condition
2022-02-07 14:57:40 -03:00
Martin-Molinero
1aaaa20c61 Fix daily auxiliary data points emission time (#6186)
* Use GC server mode for tests

* Fix daily auxiliary data points emission time

- Due to fillforwarding, in some cases with daily resolution symbol
  change events (generically any auxiliary data) would arrive late.
  Updating regression test to reproduce the issue. Adding unit test
- Some refactoring and logging improvements

* Address reviews

* Remove old xml docs param
2022-02-04 21:06:45 -03:00
Adalyat Nazirov
07b6572bf9 Support Binance Margin trading (#6173)
* change BinanceBrokerageModel

* supply spot vs margin endpoint as parameter

* wip

* send margin order for margin account

* "NEW" means that the order has been accepted by the Binance engine.

* fix cash balance

* use JsonConverters for account parsing

* unit tests

* fixup

* lazy connect

* fix connection

* allow api client to be null if DQH only

* make method private

* more unit tests

* fix Dispose

* fix tests

* fix IsConnected condition

* run test as additional

* add some comments

* improve unit tests

* improve null checks

* tidy up the code
2022-02-04 17:30:39 -03:00
Ricardo Andrés Marino Rojas
a675aca7e5 Refactor GetFilePath() (#6164)
* Refactor `GetFilePath()`
Add also useful methods to use with this one

* Nit changes

* Requested changes

* Requested changes

* Restore SaveString()

* Nit changes

* Address self review

* Test improvements

* Adjust example KerasNeuralNetworkAlgorithm

* Minor tweak for KerasNeuralNetworkAlgorithm.py

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-02-04 16:58:25 -03:00
Martin-Molinero
87db3fe379 Performance improvements (#6182)
- User server mode for GC
- Remove SecurityType cache type check
2022-02-02 19:52:45 -03:00
Ricardo Andrés Marino Rojas
74321d1727 Update CME future holidays and early closes in MHDB (#6181)
* CME Futures update in MHDB

* Fix indent spaces nit errors

* Revert "Fix indent spaces nit errors"

This reverts commit 6ebb8614c0.

* Fix tabs errors

* Update MHDB with 2022 holidays

* Fix bugs

* Remove earlyOpens
2022-02-02 19:28:21 -03:00
Martin-Molinero
9fd50a302e Update or remove SharpZipLib dependency (#6180) 2022-02-02 13:28:24 -03:00
Martin-Molinero
fc0b2f3fa4 Fix for Add & Remove option contract case (#6172) 2022-01-28 14:13:21 -03:00
Martin-Molinero
c4a2d6eef4 Crypto base currency fees handled correctly (#6166)
* Binance fees deducted from fill quantity accordengly

- For Binance cash accounts while buying, if fees are from the base
  currency of leans virtual position, we need to deduct the fee from the
  fill quantity, else we can end with a position bigger that it actually
  is and not be able to liquidate

* Refactor solution

- Refactor solution into a more generic approach solving fees in base
  currency at the BrokerageTransactionHandler level, covering all
  brokerages that require it. Adding regression algorithm reproducing
  issue.
- Update Bitfinex and Binance fee models to correctly reflact reality

* Log fill quantity adjusment once
2022-01-28 13:02:58 -03:00
Martin-Molinero
c2b60e4e48 Fix empty parameter set deserialization (#6171)
- Fix empty ParameterSet deserialization. Adding unit test
2022-01-27 20:18:47 -03:00
Martin-Molinero
ca9e55fda6 Add null check for Tradier GetQuotes (#6170)
- Fixing bug where tradier GetQuotes could return null in cases where
  the provided symbol would not match any. Adding unit test.
2022-01-26 19:55:27 -03:00
Martin-Molinero
b698641c90 Minor tweak for ApiDataProvider to support India (#6169)
- Minor tweaks for the ApiDataProvider to better support India market
2022-01-24 21:27:22 -03:00
Ronit Jain
e5c709ee29 Extract zerodha brokerage out of LEAN (#6163)
* Remove zerodha brokerage

* use different brokerage for tests

* remove zerodha files with conflict

* remove redundant dependecies
2022-01-24 18:43:12 -03:00
Martin-Molinero
ca787d0a25 Add support for live price scaling (#6104)
* Add support for live price scaling

- Add support for live trading price scaling for continuous futures.
  Adding unit tests

* Move live price scale application. Updating unit tests

- Live trading application of price scaling will happen before fill
  forwarding and updating securities real time price. Updating unit
  tests to reproduce issue
2022-01-24 18:02:24 -03:00
Martin-Molinero
b1a1277eca Fix GetLastKnownPrices resolution usage (#6165)
- GetLastKnownPrices will no longer guess which resolution to use but
  rely on other methods implementation/
- Updating basic template future algorithms to warmup contracts and
  assert it
- Minor improvements for FunSecurityInitializer and FuncSecuritySeeder
2022-01-21 18:00:53 -03:00
Martin-Molinero
30d7fb042b Always reuse aggregator instance if any (#6161)
* Always reuse aggregator instance if any

- When fetching a IDataAggregator instance from the composer, do not
  enfore type name on existing instances

* Fix unit tests
2022-01-20 18:52:22 -03:00
Ronit Jain
d1bb70fbb7 Add account currency and IRegressionAlgorithmDefinition (#6159)
* Add account currency

* update stats

* use market order, same as c#
2022-01-19 18:25:57 -03:00
Ricardo Andrés Marino Rojas
0946bfc2fb Enable users to use symbol tickers when using Toolkit (#6158)
* If the market ticker has a ":" the user can use the symbol ticker

* Nit change
2022-01-19 15:42:21 -03:00
Ronit Jain
f34be8e3ff Feature add India index algorithms and data (#6145)
* add data

(cherry picked from commit 814011d89e5316d150f88ffca5f48d8d5f0ea7d9)

* update market hours for index

(cherry picked from commit edac40732c120eb84d27de00594b59eebb4983f5)

* add index algorithms

(cherry picked from commit b22d27b4fa98172c435f7c26de4a3a297c49a6b7)

* update statistics

* add cash

* Add india market

* add leverage for index

* can subscribe to index

* update format

* fix wrong cash

* fix ticker names

* update data

* update ticker and stats

* update docs
2022-01-19 12:14:48 -03:00
Martin-Molinero
e1d1e28bb8 Fix for Tick subscription history requests (#6156)
- Fix for history requests != Tick for existing subscriptions with Tick
  resolution. Adding unit test reproducing issue
2022-01-18 17:36:27 -03:00
Colton Sellers
5ea9f04b10 Deprecate PTVSD for DebugPy (#6153)
* Deprecate PTVSD for DebugPy

* Replace all references to PTVSD with debugpy

* Address review
2022-01-13 09:45:12 -03:00
Adalyat Nazirov
2529ba124d FTX API endpoint is cinfigurable (#6026)
* specify enpoint url of ftx api (can be FTX pr FTX.US)

* more metadata for ftxus

* tidy up code

* tests

* more tests

* fix tests

* fix us fee rates

* add account tier

* update symbol props

* typo

* typo-2

* update symbol properties

* use FTXUS fee model

* minor tweaks
2022-01-12 13:51:18 -03:00
Ricardo Andrés Marino Rojas
472f78cc53 Remove Quandl from LEAN (#6110)
* Remove Quandl from LEAN

* Nit changes and CustomLiveDataFeedTests.cs

* Resolve conflicts

* Remove files related with Quandl

* Fix bug

* Fix QuantBookHistoryTests.cs

* Fix bug

* Fix bug

* Fix unit tests

* Try fix regression tests

* Nit changes

* Fix bug

* Some of the requested changes

* The missing changes

* Requested changes

* Nit changes

* Revert "Nit changes"

This reverts commit 9800bc5c34.

* Nit changes

* Fix bug

* Requested changes

* Missing file using Quandl to be removed

* Nit changes

* Not applied nit change

* Nit change

* Nit change

* Add nasdaq-auth-code parameter in config.json

* Remove 'quandl-auth-token' from config.json

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-01-12 12:10:20 -03:00
Adalyat Nazirov
0c26d42561 Feature 2839 black scholes data generator (#6135)
* replace to local functions as they are more performant

* fix random generator upper bound

Next() includes minValue, but not maxValue, so we increment it +1

* introduce abstract layers

* refactoring

* fix tets

* adapt tests

* fixup

* implement blackschole price model for options

* use risk free rate

* use ql price model

* wip

* change interface

* fix

* tidy up the code

* wip

* iterate groupped symbols

* wip

* wip

* fix

* allow symbol of different types

* improve settings

* wip

* iterate full range

* fix issue with negative option

* fix

* fixup

* use StandardDeviationOfReturnsVolatilityModel

* re-use existing tick types per security type

* parametrize underlying security type

* use default option style

* dynamic option price model

* fix enumeration

* test

* fix unit tests

* refactor code

* remove unused file

* minor tweaks and refactoring

* rename symbol generator class

* fix interface

* add comments

* more comments and unit tests

* more tests

* add disclaimer

* more tests

* more comments and tests

* split tests into different files

* tidy up the code

* tidy up the code; more tests

* refactor TickGenerator => use security price directly on each iteration

* remove dupe; reuse main constructor

* use SecurityManager, refactor code

* bugfix: save ticks in history array

* check volatility warm up & tests

* more unit tests

* describe volatility period span in settings

* rename command line option

* Minor adjusments. Address review

- Use Lean log handler instead of writting directly to console
- Rename BlackShcolesPriceGenerator to generically OptionPriceModelPriceGenerator
- Minor format clean up & standarization
- Add support for specifying the option chain size

* Rename TickGenerator private fields

* Fix unit tests

* fix tests class name

* Support tickers being specified

Co-authored-by: Martin-Molinero <martin@quantconnect.com>
2022-01-10 17:21:03 -03:00
Martin-Molinero
4b94f50754 Option selection improvements (#6144)
- Zip entries will be sourced from cache provider
- Option underlying will use SubscriptionDataSource to fetch it's data.
  Fixing bug where it would let through an old data point, or miss
  sending data through.
2022-01-10 11:18:28 -03:00
Martin-Molinero
5bdc60b137 Fix for warmup history requests when internal subscriptions present (#6146) 2022-01-10 11:10:44 -03:00
Ronit Jain
3837c32b36 Add India market local data and regression algorithm (#6088)
* Add india market data

* use local data for algo

* Add India market regression algo

* update india market data

* Update readme

* add python algo for BasicTemplateIndiaAlgorithm

* Add India data regression python algo

* data india data files

* update tickers

* Fix algo template

* remove data

* fix stats

* update stats

* remove unused data
2022-01-06 18:24:32 -03:00
Ronit Jain
0e298edcb2 use compression library (#6142) 2022-01-05 15:19:41 -03:00
Martin-Molinero
7a753bfa3f Live mapped subscription will clone the underlying (#6141)
- Live subscription enumerator will clone the underlying data set when
  live mapping is being done. To avoid issues where IDQH implementations
  could reuse a data point with same configurations. Adjusting unit test
  to reproduce issue
2022-01-05 13:45:52 -03:00
Martin-Molinero
8e2554b110 Add continuous futures MHDB always. Adding unit tests (#6139) 2022-01-04 20:31:31 -03:00
Martin-Molinero
bfa58b4692 Fix IB Hong Kong Future Exchanges fees (#6133)
* Fix IB HongKongFutureExchanges fees. Adding test

* Minor self review tweak
2021-12-28 20:12:59 -03:00
Martin-Molinero
e3375bc45e Pin conda and pip foundation versions (#6134) 2021-12-28 18:14:17 -03:00
Martin-Molinero
ac8b500ba2 Foundation update: Ray, H2o & IB (#6126)
* Foundation remove Ray update H2o

* Update IB version to 10.12.2d
2021-12-28 16:17:52 -03:00
Omid K. Rad
2557a36feb Bug: Config.TryGetValue returns true if key is not found (#6128)
* Fix typo

* Fix TryGetValue to return false if key is not found

* Revert "Fix TryGetValue to return false if key is not found"

This reverts commit b85b7b579a.

* Update documentation for TryGetValue
2021-12-28 12:19:46 -03:00
Martin-Molinero
55cb3bdaff ApiDataProvider Support Future map & factor files (#6132)
- Add support for the ApiDataProvider to handle future map and factor
  files downloads. Adding unit test
2021-12-27 21:52:51 -03:00
Martin-Molinero
10bb627fc2 Update to pythonNet 2.0.11 (#6131) 2021-12-27 15:49:24 -03:00
3758 changed files with 332217 additions and 222828 deletions

8
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,8 @@
# Use QuantConnect Research as the base
FROM quantconnect/research:latest
# Install dos2unix utility for converting pesky windows formatting when needed
RUN apt-get update && apt-get install -y dos2unix
# Install QuantConnect Stubs for Python Autocomplete
RUN pip install --no-cache-dir quantconnect-stubs

View File

@@ -0,0 +1,34 @@
{
"name": "Lean Development Container",
"workspaceMount": "source=${localWorkspaceFolder},target=/Lean,type=bind",
"workspaceFolder": "/Lean",
// Use devcontainer Dockerfile that is based on Lean foundation image
"build": { "dockerfile": "Dockerfile" },
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.profiles.linux": {
"bash": {
"path": "bash",
"icon": "terminal-bash"
}
}
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["ms-dotnettools.csharp", "ms-python.python", "ms-python.vscode-pylance", "formulahendry.dotnet-test-explorer", "eamodio.gitlens", "yzhang.markdown-all-in-one"],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Uncomment the next line to run commands after the container is created - for example installing curl.
"postCreateCommand": "dotnet nuget add source /Lean/LocalPackages;chmod u+x /Lean/.vscode/launch_research.sh;dos2unix /Lean/.vscode/launch_research.sh",
// Add mounts to docker container
"mounts": [
// Example data mount from local machine, must use target directory in Config.json
// "source=C:/Users/XXXXXXXXXXXX/Lean/Data,target=/Data,type=bind,consistency=cached"
]
}

39
.github/workflows/benchmarks.yml vendored Normal file
View File

@@ -0,0 +1,39 @@
name: Benchmarks
on:
push:
branches: ['*']
tags: ['*']
pull_request:
branches: [master]
jobs:
build:
runs-on: self-hosted
container:
image: quantconnect/lean:foundation
volumes:
- /nas:/Data
steps:
- uses: actions/checkout@v2
- name: Checkout Lean Master
uses: actions/checkout@v2
with:
repository: QuantConnect/Lean
path: LeanMaster
ref: 'master'
- name: Build Lean Master
run: dotnet build --verbosity q /p:Configuration=Release /p:WarningLevel=1 LeanMaster/QuantConnect.Lean.sln
- name: Run Benchmarks Master
run: cp run_benchmarks.py LeanMaster/run_benchmarks.py && cd LeanMaster && python run_benchmarks.py /Data && cd ../
- name: Build
run: dotnet build --verbosity q /p:Configuration=Release /p:WarningLevel=1 QuantConnect.Lean.sln
- name: Run Benchmarks
run: python run_benchmarks.py /Data
- name: Compare Benchmarks
run: python compare_benchmarks.py LeanMaster/benchmark_results.json benchmark_results.json

View File

@@ -10,21 +10,21 @@ on:
jobs:
build:
runs-on: ubuntu-20.04
container:
image: quantconnect/lean:foundation
steps:
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v2
- name: Free space
run: df -h && rm -rf /opt/hostedtoolcache* && df -h
- name: Build
run: dotnet build /p:Configuration=Release /v:quiet /p:WarningLevel=1 QuantConnect.Lean.sln
- name: Run Tests
run: dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter TestCategory!=TravisExclude -- TestRunParameters.Parameter\(name=\"log-handler\", value=\"ConsoleErrorLogHandler\"\)
- name: Generate & Publish python stubs
if: startsWith(github.ref, 'refs/tags/')
run: |
chmod +x ci_build_stubs.sh
./ci_build_stubs.sh -t -g -p
env:
PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
- uses: addnab/docker-run-action@v3
with:
image: quantconnect/lean:foundation
options: --workdir /__w/Lean/Lean -v /home/runner/work:/__w -e GITHUB_REF=${{ github.ref }} -e PYPI_API_TOKEN=${{ secrets.PYPI_API_TOKEN }} -e ADDITIONAL_STUBS_REPOS=${{ secrets.ADDITIONAL_STUBS_REPOS }} -e QC_GIT_TOKEN=${{ secrets.QC_GIT_TOKEN }}
shell: bash
run: |
# Build
dotnet build /p:Configuration=Release /v:quiet /p:WarningLevel=1 QuantConnect.Lean.sln && \
# Run Tests
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --blame-hang-timeout 300seconds --blame-crash --filter "TestCategory!=TravisExclude&TestCategory!=ResearchRegressionTests" -- TestRunParameters.Parameter\(name=\"log-handler\", value=\"ConsoleErrorLogHandler\"\) && \
# Generate & Publish python stubs
echo "GITHUB_REF $GITHUB_REF" && if [[ $GITHUB_REF = refs/tags/* ]]; then (chmod +x ci_build_stubs.sh && ./ci_build_stubs.sh -t -g -p); else echo "Skipping stub generation"; fi

View File

@@ -0,0 +1,21 @@
name: Rebase Organization Branches
on:
push:
branches:
- 'master'
jobs:
build:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Rebase Organization Branches
run: |
chmod +x rebase_organization_branches.sh
./rebase_organization_branches.sh
env:
QC_GIT_TOKEN: ${{ secrets.QC_GIT_TOKEN }}

View File

@@ -10,13 +10,19 @@ on:
jobs:
build:
runs-on: ubuntu-20.04
container:
image: quantconnect/lean:foundation
steps:
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v2
- name: Free space
run: df -h && rm -rf /opt/hostedtoolcache* && df -h
- name: Build
run: dotnet build /p:Configuration=Release /v:quiet /p:WarningLevel=1 QuantConnect.Lean.sln
- name: Run Tests
run: dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter TestCategory=RegressionTests -- TestRunParameters.Parameter\(name=\"log-handler\", value=\"ConsoleErrorLogHandler\"\) TestRunParameters.Parameter\(name=\"reduced-disk-size\", value=\"true\"\)
- uses: addnab/docker-run-action@v3
with:
image: quantconnect/lean:foundation
options: --workdir /__w/Lean/Lean -v /home/runner/work:/__w
shell: bash
run: |
# Build
dotnet build /p:Configuration=Release /v:quiet /p:WarningLevel=1 QuantConnect.Lean.sln
# Run Tests
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter TestCategory=RegressionTests -- TestRunParameters.Parameter\(name=\"log-handler\", value=\"ConsoleErrorLogHandler\"\) TestRunParameters.Parameter\(name=\"reduced-disk-size\", value=\"true\"\)

View File

@@ -0,0 +1,36 @@
name: Research Regression Tests
on:
push:
branches: ['*']
tags: ['*']
pull_request:
branches: [master]
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Free space
run: df -h && rm -rf /opt/hostedtoolcache* && df -h
- uses: addnab/docker-run-action@v3
with:
image: quantconnect/lean:foundation
options: --workdir /__w/Lean/Lean -v /home/runner/work:/__w
shell: bash
run: |
# install dependencies
pip3 install papermill==2.4.0 clr-loader==0.1.6
# install kernel
dotnet tool install --global Microsoft.dotnet-interactive --version 1.0.340501
# Add dotnet tools to Path
export PATH="$HOME/.dotnet/tools:$PATH"
# activate kernel for jupyter
dotnet interactive jupyter install
# Build
dotnet build /p:Configuration=Release /v:quiet /p:WarningLevel=1 QuantConnect.Lean.sln
# Run Tests
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter TestCategory=ResearchRegressionTests -- TestRunParameters.Parameter\(name=\"log-handler\", value=\"ConsoleErrorLogHandler\"\) TestRunParameters.Parameter\(name=\"reduced-disk-size\", value=\"true\"\)

View File

@@ -0,0 +1,58 @@
name: Python Virtual Environments
on:
push:
branches: ['*']
tags: ['*']
pull_request:
branches: [master]
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Free space
run: df -h && rm -rf /opt/hostedtoolcache* && df -h
- uses: addnab/docker-run-action@v3
with:
image: quantconnect/lean:foundation
options: --workdir /__w/Lean/Lean -v /home/runner/work:/__w
shell: bash
run: |
# Build
dotnet build /p:Configuration=Release /v:quiet /p:WarningLevel=1 QuantConnect.Lean.sln
# Python Virtual Environment System Packages
python -m venv /lean-testenv --system-site-packages && . /lean-testenv/bin/activate && pip install --no-cache-dir lean==1.0.99 && deactivate
# Run Virtual Environment Test System Packages
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonVirtualEnvironmentTests.AssertVirtualEnvironment"
# Python Virtual Environment
rm -rf /lean-testenv && python -m venv /lean-testenv && . /lean-testenv/bin/activate && pip install --no-cache-dir lean==1.0.99 && deactivate
# Run Virtual Environment Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonVirtualEnvironmentTests.AssertVirtualEnvironment"
# Run Python Package Tests
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests" --blame-hang-timeout 120seconds --blame-crash
# Run StableBaselines Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.StableBaselinesTest" --blame-hang-timeout 120seconds --blame-crash
# Run AxPlatform Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.AxPlatformTest" --blame-hang-timeout 120seconds --blame-crash
# Run TensorlyTest Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.TensorlyTest" --blame-hang-timeout 120seconds --blame-crash
# Run NeuralTangents, Ignite Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.NeuralTangentsTest|IgniteTest" --blame-hang-timeout 120seconds --blame-crash
# Run TensorflowTest
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.TensorflowTest" --blame-hang-timeout 120seconds --blame-crash
# Run TensorflowProbability
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.TensorflowProbabilityTest" --blame-hang-timeout 120seconds --blame-crash
# Run Hvplot Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.HvplotTest" --blame-hang-timeout 120seconds --blame-crash
# Run Stellargraph Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.StellargraphTest" --blame-hang-timeout 120seconds --blame-crash
# Run Keras Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.KerasTest" --blame-hang-timeout 120seconds --blame-crash
# Run Scikeras Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.ScikerasTest" --blame-hang-timeout 120seconds --blame-crash
# Run Transformers
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.Transformers|XTransformers" --blame-hang-timeout 120seconds --blame-crash

3
.gitignore vendored
View File

@@ -1,3 +1,6 @@
# OS Files
.DS_Store
# Object files
*.o
*.ko

View File

@@ -18,10 +18,10 @@ To use Lean CLI follow the instructions for installation and tutorial for usage
<h2>Option 2: Install Locally</h2>
1. Install [.Net 5](https://dotnet.microsoft.com/download) for the project
1. Install [.Net 6](https://dotnet.microsoft.com/download) for the project
2. (Optional) Get [Python 3.6.8](https://www.python.org/downloads/release/python-368/) for running Python algorithms
- Follow Python instructions [here](https://github.com/QuantConnect/Lean/tree/master/Algorithm.Python#installing-python-36) for your platform
2. (Optional) Get [Python 3.8.13](https://www.python.org/downloads/release/python-3813/) for running Python algorithms
- Follow Python instructions [here](https://github.com/QuantConnect/Lean/tree/master/Algorithm.Python#installing-python-38) for your platform
3. Get [Visual Studio](https://visualstudio.microsoft.com/vs/)

10
.vscode/launch.json vendored
View File

@@ -3,13 +3,13 @@
VS Code Launch configurations for the LEAN engine
Launch:
Builds the project with dotnet 5 and then launches the program using coreclr; supports debugging.
In order to use this you need dotnet 5 on your system path, As well as the C# extension from the
Builds the project with dotnet 6 and then launches the program using coreclr; supports debugging.
In order to use this you need dotnet 6 on your system path, As well as the C# extension from the
marketplace.
Attach to Python:
Will attempt to attach to LEAN running locally using PTVSD. Requires that the process is
actively running and config is set: "debugging": true, "debugging-method": "PTVSD",
Will attempt to attach to LEAN running locally using DebugPy. Requires that the process is
actively running and config is set: "debugging": true, "debugging-method": "DebugPy",
Requires Python extension from the marketplace. Currently only works with algorithms in
Algorithm.Python directory. This is because we map that directory to our build directory
that contains the py file at runtime. If using another location change "localRoot" value
@@ -26,7 +26,7 @@
"program": "${workspaceFolder}/Launcher/bin/Debug/QuantConnect.Lean.Launcher.dll",
"args": [
"--config",
"${workspaceFolder}/Launcher/config.json"
"${workspaceFolder}/Launcher/bin/Debug/config.json"
],
"cwd": "${workspaceFolder}/Launcher/bin/Debug/",
"stopAtEntry": false,

15
.vscode/launch_research.sh vendored Normal file
View File

@@ -0,0 +1,15 @@
# Realpath polyfill, notably absent macOS and some debian distros
absolute_path() {
echo "$(cd "$(dirname "${1}")" && pwd)/$(basename "${1}")"
}
# Get build directory from args position 1, or use default
DEFAULT_BUILD_DIR=../Launcher/bin/Debug/
BUILD_DIR=${1:-$DEFAULT_BUILD_DIR}
BUILD_DIR=$(absolute_path "${BUILD_DIR}")
#Add our build directory to python path for python kernel
export PYTHONPATH="${PYTHONPATH}:${BUILD_DIR}"
# Launch jupyter-lab
jupyter-lab --allow-root --no-browser --notebook-dir=$BUILD_DIR --LabApp.token=''

55
.vscode/readme.md vendored
View File

@@ -4,6 +4,8 @@ This document contains information regarding ways to use Visual Studio Code to w
- Using Lean CLI -> A great tool for working with your algorithms locally, while still being able to deploy to the cloud and have access to Lean data. It is also able to run algorithms locally through our official docker images **Recommended for algorithm development.
- Using a Lean Dev container -> A docker environment with all dependencies pre-installed to allow seamless Lean development across platforms. Great for open source contributors.
- Locally installing all dependencies to run Lean with Visual Studio Code on your OS.
<br />
@@ -12,32 +14,63 @@ This document contains information regarding ways to use Visual Studio Code to w
<h2>Option 1: Lean CLI</h2>
To use Lean CLI follow the instructions for installation and tutorial for usage in our [documentation](https://www.quantconnect.com/docs/v2/lean-cli/getting-started/lean-cli)
To use Lean CLI follow the instructions for installation and tutorial for usage in our [documentation](https://www.quantconnect.com/docs/v2/lean-cli/key-concepts/getting-started)
<br />
<h2>Option 2: Install Dependencies Locally</h2>
<h2>Option 2: Lean Development Container</h2>
1. Install [.Net 5](https://dotnet.microsoft.com/download) for the project
Before anything we need to ensure a few things have been done for either option:
2. (Optional) Get [Python 3.6.8](https://www.python.org/downloads/release/python-368/) for running Python algorithms
- Follow Python instructions [here](https://github.com/QuantConnect/Lean/tree/master/Algorithm.Python#installing-python-36) for your platform
1. Get [Visual Studio Code](https://code.visualstudio.com/download)
- Get [Remote Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) Extension
2. Get [Docker](https://docs.docker.com/get-docker/):
- Follow the instructions for your Operating System
- New to Docker? Try [docker getting-started](https://docs.docker.com/get-started/)
3. Pull Leans latest research image from a terminal
- `docker pull quantconnect/research:latest`
4. Get Lean into VS Code
- Download the repo or clone it using: `git clone [https://github.com/QuantConnect/Lean](https://github.com/QuantConnect/Lean)`
- Open the folder using VS Code
5. Open Development Container
- In VS Code, either:
- Select "Reopen in Container" from pop up box.
OR
- Ctrl+Shift+P (Command Palette) and select "Remote-Containers: Rebuild and Reopen in Container"
You should now be in the development container, give VS Code a moment to prepare and you will be ready to go!
If you would like to mount any additional local files to your container, checkout [devcontainer.json "mounts" section](https://containers.dev/implementors/json_reference/) for an example! Upon any mount changes you must rebuild the container using Command Palette as in step 5.
<br />
<h2>Option 3: Install Dependencies Locally</h2>
1. Install [.NET 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) for the project
2. (Optional) Get [Python 3.8.13](https://www.python.org/downloads/release/python-3813/) for running Python algorithms
- Follow Python instructions [here](https://github.com/QuantConnect/Lean/tree/master/Algorithm.Python#installing-python-38) for your platform
3. Get [Visual Studio Code](https://code.visualstudio.com/download)
- Get the Extension [C#](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) for C# Debugging
- Get the Extension [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) for Python Debugging
4. Get Lean into VS Code
- Download the repo or clone it using: _git clone [https://github.com/QuantConnect/Lean](https://github.com/QuantConnect/Lean)_
- Download the repo or clone it using: `git clone [https://github.com/QuantConnect/Lean](https://github.com/QuantConnect/Lean)`
- Open the folder using VS Code
Your environment is prepared and ready to run lean
Your environment is prepared and ready to run Lean.
<br />
<h1>How to use Lean</h1>
This section will cover configuring, building, launching and debugging lean. This is only applicable to option 2 from above. This does not apply to Lean CLI, please refer to [CLI documentation](https://www.quantconnect.com/docs/v2/lean-cli/getting-started/lean-cli)
This section will cover configuring, building, launching and debugging lean. This is only applicable to option 2 from above. This does not apply to Lean CLI, please refer to [CLI documentation](https://www.quantconnect.com/docs/v2/lean-cli/key-concepts/getting-started)
<br />
@@ -73,7 +106,6 @@ In VS Code run build task (Ctrl+Shift+B or "Terminal" dropdown); there are a few
- __Build__ - basic build task, just builds Lean once
- __Rebuild__ - rebuild task, completely rebuilds the project. Use if having issues with debugging symbols being loaded for your algorithms.
- __Autobuilder__ - Starts a script that builds then waits for files to change and rebuilds appropriately
- __Clean__ - deletes out all project build files
<br />
@@ -95,7 +127,7 @@ Python algorithms require a little extra work in order to be able to debug them.
First in order to debug a Python algorithm in VS Code we must make the following change to our configuration (Launcher\config.json) under the comment debugging configuration:
"debugging": true,
"debugging-method": "PTVSD",
"debugging-method": "DebugPy",
In setting this we are telling Lean to expect a debugger connection using Python Tools for Visual Studio Debugger. Once this is set Lean will stop upon initialization and await a connection to the debugger via port 5678.
@@ -123,5 +155,6 @@ _Figure 2: Python Debugger Messages_
<h1>Common Issues</h1>
Here we will cover some common issues with setting this up. This section will expand as we get user feedback!
- Autocomplete and reference finding with omnisharp can sometimes bug, if this occurs use the command palette to restart omnisharp. (Ctrl+Shift+P "OmniSharp: Restart OmniSharp")
- The "project file cannot be loaded" and "nuget packages not found" errors occurs when the project files are open by another process in the host. Closing all applications and/or restarting the computer solve the issue.
- Autocomplete and reference finding with omnisharp can sometimes be buggy, if this occurs use the command palette to restart omnisharp. (Ctrl+Shift+P "OmniSharp: Restart OmniSharp")
- Any error messages about building in VSCode that point to comments in JSON. Either select **ignore** or follow steps described [here](https://stackoverflow.com/questions/47834825/in-vs-code-disable-error-comments-are-not-permitted-in-json) to remove the errors entirely.

7
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"files.eol": "\n",
"python.analysis.extraPaths": [
"/Lean/Algorithm.Python",
"/opt/miniconda3/lib/python3.8/site-packages"
]
}

12
.vscode/tasks.json vendored
View File

@@ -50,6 +50,18 @@
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
{
"label": "start research",
"type": "shell",
"dependsOn": ["build"],
"group": "build",
"isBackground": true,
"command" : "${workspaceFolder}/.vscode/launch_research.sh",
"args" : [
"${workspaceFolder}/Launcher/bin/Debug"
],
"problemMatcher": "$msCompile"
}
]
}

View File

@@ -69,6 +69,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 3943;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -81,41 +91,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0.200%"},
{"Expectancy", "-0.585"},
{"Net Profit", "-0.172%"},
{"Sharpe Ratio", "-10.169"},
{"Sharpe Ratio", "-11.13"},
{"Sortino Ratio", "-16.704"},
{"Probabilistic Sharpe Ratio", "12.075%"},
{"Loss Rate", "78%"},
{"Win Rate", "22%"},
{"Profit-Loss Ratio", "0.87"},
{"Alpha", "-0.149"},
{"Alpha", "-0.156"},
{"Beta", "0.035"},
{"Annual Standard Deviation", "0.008"},
{"Annual Variance", "0"},
{"Information Ratio", "-9.603"},
{"Tracking Error", "0.215"},
{"Treynor Ratio", "-2.264"},
{"Treynor Ratio", "-2.478"},
{"Total Fees", "$199.00"},
{"Estimated Strategy Capacity", "$26000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.002"},
{"Kelly Criterion Estimate", "38.796"},
{"Kelly Criterion Probability Value", "0.228"},
{"Sortino Ratio", "-22.493"},
{"Return Over Maximum Drawdown", "-77.93"},
{"Portfolio Turnover", "1.211"},
{"Total Insights Generated", "100"},
{"Total Insights Closed", "99"},
{"Total Insights Analysis Completed", "99"},
{"Long Insight Count", "100"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$135639.1761"},
{"Total Accumulated Estimated Alpha Value", "$21852.9784"},
{"Mean Population Estimated Insight Value", "$220.7372"},
{"Mean Population Direction", "53.5354%"},
{"Mean Population Magnitude", "53.5354%"},
{"Rolling Averaged Population Direction", "58.2788%"},
{"Rolling Averaged Population Magnitude", "58.2788%"},
{"OrderListHash", "3c4c4085810cc5ecdb927d3647b9bbf3"}
{"Portfolio Turnover", "119.89%"},
{"OrderListHash", "2b4c6d1cb2fc32e25f9a744e8aa7229a"}
};
}
}

View File

@@ -105,6 +105,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 58;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -117,41 +127,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "1.700%"},
{"Expectancy", "1.781"},
{"Net Profit", "1.442%"},
{"Sharpe Ratio", "4.86"},
{"Sharpe Ratio", "4.836"},
{"Sortino Ratio", "10.481"},
{"Probabilistic Sharpe Ratio", "59.497%"},
{"Loss Rate", "33%"},
{"Win Rate", "67%"},
{"Profit-Loss Ratio", "3.17"},
{"Alpha", "4.181"},
{"Alpha", "4.164"},
{"Beta", "-1.322"},
{"Annual Standard Deviation", "0.321"},
{"Annual Variance", "0.103"},
{"Information Ratio", "-0.795"},
{"Tracking Error", "0.532"},
{"Treynor Ratio", "-1.18"},
{"Treynor Ratio", "-1.174"},
{"Total Fees", "$14.78"},
{"Estimated Strategy Capacity", "$47000000.00"},
{"Lowest Capacity Asset", "IBM R735QTJ8XC9X"},
{"Fitness Score", "0.408"},
{"Kelly Criterion Estimate", "16.559"},
{"Kelly Criterion Probability Value", "0.316"},
{"Sortino Ratio", "12.447"},
{"Return Over Maximum Drawdown", "106.327"},
{"Portfolio Turnover", "0.411"},
{"Total Insights Generated", "3"},
{"Total Insights Closed", "3"},
{"Total Insights Analysis Completed", "3"},
{"Long Insight Count", "0"},
{"Short Insight Count", "3"},
{"Long/Short Ratio", "0%"},
{"Estimated Monthly Alpha Value", "$20784418.6104"},
{"Total Accumulated Estimated Alpha Value", "$3579538.7607"},
{"Mean Population Estimated Insight Value", "$1193179.5869"},
{"Mean Population Direction", "100%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "100%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "9da9afe1e9137638a55db1676adc2be1"}
{"Portfolio Turnover", "41.18%"},
{"OrderListHash", "e07dec6ddf0ef6b5d9c791b0593ec4dc"}
};
}
}

View File

@@ -82,6 +82,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 24;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -95,6 +105,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -109,25 +120,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", ""},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "79228162514264337593543950335"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"Portfolio Turnover", "0%"},
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}

View File

@@ -79,6 +79,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 24;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -92,6 +102,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -106,25 +117,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", ""},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "79228162514264337593543950335"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"Portfolio Turnover", "0%"},
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}

View File

@@ -99,6 +99,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp};
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 10977;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 11;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -111,41 +121,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0.300%"},
{"Expectancy", "0"},
{"Net Profit", "0.289%"},
{"Sharpe Ratio", "4.233"},
{"Sharpe Ratio", "3.924"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "68.349%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.035"},
{"Alpha", "0.028"},
{"Beta", "0.122"},
{"Annual Standard Deviation", "0.024"},
{"Annual Variance", "0.001"},
{"Information Ratio", "-3.181"},
{"Tracking Error", "0.142"},
{"Treynor Ratio", "0.842"},
{"Treynor Ratio", "0.78"},
{"Total Fees", "$1.00"},
{"Estimated Strategy Capacity", "$35000000.00"},
{"Lowest Capacity Asset", "IBM R735QTJ8XC9X"},
{"Fitness Score", "0.022"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "8.508"},
{"Return Over Maximum Drawdown", "58.894"},
{"Portfolio Turnover", "0.022"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "bd88c6a0e10c7e146b05377205101a12"}
{"Portfolio Turnover", "1.51%"},
{"OrderListHash", "e930f95771bc50dd2db1c353e054c4e7"}
};
}
}

View File

@@ -113,6 +113,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 63;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -121,45 +131,28 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Trades", "3"},
{"Average Win", "0%"},
{"Average Loss", "-0.03%"},
{"Compounding Annual Return", "-2.503%"},
{"Compounding Annual Return", "-2.594%"},
{"Drawdown", "0.000%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.032%"},
{"Sharpe Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Net Profit", "-0.034%"},
{"Sharpe Ratio", "-10.666"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "1.216%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0"},
{"Beta", "0"},
{"Annual Standard Deviation", "0"},
{"Alpha", "-0.029"},
{"Beta", "0.004"},
{"Annual Standard Deviation", "0.003"},
{"Annual Variance", "0"},
{"Information Ratio", "-0.678"},
{"Tracking Error", "0.243"},
{"Treynor Ratio", "0"},
{"Total Fees", "$7.40"},
{"Estimated Strategy Capacity", "$2100000.00"},
{"Information Ratio", "-0.768"},
{"Tracking Error", "0.241"},
{"Treynor Ratio", "-6.368"},
{"Total Fees", "$8.60"},
{"Estimated Strategy Capacity", "$5500000.00"},
{"Lowest Capacity Asset", "ES VMKLFZIH2MTD"},
{"Fitness Score", "0.419"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-81.557"},
{"Portfolio Turnover", "0.837"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "68775c18eb40c1bde212653faec4016e"}
{"Portfolio Turnover", "66.80%"},
{"OrderListHash", "0ade3a7a7aaafa3263082c93cf17c4d8"}
};
}
}

View File

@@ -41,7 +41,7 @@ namespace QuantConnect.Algorithm.CSharp
public override void Initialize()
{
SetStartDate(2020, 1, 4);
SetEndDate(2020, 1, 6);
SetEndDate(2020, 1, 8);
_es20h20 = AddFutureContract(
QuantConnect.Symbol.CreateFuture(Futures.Indices.SP500EMini, Market.CME, new DateTime(2020, 3, 20)),
@@ -51,8 +51,9 @@ namespace QuantConnect.Algorithm.CSharp
QuantConnect.Symbol.CreateFuture(Futures.Indices.SP500EMini, Market.CME, new DateTime(2020, 6, 19)),
Resolution.Minute).Symbol;
// Get option contract lists for 2020/01/05 (Time.AddDays(1)) because Lean has local data for that date
var optionChains = OptionChainProvider.GetOptionContractList(_es20h20, Time.AddDays(1))
.Concat(OptionChainProvider.GetOptionContractList(_es19m20, Time));
.Concat(OptionChainProvider.GetOptionContractList(_es19m20, Time.AddDays(1)));
foreach (var optionContract in optionChains)
{
@@ -160,6 +161,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 311879;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -168,45 +179,28 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Trades", "2"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "116.059%"},
{"Drawdown", "0.600%"},
{"Compounding Annual Return", "5512.811%"},
{"Drawdown", "1.000%"},
{"Expectancy", "0"},
{"Net Profit", "0.635%"},
{"Sharpe Ratio", "17.16"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Net Profit", "5.333%"},
{"Sharpe Ratio", "64.084"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "95.977%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "2.25"},
{"Beta", "-1.665"},
{"Annual Standard Deviation", "0.071"},
{"Annual Variance", "0.005"},
{"Information Ratio", "5.319"},
{"Tracking Error", "0.114"},
{"Treynor Ratio", "-0.735"},
{"Total Fees", "$7.40"},
{"Estimated Strategy Capacity", "$24000000.00"},
{"Alpha", "25.763"},
{"Beta", "2.914"},
{"Annual Standard Deviation", "0.423"},
{"Annual Variance", "0.179"},
{"Information Ratio", "66.11"},
{"Tracking Error", "0.403"},
{"Treynor Ratio", "9.308"},
{"Total Fees", "$8.60"},
{"Estimated Strategy Capacity", "$22000000.00"},
{"Lowest Capacity Asset", "ES XFH59UK0MYO1"},
{"Fitness Score", "1"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "79228162514264337593543950335"},
{"Portfolio Turnover", "2.133"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "35738733ff791eeeaf508faec804cab0"}
{"Portfolio Turnover", "122.11%"},
{"OrderListHash", "679692e30a7cf3b54b09af766589df80"}
};
}
}

View File

@@ -0,0 +1,135 @@
/*
* 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 QuantConnect.Data;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
using System.Collections.Generic;
using System.Linq;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This regression algorithm tests we can add future option contracts from contracts in the future chain
/// </summary>
public class AddFutureOptionContractFromFutureChainRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private bool _addedOptions;
public override void Initialize()
{
SetStartDate(2020, 1, 4);
SetEndDate(2020, 1, 6);
var es = AddFuture(Futures.Indices.SP500EMini, Resolution.Minute, Market.CME);
es.SetFilter((futureFilter) =>
{
return futureFilter.Expiration(0, 365).ExpirationCycle(new[] { 3, 6 });
});
}
public override void OnData(Slice data)
{
if (!_addedOptions)
{
_addedOptions = true;
foreach (var futuresContracts in data.FutureChains.Values)
{
foreach (var contract in futuresContracts)
{
var option_contract_symbols = OptionChainProvider.GetOptionContractList(contract.Symbol, Time).ToList();
if(option_contract_symbols.Count == 0)
{
continue;
}
foreach (var option_contract_symbol in option_contract_symbols.OrderBy(x => x.ID.Date)
.ThenBy(x => x.ID.StrikePrice)
.ThenBy(x => x.ID.OptionRight).Take(5))
{
AddOptionContract(option_contract_symbol);
}
}
}
}
if (Portfolio.Invested)
{
return;
}
foreach (var chain in data.OptionChains.Values)
{
foreach (var option in chain.Contracts.Keys)
{
MarketOrder(option, 1);
MarketOrder(option.Underlying, 1);
}
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 12164;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "20"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "386219349.202%"},
{"Drawdown", "5.200%"},
{"Expectancy", "0"},
{"Net Profit", "11.912%"},
{"Sharpe Ratio", "1604181.904"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "2144882.02"},
{"Beta", "31.223"},
{"Annual Standard Deviation", "1.337"},
{"Annual Variance", "1.788"},
{"Information Ratio", "1657259.526"},
{"Tracking Error", "1.294"},
{"Treynor Ratio", "68696.045"},
{"Total Fees", "$35.70"},
{"Estimated Strategy Capacity", "$2600000.00"},
{"Lowest Capacity Asset", "ES 31C3JQS9D84PW|ES XCZJLC9NOB29"},
{"Portfolio Turnover", "495.15%"},
{"OrderListHash", "39179b5e977b8bf5411fbd31896a7953"}
};
}
}

View File

@@ -43,7 +43,7 @@ namespace QuantConnect.Algorithm.CSharp
public override void Initialize()
{
SetStartDate(2020, 1, 4);
SetEndDate(2020, 1, 6);
SetEndDate(2020, 1, 8);
_es = AddFuture(Futures.Indices.SP500EMini, Resolution.Minute, Market.CME);
_es.SetFilter((futureFilter) =>
@@ -164,8 +164,6 @@ namespace QuantConnect.Algorithm.CSharp
public override void OnEndOfAlgorithm()
{
base.OnEndOfAlgorithm();
if (!_optionFilterRan)
{
throw new InvalidOperationException("Option chain filter was never ran");
@@ -219,6 +217,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 608372;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -227,45 +235,28 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Trades", "2"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "-10.708%"},
{"Drawdown", "0.200%"},
{"Compounding Annual Return", "347.065%"},
{"Drawdown", "0.900%"},
{"Expectancy", "0"},
{"Net Profit", "-0.093%"},
{"Sharpe Ratio", "-10.594"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Net Profit", "1.951%"},
{"Sharpe Ratio", "15.402"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "95.977%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0.261"},
{"Beta", "0.244"},
{"Annual Standard Deviation", "0.01"},
{"Annual Variance", "0"},
{"Information Ratio", "-22.456"},
{"Tracking Error", "0.032"},
{"Treynor Ratio", "-0.454"},
{"Total Fees", "$3.70"},
{"Estimated Strategy Capacity", "$41000.00"},
{"Lowest Capacity Asset", "ES 31C3JQTOYO9T0|ES XCZJLC9NOB29"},
{"Fitness Score", "0.273"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-123.159"},
{"Portfolio Turnover", "0.547"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "9347e3b610cfa21f7cbd968a0135c8af"}
{"Alpha", "1.886"},
{"Beta", "1.066"},
{"Annual Standard Deviation", "0.155"},
{"Annual Variance", "0.024"},
{"Information Ratio", "13.528"},
{"Tracking Error", "0.142"},
{"Treynor Ratio", "2.237"},
{"Total Fees", "$3.57"},
{"Estimated Strategy Capacity", "$760000.00"},
{"Lowest Capacity Asset", "ES XCZJLDQX2SRO|ES XCZJLC9NOB29"},
{"Portfolio Turnover", "32.31%"},
{"OrderListHash", "b508146aff4ac449e9c6f502928e2115"}
};
}
}

View File

@@ -114,6 +114,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 37597;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -126,41 +136,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0.300%"},
{"Expectancy", "-0.042"},
{"Net Profit", "-0.332%"},
{"Sharpe Ratio", "-3.149"},
{"Sharpe Ratio", "-4.614"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0.427%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
{"Profit-Loss Ratio", "0.92"},
{"Alpha", "-0.015"},
{"Alpha", "-0.022"},
{"Beta", "-0.012"},
{"Annual Standard Deviation", "0.005"},
{"Annual Variance", "0"},
{"Information Ratio", "-2.823"},
{"Tracking Error", "0.049"},
{"Treynor Ratio", "1.372"},
{"Treynor Ratio", "2.01"},
{"Total Fees", "$2.00"},
{"Estimated Strategy Capacity", "$67000000.00"},
{"Estimated Strategy Capacity", "$5700000.00"},
{"Lowest Capacity Asset", "AOL VRKS95ENLBYE|AOL R735QTJ8XC9X"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-43.418"},
{"Return Over Maximum Drawdown", "-14.274"},
{"Portfolio Turnover", "0.007"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "4f50b8360ea317ef974801649088bd06"}
{"Portfolio Turnover", "0.55%"},
{"OrderListHash", "402c66beb5c96b2f2ae357c49e890dc5"}
};
}
}

View File

@@ -166,6 +166,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 5798;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -178,41 +188,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0.200%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.232%"},
{"Sharpe Ratio", "-7.739"},
{"Sharpe Ratio", "-8.903"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "1.216%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.024"},
{"Alpha", "0.015"},
{"Beta", "-0.171"},
{"Annual Standard Deviation", "0.006"},
{"Annual Variance", "0"},
{"Information Ratio", "-11.082"},
{"Tracking Error", "0.043"},
{"Treynor Ratio", "0.291"},
{"Treynor Ratio", "0.335"},
{"Total Fees", "$2.00"},
{"Estimated Strategy Capacity", "$2800000.00"},
{"Lowest Capacity Asset", "AOL VRKS95ENLBYE|AOL R735QTJ8XC9X"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-19.883"},
{"Return Over Maximum Drawdown", "-67.224"},
{"Portfolio Turnover", "0.014"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "ae0b430e9c728966e3736fb352a689c6"}
{"Portfolio Turnover", "1.14%"},
{"OrderListHash", "99fd501dbd9e78656be9b32869fc32e0"}
};
}
}

View File

@@ -113,6 +113,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 4677;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -126,6 +136,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "-1"},
{"Net Profit", "-0.051%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
@@ -140,26 +151,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$2.00"},
{"Estimated Strategy Capacity", "$30000.00"},
{"Lowest Capacity Asset", "AAPL VXBK4Q9ZIFD2|AAPL R735QTJ8XC9X"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-89.181"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "7fbcd12db40304d50b3a34d7878eb3cf"}
{"Portfolio Turnover", "0.07%"},
{"OrderListHash", "b01a993665c5333c37de9dbef0717e14"}
};
}
}

View File

@@ -0,0 +1,130 @@
/*
* 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.Linq;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Algorithm asserting that using OnlyApplyFilterAtMarketOpen along with other dynamic filters will make the filters be applied only on market
/// open, regardless of the order of configuration of the filters
/// </summary>
public class AddOptionWithOnMarketOpenOnlyFilterRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
public override void Initialize()
{
SetStartDate(2014, 6, 5);
SetEndDate(2014, 6, 10);
// OnlyApplyFilterAtMarketOpen as first filter
AddOption("AAPL", Resolution.Minute).SetFilter(u =>
u.OnlyApplyFilterAtMarketOpen()
.Strikes(-5, 5)
.Expiration(0, 100)
.IncludeWeeklys());
// OnlyApplyFilterAtMarketOpen as last filter
AddOption("TWX", Resolution.Minute).SetFilter(u =>
u.Strikes(-5, 5)
.Expiration(0, 100)
.IncludeWeeklys()
.OnlyApplyFilterAtMarketOpen());
}
public override void OnSecuritiesChanged(SecurityChanges changes)
{
// This will be the first call, the underlying securities are added.
if (changes.AddedSecurities.All(s => s.Type != SecurityType.Option))
{
return;
}
var changeOptions = changes.AddedSecurities.Concat(changes.RemovedSecurities)
.Where(s => s.Type == SecurityType.Option);
// Susbtract one minute to get the actual market open. If market open is at 9:30am, this will be invoked at 9:31am
var expectedTime = Time.TimeOfDay - TimeSpan.FromMinutes(1);
var allOptionsWereChangedOnMarketOpen = changeOptions.All(s =>
{
var firstMarketSegment = s.Exchange.Hours.MarketHours[Time.DayOfWeek].Segments
.First(segment => segment.State == MarketHoursState.Market);
return firstMarketSegment.Start == expectedTime;
});
if (!allOptionsWereChangedOnMarketOpen)
{
throw new Exception("Expected options filter to be run only on market open");
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all time slices of algorithm
/// </summary>
public long DataPoints => 5952220;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "0"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino 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", "-10.144"},
{"Tracking Error", "0.033"},
{"Treynor Ratio", "0"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", ""},
{"Portfolio Turnover", "0%"},
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}
}

View File

@@ -40,8 +40,8 @@ namespace QuantConnect.Algorithm.CSharp
private int _expectedContractIndex;
private readonly List<Symbol> _expectedContracts = new List<Symbol>
{
SymbolRepresentation.ParseOptionTickerOSI("GOOG 151224P00750000"),
SymbolRepresentation.ParseOptionTickerOSI("GOOG 151224P00747500"),
SymbolRepresentation.ParseOptionTickerOSI("GOOG 151224P00750000"),
SymbolRepresentation.ParseOptionTickerOSI("GOOG 151224P00752500")
};
@@ -79,7 +79,7 @@ namespace QuantConnect.Algorithm.CSharp
// things like manually added, auto added, internal, and any other boolean state we need to track against a single security)
throw new Exception("The underlying equity data should NEVER be removed in this algorithm because it was manually added");
}
if (_expectedSecurities.AreDifferent(Securities.Keys.ToHashSet()))
if (_expectedSecurities.AreDifferent(Securities.Total.Select(x => x.Symbol).ToHashSet()))
{
var expected = string.Join(Environment.NewLine, _expectedSecurities.OrderBy(s => s.ToString()));
var actual = string.Join(Environment.NewLine, Securities.Keys.OrderBy(s => s.ToString()));
@@ -109,9 +109,14 @@ namespace QuantConnect.Algorithm.CSharp
var googOptionChain = AddOption(UnderlyingTicker);
googOptionChain.SetFilter(u =>
{
// we added the universe at 10, the universe selection data should not be from before
if (u.Underlying.EndTime.Hour < 10)
{
throw new Exception($"Unexpected underlying data point {u.Underlying.EndTime} {u.Underlying}");
}
// find first put above market price
return u.IncludeWeeklys()
.Strikes(+1, +1)
.Strikes(+1, +3)
.Expiration(TimeSpan.Zero, TimeSpan.FromDays(1))
.Contracts(c => c.Where(s => s.ID.OptionRight == OptionRight.Put));
});
@@ -136,16 +141,6 @@ namespace QuantConnect.Algorithm.CSharp
public override void OnSecuritiesChanged(SecurityChanges changes)
{
if (changes.AddedSecurities.Count > 1)
{
// added event fired for underlying since it was added to the option chain universe
if (changes.AddedSecurities.All(s => s.Symbol != Underlying))
{
var securities = string.Join(Environment.NewLine, changes.AddedSecurities.Select(s => s.Symbol));
throw new Exception($"This algorithm intends to add a single security at a time but added: {changes.AddedSecurities.Count}{Environment.NewLine}{securities}");
}
}
if (changes.AddedSecurities.Any())
{
foreach (var added in changes.AddedSecurities)
@@ -205,6 +200,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 200807;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -218,6 +223,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -230,28 +236,10 @@ namespace QuantConnect.Algorithm.CSharp
{"Tracking Error", "0"},
{"Treynor Ratio", "0"},
{"Total Fees", "$6.00"},
{"Estimated Strategy Capacity", "$2000.00"},
{"Lowest Capacity Asset", "GOOCV 305RBQ2BZBZT2|GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "0"},
{"Return Over Maximum Drawdown", "0"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "1e7b3e90918777b9dbf46353a96f3329"}
{"Estimated Strategy Capacity", "$3000.00"},
{"Lowest Capacity Asset", "GOOCV 305RBR0BSWIX2|GOOCV VP83T1ZUHROL"},
{"Portfolio Turnover", "1.49%"},
{"OrderListHash", "3adcc7ebf4153baabb073a8152e8cb2b"}
};
}
}

View File

@@ -0,0 +1,125 @@
/*
* 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 QuantConnect.Data;
using QuantConnect.Interfaces;
using System.Collections.Generic;
using QuantConnect.Orders;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Regression algorithm making sure the securities cache is reset correctly once it's removed from the algorithm
/// </summary>
public class AddRemoveSecurityCacheRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2013, 10, 07); //Set Start Date
SetEndDate(2013, 10, 11); //Set End Date
SetCash(100000); //Set Strategy Cash
AddEquity("SPY", Resolution.Minute, extendedMarketHours: true);
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice data)
{
if (!Portfolio.Invested)
{
SetHoldings("SPY", 1);
}
if (Time.Day == 11)
{
return;
}
if (!ActiveSecurities.ContainsKey("AIG"))
{
var aig = AddEquity("AIG", Resolution.Minute);
var ticket = MarketOrder("AIG", 1);
if (ticket.Status != OrderStatus.Invalid)
{
throw new Exception("Expected order to always be invalid because there is no data yet!");
}
}
else
{
RemoveSecurity("AIG");
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 11202;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "19"},
{"Average Win", "0%"},
{"Average Loss", "0.00%"},
{"Compounding Annual Return", "271.720%"},
{"Drawdown", "2.500%"},
{"Expectancy", "-1"},
{"Net Profit", "1.754%"},
{"Sharpe Ratio", "11.954"},
{"Sortino Ratio", "29.606"},
{"Probabilistic Sharpe Ratio", "74.160%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.616"},
{"Beta", "0.81"},
{"Annual Standard Deviation", "0.185"},
{"Annual Variance", "0.034"},
{"Information Ratio", "3.961"},
{"Tracking Error", "0.061"},
{"Treynor Ratio", "2.737"},
{"Total Fees", "$21.45"},
{"Estimated Strategy Capacity", "$830000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Portfolio Turnover", "20.49%"},
{"OrderListHash", "48d8e1195003665a2febf547c075d07f"}
};
}
}

View File

@@ -106,6 +106,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 7063;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -118,41 +128,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "1.400%"},
{"Expectancy", "0"},
{"Net Profit", "1.776%"},
{"Sharpe Ratio", "13.013"},
{"Sharpe Ratio", "12.966"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "80.409%"},
{"Loss Rate", "0%"},
{"Win Rate", "100%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.68"},
{"Alpha", "0.678"},
{"Beta", "0.707"},
{"Annual Standard Deviation", "0.16"},
{"Annual Variance", "0.026"},
{"Information Ratio", "1.378"},
{"Tracking Error", "0.072"},
{"Treynor Ratio", "2.946"},
{"Treynor Ratio", "2.935"},
{"Total Fees", "$28.30"},
{"Estimated Strategy Capacity", "$4700000.00"},
{"Lowest Capacity Asset", "AIG R735QTJ8XC9X"},
{"Fitness Score", "0.374"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "372.086"},
{"Portfolio Turnover", "0.374"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "ac3f4dfcdeb98b488b715412ad2d6c4f"}
{"Portfolio Turnover", "29.88%"},
{"OrderListHash", "b26f2f30082b754b065c41bb0ace44cc"}
};
}
}

View File

@@ -59,6 +59,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 3943;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -71,41 +81,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "2.200%"},
{"Expectancy", "0"},
{"Net Profit", "1.775%"},
{"Sharpe Ratio", "9.373"},
{"Sharpe Ratio", "9.34"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "68.302%"},
{"Loss Rate", "0%"},
{"Win Rate", "100%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.105"},
{"Alpha", "0.106"},
{"Beta", "1.021"},
{"Annual Standard Deviation", "0.227"},
{"Annual Variance", "0.052"},
{"Information Ratio", "25.083"},
{"Tracking Error", "0.006"},
{"Treynor Ratio", "2.086"},
{"Treynor Ratio", "2.079"},
{"Total Fees", "$10.33"},
{"Estimated Strategy Capacity", "$38000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.747"},
{"Kelly Criterion Estimate", "38.796"},
{"Kelly Criterion Probability Value", "0.228"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "107.013"},
{"Portfolio Turnover", "0.747"},
{"Total Insights Generated", "100"},
{"Total Insights Closed", "99"},
{"Total Insights Analysis Completed", "99"},
{"Long Insight Count", "100"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$135639.1761"},
{"Total Accumulated Estimated Alpha Value", "$21852.9784"},
{"Mean Population Estimated Insight Value", "$220.7372"},
{"Mean Population Direction", "53.5354%"},
{"Mean Population Magnitude", "53.5354%"},
{"Rolling Averaged Population Direction", "58.2788%"},
{"Rolling Averaged Population Magnitude", "58.2788%"},
{"OrderListHash", "af3a9c98c190d1b6b36fad184e796b0b"}
{"Portfolio Turnover", "59.74%"},
{"OrderListHash", "b5a7935f37d94eb20f6bcd88578dbaee"}
};
}
}

View File

@@ -0,0 +1,143 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Interfaces;
using System.Collections.Generic;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Regression algorithm reproducing issue where underlying option contract would be removed with the first call
/// too RemoveOptionContract
/// </summary>
public class AddTwoAndRemoveOneOptionContractRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Symbol _contract1;
private Symbol _contract2;
private bool _hasRemoved;
public override void Initialize()
{
SetStartDate(2014, 06, 06);
SetEndDate(2014, 06, 06);
UniverseSettings.DataNormalizationMode = DataNormalizationMode.Raw;
UniverseSettings.MinimumTimeInUniverse = TimeSpan.Zero;
var aapl = QuantConnect.Symbol.Create("AAPL", SecurityType.Equity, Market.USA);
var contracts = OptionChainProvider.GetOptionContractList(aapl, Time)
.OrderBy(symbol => symbol.ID.Symbol)
.Where(optionContract => optionContract.ID.OptionRight == OptionRight.Call
&& optionContract.ID.OptionStyle == OptionStyle.American)
.Take(2)
.ToList();
_contract1 = contracts[0];
_contract2 = contracts[1];
AddOptionContract(_contract1);
AddOptionContract(_contract2);
}
public override void OnData(Slice slice)
{
if (slice.HasData)
{
if (!_hasRemoved)
{
RemoveOptionContract(_contract1);
_hasRemoved = true;
}
else
{
var subscriptions =
SubscriptionManager.SubscriptionDataConfigService.GetSubscriptionDataConfigs("AAPL");
if (subscriptions.Count == 0)
{
throw new Exception("No configuration for underlying was found!");
}
if (!Portfolio.Invested)
{
Buy(_contract2, 1);
}
}
}
}
public override void OnEndOfAlgorithm()
{
if (!_hasRemoved)
{
throw new Exception("Expect a single call to OnData where we removed the option and underlying");
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 1578;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "2"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino 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", "$2.00"},
{"Estimated Strategy Capacity", "$230000.00"},
{"Lowest Capacity Asset", "AAPL VXBK4QQIRLZA|AAPL R735QTJ8XC9X"},
{"Portfolio Turnover", "0.25%"},
{"OrderListHash", "afec48c499382b1d01af22daafe9f648"}
};
}
}

View File

@@ -78,53 +78,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 53;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "11"},
{"Total Trades", "10"},
{"Average Win", "0%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "-14.217%"},
{"Compounding Annual Return", "-14.233%"},
{"Drawdown", "3.300%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.168%"},
{"Sharpe Ratio", "62.513"},
{"Sharpe Ratio", "62.464"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "1.118"},
{"Alpha", "1.117"},
{"Beta", "1.19"},
{"Annual Standard Deviation", "0.213"},
{"Annual Variance", "0.046"},
{"Information Ratio", "70.862"},
{"Information Ratio", "70.778"},
{"Tracking Error", "0.043"},
{"Treynor Ratio", "11.209"},
{"Total Fees", "$23.21"},
{"Treynor Ratio", "11.2"},
{"Total Fees", "$22.21"},
{"Estimated Strategy Capacity", "$340000000.00"},
{"Lowest Capacity Asset", "FB V6OIPNZEM8V9"},
{"Fitness Score", "0.147"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "1"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-4.352"},
{"Portfolio Turnover", "0.269"},
{"Total Insights Generated", "15"},
{"Total Insights Closed", "12"},
{"Total Insights Analysis Completed", "12"},
{"Long Insight Count", "15"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "a7a0983c8413ff241e7d223438f3d508"}
{"Portfolio Turnover", "26.92%"},
{"OrderListHash", "be09b39c5d01b0694f474ea7f7c5ae09"}
};
}
}

View File

@@ -89,53 +89,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 234018;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "27"},
{"Average Win", "0.01%"},
{"Total Trades", "21"},
{"Average Win", "0.00%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "-75.320%"},
{"Compounding Annual Return", "-75.275%"},
{"Drawdown", "5.800%"},
{"Expectancy", "-0.731"},
{"Net Profit", "-5.588%"},
{"Sharpe Ratio", "-3.252"},
{"Probabilistic Sharpe Ratio", "5.526%"},
{"Loss Rate", "86%"},
{"Win Rate", "14%"},
{"Profit-Loss Ratio", "0.89"},
{"Alpha", "-0.499"},
{"Beta", "1.483"},
{"Expectancy", "-0.609"},
{"Net Profit", "-5.581%"},
{"Sharpe Ratio", "-3.288"},
{"Sortino Ratio", "-3.828"},
{"Probabilistic Sharpe Ratio", "5.546%"},
{"Loss Rate", "73%"},
{"Win Rate", "27%"},
{"Profit-Loss Ratio", "0.43"},
{"Alpha", "-0.495"},
{"Beta", "1.484"},
{"Annual Standard Deviation", "0.196"},
{"Annual Variance", "0.039"},
{"Information Ratio", "-3.844"},
{"Tracking Error", "0.142"},
{"Treynor Ratio", "-0.43"},
{"Total Fees", "$37.25"},
{"Estimated Strategy Capacity", "$520000000.00"},
{"Information Ratio", "-3.843"},
{"Tracking Error", "0.141"},
{"Treynor Ratio", "-0.435"},
{"Total Fees", "$31.25"},
{"Estimated Strategy Capacity", "$550000000.00"},
{"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"},
{"Fitness Score", "0.004"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "1"},
{"Sortino Ratio", "-4.469"},
{"Return Over Maximum Drawdown", "-13.057"},
{"Portfolio Turnover", "0.084"},
{"Total Insights Generated", "33"},
{"Total Insights Closed", "30"},
{"Total Insights Analysis Completed", "30"},
{"Long Insight Count", "33"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "f837879b96f5e565b60fd040299d2123"}
{"Portfolio Turnover", "7.33%"},
{"OrderListHash", "b2ec2148ac94b67038a5bb4a2655f0a6"}
};
}
}

View File

@@ -153,6 +153,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 795;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -166,6 +176,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -180,26 +191,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$21.60"},
{"Estimated Strategy Capacity", "$42000000.00"},
{"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "0"},
{"Return Over Maximum Drawdown", "0"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "18e41dded4f8cee548ee02b03ffb0814"}
{"Portfolio Turnover", "99.56%"},
{"OrderListHash", "92cacc8a537ff29960b6d092c3f92cf1"}
};
}
}

View File

@@ -0,0 +1,112 @@
/*
* 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 QuantConnect.Interfaces;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Algorithm asserting the correct values for the deployment target and algorithm mode.
/// </summary>
public class AlgorithmModeAndDeploymentTargetAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
public override void Initialize()
{
SetStartDate(2013, 10, 07);
SetEndDate(2013, 10, 07);
SetCash(100000);
Debug($"Algorithm Mode: {AlgorithmMode}. Is Live Mode: {LiveMode}. Deployment Target: {DeploymentTarget}.");
if (AlgorithmMode != AlgorithmMode.Backtesting)
{
throw new Exception($"Algorithm mode is not backtesting. Actual: {AlgorithmMode}");
}
if (LiveMode)
{
throw new Exception("Algorithm should not be live");
}
if (DeploymentTarget != DeploymentTarget.LocalPlatform)
{
throw new Exception($"Algorithm deployment target is not local. Actual{DeploymentTarget}");
}
// For a live deployment these checks should pass:
//if (AlgorithmMode != AlgorithmMode.Live) throw new Exception("Algorithm mode is not live");
//if (!LiveMode) throw new Exception("Algorithm should be live");
// For a cloud deployment these checks should pass:
//if (DeploymentTarget != DeploymentTarget.CloudPlatform) throw new Exception("Algorithm deployment target is not cloud");
Quit();
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 0;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "0"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino 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"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", ""},
{"Portfolio Turnover", "0%"},
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}
}

View File

@@ -17,10 +17,12 @@ using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Brokerages;
using QuantConnect.Securities;
using QuantConnect.Data;
using QuantConnect.Data.Shortable;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Interfaces;
using System.IO;
namespace QuantConnect.Algorithm.CSharp
{
@@ -82,11 +84,15 @@ namespace QuantConnect.Algorithm.CSharp
{ _20140329, new Symbol[0] }
};
private Security _security;
public override void Initialize()
{
SetStartDate(2014, 3, 25);
SetEndDate(2014, 3, 29);
SetCash(10000000);
_security = AddEquity(_spy);
_security.SetShortableProvider(new RegressionTestShortableProvider());
AddUniverse(CoarseSelection);
UniverseSettings.Resolution = Resolution.Daily;
@@ -120,7 +126,7 @@ namespace QuantConnect.Algorithm.CSharp
private IEnumerable<Symbol> CoarseSelection(IEnumerable<CoarseFundamental> coarse)
{
var shortableSymbols = AllShortableSymbols();
var shortableSymbols = (_security.ShortableProvider as dynamic).AllShortableSymbols(Time);
var selectedSymbols = coarse
.Select(x => x.Symbol)
.Where(s => shortableSymbols.ContainsKey(s) && shortableSymbols[s] >= 500)
@@ -165,15 +171,60 @@ namespace QuantConnect.Algorithm.CSharp
{
public AllShortableSymbolsRegressionAlgorithmBrokerageModel() : base()
{
ShortableProvider = new RegressionTestShortableProvider();
}
public override IShortableProvider GetShortableProvider(Security security)
{
return new RegressionTestShortableProvider();
}
}
private class RegressionTestShortableProvider : LocalDiskShortableProvider
{
public RegressionTestShortableProvider() : base(SecurityType.Equity, "testbrokerage", Market.USA)
public RegressionTestShortableProvider() : base("testbrokerage")
{
}
/// <summary>
/// Gets a list of all shortable Symbols, including the quantity shortable as a Dictionary.
/// </summary>
/// <param name="localTime">The algorithm's local time</param>
/// <returns>Symbol/quantity shortable as a Dictionary. Returns null if no entry data exists for this date or brokerage</returns>
public Dictionary<Symbol, long> AllShortableSymbols(DateTime localTime)
{
var shortableDataDirectory = Path.Combine(Globals.DataFolder, SecurityType.Equity.SecurityTypeToLower(), Market.USA, "shortable", Brokerage);
var allSymbols = new Dictionary<Symbol, long>();
// Check backwards up to one week to see if we can source a previous file.
// If not, then we return a list of all Symbols with quantity set to zero.
var i = 0;
while (i <= 7)
{
var shortableListFile = Path.Combine(shortableDataDirectory, "dates", $"{localTime.AddDays(-i):yyyyMMdd}.csv");
foreach (var line in DataProvider.ReadLines(shortableListFile))
{
var csv = line.Split(',');
var ticker = csv[0];
var symbol = new Symbol(
SecurityIdentifier.GenerateEquity(ticker, QuantConnect.Market.USA,
mappingResolveDate: localTime), ticker);
var quantity = Parse.Long(csv[1]);
allSymbols[symbol] = quantity;
}
if (allSymbols.Count > 0)
{
return allSymbols;
}
i++;
}
// Return our empty dictionary if we did not find a file to extract
return allSymbols;
}
}
/// <summary>
@@ -184,7 +235,17 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
public Language[] Languages { get; } = { Language.CSharp};
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 37754;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
@@ -198,41 +259,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0.192%"},
{"Sharpe Ratio", "231.673"},
{"Sharpe Ratio", "221.176"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.163"},
{"Alpha", "0.156"},
{"Beta", "-0.007"},
{"Annual Standard Deviation", "0.001"},
{"Annual Variance", "0"},
{"Information Ratio", "4.804"},
{"Tracking Error", "0.098"},
{"Treynor Ratio", "-22.526"},
{"Treynor Ratio", "-21.505"},
{"Total Fees", "$307.50"},
{"Estimated Strategy Capacity", "$2600000.00"},
{"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0.106"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "79228162514264337593543950335"},
{"Portfolio Turnover", "0.106"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "0069f402ffcd2d91b9018b81badfab81"}
{"Portfolio Turnover", "10.61%"},
{"OrderListHash", "9c129e856afe96579b52cbfe95237100"}
};
}
}

View File

@@ -65,6 +65,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 890;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 12;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -78,6 +88,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "-1"},
{"Net Profit", "-0.116%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
@@ -92,26 +103,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$83000.00"},
{"Lowest Capacity Asset", "BTCUSD XJ"},
{"Fitness Score", "0.017"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-138.588"},
{"Portfolio Turnover", "0.034"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "2b94bc50a74caebe06c075cdab1bc6da"}
{"Portfolio Turnover", "2.31%"},
{"OrderListHash", "6912c537884a8c66542f24a2e4e2e6ec"}
};
}
}

View File

@@ -41,6 +41,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 6202;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public override int AlgorithmHistoryDataPoints => 61;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -49,11 +59,12 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Trades", "2"},
{"Average Win", "0.01%"},
{"Average Loss", "0.00%"},
{"Compounding Annual Return", "-78.502%"},
{"Compounding Annual Return", "-78.519%"},
{"Drawdown", "3.100%"},
{"Expectancy", "7.797"},
{"Net Profit", "-1.134%"},
{"Sharpe Ratio", "-2.456"},
{"Sharpe Ratio", "-2.522"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
@@ -64,30 +75,12 @@ namespace QuantConnect.Algorithm.CSharp
{"Annual Variance", "0.117"},
{"Information Ratio", "-0.859"},
{"Tracking Error", "0.004"},
{"Treynor Ratio", "-0.832"},
{"Total Fees", "$2.89"},
{"Estimated Strategy Capacity", "$8900000000.00"},
{"Treynor Ratio", "-0.854"},
{"Total Fees", "2.89"},
{"Estimated Strategy Capacity", "8900000000.00"},
{"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"},
{"Fitness Score", "0.506"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "79228162514264337593543950335"},
{"Portfolio Turnover", "0.506"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "€0"},
{"Total Accumulated Estimated Alpha Value", "€0"},
{"Mean Population Estimated Insight Value", "€0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "a9dd0a0ab6070455479d1b9caaa4e69c"}
{"Portfolio Turnover", "33.78%"},
{"OrderListHash", "2f6f8e5cb06c7b10180258c9f819e76e"}
};
}
}

View File

@@ -78,6 +78,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 893;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 2;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -91,6 +101,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "-1"},
{"Net Profit", "-0.116%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
@@ -105,26 +116,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$83000.00"},
{"Lowest Capacity Asset", "BTCUSD XJ"},
{"Fitness Score", "0.011"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-113.513"},
{"Portfolio Turnover", "0.023"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "2b94bc50a74caebe06c075cdab1bc6da"}
{"Portfolio Turnover", "2.31%"},
{"OrderListHash", "6912c537884a8c66542f24a2e4e2e6ec"}
};
}
}

View File

@@ -61,7 +61,7 @@ namespace QuantConnect.Algorithm.CSharp
{
var security = Securities["SPY"];
var priceInAccountCurrency = Portfolio.CashBook.ConvertToAccountCurrency(security.AskPrice, security.QuoteCurrency.Symbol);
_expectedSpyQuantity = (Portfolio.TotalPortfolioValue - Settings.FreePortfolioValue) / priceInAccountCurrency;
_expectedSpyQuantity = Portfolio.TotalPortfolioValueLessFreeBuffer / priceInAccountCurrency;
_expectedSpyQuantity = _expectedSpyQuantity.DiscretelyRoundBy(1, MidpointRounding.ToZero);
}
@@ -92,6 +92,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 2313;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public override int AlgorithmHistoryDataPoints => 1;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -104,41 +114,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "3.100%"},
{"Expectancy", "8.518"},
{"Net Profit", "-1.515%"},
{"Sharpe Ratio", "-2.45"},
{"Sharpe Ratio", "-2.515"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
{"Profit-Loss Ratio", "18.04"},
{"Alpha", "0.008"},
{"Alpha", "0.009"},
{"Beta", "1.015"},
{"Annual Standard Deviation", "0.344"},
{"Annual Variance", "0.118"},
{"Information Ratio", "-0.856"},
{"Tracking Error", "0.005"},
{"Treynor Ratio", "-0.83"},
{"Treynor Ratio", "-0.852"},
{"Total Fees", "$3.09"},
{"Estimated Strategy Capacity", "$8900000000.00"},
{"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"},
{"Fitness Score", "0.511"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "6113.173"},
{"Portfolio Turnover", "0.511"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "788eb2c74715a78476ba0db3b2654eb6"}
{"Portfolio Turnover", "34.12%"},
{"OrderListHash", "6873d205230dda8f9ebe3f6b18a4a1a0"}
};
}
}

View File

@@ -195,11 +195,11 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
private const int _numberOfSymbolsFine = 20;
private const int _numberOfSymbolsInPortfolio = 10;
private int _lastMonth = -1;
private Dictionary<Symbol, decimal> _dollarVolumeBySymbol;
private Dictionary<Symbol, double> _dollarVolumeBySymbol;
public GreenBlattMagicFormulaUniverseSelectionModel() : base(true)
{
_dollarVolumeBySymbol = new Dictionary<Symbol, decimal>();
_dollarVolumeBySymbol = new ();
}
/// <summary>
@@ -245,7 +245,7 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
where x.CompanyReference.CountryId == "USA"
where x.CompanyReference.PrimaryExchangeID == "NYS" || x.CompanyReference.PrimaryExchangeID == "NAS"
where (algorithm.Time - x.SecurityReference.IPODate).TotalDays > 180
where x.EarningReports.BasicAverageShares.ThreeMonths * x.EarningReports.BasicEPS.TwelveMonths * x.ValuationRatios.PERatio > 5e8m
where x.EarningReports.BasicAverageShares.ThreeMonths * x.EarningReports.BasicEPS.TwelveMonths * x.ValuationRatios.PERatio > 5e8
select x;
double count = filteredFine.Count();
@@ -287,4 +287,4 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
}
}
}
}
}

View File

@@ -1,162 +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.Linq;
using QuantConnect.Data;
using QuantConnect.Indicators;
using QuantConnect.Orders.Fees;
using QuantConnect.Data.Custom;
using System.Collections.Generic;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Algorithm.Framework.Selection;
namespace QuantConnect.Algorithm.CSharp.Alphas
{
///<summary>
/// This Alpha Model uses Wells Fargo 30-year Fixed Rate Mortgage data from Quandl to
/// generate Insights about the movement of Real Estate ETFs. Mortgage rates can provide information
/// regarding the general price trend of real estate, and ETFs provide good continuous-time instruments
/// to measure the impact against. Volatility in mortgage rates tends to put downward pressure on real
/// estate prices, whereas stable mortgage rates, regardless of true rate, lead to stable or higher real
/// estate prices. This Alpha model seeks to take advantage of this correlation by emitting insights
/// based on volatility and rate deviation from its historic mean.
///
/// This alpha is part of the Benchmark Alpha Series created by QuantConnect which are open
/// sourced so the community and client funds can see an example of an alpha.
///</summary>
public class MortgageRateVolatilityAlgorithm : QCAlgorithm
{
public override void Initialize()
{
SetStartDate(2017, 1, 1); //Set Start Date
SetCash(100000); //Set Strategy Cash
UniverseSettings.Resolution = Resolution.Daily;
SetSecurityInitializer(security => security.FeeModel = new ConstantFeeModel(0));
// Basket of 6 liquid real estate ETFs
Func<string, Symbol> toSymbol = x => QuantConnect.Symbol.Create(x, SecurityType.Equity, Market.USA);
var realEstateETFs = new[] { "VNQ", "REET", "TAO", "FREL", "SRET", "HIPS" }.Select(toSymbol).ToArray();
SetUniverseSelection(new ManualUniverseSelectionModel(realEstateETFs));
SetAlpha(new MortgageRateVolatilityAlphaModel(this));
SetPortfolioConstruction(new EqualWeightingPortfolioConstructionModel());
SetExecution(new ImmediateExecutionModel());
SetRiskManagement(new NullRiskManagementModel());
}
private class MortgageRateVolatilityAlphaModel : AlphaModel
{
private readonly int _indicatorPeriod;
private readonly Resolution _resolution;
private readonly TimeSpan _insightDuration;
private readonly int _deviations;
private readonly double _insightMagnitude;
private readonly Symbol _mortgageRate;
private readonly SimpleMovingAverage _mortgageRateSma;
private readonly StandardDeviation _mortgageRateStd;
public MortgageRateVolatilityAlphaModel(
QCAlgorithm algorithm,
int indicatorPeriod = 15,
double insightMagnitude = 0.0005,
int deviations = 2,
Resolution resolution = Resolution.Daily
)
{
// Add Quandl data for a Well's Fargo 30-year Fixed Rate mortgage
_mortgageRate = algorithm.AddData<QuandlMortgagePriceColumns>("WFC/PR_GOV_30YFIXEDVA_APR").Symbol;
_indicatorPeriod = indicatorPeriod;
_resolution = resolution;
_insightDuration = resolution.ToTimeSpan().Multiply(indicatorPeriod);
_insightMagnitude = insightMagnitude;
_deviations = deviations;
// Add indicators for the mortgage rate -- Standard Deviation and Simple Moving Average
_mortgageRateStd = algorithm.STD(_mortgageRate, _indicatorPeriod, resolution);
_mortgageRateSma = algorithm.SMA(_mortgageRate, _indicatorPeriod, resolution);
// Use a history call to warm-up the indicators
WarmUpIndicators(algorithm);
}
public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice data)
{
var insights = new List<Insight>();
// Return empty list if data slice doesn't contain monrtgage rate data
if (!data.Keys.Contains(_mortgageRate))
{
return insights;
}
// Extract current mortgage rate, the current STD indicator value, and current SMA value
var rate = data[_mortgageRate].Value;
var deviation = _deviations * _mortgageRateStd;
var sma = _mortgageRateSma;
// Loop through all Active Securities to emit insights
foreach (var security in algorithm.ActiveSecurities.Keys)
{
// Mortgage rate Symbol will be in the collection, so skip it
if (security == _mortgageRate)
{
return insights;
}
// If volatility in mortgage rates is high, then we emit an Insight to sell
if ((rate < sma - deviation) || (rate > sma + deviation))
{
insights.Add(Insight.Price(security, _insightDuration, InsightDirection.Down, _insightMagnitude));
}
// If volatility in mortgage rates is low, then we emit an Insight to buy
if ((rate < sma - (decimal)deviation/2) || (rate > sma + (decimal)deviation/2))
{
insights.Add(Insight.Price(security, _insightDuration, InsightDirection.Up, _insightMagnitude));
}
}
return insights;
}
private void WarmUpIndicators(QCAlgorithm algorithm)
{
// Make a history call and update the indicators
algorithm.History(new[] { _mortgageRate }, _indicatorPeriod, _resolution).PushThrough(bar =>
{
_mortgageRateSma.Update(bar.EndTime, bar.Value);
_mortgageRateStd.Update(bar.EndTime, bar.Value);
});
}
}
public class QuandlMortgagePriceColumns : Quandl
{
public QuandlMortgagePriceColumns()
// Rename the Quandl object column to the data we want, which is the 'Value' column
// of the CSV that our API call returns
: base(valueColumnName: "Value")
{
}
}
}
}

View File

@@ -82,6 +82,16 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 0;
/// </summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -195,4 +205,4 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
UltraShort = ultraShort;
}
}
}
}

View File

@@ -31,7 +31,7 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
/// A number of companies publicly trade two different classes of shares
/// in US equity markets. If both assets trade with reasonable volume, then
/// the underlying driving forces of each should be similar or the same. Given
/// this, we can create a relatively dollar-netural long/short portfolio using
/// this, we can create a relatively dollar-neutral long/short portfolio using
/// the dual share classes. Theoretically, any deviation of this portfolio from
/// its mean-value should be corrected, and so the motivating idea is based on
/// mean-reversion. Using a Simple Moving Average indicator, we can

View File

@@ -109,7 +109,7 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
int barsToConsolidate = 1
)
{
// coefficient that used to determinte upper and lower borders of a breakout channel
// coefficient that used to determine upper and lower borders of a breakout channel
_k1 = k1;
_k2 = k2;
@@ -202,7 +202,7 @@ namespace QuantConnect.Algorithm.CSharp.Alphas
SymbolData symbolData;
if (_symbolDataBySymbol.TryGetValue(removed.Symbol, out symbolData))
{
// unsibscribe consolidator from data updates
// unsubscribe consolidator from data updates
algorithm.SubscriptionManager.RemoveConsolidator(removed.Symbol, symbolData.GetConsolidator());
// remove item from dictionary collection

View File

@@ -0,0 +1,33 @@
/*
* 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.
*/
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Example algorithm using the asynchronous universe selection functionality
/// </summary>
public class AsynchronousUniverseRegressionAlgorithm : FundamentalRegressionAlgorithm
{
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
base.Initialize();
UniverseSettings.Asynchronous = true;
}
}
}

View File

@@ -73,6 +73,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 1893;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 100;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -85,41 +95,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0.100%"},
{"Expectancy", "3.321"},
{"Net Profit", "0.089%"},
{"Sharpe Ratio", "0.798"},
{"Sharpe Ratio", "-8.214"},
{"Sortino Ratio", "-9.025"},
{"Probabilistic Sharpe Ratio", "40.893%"},
{"Loss Rate", "24%"},
{"Win Rate", "76%"},
{"Profit-Loss Ratio", "4.67"},
{"Alpha", "-0.001"},
{"Alpha", "-0.008"},
{"Beta", "0.008"},
{"Annual Standard Deviation", "0.001"},
{"Annual Variance", "0"},
{"Information Ratio", "-1.961"},
{"Tracking Error", "0.092"},
{"Treynor Ratio", "0.08"},
{"Treynor Ratio", "-0.826"},
{"Total Fees", "$52.00"},
{"Estimated Strategy Capacity", "$32000000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "1.266"},
{"Return Over Maximum Drawdown", "1.622"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "cf43585a8d1781f04b53a4f1ee3380cb"}
{"Portfolio Turnover", "0.02%"},
{"OrderListHash", "e6711c76cb05bbb575ca067664348d88"}
};
}
}

View File

@@ -34,8 +34,8 @@ namespace QuantConnect.Algorithm.CSharp
{
UniverseSettings.DataNormalizationMode = DataNormalizationMode.Raw;
EnableAutomaticIndicatorWarmUp = true;
SetStartDate(2013, 10, 07);
SetEndDate(2013, 10, 09);
SetStartDate(2013, 10, 08);
SetEndDate(2013, 10, 10);
var SP500 = QuantConnect.Symbol.Create(Futures.Indices.SP500EMini, SecurityType.Future, Market.CME);
_symbol = FutureChainProvider.GetFutureContractList(SP500, StartDate).First();
@@ -67,7 +67,7 @@ namespace QuantConnect.Algorithm.CSharp
// Test case: custom IndicatorBase<QuoteBar> indicator using Future subscribed symbol
var indicator = new CustomIndicator();
var consolidator = CreateConsolidator(TimeSpan.FromMinutes(1), typeof(QuoteBar));
var consolidator = CreateConsolidator(TimeSpan.FromMinutes(2), typeof(QuoteBar));
RegisterIndicator(_symbol, indicator, consolidator);
AssertIndicatorState(indicator, isReady: false);
@@ -143,6 +143,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 6426;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 84;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -151,45 +161,28 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Trades", "1"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "-100.000%"},
{"Drawdown", "19.800%"},
{"Compounding Annual Return", "733913.744%"},
{"Drawdown", "15.900%"},
{"Expectancy", "0"},
{"Net Profit", "-10.353%"},
{"Sharpe Ratio", "-1.379"},
{"Net Profit", "6.828%"},
{"Sharpe Ratio", "203744786353.299"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "3.004"},
{"Beta", "5.322"},
{"Annual Standard Deviation", "0.725"},
{"Annual Variance", "0.525"},
{"Information Ratio", "-0.42"},
{"Tracking Error", "0.589"},
{"Treynor Ratio", "-0.188"},
{"Total Fees", "$20.35"},
{"Estimated Strategy Capacity", "$13000000.00"},
{"Alpha", "456382350698.622"},
{"Beta", "9.229"},
{"Annual Standard Deviation", "2.24"},
{"Annual Variance", "5.017"},
{"Information Ratio", "228504036840.953"},
{"Tracking Error", "1.997"},
{"Treynor Ratio", "49450701625.717"},
{"Total Fees", "$23.65"},
{"Estimated Strategy Capacity", "$200000000.00"},
{"Lowest Capacity Asset", "ES VMKLFZIH2MTD"},
{"Fitness Score", "0.125"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-2.162"},
{"Return Over Maximum Drawdown", "-8.144"},
{"Portfolio Turnover", "3.184"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "7ff48adafe9676f341e64ac9388d3c2c"}
{"Portfolio Turnover", "351.80%"},
{"OrderListHash", "23cf084b30ec3d70b1b9f54c9b3b975f"}
};
}
}

View File

@@ -105,6 +105,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 3943;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 40;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -117,7 +127,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "2.200%"},
{"Expectancy", "0"},
{"Net Profit", "1.692%"},
{"Sharpe Ratio", "8.888"},
{"Sharpe Ratio", "8.854"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "67.609%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -128,30 +139,12 @@ namespace QuantConnect.Algorithm.CSharp
{"Annual Variance", "0.049"},
{"Information Ratio", "-14.565"},
{"Tracking Error", "0.001"},
{"Treynor Ratio", "1.978"},
{"Treynor Ratio", "1.97"},
{"Total Fees", "$3.44"},
{"Estimated Strategy Capacity", "$56000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.248"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "93.728"},
{"Portfolio Turnover", "0.248"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "9e4bfd2eb0b81ee5bc1b197a87ccedbe"}
{"Portfolio Turnover", "19.93%"},
{"OrderListHash", "0c0f9328786b0c9e8f88d271673d16c3"}
};
}
}

View File

@@ -293,6 +293,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 1267414;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -305,41 +315,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0.400%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.329%"},
{"Sharpe Ratio", "-7.887"},
{"Sharpe Ratio", "-14.095"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "1.216%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0.001"},
{"Alpha", "-0.01"},
{"Beta", "0.097"},
{"Annual Standard Deviation", "0.002"},
{"Annual Variance", "0"},
{"Information Ratio", "7.39"},
{"Tracking Error", "0.015"},
{"Treynor Ratio", "-0.131"},
{"Treynor Ratio", "-0.234"},
{"Total Fees", "$2.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0.212"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-73.334"},
{"Portfolio Turnover", "0.425"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "f67306bc706a2cf66288f1cadf6148ed"}
{"Portfolio Turnover", "17.02%"},
{"OrderListHash", "a172538bd18fa82b11adaeac4f504b2e"}
};
}
}

View File

@@ -0,0 +1,95 @@
/*
* 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.Linq;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Interfaces;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Abstract regression framework algorithm for multiple framework regression tests
/// </summary>
public abstract class BaseFrameworkRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
public override void Initialize()
{
SetStartDate(2014, 6, 1);
SetEndDate(2014, 6, 30);
UniverseSettings.Resolution = Resolution.Hour;
UniverseSettings.DataNormalizationMode = DataNormalizationMode.Raw;
var symbols = new[] { "AAPL", "AIG", "BAC", "SPY" }
.Select(ticker => QuantConnect.Symbol.Create(ticker, SecurityType.Equity, Market.USA))
.ToList();
// Manually add AAPL and AIG when the algorithm starts
SetUniverseSelection(new ManualUniverseSelectionModel(symbols.Take(2)));
// At midnight, add all securities every day except on the last data
// With this procedure, the Alpha Model will experience multiple universe changes
AddUniverseSelection(new ScheduledUniverseSelectionModel(
DateRules.EveryDay(), TimeRules.Midnight,
dt => dt < EndDate.AddDays(-1) ? symbols : Enumerable.Empty<Symbol>()));
SetAlpha(new ConstantAlphaModel(InsightType.Price, InsightDirection.Up, TimeSpan.FromDays(31), 0.025, null));
SetPortfolioConstruction(new EqualWeightingPortfolioConstructionModel());
SetExecution(new ImmediateExecutionModel());
SetRiskManagement(new NullRiskManagementModel());
}
public override void OnEndOfAlgorithm()
{
// The base implementation checks for active insights
var insightsCount = Insights.GetInsights(insight => insight.IsActive(UtcTime)).Count;
if (insightsCount != 0)
{
throw new Exception($"The number of active insights should be 0. Actual: {insightsCount}");
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 765;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public abstract Dictionary<string, string> ExpectedStatistics { get; }
}
}

View File

@@ -14,6 +14,7 @@
*/
using System.Collections.Generic;
using QuantConnect.Brokerages;
using QuantConnect.Data;
using QuantConnect.Interfaces;
@@ -33,11 +34,16 @@ namespace QuantConnect.Algorithm.CSharp
{
SetStartDate(2018, 04, 04); //Set Start Date
SetEndDate(2018, 04, 04); //Set End Date
SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash);
SetAccountCurrency();
_btcEur = AddCrypto("BTCEUR").Symbol;
}
public virtual void SetAccountCurrency()
{
//Before setting any cash or adding a Security call SetAccountCurrency
SetAccountCurrency("EUR");
SetCash(100000); //Set Strategy Cash
_btcEur = AddCrypto("BTCEUR").Symbol;
}
/// <summary>
@@ -63,6 +69,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 4319;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 120;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -76,6 +92,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -87,29 +104,11 @@ namespace QuantConnect.Algorithm.CSharp
{"Information Ratio", "0"},
{"Tracking Error", "0"},
{"Treynor Ratio", "0"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$85000.00"},
{"Lowest Capacity Asset", "BTCEUR XJ"},
{"Fitness Score", "0.506"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-14.148"},
{"Portfolio Turnover", "1.073"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "€0"},
{"Total Accumulated Estimated Alpha Value", "€0"},
{"Mean Population Estimated Insight Value", "€0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "18dc611407abec4ea47092e71f33f983"}
{"Total Fees", "€298.35"},
{"Estimated Strategy Capacity", "85000.00"},
{"Lowest Capacity Asset", "BTCEUR 2XR"},
{"Portfolio Turnover", "107.64%"},
{"OrderListHash", "b0544d71cee600ef1f09c6000d6a3229"}
};
}
}

View File

@@ -0,0 +1,84 @@
/*
* 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.Collections.Generic;
using QuantConnect.Interfaces;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Basic algorithm using SetAccountCurrency with an amount
/// </summary>
public class BasicSetAccountCurrencyWithAmountAlgorithm : BasicSetAccountCurrencyAlgorithm, IRegressionAlgorithmDefinition
{
public override void SetAccountCurrency()
{
//Before setting any cash or adding a Security call SetAccountCurrency
SetAccountCurrency("EUR", 200000);
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 4319;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 120;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "1"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino 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", "€596.71"},
{"Estimated Strategy Capacity", "€85000.00"},
{"Lowest Capacity Asset", "BTCEUR 2XR"},
{"Portfolio Turnover", "107.64%"},
{"OrderListHash", "64c44a56824e67b86213539212d08e25"}
};
}
}

View File

@@ -72,6 +72,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 3943;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -84,7 +94,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "2.200%"},
{"Expectancy", "0"},
{"Net Profit", "1.692%"},
{"Sharpe Ratio", "8.888"},
{"Sharpe Ratio", "8.854"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "67.609%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -95,30 +106,12 @@ namespace QuantConnect.Algorithm.CSharp
{"Annual Variance", "0.049"},
{"Information Ratio", "-14.565"},
{"Tracking Error", "0.001"},
{"Treynor Ratio", "1.978"},
{"Treynor Ratio", "1.97"},
{"Total Fees", "$3.44"},
{"Estimated Strategy Capacity", "$56000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.248"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "93.728"},
{"Portfolio Turnover", "0.248"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "9e4bfd2eb0b81ee5bc1b197a87ccedbe"}
{"Portfolio Turnover", "19.93%"},
{"OrderListHash", "0c0f9328786b0c9e8f88d271673d16c3"}
};
}
}

View File

@@ -14,7 +14,6 @@
*/
using QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Interfaces;
using QuantConnect.Brokerages;
using System.Collections.Generic;
@@ -22,12 +21,12 @@ using System.Collections.Generic;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Basic template algorithm for the Atreyu brokerage
/// Basic template algorithm for the Axos brokerage
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="using quantconnect" />
/// <meta name="tag" content="trading and orders" />
public class BasicTemplateAtreyuAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
public class BasicTemplateAxosAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
@@ -38,17 +37,8 @@ namespace QuantConnect.Algorithm.CSharp
SetEndDate(2013, 10, 11);
SetCash(100000);
SetBrokerageModel(BrokerageName.Atreyu);
SetBrokerageModel(BrokerageName.Axos);
AddEquity("SPY", Resolution.Minute);
DefaultOrderProperties = new AtreyuOrderProperties
{
// Can specify the default exchange to execute an order on.
// If not specified will default to the primary exchange
Exchange = Exchange.BATS,
// Currently only support order for the day
TimeInForce = TimeInForce.Day
};
}
/// <summary>
@@ -59,10 +49,8 @@ namespace QuantConnect.Algorithm.CSharp
{
if (!Portfolio.Invested)
{
// will set 25% of our buying power with a market order that will be routed to exchange set in the default order properties (BATS)
// will set 25% of our buying power with a market order
SetHoldings("SPY", 0.25m);
// will increase our SPY holdings to 50% of our buying power with a market order that will be routed to ARCA
SetHoldings("SPY", 0.50m, orderProperties: new AtreyuOrderProperties { Exchange = Exchange.ARCA });
Debug("Purchased SPY!");
}
@@ -78,53 +66,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 3901;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "2"},
{"Total Trades", "1"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "93.340%"},
{"Drawdown", "1.100%"},
{"Compounding Annual Return", "39.143%"},
{"Drawdown", "0.500%"},
{"Expectancy", "0"},
{"Net Profit", "0.846%"},
{"Sharpe Ratio", "6.515"},
{"Probabilistic Sharpe Ratio", "67.535%"},
{"Net Profit", "0.423%"},
{"Sharpe Ratio", "5.498"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "67.498%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0"},
{"Beta", "0"},
{"Annual Standard Deviation", "0.11"},
{"Annual Variance", "0.012"},
{"Information Ratio", "6.515"},
{"Tracking Error", "0.11"},
{"Annual Standard Deviation", "0.055"},
{"Annual Variance", "0.003"},
{"Information Ratio", "5.634"},
{"Tracking Error", "0.055"},
{"Treynor Ratio", "0"},
{"Total Fees", "$1.20"},
{"Estimated Strategy Capacity", "$8600000.00"},
{"Total Fees", "$0.60"},
{"Estimated Strategy Capacity", "$150000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.124"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "78.222"},
{"Portfolio Turnover", "0.124"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "01a751a837beafd90015b2fd82edf994"}
{"Portfolio Turnover", "4.98%"},
{"OrderListHash", "c198b0d9bf2b4c41d69c7ea4750f09b5"}
};
}
}

View File

@@ -0,0 +1,72 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Orders;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Algorithm demonstrating CFD asset types and requesting history.
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="history" />
/// <meta name="tag" content="cfd" />
public class BasicTemplateCfdAlgorithm : QCAlgorithm
{
private Symbol _symbol;
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetAccountCurrency("EUR");
SetStartDate(2019, 2, 20);
SetEndDate(2019, 2, 21);
SetCash("EUR", 100000);
_symbol = AddCfd("DE30EUR").Symbol;
// Historical Data
var history = History(_symbol, 60, Resolution.Daily);
Log($"Received {history.Count()} bars from CFD historical data call.");
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice slice)
{
// Access Data
if (slice.QuoteBars.ContainsKey(_symbol))
{
var quoteBar = slice.QuoteBars[_symbol];
Log($"{quoteBar.EndTime} :: {quoteBar.Close}");
}
if (!Portfolio.Invested)
SetHoldings(_symbol, 1);
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
Debug($"{Time} {orderEvent.ToString()}");
}
}
}

View File

@@ -13,6 +13,7 @@
* limitations under the License.
*/
using System;
using QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Interfaces;
@@ -50,7 +51,7 @@ namespace QuantConnect.Algorithm.CSharp
contractDepthOffset: 0
);
_fast = SMA(_continuousContract.Symbol, 3, Resolution.Daily);
_fast = SMA(_continuousContract.Symbol, 4, Resolution.Daily);
_slow = SMA(_continuousContract.Symbol, 10, Resolution.Daily);
}
@@ -62,7 +63,11 @@ namespace QuantConnect.Algorithm.CSharp
{
foreach (var changedEvent in data.SymbolChangedEvents.Values)
{
Log($"{Time} - SymbolChanged event: {changedEvent}");
Debug($"{Time} - SymbolChanged event: {changedEvent}");
if (Time.TimeOfDay != TimeSpan.Zero)
{
throw new Exception($"{Time} unexpected symbol changed event {changedEvent}!");
}
}
if (!Portfolio.Invested)
@@ -78,7 +83,8 @@ namespace QuantConnect.Algorithm.CSharp
Liquidate();
}
if (_currentContract != null && _currentContract.Symbol != _continuousContract.Mapped)
// We check exchange hours because the contract mapping can call OnData outside of regular hours.
if (_currentContract != null && _currentContract.Symbol != _continuousContract.Mapped && _continuousContract.Exchange.ExchangeOpen)
{
Log($"{Time} - rolling position from {_currentContract.Symbol} to {_continuousContract.Mapped}");
@@ -109,53 +115,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 713394;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "2"},
{"Average Win", "0%"},
{"Average Loss", "0.00%"},
{"Compounding Annual Return", "-0.007%"},
{"Drawdown", "0.000%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.004%"},
{"Sharpe Ratio", "-0.369"},
{"Probabilistic Sharpe Ratio", "10.640%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Total Trades", "5"},
{"Average Win", "2.90%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "13.087%"},
{"Drawdown", "1.100%"},
{"Expectancy", "0"},
{"Net Profit", "6.387%"},
{"Sharpe Ratio", "1.532"},
{"Sortino Ratio", "871.704"},
{"Probabilistic Sharpe Ratio", "90.613%"},
{"Loss Rate", "0%"},
{"Win Rate", "100%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0"},
{"Beta", "0"},
{"Annual Standard Deviation", "0"},
{"Annual Variance", "0"},
{"Information Ratio", "-2.751"},
{"Tracking Error", "0.082"},
{"Treynor Ratio", "-0.616"},
{"Total Fees", "$3.70"},
{"Estimated Strategy Capacity", "$0"},
{"Alpha", "0.088"},
{"Beta", "-0.022"},
{"Annual Standard Deviation", "0.054"},
{"Annual Variance", "0.003"},
{"Information Ratio", "-1.35"},
{"Tracking Error", "0.1"},
{"Treynor Ratio", "-3.781"},
{"Total Fees", "$10.75"},
{"Estimated Strategy Capacity", "$1100000000.00"},
{"Lowest Capacity Asset", "ES VMKLFZIH2MTD"},
{"Fitness Score", "0.007"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-0.738"},
{"Portfolio Turnover", "0.01"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "bd7fbe57802dfedb36c85609b7234016"}
{"Portfolio Turnover", "2.32%"},
{"OrderListHash", "c42bb4b319557346b155cd2c06ade894"}
};
}
}

View File

@@ -0,0 +1,165 @@
/*
* 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 QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Interfaces;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Indicators;
using QuantConnect.Securities;
using QuantConnect.Securities.Future;
using Futures = QuantConnect.Securities.Futures;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Basic Continuous Futures Template Algorithm with extended market hours
/// </summary>
public class BasicTemplateContinuousFutureWithExtendedMarketAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Future _continuousContract;
private Security _currentContract;
private SimpleMovingAverage _fast;
private SimpleMovingAverage _slow;
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2013, 7, 1);
SetEndDate(2014, 1, 1);
_continuousContract = AddFuture(Futures.Indices.SP500EMini,
dataNormalizationMode: DataNormalizationMode.BackwardsRatio,
dataMappingMode: DataMappingMode.LastTradingDay,
contractDepthOffset: 0,
extendedMarketHours: true
);
_fast = SMA(_continuousContract.Symbol, 4, Resolution.Daily);
_slow = SMA(_continuousContract.Symbol, 10, Resolution.Daily);
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice data)
{
foreach (var changedEvent in data.SymbolChangedEvents.Values)
{
Debug($"{Time} - SymbolChanged event: {changedEvent}");
if (Time.TimeOfDay != TimeSpan.Zero)
{
throw new Exception($"{Time} unexpected symbol changed event {changedEvent}!");
}
}
if (!IsMarketOpen(_continuousContract.Symbol))
{
return;
}
if (!Portfolio.Invested)
{
if(_fast > _slow)
{
_currentContract = Securities[_continuousContract.Mapped];
Buy(_currentContract.Symbol, 1);
}
}
else if(_fast < _slow)
{
Liquidate();
}
if (_currentContract != null && _currentContract.Symbol != _continuousContract.Mapped)
{
Log($"{Time} - rolling position from {_currentContract.Symbol} to {_continuousContract.Mapped}");
var currentPositionSize = _currentContract.Holdings.Quantity;
Liquidate(_currentContract.Symbol);
Buy(_continuousContract.Mapped, currentPositionSize);
_currentContract = Securities[_continuousContract.Mapped];
}
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
Debug($"{orderEvent}");
}
public override void OnSecuritiesChanged(SecurityChanges changes)
{
Debug($"{Time}-{changes}");
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 2217324;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "5"},
{"Average Win", "4.45%"},
{"Average Loss", "-0.26%"},
{"Compounding Annual Return", "8.423%"},
{"Drawdown", "0.800%"},
{"Expectancy", "8.202"},
{"Net Profit", "4.162%"},
{"Sharpe Ratio", "0.951"},
{"Sortino Ratio", "2.8"},
{"Probabilistic Sharpe Ratio", "53.568%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
{"Profit-Loss Ratio", "17.40"},
{"Alpha", "0.053"},
{"Beta", "-0.005"},
{"Annual Standard Deviation", "0.054"},
{"Annual Variance", "0.003"},
{"Information Ratio", "-1.681"},
{"Tracking Error", "0.099"},
{"Treynor Ratio", "-10.255"},
{"Total Fees", "$10.75"},
{"Estimated Strategy Capacity", "$190000000.00"},
{"Lowest Capacity Asset", "ES VMKLFZIH2MTD"},
{"Portfolio Turnover", "2.34%"},
{"OrderListHash", "8a6ad6061fc3c311934a0801c26744eb"}
};
}
}

View File

@@ -198,6 +198,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 12965;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 240;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -211,6 +221,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -224,27 +235,9 @@ namespace QuantConnect.Algorithm.CSharp
{"Treynor Ratio", "0"},
{"Total Fees", "$85.34"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "BTCEUR XJ"},
{"Fitness Score", "0.5"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-43.943"},
{"Portfolio Turnover", "1.028"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "1bf1a6d9dd921982b72a6178f9e50e68"}
{"Lowest Capacity Asset", "BTCEUR 2XR"},
{"Portfolio Turnover", "118.08%"},
{"OrderListHash", "551b20736f4558a5af5c02b84451fb77"}
};
}
}

View File

@@ -0,0 +1,275 @@
/*
* 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 QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Brokerages;
using QuantConnect.Indicators;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
using QuantConnect.Data.Market;
using System.Collections.Generic;
using QuantConnect.Securities.CryptoFuture;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Minute resolution regression algorithm trading Coin and USDT binance futures long and short asserting the behavior
/// </summary>
public class BasicTemplateCryptoFutureAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Dictionary<Symbol, int> _interestPerSymbol = new();
private CryptoFuture _btcUsd;
private CryptoFuture _adaUsdt;
private ExponentialMovingAverage _fast;
private ExponentialMovingAverage _slow;
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2022, 12, 13); // Set Start Date
SetEndDate(2022, 12, 13); // Set End Date
SetTimeZone(TimeZones.Utc);
try
{
SetBrokerageModel(BrokerageName.BinanceFutures, AccountType.Cash);
}
catch (InvalidOperationException)
{
// expected, we don't allow cash account type
}
SetBrokerageModel(BrokerageName.BinanceFutures, AccountType.Margin);
_btcUsd = AddCryptoFuture("BTCUSD");
_adaUsdt = AddCryptoFuture("ADAUSDT");
_fast = EMA(_btcUsd.Symbol, 30, Resolution.Minute);
_slow = EMA(_btcUsd.Symbol, 60, Resolution.Minute);
_interestPerSymbol[_btcUsd.Symbol] = 0;
_interestPerSymbol[_adaUsdt.Symbol] = 0;
// Default USD cash, set 1M but it wont be used
SetCash(1000000);
// the amount of BTC we need to hold to trade 'BTCUSD'
_btcUsd.BaseCurrency.SetAmount(0.005m);
// the amount of USDT we need to hold to trade 'ADAUSDT'
_adaUsdt.QuoteCurrency.SetAmount(200);
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice data)
{
var interestRates = data.Get<MarginInterestRate>();
foreach (var interestRate in interestRates)
{
_interestPerSymbol[interestRate.Key]++;
var cachedInterestRate = Securities[interestRate.Key].Cache.GetData<MarginInterestRate>();
if (cachedInterestRate != interestRate.Value)
{
throw new Exception($"Unexpected cached margin interest rate for {interestRate.Key}!");
}
}
if (_fast > _slow)
{
if (!Portfolio.Invested && Transactions.OrdersCount == 0)
{
var ticket = Buy(_btcUsd.Symbol, 50);
if (ticket.Status != OrderStatus.Invalid)
{
throw new Exception($"Unexpected valid order {ticket}, should fail due to margin not sufficient");
}
Buy(_btcUsd.Symbol, 1);
var marginUsed = Portfolio.TotalMarginUsed;
var btcUsdHoldings = _btcUsd.Holdings;
// Coin futures value is 100 USD
var holdingsValueBtcUsd = 100;
if (Math.Abs(btcUsdHoldings.TotalSaleVolume - holdingsValueBtcUsd) > 1)
{
throw new Exception($"Unexpected TotalSaleVolume {btcUsdHoldings.TotalSaleVolume}");
}
if (Math.Abs(btcUsdHoldings.AbsoluteHoldingsCost - holdingsValueBtcUsd) > 1)
{
throw new Exception($"Unexpected holdings cost {btcUsdHoldings.HoldingsCost}");
}
// margin used is based on the maintenance rate
if (Math.Abs(btcUsdHoldings.AbsoluteHoldingsCost * 0.05m - marginUsed) > 1
|| _btcUsd.BuyingPowerModel.GetMaintenanceMargin(_btcUsd) != marginUsed)
{
throw new Exception($"Unexpected margin used {marginUsed}");
}
Buy(_adaUsdt.Symbol, 1000);
marginUsed = Portfolio.TotalMarginUsed - marginUsed;
var adaUsdtHoldings = _adaUsdt.Holdings;
// USDT/BUSD futures value is based on it's price
var holdingsValueUsdt = _adaUsdt.Price * _adaUsdt.SymbolProperties.ContractMultiplier * 1000;
if (Math.Abs(adaUsdtHoldings.TotalSaleVolume - holdingsValueUsdt) > 1)
{
throw new Exception($"Unexpected TotalSaleVolume {adaUsdtHoldings.TotalSaleVolume}");
}
if (Math.Abs(adaUsdtHoldings.AbsoluteHoldingsCost - holdingsValueUsdt) > 1)
{
throw new Exception($"Unexpected holdings cost {adaUsdtHoldings.HoldingsCost}");
}
if (Math.Abs(adaUsdtHoldings.AbsoluteHoldingsCost * 0.05m - marginUsed) > 1
|| _adaUsdt.BuyingPowerModel.GetMaintenanceMargin(_adaUsdt) != marginUsed)
{
throw new Exception($"Unexpected margin used {marginUsed}");
}
// position just opened should be just spread here
var profit = Portfolio.TotalUnrealizedProfit;
if ((5 - Math.Abs(profit)) < 0)
{
throw new Exception($"Unexpected TotalUnrealizedProfit {Portfolio.TotalUnrealizedProfit}");
}
if (Portfolio.TotalProfit != 0)
{
throw new Exception($"Unexpected TotalProfit {Portfolio.TotalProfit}");
}
}
}
else
{
// let's revert our position and double
if (Time.Hour > 10 && Transactions.OrdersCount == 3)
{
Sell(_btcUsd.Symbol, 3);
var btcUsdHoldings = _btcUsd.Holdings;
if (Math.Abs(btcUsdHoldings.AbsoluteHoldingsCost - 100 * 2) > 1)
{
throw new Exception($"Unexpected holdings cost {btcUsdHoldings.HoldingsCost}");
}
Sell(_adaUsdt.Symbol, 3000);
var adaUsdtHoldings = _adaUsdt.Holdings;
// USDT/BUSD futures value is based on it's price
var holdingsValueUsdt = _adaUsdt.Price * _adaUsdt.SymbolProperties.ContractMultiplier * 2000;
if (Math.Abs(adaUsdtHoldings.AbsoluteHoldingsCost - holdingsValueUsdt) > 1)
{
throw new Exception($"Unexpected holdings cost {adaUsdtHoldings.HoldingsCost}");
}
// position just opened should be just spread here
var profit = Portfolio.TotalUnrealizedProfit;
if ((5 - Math.Abs(profit)) < 0)
{
throw new Exception($"Unexpected TotalUnrealizedProfit {Portfolio.TotalUnrealizedProfit}");
}
// we barely did any difference on the previous trade
if ((5 - Math.Abs(Portfolio.TotalProfit)) < 0)
{
throw new Exception($"Unexpected TotalProfit {Portfolio.TotalProfit}");
}
}
}
}
public override void OnEndOfAlgorithm()
{
if (_interestPerSymbol[_adaUsdt.Symbol] != 1)
{
throw new Exception($"Unexpected interest rate count {_interestPerSymbol[_adaUsdt.Symbol]}");
}
if (_interestPerSymbol[_btcUsd.Symbol] != 3)
{
throw new Exception($"Unexpected interest rate count {_interestPerSymbol[_btcUsd.Symbol]}");
}
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
Debug(Time + " " + orderEvent);
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 7205;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "4"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino 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.65"},
{"Estimated Strategy Capacity", "$500000000.00"},
{"Lowest Capacity Asset", "ADAUSDT 18R"},
{"Portfolio Turnover", "0.16%"},
{"OrderListHash", "ed329700a93491ffe30354769767c6aa"}
};
}
}

View File

@@ -0,0 +1,238 @@
/*
* 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 QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Indicators;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
using QuantConnect.Brokerages;
using QuantConnect.Data.Market;
using System.Collections.Generic;
using QuantConnect.Securities.CryptoFuture;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Hourly regression algorithm trading ADAUSDT binance futures long and short asserting the behavior
/// </summary>
public class BasicTemplateCryptoFutureHourlyAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Dictionary<Symbol, int> _interestPerSymbol = new();
private CryptoFuture _adaUsdt;
private ExponentialMovingAverage _fast;
private ExponentialMovingAverage _slow;
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2022, 12, 13);
SetEndDate(2022, 12, 13);
SetTimeZone(TimeZones.Utc);
try
{
SetBrokerageModel(BrokerageName.BinanceCoinFutures, AccountType.Cash);
}
catch (InvalidOperationException)
{
// expected, we don't allow cash account type
}
SetBrokerageModel(BrokerageName.BinanceCoinFutures, AccountType.Margin);
_adaUsdt = AddCryptoFuture("ADAUSDT", Resolution.Hour);
_fast = EMA(_adaUsdt.Symbol, 3, Resolution.Hour);
_slow = EMA(_adaUsdt.Symbol, 6, Resolution.Hour);
_interestPerSymbol[_adaUsdt.Symbol] = 0;
// Default USD cash, set 1M but it wont be used
SetCash(1000000);
// the amount of USDT we need to hold to trade 'ADAUSDT'
_adaUsdt.QuoteCurrency.SetAmount(200);
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice data)
{
var interestRates = data.Get<MarginInterestRate>();
foreach (var interestRate in interestRates)
{
_interestPerSymbol[interestRate.Key]++;
var cachedInterestRate = Securities[interestRate.Key].Cache.GetData<MarginInterestRate>();
if (cachedInterestRate != interestRate.Value)
{
throw new Exception($"Unexpected cached margin interest rate for {interestRate.Key}!");
}
}
if (_fast > _slow)
{
if (!Portfolio.Invested && Transactions.OrdersCount == 0)
{
var ticket = Buy(_adaUsdt.Symbol, 100000);
if(ticket.Status != OrderStatus.Invalid)
{
throw new Exception($"Unexpected valid order {ticket}, should fail due to margin not sufficient");
}
Buy(_adaUsdt.Symbol, 1000);
var marginUsed = Portfolio.TotalMarginUsed;
var adaUsdtHoldings = _adaUsdt.Holdings;
// USDT/BUSD futures value is based on it's price
var holdingsValueUsdt = _adaUsdt.Price * _adaUsdt.SymbolProperties.ContractMultiplier * 1000;
if (Math.Abs(adaUsdtHoldings.TotalSaleVolume - holdingsValueUsdt) > 1)
{
throw new Exception($"Unexpected TotalSaleVolume {adaUsdtHoldings.TotalSaleVolume}");
}
if (Math.Abs(adaUsdtHoldings.AbsoluteHoldingsCost - holdingsValueUsdt) > 1)
{
throw new Exception($"Unexpected holdings cost {adaUsdtHoldings.HoldingsCost}");
}
if (Math.Abs(adaUsdtHoldings.AbsoluteHoldingsCost * 0.05m - marginUsed) > 1
|| _adaUsdt.BuyingPowerModel.GetMaintenanceMargin(_adaUsdt) != marginUsed)
{
throw new Exception($"Unexpected margin used {marginUsed}");
}
// position just opened should be just spread here
var profit = Portfolio.TotalUnrealizedProfit;
if ((5 - Math.Abs(profit)) < 0)
{
throw new Exception($"Unexpected TotalUnrealizedProfit {Portfolio.TotalUnrealizedProfit}");
}
if (Portfolio.TotalProfit != 0)
{
throw new Exception($"Unexpected TotalProfit {Portfolio.TotalProfit}");
}
}
}
else
{
// let's revert our position and double
if (Time.Hour > 10 && Transactions.OrdersCount == 2)
{
Sell(_adaUsdt.Symbol, 3000);
var adaUsdtHoldings = _adaUsdt.Holdings;
// USDT/BUSD futures value is based on it's price
var holdingsValueUsdt = _adaUsdt.Price * _adaUsdt.SymbolProperties.ContractMultiplier * 2000;
if (Math.Abs(adaUsdtHoldings.AbsoluteHoldingsCost - holdingsValueUsdt) > 1)
{
throw new Exception($"Unexpected holdings cost {adaUsdtHoldings.HoldingsCost}");
}
// position just opened should be just spread here
var profit = Portfolio.TotalUnrealizedProfit;
if ((5 - Math.Abs(profit)) < 0)
{
throw new Exception($"Unexpected TotalUnrealizedProfit {Portfolio.TotalUnrealizedProfit}");
}
// we barely did any difference on the previous trade
if ((5 - Math.Abs(Portfolio.TotalProfit)) < 0)
{
throw new Exception($"Unexpected TotalProfit {Portfolio.TotalProfit}");
}
}
if (Time.Hour >= 22 && Transactions.OrdersCount == 3)
{
Liquidate();
}
}
}
public override void OnEndOfAlgorithm()
{
if (_interestPerSymbol[_adaUsdt.Symbol] != 1)
{
throw new Exception($"Unexpected interest rate count {_interestPerSymbol[_adaUsdt.Symbol]}");
}
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
Debug(Time + " " + orderEvent);
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 50;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "2"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino 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.61"},
{"Estimated Strategy Capacity", "$370000000.00"},
{"Lowest Capacity Asset", "ADAUSDT 18R"},
{"Portfolio Turnover", "0.12%"},
{"OrderListHash", "5b1290390c34b0e64ac0b9e834c27b07"}
};
}
}

View File

@@ -63,6 +63,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 73;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -75,7 +85,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "1.200%"},
{"Expectancy", "0"},
{"Net Profit", "3.464%"},
{"Sharpe Ratio", "19.148"},
{"Sharpe Ratio", "19.094"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "97.754%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -86,30 +97,12 @@ namespace QuantConnect.Algorithm.CSharp
{"Annual Variance", "0.019"},
{"Information Ratio", "-34.028"},
{"Tracking Error", "0"},
{"Treynor Ratio", "2.651"},
{"Treynor Ratio", "2.644"},
{"Total Fees", "$3.45"},
{"Estimated Strategy Capacity", "$970000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.112"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "53.951"},
{"Return Over Maximum Drawdown", "209.464"},
{"Portfolio Turnover", "0.112"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "33d01821923c397f999cfb2e5b5928ad"}
{"Portfolio Turnover", "10.09%"},
{"OrderListHash", "418c8ec9920ec61bdefa2d02a8557048"}
};
}
}

View File

@@ -84,6 +84,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 3943;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -96,7 +106,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "2.200%"},
{"Expectancy", "-1"},
{"Net Profit", "1.655%"},
{"Sharpe Ratio", "8.505"},
{"Sharpe Ratio", "8.472"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "66.840%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
@@ -107,30 +118,12 @@ namespace QuantConnect.Algorithm.CSharp
{"Annual Variance", "0.05"},
{"Information Ratio", "-33.445"},
{"Tracking Error", "0.002"},
{"Treynor Ratio", "1.893"},
{"Treynor Ratio", "1.885"},
{"Total Fees", "$10.32"},
{"Estimated Strategy Capacity", "$27000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.747"},
{"Kelly Criterion Estimate", "38.796"},
{"Kelly Criterion Probability Value", "0.228"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "85.095"},
{"Portfolio Turnover", "0.747"},
{"Total Insights Generated", "100"},
{"Total Insights Closed", "99"},
{"Total Insights Analysis Completed", "99"},
{"Long Insight Count", "100"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$135639.1761"},
{"Total Accumulated Estimated Alpha Value", "$21852.9784"},
{"Mean Population Estimated Insight Value", "$220.7372"},
{"Mean Population Direction", "53.5354%"},
{"Mean Population Magnitude", "53.5354%"},
{"Rolling Averaged Population Direction", "58.2788%"},
{"Rolling Averaged Population Magnitude", "58.2788%"},
{"OrderListHash", "ad2216297c759d8e5aef48ff065f8919"}
{"Portfolio Turnover", "59.86%"},
{"OrderListHash", "75c4c7221e2e70d0aa5c9844aae9009c"}
};
}
}

View File

@@ -0,0 +1,95 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Securities;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Algorithm demonstrating FutureOption asset types and requesting history.
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="history" />
/// <meta name="tag" content="future option" />
public class BasicTemplateFutureOptionAlgorithm : QCAlgorithm
{
private Symbol _symbol;
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2022, 1, 1);
SetEndDate(2022, 2, 1);
SetCash(100000);
var gold_futures = AddFuture(Futures.Metals.Gold, Resolution.Minute);
gold_futures.SetFilter(0, 180);
_symbol = gold_futures.Symbol;
AddFutureOption(_symbol, universe => universe.Strikes(-5, +5)
.CallsOnly()
.BackMonth()
.OnlyApplyFilterAtMarketOpen());
// Historical Data
var history = History(_symbol, 60, Resolution.Daily);
Log($"Received {history.Count()} bars from {_symbol} FutureOption historical data call.");
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice slice)
{
// Access Data
foreach(var kvp in slice.OptionChains)
{
var underlyingFutureContract = kvp.Key.Underlying;
var chain = kvp.Value;
if (chain.Count() == 0) continue;
foreach(var contract in chain)
{
Log($@"Canonical Symbol: {kvp.Key};
Contract: {contract};
Right: {contract.Right};
Expiry: {contract.Expiry};
Bid price: {contract.BidPrice};
Ask price: {contract.AskPrice};
Implied Volatility: {contract.ImpliedVolatility}");
}
if (!Portfolio.Invested)
{
var atmStrike = chain.OrderBy(x => Math.Abs(chain.Underlying.Price - x.Strike)).First().Strike;
var selectedContract = chain.Where(x => x.Strike == atmStrike).OrderByDescending(x => x.Expiry).First();
MarketOrder(selectedContract.Symbol, 1);
}
}
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
Debug($"{Time} {orderEvent.ToString()}");
}
}
}

View File

@@ -0,0 +1,218 @@
/*
* 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.Collections.Generic;
using QuantConnect.Data;
using QuantConnect.Interfaces;
using QuantConnect.Indicators;
using QuantConnect.Securities;
using QuantConnect.Securities.Future;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Example algorithm for trading continuous future
/// </summary>
public class BasicTemplateFutureRolloverAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Dictionary<Symbol, SymbolData> _symbolDataBySymbol = new();
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2013, 10, 8);
SetEndDate(2013, 12, 10);
SetCash(1000000);
var futures = new List<string> {
Futures.Indices.SP500EMini
};
foreach (var future in futures)
{
// Requesting data
var continuousContract = AddFuture(future,
resolution: Resolution.Daily,
extendedMarketHours: true,
dataNormalizationMode: DataNormalizationMode.BackwardsRatio,
dataMappingMode: DataMappingMode.OpenInterest,
contractDepthOffset: 0
);
var symbolData = new SymbolData(this, continuousContract);
_symbolDataBySymbol.Add(continuousContract.Symbol, symbolData);
}
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="slice">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice slice)
{
foreach (var kvp in _symbolDataBySymbol)
{
var symbol = kvp.Key;
var symbolData = kvp.Value;
// Call SymbolData.Update() method to handle new data slice received
symbolData.Update(slice);
// Check if information in SymbolData class and new slice data are ready for trading
if (!symbolData.IsReady || !slice.Bars.ContainsKey(symbol))
{
return;
}
var emaCurrentValue = symbolData.EMA.Current.Value;
if (emaCurrentValue < symbolData.Price && !symbolData.IsLong)
{
MarketOrder(symbolData.Mapped, 1);
}
else if (emaCurrentValue > symbolData.Price && !symbolData.IsShort)
{
MarketOrder(symbolData.Mapped, -1);
}
}
}
/// <summary>
/// Abstracted class object to hold information (state, indicators, methods, etc.) from a Symbol/Security in a multi-security algorithm
/// </summary>
public class SymbolData
{
private QCAlgorithm _algorithm;
private Future _future;
public ExponentialMovingAverage EMA;
public decimal Price;
public bool IsLong;
public bool IsShort;
public Symbol Symbol => _future.Symbol;
public Symbol Mapped => _future.Mapped;
/// <summary>
/// Check if symbolData class object are ready for trading
/// </summary>
public bool IsReady => Mapped != null && EMA.IsReady;
/// <summary>
/// Constructor to instantiate the information needed to be hold
/// </summary>
public SymbolData(QCAlgorithm algorithm, Future future)
{
_algorithm = algorithm;
_future = future;
EMA = algorithm.EMA(future.Symbol, 20, Resolution.Daily);
Reset();
}
/// <summary>
/// Handler of new slice of data received
/// </summary>
public void Update(Slice slice)
{
if (slice.SymbolChangedEvents.TryGetValue(Symbol, out var changedEvent))
{
var oldSymbol = changedEvent.OldSymbol;
var newSymbol = changedEvent.NewSymbol;
var tag = $"Rollover - Symbol changed at {_algorithm.Time}: {oldSymbol} -> {newSymbol}";
var quantity = _algorithm.Portfolio[oldSymbol].Quantity;
// Rolling over: to liquidate any position of the old mapped contract and switch to the newly mapped contract
_algorithm.Liquidate(oldSymbol, tag: tag);
_algorithm.MarketOrder(newSymbol, quantity, tag: tag);
Reset();
}
Price = slice.Bars.ContainsKey(Symbol) ? slice.Bars[Symbol].Price : Price;
IsLong = _algorithm.Portfolio[Mapped].IsLong;
IsShort = _algorithm.Portfolio[Mapped].IsShort;
}
/// <summary>
/// Reset RollingWindow/indicator to adapt to newly mapped contract, then warm up the RollingWindow/indicator
/// </summary>
private void Reset()
{
EMA.Reset();
_algorithm.WarmUpIndicator(Symbol, EMA, Resolution.Daily);
}
/// <summary>
/// Disposal method to remove consolidator/update method handler, and reset RollingWindow/indicator to free up memory and speed
/// </summary>
public void Dispose()
{
EMA.Reset();
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 1333;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 4;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "2"},
{"Average Win", "0.53%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "3.011%"},
{"Drawdown", "0.000%"},
{"Expectancy", "0"},
{"Net Profit", "0.528%"},
{"Sharpe Ratio", "1.285"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "83.704%"},
{"Loss Rate", "0%"},
{"Win Rate", "100%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.015"},
{"Beta", "-0.004"},
{"Annual Standard Deviation", "0.011"},
{"Annual Variance", "0"},
{"Information Ratio", "-4.774"},
{"Tracking Error", "0.084"},
{"Treynor Ratio", "-3.121"},
{"Total Fees", "$4.30"},
{"Estimated Strategy Capacity", "$5900000000.00"},
{"Lowest Capacity Asset", "ES VMKLFZIH2MTD"},
{"Portfolio Turnover", "0.27%"},
{"OrderListHash", "9fb6d9433c29815301d818ccd7f3863f"}
};
}
}

View File

@@ -18,6 +18,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
using QuantConnect.Securities.Future;
@@ -58,12 +59,15 @@ namespace QuantConnect.Algorithm.CSharp
// set our expiry filter for this futures chain
// SetFilter method accepts TimeSpan objects or integer for days.
// The following statements yield the same filtering criteria
// The following statements yield the same filtering criteria
futureSP500.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
futureGold.SetFilter(0, 182);
var benchmark = AddEquity("SPY");
SetBenchmark(benchmark.Symbol);
var seeder = new FuncSecuritySeeder(GetLastKnownPrices);
SetSecurityInitializer(security => seeder.SeedSecurity(security));
}
/// <summary>
@@ -72,6 +76,15 @@ namespace QuantConnect.Algorithm.CSharp
/// <param name="slice">The current slice of data keyed by symbol string</param>
public override void OnData(Slice slice)
{
foreach (var changedEvent in slice.SymbolChangedEvents.Values)
{
Debug($"{Time} - SymbolChanged event: {changedEvent}");
if (Time.TimeOfDay != TimeSpan.Zero)
{
throw new Exception($"{Time} unexpected symbol changed event {changedEvent}!");
}
}
if (!Portfolio.Invested)
{
foreach(var chain in slice.FutureChains)
@@ -112,6 +125,19 @@ namespace QuantConnect.Algorithm.CSharp
var maintenanceIntraday = futureMarginModel.MaintenanceIntradayMarginRequirement;
}
public override void OnSecuritiesChanged(SecurityChanges changes)
{
foreach (var addedSecurity in changes.AddedSecurities)
{
if (addedSecurity.Symbol.SecurityType == SecurityType.Future
&& !addedSecurity.Symbol.IsCanonical()
&& !addedSecurity.HasData)
{
throw new Exception($"Future contracts did not work up as expected: {addedSecurity.Symbol}");
}
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
@@ -122,53 +148,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 75401;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 340;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "8220"},
{"Total Trades", "2700"},
{"Average Win", "0.00%"},
{"Average Loss", "0.00%"},
{"Compounding Annual Return", "-100.000%"},
{"Drawdown", "13.500%"},
{"Expectancy", "-0.818"},
{"Net Profit", "-13.517%"},
{"Sharpe Ratio", "-98.781"},
{"Compounding Annual Return", "-99.777%"},
{"Drawdown", "4.400%"},
{"Expectancy", "-0.724"},
{"Net Profit", "-4.430%"},
{"Sharpe Ratio", "-31.63"},
{"Sortino Ratio", "-31.63"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "89%"},
{"Win Rate", "11%"},
{"Profit-Loss Ratio", "0.69"},
{"Alpha", "-1.676"},
{"Beta", "0.042"},
{"Annual Standard Deviation", "0.01"},
{"Annual Variance", "0"},
{"Information Ratio", "-73.981"},
{"Tracking Error", "0.233"},
{"Treynor Ratio", "-23.975"},
{"Total Fees", "$15207.00"},
{"Estimated Strategy Capacity", "$8000.00"},
{"Loss Rate", "83%"},
{"Win Rate", "17%"},
{"Profit-Loss Ratio", "0.65"},
{"Alpha", "-3.065"},
{"Beta", "0.128"},
{"Annual Standard Deviation", "0.031"},
{"Annual Variance", "0.001"},
{"Information Ratio", "-81.232"},
{"Tracking Error", "0.212"},
{"Treynor Ratio", "-7.677"},
{"Total Fees", "$6237.00"},
{"Estimated Strategy Capacity", "$14000.00"},
{"Lowest Capacity Asset", "GC VOFJUCDY9XNH"},
{"Fitness Score", "0.033"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-8.62"},
{"Return Over Maximum Drawdown", "-7.81"},
{"Portfolio Turnover", "302.321"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "35b3f4b7a225468d42ca085386a2383e"}
{"Portfolio Turnover", "9912.69%"},
{"OrderListHash", "398c0383a9ba3235f15ac472a7fbcb8a"}
};
}
}

View File

@@ -19,7 +19,9 @@ using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Interfaces;
using QuantConnect.Orders;
using QuantConnect.Securities;
using QuantConnect.Securities.Future;
namespace QuantConnect.Algorithm.CSharp
{
@@ -31,14 +33,16 @@ namespace QuantConnect.Algorithm.CSharp
/// <meta name="tag" content="futures" />
public class BasicTemplateFuturesDailyAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Symbol _contractSymbol;
protected virtual Resolution Resolution => Resolution.Daily;
protected virtual bool ExtendedMarketHours => false;
// S&P 500 EMini futures
private const string RootSP500 = Futures.Indices.SP500EMini;
// Gold futures
private const string RootGold = Futures.Metals.Gold;
private Future _futureSP500;
private Future _futureGold;
/// <summary>
/// Initialize your algorithm and add desired assets.
@@ -46,17 +50,17 @@ namespace QuantConnect.Algorithm.CSharp
public override void Initialize()
{
SetStartDate(2013, 10, 08);
SetEndDate(2013, 10, 10);
SetEndDate(2014, 10, 10);
SetCash(1000000);
var futureSP500 = AddFuture(RootSP500, Resolution);
var futureGold = AddFuture(RootGold, Resolution);
_futureSP500 = AddFuture(RootSP500, Resolution, extendedMarketHours: ExtendedMarketHours);
_futureGold = AddFuture(RootGold, Resolution, extendedMarketHours: ExtendedMarketHours);
// set our expiry filter for this futures chain
// SetFilter method accepts TimeSpan objects or integer for days.
// The following statements yield the same filtering criteria
futureSP500.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
futureGold.SetFilter(0, 182);
// The following statements yield the same filtering criteria
_futureSP500.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
_futureGold.SetFilter(0, 182);
}
/// <summary>
@@ -76,18 +80,28 @@ namespace QuantConnect.Algorithm.CSharp
select futuresContract
).FirstOrDefault();
// if found, trade it
if (contract != null)
// if found, trade it.
// Also check if exchange is open for regular or extended hours. Since daily data comes at 8PM, this allows us prevent the
// algorithm from trading on friday when there is not after-market.
if (contract != null && Securities[contract.Symbol].Exchange.Hours.IsOpen(Time, true))
{
_contractSymbol = contract.Symbol;
MarketOrder(_contractSymbol, 1);
MarketOrder(contract.Symbol, 1);
}
}
}
else
// Same as above, check for cases like trading on a friday night.
else if (Securities.Values.Where(x => x.Invested).All(x => x.Exchange.Hours.IsOpen(Time, true)))
{
Liquidate();
}
foreach (var changedEvent in slice.SymbolChangedEvents.Values)
{
if (Time.TimeOfDay != TimeSpan.Zero)
{
throw new Exception($"{Time} unexpected symbol changed event {changedEvent}!");
}
}
}
/// <summary>
@@ -100,53 +114,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 14036;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public virtual Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "6"},
{"Average Win", "0%"},
{"Average Loss", "-0.10%"},
{"Compounding Annual Return", "-23.119%"},
{"Drawdown", "0.300%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.276%"},
{"Sharpe Ratio", "-13.736"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0.526"},
{"Beta", "0.057"},
{"Annual Standard Deviation", "0.015"},
{"Total Trades", "128"},
{"Average Win", "0.26%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "-0.071%"},
{"Drawdown", "0.400%"},
{"Expectancy", "-0.116"},
{"Net Profit", "-0.071%"},
{"Sharpe Ratio", "-1.999"},
{"Sortino Ratio", "-1.806"},
{"Probabilistic Sharpe Ratio", "10.091%"},
{"Loss Rate", "97%"},
{"Win Rate", "3%"},
{"Profit-Loss Ratio", "27.29"},
{"Alpha", "-0.008"},
{"Beta", "0.001"},
{"Annual Standard Deviation", "0.004"},
{"Annual Variance", "0"},
{"Information Ratio", "-31.088"},
{"Tracking Error", "0.189"},
{"Treynor Ratio", "-3.51"},
{"Total Fees", "$11.10"},
{"Estimated Strategy Capacity", "$200000000.00"},
{"Lowest Capacity Asset", "GC VOFJUCDY9XNH"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-17.118"},
{"Return Over Maximum Drawdown", "-83.844"},
{"Portfolio Turnover", "0.16"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "512f55519e5221c7e82e1d9f5ddd1b9f"}
{"Information Ratio", "-1.367"},
{"Tracking Error", "0.089"},
{"Treynor Ratio", "-5.445"},
{"Total Fees", "$285.44"},
{"Estimated Strategy Capacity", "$1000.00"},
{"Lowest Capacity Asset", "ES VRJST036ZY0X"},
{"Portfolio Turnover", "3.41%"},
{"OrderListHash", "1666cd6c277c6ea8b1b46d5dfa6bac9f"}
};
}
}

View File

@@ -31,9 +31,12 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public class BasicTemplateFuturesFrameworkAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
protected virtual bool ExtendedMarketHours => false;
public override void Initialize()
{
UniverseSettings.Resolution = Resolution.Minute;
UniverseSettings.ExtendedMarketHours = ExtendedMarketHours;
SetStartDate(2013, 10, 07);
SetEndDate(2013, 10, 11);
@@ -123,60 +126,53 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
public virtual bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 57752;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
public virtual Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "2"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "-92.656%"},
{"Drawdown", "5.000%"},
{"Compounding Annual Return", "-81.734%"},
{"Drawdown", "4.100%"},
{"Expectancy", "0"},
{"Net Profit", "-3.312%"},
{"Sharpe Ratio", "-6.305"},
{"Probabilistic Sharpe Ratio", "9.342%"},
{"Net Profit", "-2.169%"},
{"Sharpe Ratio", "-10.299"},
{"Sortino Ratio", "-10.299"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-1.465"},
{"Beta", "0.312"},
{"Annual Standard Deviation", "0.134"},
{"Annual Variance", "0.018"},
{"Information Ratio", "-14.77"},
{"Tracking Error", "0.192"},
{"Treynor Ratio", "-2.718"},
{"Total Fees", "$3.70"},
{"Estimated Strategy Capacity", "$52000000.00"},
{"Alpha", "-1.212"},
{"Beta", "0.238"},
{"Annual Standard Deviation", "0.072"},
{"Annual Variance", "0.005"},
{"Information Ratio", "-15.404"},
{"Tracking Error", "0.176"},
{"Treynor Ratio", "-3.109"},
{"Total Fees", "$4.62"},
{"Estimated Strategy Capacity", "$17000000.00"},
{"Lowest Capacity Asset", "GC VL5E74HP3EE5"},
{"Fitness Score", "0.009"},
{"Kelly Criterion Estimate", "-112.972"},
{"Kelly Criterion Probability Value", "0.671"},
{"Sortino Ratio", "-8.425"},
{"Return Over Maximum Drawdown", "-35.219"},
{"Portfolio Turnover", "0.548"},
{"Total Insights Generated", "6"},
{"Total Insights Closed", "5"},
{"Total Insights Analysis Completed", "5"},
{"Long Insight Count", "6"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$-96.12923"},
{"Total Accumulated Estimated Alpha Value", "$-15.621"},
{"Mean Population Estimated Insight Value", "$-3.1242"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "18ffd3a774c68da83d867e3b09e3e05d"}
{"Portfolio Turnover", "43.23%"},
{"OrderListHash", "1daca8b4534258de0f1bf09214205b77"}
};
}
}

View File

@@ -0,0 +1,78 @@
/*
* 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 QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Risk;
using QuantConnect.Algorithm.Framework.Selection;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Basic template futures framework algorithm uses framework components to define an algorithm
/// that trades futures.
/// </summary>
public class BasicTemplateFuturesFrameworkWithExtendedMarketAlgorithm : BasicTemplateFuturesFrameworkAlgorithm
{
protected override bool ExtendedMarketHours => true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 163392;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "2"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "-92.667%"},
{"Drawdown", "5.000%"},
{"Expectancy", "0"},
{"Net Profit", "-3.314%"},
{"Sharpe Ratio", "-6.359"},
{"Sortino Ratio", "-11.237"},
{"Probabilistic Sharpe Ratio", "9.333%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-1.47"},
{"Beta", "0.312"},
{"Annual Standard Deviation", "0.134"},
{"Annual Variance", "0.018"},
{"Information Ratio", "-14.77"},
{"Tracking Error", "0.192"},
{"Treynor Ratio", "-2.742"},
{"Total Fees", "$4.62"},
{"Estimated Strategy Capacity", "$52000000.00"},
{"Lowest Capacity Asset", "GC VL5E74HP3EE5"},
{"Portfolio Turnover", "43.77%"},
{"OrderListHash", "ba6e16f476a2ddeeaab9c9091664f7a1"}
};
}
}

View File

@@ -36,6 +36,9 @@ namespace QuantConnect.Algorithm.CSharp
/// <meta name="tag" content="futures" />
public class BasicTemplateFuturesHistoryAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
protected virtual bool ExtendedMarketHours => false;
protected virtual int ExpectedHistoryCallCount => 42;
// S&P 500 EMini futures
private string [] roots = new []
{
@@ -44,7 +47,6 @@ namespace QuantConnect.Algorithm.CSharp
};
private int _successCount = 0;
public override void Initialize()
{
SetStartDate(2013, 10, 8);
@@ -54,7 +56,7 @@ namespace QuantConnect.Algorithm.CSharp
foreach (var root in roots)
{
// set our expiry filter for this futures chain
AddFuture(root, Resolution.Minute).SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
AddFuture(root, Resolution.Minute, extendedMarketHours: ExtendedMarketHours).SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
}
SetBenchmark(d => 1000000);
@@ -74,7 +76,7 @@ namespace QuantConnect.Algorithm.CSharp
public override void OnEndOfAlgorithm()
{
if (_successCount < 49)
if (_successCount < ExpectedHistoryCallCount)
{
throw new Exception($"Scheduled Event did not assert history call as many times as expected: {_successCount}/49");
}
@@ -118,7 +120,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{
@@ -128,17 +130,27 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
public virtual bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 48688;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 5305;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
public virtual Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "0"},
{"Average Win", "0%"},
@@ -148,6 +160,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -162,25 +175,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", ""},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "79228162514264337593543950335"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"Portfolio Turnover", "0%"},
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}

View File

@@ -0,0 +1,89 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Securities;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Interfaces;
using System.Collections.Generic;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This example demonstrates how to get access to futures history for a given root symbol with extended market hours.
/// It also shows how you can prefilter contracts easily based on expirations, and inspect the futures
/// chain to pick a specific contract to trade.
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="history and warm up" />
/// <meta name="tag" content="history" />
/// <meta name="tag" content="futures" />
public class BasicTemplateFuturesHistoryWithExtendedMarketHoursAlgorithm : BasicTemplateFuturesHistoryAlgorithm
{
protected override bool ExtendedMarketHours => true;
protected override int ExpectedHistoryCallCount => 49;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 147769;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public override int AlgorithmHistoryDataPoints => 6112;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "0"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "0%"},
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino 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"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", ""},
{"Portfolio Turnover", "0%"},
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}
}

View File

@@ -31,66 +31,48 @@ namespace QuantConnect.Algorithm.CSharp
/// <meta name="tag" content="futures" />
public class BasicTemplateFuturesHourlyAlgorithm : BasicTemplateFuturesDailyAlgorithm
{
private Symbol _contractSymbol;
protected override Resolution Resolution => Resolution.Hour;
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public override bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 87391;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "140"},
{"Average Win", "0.01%"},
{"Average Loss", "-0.02%"},
{"Compounding Annual Return", "-38.171%"},
{"Drawdown", "0.400%"},
{"Expectancy", "-0.369"},
{"Net Profit", "-0.394%"},
{"Sharpe Ratio", "-24.82"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "66%"},
{"Win Rate", "34%"},
{"Profit-Loss Ratio", "0.84"},
{"Alpha", "0.42"},
{"Beta", "-0.041"},
{"Annual Standard Deviation", "0.01"},
{"Total Trades", "638"},
{"Average Win", "0.02%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "-1.610%"},
{"Drawdown", "1.600%"},
{"Expectancy", "-0.841"},
{"Net Profit", "-1.622%"},
{"Sharpe Ratio", "-8.787"},
{"Sortino Ratio", "-5.428"},
{"Probabilistic Sharpe Ratio", "0.000%"},
{"Loss Rate", "96%"},
{"Win Rate", "4%"},
{"Profit-Loss Ratio", "3.21"},
{"Alpha", "-0.018"},
{"Beta", "-0.003"},
{"Annual Standard Deviation", "0.002"},
{"Annual Variance", "0"},
{"Information Ratio", "-65.112"},
{"Tracking Error", "0.253"},
{"Treynor Ratio", "6.024"},
{"Total Fees", "$259.00"},
{"Estimated Strategy Capacity", "$130000.00"},
{"Lowest Capacity Asset", "GC VOFJUCDY9XNH"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-43.422"},
{"Return Over Maximum Drawdown", "-100.459"},
{"Portfolio Turnover", "4.716"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "320067074c8dd771f69602ab07001f1e"}
{"Information Ratio", "-1.473"},
{"Tracking Error", "0.089"},
{"Treynor Ratio", "5.593"},
{"Total Fees", "$1456.18"},
{"Estimated Strategy Capacity", "$9000.00"},
{"Lowest Capacity Asset", "ES VP274HSU1AF5"},
{"Portfolio Turnover", "17.91%"},
{"OrderListHash", "19d70e24c5d0922d1557de4adbf60ab5"}
};
}
}

View File

@@ -0,0 +1,193 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
using QuantConnect.Securities.Future;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This example demonstrates how to add futures for a given underlying asset.
/// It also shows how you can prefilter contracts easily based on expirations, and how you
/// can inspect the futures chain to pick a specific contract to trade.
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="benchmarks" />
/// <meta name="tag" content="futures" />
public class BasicTemplateFuturesWithExtendedMarketAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Symbol _contractSymbol;
// S&P 500 EMini futures
private const string RootSP500 = Futures.Indices.SP500EMini;
public Symbol SP500 = QuantConnect.Symbol.Create(RootSP500, SecurityType.Future, Market.CME);
// Gold futures
private const string RootGold = Futures.Metals.Gold;
public Symbol Gold = QuantConnect.Symbol.Create(RootGold, SecurityType.Future, Market.COMEX);
/// <summary>
/// Initialize your algorithm and add desired assets.
/// </summary>
public override void Initialize()
{
SetStartDate(2013, 10, 08);
SetEndDate(2013, 10, 10);
SetCash(1000000);
var futureSP500 = AddFuture(RootSP500, extendedMarketHours: true);
var futureGold = AddFuture(RootGold, extendedMarketHours: true);
// set our expiry filter for this futures chain
// SetFilter method accepts TimeSpan objects or integer for days.
// The following statements yield the same filtering criteria
futureSP500.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
futureGold.SetFilter(0, 182);
var benchmark = AddEquity("SPY");
SetBenchmark(benchmark.Symbol);
var seeder = new FuncSecuritySeeder(GetLastKnownPrices);
SetSecurityInitializer(security => seeder.SeedSecurity(security));
}
/// <summary>
/// Event - v3.0 DATA EVENT HANDLER: (Pattern) Basic template for user to override for receiving all subscription data in a single event
/// </summary>
/// <param name="slice">The current slice of data keyed by symbol string</param>
public override void OnData(Slice slice)
{
foreach (var changedEvent in slice.SymbolChangedEvents.Values)
{
Debug($"{Time} - SymbolChanged event: {changedEvent}");
if (Time.TimeOfDay != TimeSpan.Zero)
{
throw new Exception($"{Time} unexpected symbol changed event {changedEvent}!");
}
}
if (!Portfolio.Invested)
{
foreach(var chain in slice.FutureChains)
{
// find the front contract expiring no earlier than in 90 days
var contract = (
from futuresContract in chain.Value.OrderBy(x => x.Expiry)
where futuresContract.Expiry > Time.Date.AddDays(90)
select futuresContract
).FirstOrDefault();
// if found, trade it
if (contract != null)
{
_contractSymbol = contract.Symbol;
MarketOrder(_contractSymbol, 1);
}
}
}
else
{
Liquidate();
}
}
public override void OnEndOfAlgorithm()
{
// Get the margin requirements
var buyingPowerModel = Securities[_contractSymbol].BuyingPowerModel;
var futureMarginModel = buyingPowerModel as FutureMarginModel;
if (buyingPowerModel == null)
{
throw new Exception($"Invalid buying power model. Found: {buyingPowerModel.GetType().Name}. Expected: {nameof(FutureMarginModel)}");
}
var initialOvernight = futureMarginModel.InitialOvernightMarginRequirement;
var maintenanceOvernight = futureMarginModel.MaintenanceOvernightMarginRequirement;
var initialIntraday = futureMarginModel.InitialIntradayMarginRequirement;
var maintenanceIntraday = futureMarginModel.MaintenanceIntradayMarginRequirement;
}
public override void OnSecuritiesChanged(SecurityChanges changes)
{
foreach (var addedSecurity in changes.AddedSecurities)
{
if (addedSecurity.Symbol.SecurityType == SecurityType.Future
&& !addedSecurity.Symbol.IsCanonical()
&& !addedSecurity.HasData)
{
throw new Exception($"Future contracts did not work up as expected: {addedSecurity.Symbol}");
}
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 224660;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 340;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "8282"},
{"Average Win", "0.00%"},
{"Average Loss", "0.00%"},
{"Compounding Annual Return", "-100.000%"},
{"Drawdown", "13.900%"},
{"Expectancy", "-0.824"},
{"Net Profit", "-13.874%"},
{"Sharpe Ratio", "-19.346"},
{"Sortino Ratio", "-19.346"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "89%"},
{"Win Rate", "11%"},
{"Profit-Loss Ratio", "0.64"},
{"Alpha", "2.468"},
{"Beta", "-0.215"},
{"Annual Standard Deviation", "0.052"},
{"Annual Variance", "0.003"},
{"Information Ratio", "-58.37"},
{"Tracking Error", "0.295"},
{"Treynor Ratio", "4.695"},
{"Total Fees", "$19131.42"},
{"Estimated Strategy Capacity", "$130000.00"},
{"Lowest Capacity Asset", "GC VOFJUCDY9XNH"},
{"Portfolio Turnover", "32523.20%"},
{"OrderListHash", "584fbdabd837921edc6a7e99759b9c66"}
};
}
}

View File

@@ -0,0 +1,80 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Interfaces;
using QuantConnect.Orders;
using QuantConnect.Securities;
using QuantConnect.Securities.Future;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This example demonstrates how to add futures with daily resolution and extended market hours.
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="benchmarks" />
/// <meta name="tag" content="futures" />
public class BasicTemplateFuturesWithExtendedMarketDailyAlgorithm : BasicTemplateFuturesDailyAlgorithm
{
protected override bool ExtendedMarketHours => true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 16263;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "156"},
{"Average Win", "0.31%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "-0.024%"},
{"Drawdown", "0.400%"},
{"Expectancy", "-0.035"},
{"Net Profit", "-0.025%"},
{"Sharpe Ratio", "-1.602"},
{"Sortino Ratio", "-1.913"},
{"Probabilistic Sharpe Ratio", "11.172%"},
{"Loss Rate", "97%"},
{"Win Rate", "3%"},
{"Profit-Loss Ratio", "36.65"},
{"Alpha", "-0.007"},
{"Beta", "-0.001"},
{"Annual Standard Deviation", "0.005"},
{"Annual Variance", "0"},
{"Information Ratio", "-1.359"},
{"Tracking Error", "0.089"},
{"Treynor Ratio", "8.008"},
{"Total Fees", "$347.56"},
{"Estimated Strategy Capacity", "$1000.00"},
{"Lowest Capacity Asset", "ES VRJST036ZY0X"},
{"Portfolio Turnover", "4.16%"},
{"OrderListHash", "ce63f5e611a7ab2f49d49c9fdc777ef5"}
};
}
}

View File

@@ -0,0 +1,78 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This regressions tests the BasicTemplateFuturesDailyAlgorithm with hour data and extended market hours
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="benchmarks" />
/// <meta name="tag" content="futures" />
public class BasicTemplateFuturesWithExtendedMarketHourlyAlgorithm : BasicTemplateFuturesHourlyAlgorithm
{
protected override bool ExtendedMarketHours => true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 228936;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "1990"},
{"Average Win", "0.01%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "-4.683%"},
{"Drawdown", "4.700%"},
{"Expectancy", "-0.911"},
{"Net Profit", "-4.717%"},
{"Sharpe Ratio", "-7.178"},
{"Sortino Ratio", "-5.126"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "97%"},
{"Win Rate", "3%"},
{"Profit-Loss Ratio", "2.04"},
{"Alpha", "-0.038"},
{"Beta", "-0.008"},
{"Annual Standard Deviation", "0.005"},
{"Annual Variance", "0"},
{"Information Ratio", "-1.702"},
{"Tracking Error", "0.09"},
{"Treynor Ratio", "5.049"},
{"Total Fees", "$4538.98"},
{"Estimated Strategy Capacity", "$3000.00"},
{"Lowest Capacity Asset", "ES VP274HSU1AF5"},
{"Portfolio Turnover", "56.68%"},
{"OrderListHash", "4ebc10fed9201f59aa7fcd90fbb49448"}
};
}
}

View File

@@ -72,6 +72,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 78;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -84,7 +94,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "2.000%"},
{"Expectancy", "0"},
{"Net Profit", "1.529%"},
{"Sharpe Ratio", "8.889"},
{"Sharpe Ratio", "8.855"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "67.609%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -95,30 +106,12 @@ namespace QuantConnect.Algorithm.CSharp
{"Annual Variance", "0.049"},
{"Information Ratio", "-14.564"},
{"Tracking Error", "0.001"},
{"Treynor Ratio", "1.978"},
{"Treynor Ratio", "1.971"},
{"Total Fees", "$3.44"},
{"Estimated Strategy Capacity", "$110000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.247"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "12.105"},
{"Return Over Maximum Drawdown", "112.047"},
{"Portfolio Turnover", "0.249"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "f409be3a7c63d9c1394c2e6c005a15ee"}
{"Portfolio Turnover", "19.96%"},
{"OrderListHash", "0f357e8eeee4108d6b53f2b671e97f29"}
};
}
}

View File

@@ -34,7 +34,7 @@ namespace QuantConnect.Algorithm.CSharp
protected Symbol SpxOption;
private ExponentialMovingAverage _emaSlow;
private ExponentialMovingAverage _emaFast;
protected virtual Resolution Resolution => Resolution.Minute;
protected virtual int StartDay => 4;
@@ -109,53 +109,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 16049;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public virtual Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "4"},
{"Average Win", "0%"},
{"Average Loss", "-53.10%"},
{"Compounding Annual Return", "-92.544%"},
{"Drawdown", "10.100%"},
{"Expectancy", "-1"},
{"Net Profit", "-9.915%"},
{"Sharpe Ratio", "-3.845"},
{"Probabilistic Sharpe Ratio", "0.053%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Total Trades", "3"},
{"Average Win", "6.15%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "435.569%"},
{"Drawdown", "3.400%"},
{"Expectancy", "0"},
{"Net Profit", "5.516%"},
{"Sharpe Ratio", "-6.336"},
{"Sortino Ratio", "-12.182"},
{"Probabilistic Sharpe Ratio", "0.011%"},
{"Loss Rate", "0%"},
{"Win Rate", "100%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0.558"},
{"Beta", "0.313"},
{"Annual Standard Deviation", "0.112"},
{"Annual Variance", "0.013"},
{"Information Ratio", "-6.652"},
{"Tracking Error", "0.125"},
{"Treynor Ratio", "-1.379"},
{"Alpha", "-0.226"},
{"Beta", "0.02"},
{"Annual Standard Deviation", "0.034"},
{"Annual Variance", "0.001"},
{"Information Ratio", "-7.032"},
{"Tracking Error", "0.107"},
{"Treynor Ratio", "-10.906"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$13000000.00"},
{"Estimated Strategy Capacity", "$3000.00"},
{"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"},
{"Fitness Score", "0.039"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-1.763"},
{"Return Over Maximum Drawdown", "-9.371"},
{"Portfolio Turnover", "0.278"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "0668385036aba3e95127607dfc2f1a59"}
{"Portfolio Turnover", "24.07%"},
{"OrderListHash", "d1987f604e6d61584838ccc94adf7256"}
};
}
}

View File

@@ -1,6 +1,22 @@
/*
* 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 QuantConnect.Data;
using System.Collections.Generic;
namespace QuantConnect.Algorithm.CSharp
{
@@ -12,10 +28,10 @@ namespace QuantConnect.Algorithm.CSharp
protected override Resolution Resolution => Resolution.Daily;
protected override int StartDay => 1;
// two complete weeks starting from the 5th plus the 18th bar
protected virtual int ExpectedBarCount => 2 * 5 + 1;
// two complete weeks starting from the 5th. The 18th bar is not included since it is a holiday
protected virtual int ExpectedBarCount => 2 * 5;
protected int BarCounter = 0;
/// <summary>
/// Purchase a contract when we are not invested, liquidate otherwise
/// </summary>
@@ -30,7 +46,7 @@ namespace QuantConnect.Algorithm.CSharp
{
Liquidate();
}
// Count how many slices we receive with SPX data in it to assert later
if (slice.ContainsKey(Spx))
{
@@ -56,53 +72,22 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 0;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public override int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "9"},
{"Average Win", "0%"},
{"Average Loss", "-39.42%"},
{"Compounding Annual Return", "394.321%"},
{"Drawdown", "0.200%"},
{"Expectancy", "-1"},
{"Net Profit", "8.219%"},
{"Sharpe Ratio", "6.812"},
{"Probabilistic Sharpe Ratio", "91.380%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "2.236"},
{"Beta", "-1.003"},
{"Annual Standard Deviation", "0.317"},
{"Annual Variance", "0.101"},
{"Information Ratio", "5.805"},
{"Tracking Error", "0.359"},
{"Treynor Ratio", "-2.153"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"},
{"Fitness Score", "0.027"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "1776.081"},
{"Portfolio Turnover", "0.027"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "474e8e0e28ee84c869f8c69ec3efe371"}
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}
}

View File

@@ -8,7 +8,7 @@ namespace QuantConnect.Algorithm.CSharp
public class BasicTemplateIndexHourlyAlgorithm : BasicTemplateIndexDailyAlgorithm
{
protected override Resolution Resolution => Resolution.Hour;
protected override int ExpectedBarCount => base.ExpectedBarCount * 8;
protected override int ExpectedBarCount => base.ExpectedBarCount * 7;
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
@@ -20,53 +20,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 391;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public override int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "70"},
{"Average Win", "0%"},
{"Average Loss", "-0.23%"},
{"Compounding Annual Return", "-34.441%"},
{"Drawdown", "2.000%"},
{"Expectancy", "-1"},
{"Net Profit", "-2.028%"},
{"Sharpe Ratio", "-11.139"},
{"Probabilistic Sharpe Ratio", "0.000%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0.269"},
{"Beta", "0.086"},
{"Annual Standard Deviation", "0.023"},
{"Annual Variance", "0.001"},
{"Information Ratio", "-3.624"},
{"Tracking Error", "0.094"},
{"Treynor Ratio", "-3.042"},
{"Total Trades", "71"},
{"Average Win", "1.28%"},
{"Average Loss", "-0.06%"},
{"Compounding Annual Return", "-20.546%"},
{"Drawdown", "1.800%"},
{"Expectancy", "-0.402"},
{"Net Profit", "-0.922%"},
{"Sharpe Ratio", "-2.903"},
{"Sortino Ratio", "-6.081"},
{"Probabilistic Sharpe Ratio", "22.230%"},
{"Loss Rate", "97%"},
{"Win Rate", "3%"},
{"Profit-Loss Ratio", "19.95"},
{"Alpha", "-0.157"},
{"Beta", "0.025"},
{"Annual Standard Deviation", "0.053"},
{"Annual Variance", "0.003"},
{"Information Ratio", "-2.07"},
{"Tracking Error", "0.121"},
{"Treynor Ratio", "-6.189"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$310000.00"},
{"Estimated Strategy Capacity", "$300000.00"},
{"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"},
{"Fitness Score", "0.002"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-14.51"},
{"Return Over Maximum Drawdown", "-17.213"},
{"Portfolio Turnover", "0.299"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "3eb56c551f20e2ffa1c56c47c5ee6667"}
{"Portfolio Turnover", "24.63%"},
{"OrderListHash", "380076bc7854977f46318e8add9f1a25"}
};
}
}

View File

@@ -131,6 +131,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 0;
/// </summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>

View File

@@ -14,10 +14,9 @@
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using System.Collections.Generic;
namespace QuantConnect.Algorithm.CSharp
{
@@ -65,53 +64,22 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 0;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public override int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "9"},
{"Average Win", "0%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "-0.091%"},
{"Drawdown", "0.000%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.008%"},
{"Sharpe Ratio", "-4.033"},
{"Probabilistic Sharpe Ratio", "0.013%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0.001"},
{"Beta", "0"},
{"Annual Standard Deviation", "0"},
{"Annual Variance", "0"},
{"Information Ratio", "-0.447"},
{"Tracking Error", "0.136"},
{"Treynor Ratio", "-4.612"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "SPX XL80P59H5E6M|SPX 31"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-50718.291"},
{"Return Over Maximum Drawdown", "-11.386"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "5f5df233d68d9115a0d81785de54e71d"}
{"OrderListHash", "d41d8cd98f00b204e9800998ecf8427e"}
};
}
}

View File

@@ -35,53 +35,46 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public override Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public override long DataPoints => 2143;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public override int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "70"},
{"Total Trades", "72"},
{"Average Win", "0.00%"},
{"Average Loss", "0.00%"},
{"Compounding Annual Return", "0%"},
{"Compounding Annual Return", "-0.006%"},
{"Drawdown", "0.000%"},
{"Expectancy", "0.000"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Probabilistic Sharpe Ratio", "36.504%"},
{"Expectancy", "-0.486"},
{"Net Profit", "0.000%"},
{"Sharpe Ratio", "-101.77"},
{"Sortino Ratio", "-9053542.758"},
{"Probabilistic Sharpe Ratio", "17.439%"},
{"Loss Rate", "97%"},
{"Win Rate", "3%"},
{"Profit-Loss Ratio", "34.00"},
{"Alpha", "0"},
{"Profit-Loss Ratio", "17.50"},
{"Alpha", "-0.003"},
{"Beta", "-0"},
{"Annual Standard Deviation", "0"},
{"Annual Variance", "0"},
{"Information Ratio", "-0.449"},
{"Tracking Error", "0.138"},
{"Treynor Ratio", "-0"},
{"Treynor Ratio", "116.921"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "SPX XL80P59H5E6M|SPX 31"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "0"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "f21910eb98ceaa39e02020de95354d86"}
{"Portfolio Turnover", "0.00%"},
{"OrderListHash", "832944f7bfd8801bb37e5683a7510705"}
};
}
}

View File

@@ -14,8 +14,9 @@
*/
using QuantConnect.Data;
using QuantConnect.Orders;
using System.Collections.Generic;
using QuantConnect.Interfaces;
using QuantConnect.Orders;
namespace QuantConnect.Algorithm.CSharp
{
@@ -26,28 +27,29 @@ namespace QuantConnect.Algorithm.CSharp
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="using quantconnect" />
/// <meta name="tag" content="trading and orders" />
public class BasicTemplateIndiaAlgorithm : QCAlgorithm
public class BasicTemplateIndiaAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2003, 10, 07); //Set Start Date
SetEndDate(2003, 10, 11); //Set End Date
SetCash(100000); //Set Strategy Cash
SetAccountCurrency("INR"); //Set Account Currency
SetStartDate(2019, 1, 23); //Set Start Date
SetEndDate(2019, 10, 31); //Set End Date
SetCash(100000); //Set Strategy Cash
// Find more symbols here: http://quantconnect.com/data
// Equities Resolutions: Tick, Second, Minute, Hour, Daily.
AddEquity("UNIONBANK", Resolution.Second, Market.India);
AddEquity("YESBANK", Resolution.Minute, Market.India);
//Set Order Prperties as per the requirements for order placement
//Set Order Properties as per the requirements for order placement
DefaultOrderProperties = new IndiaOrderProperties(exchange: Exchange.NSE);
//override default productType value set in config.json if needed - order specific productType value
//DefaultOrderProperties = new IndiaOrderProperties(exchange: Exchange.NSE, IndiaOrderProperties.IndiaProductType.CNC);
// General Debug statement for acknowledgement
Debug("Intialization Done");
Debug("Initialization Done");
}
/// <summary>
@@ -58,7 +60,7 @@ namespace QuantConnect.Algorithm.CSharp
{
if (!Portfolio.Invested)
{
var marketTicket = MarketOrder("UNIONBANK", 1);
var marketTicket = MarketOrder("YESBANK", 1);
}
}
@@ -73,60 +75,53 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public bool CanRunLocally { get; } = false;
public bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 29524;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "3"},
{"Total Trades", "1"},
{"Average Win", "0%"},
{"Average Loss", "-1.01%"},
{"Compounding Annual Return", "261.134%"},
{"Drawdown", "2.200%"},
{"Expectancy", "-1"},
{"Net Profit", "1.655%"},
{"Sharpe Ratio", "8.505"},
{"Probabilistic Sharpe Ratio", "66.840%"},
{"Loss Rate", "100%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "-0.010%"},
{"Drawdown", "0.000%"},
{"Expectancy", "0"},
{"Net Profit", "-0.008%"},
{"Sharpe Ratio", "-497.389"},
{"Sortino Ratio", "-73.22"},
{"Probabilistic Sharpe Ratio", "0.001%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "-0.091"},
{"Beta", "1.006"},
{"Annual Standard Deviation", "0.224"},
{"Annual Variance", "0.05"},
{"Information Ratio", "-33.445"},
{"Tracking Error", "0.002"},
{"Treynor Ratio", "1.893"},
{"Total Fees", "$10.32"},
{"Estimated Strategy Capacity", "$27000000.00"},
{"Lowest Capacity Asset", "SPY R735QTJ8XC9X"},
{"Fitness Score", "0.747"},
{"Kelly Criterion Estimate", "38.796"},
{"Kelly Criterion Probability Value", "0.228"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "85.095"},
{"Portfolio Turnover", "0.747"},
{"Total Insights Generated", "100"},
{"Total Insights Closed", "99"},
{"Total Insights Analysis Completed", "99"},
{"Long Insight Count", "100"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$135639.1761"},
{"Total Accumulated Estimated Alpha Value", "$21852.9784"},
{"Mean Population Estimated Insight Value", "$220.7372"},
{"Mean Population Direction", "53.5354%"},
{"Mean Population Magnitude", "53.5354%"},
{"Rolling Averaged Population Direction", "58.2788%"},
{"Rolling Averaged Population Magnitude", "58.2788%"},
{"OrderListHash", "ad2216297c759d8e5aef48ff065f8919"}
{"Alpha", "0"},
{"Beta", "0"},
{"Annual Standard Deviation", "0"},
{"Annual Variance", "0"},
{"Information Ratio", "-1.183"},
{"Tracking Error", "0"},
{"Treynor Ratio", "0"},
{"Total Fees", "₹6.00"},
{"Estimated Strategy Capacity", "₹61000000000.00"},
{"Lowest Capacity Asset", "YESBANK UL"},
{"Portfolio Turnover", "0.00%"},
{"OrderListHash", "0cfbdeedf1ba2a02af1b6b35dfe8aac3"}
};
}
}

View File

@@ -0,0 +1,151 @@
/*
* 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 QuantConnect.Data;
using System.Collections.Generic;
using QuantConnect.Indicators;
using QuantConnect.Interfaces;
using QuantConnect.Orders;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This example demonstrates how to add index asset types.
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="benchmarks" />
/// <meta name="tag" content="indexes" />
public class BasicTemplateIndiaIndexAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
protected Symbol Nifty;
protected Symbol NiftyETF;
private ExponentialMovingAverage _emaSlow;
private ExponentialMovingAverage _emaFast;
/// <summary>
/// Initialize your algorithm and add desired assets.
/// </summary>
public override void Initialize()
{
SetAccountCurrency("INR"); //Set Account Currency
SetStartDate(2019, 1, 1); //Set End Date
SetEndDate(2019, 1, 5); //Set End Date
SetCash(1000000); //Set Strategy Cash
// Use indicator for signal; but it cannot be traded
Nifty = AddIndex("NIFTY50", Resolution.Minute, Market.India).Symbol;
//Trade Index based ETF
NiftyETF = AddEquity("JUNIORBEES", Resolution.Minute, Market.India).Symbol;
//Set Order Properties as per the requirements for order placement
DefaultOrderProperties = new IndiaOrderProperties(exchange: Exchange.NSE);
_emaSlow = EMA(Nifty, 80);
_emaFast = EMA(Nifty, 200);
}
/// <summary>
/// Index EMA Cross trading underlying.
/// </summary>
public override void OnData(Slice slice)
{
if (!slice.Bars.ContainsKey(Nifty) || !slice.Bars.ContainsKey(NiftyETF))
{
return;
}
// Warm up indicators
if (!_emaSlow.IsReady)
{
return;
}
if (_emaFast > _emaSlow)
{
if (!Portfolio.Invested)
{
var marketTicket = MarketOrder(NiftyETF, 1);
}
}
else
{
Liquidate();
}
}
public override void OnEndOfAlgorithm()
{
if (Portfolio[Nifty].TotalSaleVolume > 0)
{
throw new Exception("Index is not tradable.");
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public virtual bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 2882;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public virtual Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "6"},
{"Average Win", "0%"},
{"Average Loss", "0.00%"},
{"Compounding Annual Return", "-0.386%"},
{"Drawdown", "0.000%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.004%"},
{"Sharpe Ratio", "-328.371"},
{"Sortino Ratio", "-328.371"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0"},
{"Beta", "0"},
{"Annual Standard Deviation", "0"},
{"Annual Variance", "0"},
{"Information Ratio", "-23.595"},
{"Tracking Error", "0"},
{"Treynor Ratio", "0"},
{"Total Fees", "₹36.00"},
{"Estimated Strategy Capacity", "₹84000.00"},
{"Lowest Capacity Asset", "JUNIORBEES UL"},
{"Portfolio Turnover", "0.04%"},
{"OrderListHash", "5823d79e97915654a8f68ae5fa600b5a"}
};
}
}

View File

@@ -31,7 +31,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <meta name="tag" content="trading and orders" />
public class BasicTemplateIntrinioEconomicData : QCAlgorithm
{
// Set your Intrinino user and password.
// Set your Intrinio user and password.
public string _user = "";
public string _password = "";
@@ -55,7 +55,7 @@ namespace QuantConnect.Algorithm.CSharp
SetEndDate(year: 2013, month: 12, day: 31); //Set End Date
SetCash(startingCash: 100000); //Set Strategy Cash
// Set your Intrinino user and password.
// Set your Intrinio user and password.
IntrinioConfig.SetUserAndPassword(_user, _password);
// Set Intrinio config to make 1 call each minute, default is 1 call each 5 seconds.

View File

@@ -212,7 +212,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{

View File

@@ -82,7 +82,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{
@@ -99,6 +99,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 471135;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -112,6 +122,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -123,29 +134,11 @@ namespace QuantConnect.Algorithm.CSharp
{"Information Ratio", "0"},
{"Tracking Error", "0"},
{"Treynor Ratio", "0"},
{"Total Fees", "$10.00"},
{"Estimated Strategy Capacity", "$84000.00"},
{"Total Fees", "$26.00"},
{"Estimated Strategy Capacity", "$70000.00"},
{"Lowest Capacity Asset", "GOOCV W78ZERHAOVVQ|GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "0"},
{"Return Over Maximum Drawdown", "0"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "82c29cc9db9a300074d6ff136253f4ac"}
{"Portfolio Turnover", "61.31%"},
{"OrderListHash", "a36c60c5fb020121d6541683138d8f28"}
};
}
}

View File

@@ -92,7 +92,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{
@@ -109,12 +109,22 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 471124;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "778"},
{"Total Trades", "418"},
{"Average Win", "0%"},
{"Average Loss", "0%"},
{"Compounding Annual Return", "0%"},
@@ -122,6 +132,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -133,29 +144,11 @@ namespace QuantConnect.Algorithm.CSharp
{"Information Ratio", "0"},
{"Tracking Error", "0"},
{"Treynor Ratio", "0"},
{"Total Fees", "$778.00"},
{"Estimated Strategy Capacity", "$1000.00"},
{"Total Fees", "$543.40"},
{"Estimated Strategy Capacity", "$3000.00"},
{"Lowest Capacity Asset", "GOOCV W78ZFMEBBB2E|GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "0"},
{"Return Over Maximum Drawdown", "0"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "6a88f302b7f29a2c59e4b1e978161da1"}
{"Portfolio Turnover", "338.60%"},
{"OrderListHash", "c9eb598f33939941206efc018eb6ee45"}
};
}
}

View File

@@ -87,7 +87,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{

View File

@@ -89,7 +89,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{
@@ -106,6 +106,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 471124;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -119,6 +129,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "0"},
{"Net Profit", "0%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "0%"},
{"Win Rate", "0%"},
@@ -133,26 +144,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$2.00"},
{"Estimated Strategy Capacity", "$1300000.00"},
{"Lowest Capacity Asset", "GOOCV 30AKMEIPOSS1Y|GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "0"},
{"Return Over Maximum Drawdown", "0"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "9d9f9248ee8fe30d87ff0a6f6fea5112"}
{"Portfolio Turnover", "10.71%"},
{"OrderListHash", "6b2f02d5cedb870e539a7bfb967c777f"}
};
}
}

View File

@@ -81,14 +81,14 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{
Log(orderEvent.ToString());
// Check for our expected OTM option expiry
if (orderEvent.Message == "OTM")
if (orderEvent.Message.Contains("OTM", StringComparison.InvariantCulture))
{
// Assert it is at midnight (5AM UTC)
if (orderEvent.UtcTime != new DateTime(2016, 1, 16, 5, 0, 0))
@@ -119,6 +119,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 36834;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -131,7 +141,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "1.300%"},
{"Expectancy", "-1"},
{"Net Profit", "-1.311%"},
{"Sharpe Ratio", "-3.31"},
{"Sharpe Ratio", "-3.607"},
{"Sortino Ratio", "-1.188"},
{"Probabilistic Sharpe Ratio", "0.035%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
@@ -144,28 +155,10 @@ namespace QuantConnect.Algorithm.CSharp
{"Tracking Error", "0.034"},
{"Treynor Ratio", "0"},
{"Total Fees", "$1.00"},
{"Estimated Strategy Capacity", "$18000.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "GOOCV W78ZFMML01JA|GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "-1.496"},
{"Return Over Maximum Drawdown", "-11.673"},
{"Portfolio Turnover", "0"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "c6d089f1fb86379c74a7413a9c2f8553"}
{"Portfolio Turnover", "0.05%"},
{"OrderListHash", "27226eb0860aa34fd513a8a66a732ad0"}
};
}
}

View File

@@ -97,6 +97,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 1252633;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -110,6 +120,7 @@ namespace QuantConnect.Algorithm.CSharp
{"Expectancy", "-1"},
{"Net Profit", "-0.311%"},
{"Sharpe Ratio", "0"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
@@ -124,26 +135,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$1.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "GOOCV VP83T1ZUHROL"},
{"Fitness Score", "0.188"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-73.268"},
{"Portfolio Turnover", "0.376"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "452e7a36e0a95e33d3457a908add3ead"}
{"Portfolio Turnover", "15.08%"},
{"OrderListHash", "f76ee0af976faeb84643e8fcd6c7b331"}
};
}
}

View File

@@ -136,6 +136,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 993927;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -146,14 +156,15 @@ namespace QuantConnect.Algorithm.CSharp
{"Average Loss", "-0.28%"},
{"Compounding Annual Return", "0%"},
{"Drawdown", "385.400%"},
{"Expectancy", "-0.249"},
{"Expectancy", "0.502"},
{"Net Profit", "-386.489%"},
{"Sharpe Ratio", "-0.033"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "1.235%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
{"Loss Rate", "0%"},
{"Win Rate", "100%"},
{"Profit-Loss Ratio", "0.50"},
{"Alpha", "-95.983"},
{"Alpha", "-94.012"},
{"Beta", "263.726"},
{"Annual Standard Deviation", "30.617"},
{"Annual Variance", "937.371"},
@@ -163,26 +174,8 @@ namespace QuantConnect.Algorithm.CSharp
{"Total Fees", "$3.00"},
{"Estimated Strategy Capacity", "$0"},
{"Lowest Capacity Asset", "AAPL R735QTJ8XC9X"},
{"Fitness Score", "0.168"},
{"Kelly Criterion Estimate", "0.327"},
{"Kelly Criterion Probability Value", "1"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "0"},
{"Portfolio Turnover", "0.224"},
{"Total Insights Generated", "28"},
{"Total Insights Closed", "24"},
{"Total Insights Analysis Completed", "24"},
{"Long Insight Count", "28"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$13.64796"},
{"Total Accumulated Estimated Alpha Value", "$1.89555"},
{"Mean Population Estimated Insight Value", "$0.07898125"},
{"Mean Population Direction", "50%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "50.0482%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "87603bd45898dd9c456745fa51f989a5"}
{"Portfolio Turnover", "13.46%"},
{"OrderListHash", "135d5cf7bc14eb9eb88260bbf6b3a671"}
};
}
}

View File

@@ -76,7 +76,7 @@ namespace QuantConnect.Algorithm.CSharp
.ThenByDescending(x => x.Right)
.FirstOrDefault();
if (atmContract != null)
if (atmContract != null && IsMarketOpen(atmContract.Symbol))
{
// if found, trade it
MarketOrder(atmContract.Symbol, 1);
@@ -89,7 +89,7 @@ namespace QuantConnect.Algorithm.CSharp
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <param name="orderEvent">Order event details containing details of the events</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{
@@ -106,6 +106,16 @@ namespace QuantConnect.Algorithm.CSharp
/// </summary>
public Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public long DataPoints => 32351;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
@@ -118,41 +128,24 @@ namespace QuantConnect.Algorithm.CSharp
{"Drawdown", "0.200%"},
{"Expectancy", "-1"},
{"Net Profit", "-0.134%"},
{"Sharpe Ratio", "-8.839"},
{"Sharpe Ratio", "-9.78"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "0%"},
{"Loss Rate", "100%"},
{"Win Rate", "0%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.083"},
{"Alpha", "0.075"},
{"Beta", "-0.054"},
{"Annual Standard Deviation", "0.008"},
{"Annual Variance", "0"},
{"Information Ratio", "-18.699"},
{"Tracking Error", "0.155"},
{"Treynor Ratio", "1.296"},
{"Treynor Ratio", "1.434"},
{"Total Fees", "$4.00"},
{"Estimated Strategy Capacity", "$1000.00"},
{"Lowest Capacity Asset", "AAPL 2ZTXYMUAHCIAU|AAPL R735QTJ8XC9X"},
{"Fitness Score", "0.04"},
{"Kelly Criterion Estimate", "0"},
{"Kelly Criterion Probability Value", "0"},
{"Sortino Ratio", "79228162514264337593543950335"},
{"Return Over Maximum Drawdown", "-118.28"},
{"Portfolio Turnover", "0.081"},
{"Total Insights Generated", "0"},
{"Total Insights Closed", "0"},
{"Total Insights Analysis Completed", "0"},
{"Long Insight Count", "0"},
{"Short Insight Count", "0"},
{"Long/Short Ratio", "100%"},
{"Estimated Monthly Alpha Value", "$0"},
{"Total Accumulated Estimated Alpha Value", "$0"},
{"Mean Population Estimated Insight Value", "$0"},
{"Mean Population Direction", "0%"},
{"Mean Population Magnitude", "0%"},
{"Rolling Averaged Population Direction", "0%"},
{"Rolling Averaged Population Magnitude", "0%"},
{"OrderListHash", "81e8a822d43de2165c1d3f52964ec312"}
{"Portfolio Turnover", "2.28%"},
{"OrderListHash", "3f6cce0fcc7b988ba378a357ede1af93"}
};
}
}

View File

@@ -0,0 +1,147 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Interfaces;
using QuantConnect.Data.Market;
using System.Collections.Generic;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This example demonstrates how to add and trade SPX index weekly options
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="options" />
/// <meta name="tag" content="indexes" />
public class BasicTemplateSPXWeeklyIndexOptionsAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Symbol _spxOption;
/// <summary>
/// Initialize your algorithm and add desired assets.
/// </summary>
public override void Initialize()
{
SetStartDate(2021, 1, 4);
SetEndDate(2021, 1, 10);
SetCash(1000000);
var spx = AddIndex("SPX").Symbol;
// regular option SPX contracts
var spxOptions = AddIndexOption(spx);
spxOptions.SetFilter(u => u.Strikes(0, 1).Expiration(0, 30));
// weekly option SPX contracts
var spxw = AddIndexOption(spx, "SPXW");
spxw.SetFilter(u => u.Strikes(0, 1)
// single week ahead since there are many SPXW contracts and we want to preserve performance
.Expiration(0, 7)
.IncludeWeeklys());
_spxOption = spxw.Symbol;
}
/// <summary>
/// Index EMA Cross trading underlying.
/// </summary>
public override void OnData(Slice slice)
{
if (Portfolio.Invested)
{
return;
}
OptionChain chain;
if (slice.OptionChains.TryGetValue(_spxOption, out chain))
{
// we find at the money (ATM) put contract with closest expiration
var atmContract = chain
.OrderBy(x => x.Expiry)
.ThenBy(x => Math.Abs(chain.Underlying.Price - x.Strike))
.ThenByDescending(x => x.Right)
.FirstOrDefault();
if (atmContract != null)
{
// if found, buy until it expires
MarketOrder(atmContract.Symbol, 1);
}
}
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
Debug(orderEvent.ToString());
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public virtual bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp, Language.Python };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 57794;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public virtual Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "5"},
{"Average Win", "0%"},
{"Average Loss", "-0.69%"},
{"Compounding Annual Return", "58.005%"},
{"Drawdown", "0.400%"},
{"Expectancy", "-0.5"},
{"Net Profit", "0.588%"},
{"Sharpe Ratio", "0.836"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "51.980%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
{"Profit-Loss Ratio", "0"},
{"Alpha", "0.286"},
{"Beta", "-0.04"},
{"Annual Standard Deviation", "0.004"},
{"Annual Variance", "0"},
{"Information Ratio", "-98.963"},
{"Tracking Error", "0.072"},
{"Treynor Ratio", "-0.086"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$580000.00"},
{"Lowest Capacity Asset", "SPXW 31K54PVWHUJHQ|SPX 31"},
{"Portfolio Turnover", "0.48%"},
{"OrderListHash", "07469a94a93198bbccadc8bc9cdfe87a"}
};
}
}

View File

@@ -0,0 +1,151 @@
/*
* 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.Linq;
using QuantConnect.Data;
using QuantConnect.Orders;
using QuantConnect.Interfaces;
using QuantConnect.Data.Market;
using System.Collections.Generic;
using QuantConnect.Securities.Option;
using System;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This example demonstrates how to add and trade SPX index weekly option strategy
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="options" />
/// <meta name="tag" content="indexes" />
public class BasicTemplateSPXWeeklyIndexOptionsStrategyAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition
{
private Symbol _spxOption;
/// <summary>
/// Initialize your algorithm and add desired assets.
/// </summary>
public override void Initialize()
{
SetStartDate(2021, 1, 4);
SetEndDate(2021, 1, 10);
SetCash(1000000);
var spx = AddIndex("SPX").Symbol;
// weekly option SPX contracts
var spxw = AddIndexOption(spx, "SPXW");
spxw.SetFilter(u => u.Strikes(-1, +1)
// single week ahead since there are many SPXW contracts and we want to preserve performance
.Expiration(0, 7)
.IncludeWeeklys());
_spxOption = spxw.Symbol;
}
public override void OnData(Slice slice)
{
if (Portfolio.Invested)
{
return;
}
OptionChain chain;
if (slice.OptionChains.TryGetValue(_spxOption, out chain))
{
// we find the first expiration group of call options and order them in ascending strike
var contracts = chain
.Where(x => x.Right == OptionRight.Call)
.OrderBy(x => x.Expiry)
.GroupBy(x => x.Expiry)
.First()
.OrderBy(x => x.Strike)
.ToList();
if (contracts.Count > 1)
{
var smallerStrike = contracts[0];
var higherStrike = contracts[1];
// if found, buy until it expires
var optionStrategy = OptionStrategies.BearCallSpread(_spxOption, smallerStrike.Strike, higherStrike.Strike, smallerStrike.Expiry);
Buy(optionStrategy, 1);
}
}
}
public override void OnOrderEvent(OrderEvent orderEvent)
{
Debug(orderEvent.ToString());
if (orderEvent.Symbol.ID.Symbol != "SPXW")
{
throw new Exception("Unexpected order event symbol!");
}
}
/// <summary>
/// This is used by the regression test system to indicate if the open source Lean repository has the required data to run this algorithm.
/// </summary>
public virtual bool CanRunLocally { get; } = true;
/// <summary>
/// This is used by the regression test system to indicate which languages this algorithm is written in.
/// </summary>
public virtual Language[] Languages { get; } = { Language.CSharp };
/// <summary>
/// Data Points count of all timeslices of algorithm
/// </summary>
public virtual long DataPoints => 40893;
/// <summary>
/// Data Points count of the algorithm history
/// </summary>
public virtual int AlgorithmHistoryDataPoints => 0;
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public virtual Dictionary<string, string> ExpectedStatistics => new Dictionary<string, string>
{
{"Total Trades", "10"},
{"Average Win", "0.47%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "99.729%"},
{"Drawdown", "0.100%"},
{"Expectancy", "24.484"},
{"Net Profit", "0.890%"},
{"Sharpe Ratio", "8.078"},
{"Sortino Ratio", "0"},
{"Probabilistic Sharpe Ratio", "93.697%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
{"Profit-Loss Ratio", "49.97"},
{"Alpha", "-1.975"},
{"Beta", "0.301"},
{"Annual Standard Deviation", "0.021"},
{"Annual Variance", "0"},
{"Information Ratio", "-143.477"},
{"Tracking Error", "0.049"},
{"Treynor Ratio", "0.566"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$13000000.00"},
{"Lowest Capacity Asset", "SPXW XKX6S2GM9PGU|SPX 31"},
{"Portfolio Turnover", "0.28%"},
{"OrderListHash", "69b28e4f5b33ff54f173c14ea1e00c50"}
};
}
}

View File

@@ -0,0 +1,93 @@
/*
* 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 QuantConnect.Data;
using System.Collections.Generic;
using QuantConnect.Orders;
using System.Linq;
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// This example demonstrates how to add index asset types and change the tradable condition
/// </summary>
/// <meta name="tag" content="using data" />
/// <meta name="tag" content="benchmarks" />
/// <meta name="tag" content="indexes" />
public class BasicTemplateTradableIndexAlgorithm : BasicTemplateIndexAlgorithm
{
private OrderTicket _ticket;
/// <summary>
/// Initialize your algorithm and add desired assets.
/// </summary>
public override void Initialize()
{
base.Initialize();
Securities[Spx].IsTradable = true;
}
/// <summary>
/// Index EMA Cross trading underlying.
/// </summary>
public override void OnData(Slice slice)
{
base.OnData(slice);
_ticket ??= MarketOrder(Spx, 1);
}
public override void OnEndOfAlgorithm()
{
if (!_ticket.Status.IsFill())
{
throw new Exception("Index is tradable.");
}
}
/// <summary>
/// This is used by the regression test system to indicate what the expected statistics are from running the algorithm
/// </summary>
public override Dictionary<string, string> ExpectedStatistics => new()
{
{"Total Trades", "5"},
{"Average Win", "6.15%"},
{"Average Loss", "-0.01%"},
{"Compounding Annual Return", "434.741%"},
{"Drawdown", "3.400%"},
{"Expectancy", "589.124"},
{"Net Profit", "5.510%"},
{"Sharpe Ratio", "-6.336"},
{"Sortino Ratio", "-12.182"},
{"Probabilistic Sharpe Ratio", "0.011%"},
{"Loss Rate", "50%"},
{"Win Rate", "50%"},
{"Profit-Loss Ratio", "1179.25"},
{"Alpha", "-0.226"},
{"Beta", "0.02"},
{"Annual Standard Deviation", "0.034"},
{"Annual Variance", "0.001"},
{"Information Ratio", "-7.032"},
{"Tracking Error", "0.107"},
{"Treynor Ratio", "-10.906"},
{"Total Fees", "$0.00"},
{"Estimated Strategy Capacity", "$3000.00"},
{"Lowest Capacity Asset", "SPX XL80P3GHDZXQ|SPX 31"},
{"Portfolio Turnover", "24.13%"},
{"OrderListHash", "41644492e032f38d0d9be0915f09a03b"}
};
}
}

View File

@@ -1,4 +1,4 @@
/*
/*
* QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
* Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
*
@@ -28,7 +28,7 @@ namespace QuantConnect.Algorithm.CSharp.Benchmarks
public override void Initialize()
{
SetStartDate(2000, 01, 01);
SetEndDate(2017, 01, 01);
SetEndDate(2022, 01, 01);
SetBenchmark(dt => 1m);
AddEquity("SPY");
}
@@ -42,4 +42,4 @@ namespace QuantConnect.Algorithm.CSharp.Benchmarks
}
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More