qstrader | QuantStart.com - QSTrader backtesting simulation engine

 by   mhallsmoore Python Version: 0.2.8 License: MIT

kandi X-RAY | qstrader Summary

kandi X-RAY | qstrader Summary

qstrader is a Python library typically used in Simulation, Framework applications. qstrader has no bugs, it has no vulnerabilities, it has build file available, it has a Permissive License and it has medium support. You can install using 'pip install qstrader' or download it from GitHub, PyPI.

QSTrader is a free Python-based open-source modular schedule-driven backtesting framework for long-short equities and ETF based systematic trading strategies. QSTrader can be best described as a loosely-coupled collection of modules for carrying out end-to-end backtests with realistic trading mechanics. The default modules provide useful functionality for certain types of systematic trading strategies and can be utilised without modification. However the intent of QSTrader is for the users to extend, inherit or fully replace each module in order to provide custom functionality for their own use case. The software is currently under active development and is provided under a permissive "MIT" license.
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              qstrader has a medium active ecosystem.
              It has 2428 star(s) with 804 fork(s). There are 267 watchers for this library.
              There were 1 major release(s) in the last 6 months.
              There are 98 open issues and 128 have been closed. On average issues are closed in 766 days. There are 13 open pull requests and 0 closed requests.
              It has a neutral sentiment in the developer community.
              The latest version of qstrader is 0.2.8

            kandi-Quality Quality

              qstrader has 0 bugs and 0 code smells.

            kandi-Security Security

              qstrader has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
              qstrader code analysis shows 0 unresolved vulnerabilities.
              There are 0 security hotspots that need review.

            kandi-License License

              qstrader is licensed under the MIT License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              qstrader releases are available to install and integrate.
              Deployable package is available in PyPI.
              Build file is available. You can build the component from source.
              Installation instructions, examples and code snippets are available.
              It has 5556 lines of code, 363 functions and 118 files.
              It has medium code complexity. Code complexity directly impacts maintainability of the code.

            Top functions reviewed by kandi - BETA

            kandi has reviewed qstrader and discovered the below as its top functions. This is intended to give you an instant insight into qstrader implemented functionality, and help decide if they suit your requirements.
            • Plot the results
            • Plot strategy
            • Plot monthly returns
            • Plot drawdown
            • Loads csv files into a dataframe
            • Obtain a list of asset csv files
            • Obtain the asset symbol from the csv file
            • Loads csv into pandas dataframe
            • Creates the full statistics
            • Calculate the number of allocations
            • Return a dict representation of the object
            • Convert a pandas dataframe to a column list
            • Add asset to price buffer
            • Create a dict of asset price buffers
            • Computes the key for the asset lookup
            • Update the assets with the given dt
            • Add assets to the universe
            • Append asset to buffer
            • Get a portfolio as a dictionary
            • Return a dict of holdings
            • Convert the bars into a Pandas DataFrames
            • Convert a pandas DataFrame into a Pandas DataFrame
            • Create a dictionary of all asset prices
            Get all kandi verified functions for this library.

            qstrader Key Features

            No Key Features are available at this moment for qstrader.

            qstrader Examples and Code Snippets

            StrategyCeleryWebsite
            Pythondot img1Lines of Code : 15dot img1no licencesLicense : No License
            copy iconCopy
            $ mkdir github
            $ cd github
            $ git clone https://github.com/easytrader/StrategyCeleryWebsite.git
            $ pip install -r https://raw.githubusercontent.com/easytrader/StrategyCeleryWebsite/master/requirements.txt
            $ sudo pip install celery
            $ sudo pip install ce  
            Installing the package
            Pythondot img2Lines of Code : 3dot img2License : Non-SPDX (NOASSERTION)
            copy iconCopy
            poetry add tradindstrategy
            
            pip install tradindstrategy 
            
            poetry add tradindstrategy[qstrader]
              

            Community Discussions

            QUESTION

            How to generate a negative binomial distribution with different sample sizes for power analyses in R?
            Asked 2022-Apr-14 at 12:54

            I try to do a power simulation with an outcome variable that is zero-inflated. So I use a negative binomial distribution. What I need is the following distribution:

            ...

            ANSWER

            Answered 2022-Apr-14 at 12:54

            The problem is that in your lambda function, you are not using the argument names for rnbinom. The default order for the arguments if you don't name them is n, size, prob, mu, so you are passing 2000 to n, 25 to size and 0.9 to prob. Just name the arguments explicitly as you did in your first example, and your code will work.

            Source https://stackoverflow.com/questions/71871538

            QUESTION

            How can I randomly sample binomial thing?
            Asked 2022-Mar-20 at 22:29

            For example, I want to randomly line the 0, 1 (50% respectively) 10 times. So, there should be five "0" and five "1".

            But, when I used:

            ...

            ANSWER

            Answered 2022-Mar-20 at 21:16

            You need to use sample(), but this way:

            Source https://stackoverflow.com/questions/71550665

            QUESTION

            Why should I use normalised units in numerical integration?
            Asked 2022-Mar-19 at 10:40

            I was simulating the solar system (Sun, Earth and Moon). When I first started working on the project, I used the base units: meters for distance, seconds for time, and metres per second for velocity. Because I was dealing with the solar system, the numbers were pretty big, for example the distance between the Earth and Sun is 150·10⁹ m.

            When I numerically integrated the system with scipy.solve_ivp, the results were completely wrong. Here is an example of Earth and Moon trajectories.

            But then I got a suggestion from a friend that I should use standardised units: astronomical unit (AU) for distance and years for time. And the simulation started working flawlessly!

            My question is: Why is this a generally valid advice for problems such as mine? (Mind that this is not about my specific problem which was already solved, but rather why the solution worked.)

            ...

            ANSWER

            Answered 2021-Jul-25 at 07:42

            Most, if not all integration modules work best out of the box if:

            • your dynamical variables have the same order of magnitude;
            • that order of magnitude is 1;
            • the smallest time scale of your dynamics also has the order of magnitude 1.

            This typically fails for astronomical simulations where the orders of magnitude vary and values as well as time scales are often large in typical units.

            The reason for the above behaviour of integrators is that they use step-size adaption, i.e., the integration step is adjusted to keep the estimated error at a defined level. The step-size adaption in turn is governed by a lot of parameters like absolute tolerance, relative tolerance, minimum time step, etc. You can usually tweak these parameters, but if you don’t, there need to be some default values and these default values are chosen with the above setup in mind.

            Digression

            You might ask yourself: Can these parameters not be chosen more dynamically? As a developer and maintainer of an integration module, I would roughly expect that introducing such automatisms has the following consequences:

            • About twenty in a thousand users will not run into problems like yours.
            • About fifty a thousand users (including the above) miss an opportunity to learn rudimentary knowledge about how integrators work and reading documentations.
            • About one in thousand users will run into a horrible problem with the automatisms that is much more difficult to solve than the above.
            • I need to introduce new parameters governing the automatisms that are even harder to grasp for the average user.
            • I spend a lot of time in devising and implementing the automatisms.

            Source https://stackoverflow.com/questions/68500704

            QUESTION

            Adding a new variable with a code/formula that generates a moderate association with a previous one
            Asked 2022-Mar-12 at 16:34

            I try adding a new variable that has an association with the previous one. Is there a math/code trick/formula to increase the width of confidence bands in this association?

            ...

            ANSWER

            Answered 2022-Mar-12 at 16:34

            QUESTION

            Showcasing a binary tree in unity problom
            Asked 2022-Mar-01 at 13:03

            i made a function in unity that takes a Binode - and making it into a2d tree, but here the problem: my so called idea to display the tree is this:

            make a recursive function, and every time the level will go up by 1, and it will also send the function a bool(is the right or is the left of the old node) and then if its true it will get the root of the tree and - the y by level * 55, then it will either x = level * 55, if it right, and if its left the x = level * -55.

            now the problome is lets say i have a tree that has 3 levels, then if i will put a right node to the left tree it will just put it were the most right node is and it will overlap, kinda hard to explain in text but i hope you understand.

            heres the repository: git

            code:

            ...

            ANSWER

            Answered 2022-Mar-01 at 13:03

            Before giving an answer here I would once again first suggest some refactors and fixes:

            First of all your CreateRndTree is wrong ;)

            Source https://stackoverflow.com/questions/71299789

            QUESTION

            Transporter move through wall
            Asked 2022-Feb-10 at 15:17

            In my model I use a transporter which uses free navigation. If it is right, the transporters can not move through walls, the strange thing is that in my model at one point somehow the transporter is able to move through a wall?

            He slips through the wall somewhere at the red circled section, when I check the simulation. (see screenshot, blue is the transporter)

            When I look at the model, I also see that there is no gap or something (see second image). Am I'm overlooking something (maybe something about that I've multiple floors)? or is it a bug? Does somebody know how to fix it.

            ...

            ANSWER

            Answered 2022-Feb-10 at 15:17

            For other people facing this problem, when having a low turn radius (0.01) and no speed limit near obstacle in your transporterfleet, it is possible to move through walls, if you change this the problem is solved!

            Source https://stackoverflow.com/questions/71047564

            QUESTION

            Anylogic - create Resources and add to ResourcePool
            Asked 2022-Feb-10 at 07:06

            I'm having difficulty finding the documentation I need to work with Resources and resourcePools - there is no "resource API documentation" that I can find.

            I would like to programatically create static resources (of a custom type) and then add these resources to a resourcePool. When creating the resources, I'd like to be able to specify their property values prior to adding them to the resourcePool. In my mind the code would look something like this:

            ...

            ANSWER

            Answered 2021-Sep-20 at 07:03

            This is a bit of a blind spot in AnyLogic. It can only be done indirectly:

            1. Create an empty agent population with your agent type
            2. Tell the resource pool to use that agent type
            3. set the resource pool capacity as you need. The pool will create agents for your in that population (if the capacity is larger than the current number of resources)

            If you want to manually create a resource, you must call myResourcePool.set_Capacity(myResourcePool.getCapacity()+1)

            Destroying 1 resource works vice-versa.

            Also, make sure to "destroy resources on capacity decrease" so the agents are destroyed from the population

            Source https://stackoverflow.com/questions/69249906

            QUESTION

            Anylogic: Release specific resource
            Asked 2022-Feb-10 at 07:05

            I've got another small issue with AnyLogic resources.

            I want to be able to release a specific resource from a resource pool - not just any resource from the pool. The reason is that I occasionally seize multiple resources from a ResourcePool (one at a time) and then wish to release the resources again one at a time. But I don't want to release "any" resource from the pool, I want to be able to specify which specific resource of the pool to release.

            Is this possible or is this one of the limitations of the resources implementation?

            ...

            ANSWER

            Answered 2021-Sep-21 at 03:21

            I can think of many ways to do this depending on the situation... first one is to use a selectOutput before the release in order to release or not. The selectOutput will check if it's the right resource to release

            the other option, if you want to release everything with the same release block but in a given order, you can put a wait block before the release block and wait for the right moment to release the resource

            another one, is to use wrap up actions, and put a wait block in the wrap up, to wait for the other resources to arrive there before releasing so they are released in order

            Source https://stackoverflow.com/questions/69262281

            QUESTION

            Anylogic: Is it possible to move Transporters based on travel time, rather than distance and speed?
            Asked 2022-Feb-09 at 19:24

            I would like to use transporters in my model in various places (tugboats, forklifts, reach stackers, trucks, etc.). However, my model paths and animation can't be drawn to scale, detailed explanation in brackets below. Is there a way I can move the transporter from one node to another based on travel time (similar to what a movable resource can do), rather than speed and distance? The "Move By Transporter" block does not seem to allow this and I have not been able to find a solution online. Thank you for your help.

            (Explanation on why I can't draw to scale: firstly, some destination locations (storage areas, etc.) are not known yet and will just be represented by a travel delay to get there, secondly, different areas of the model will be drawn to different scales, i.e. some network paths will represent a multiple kilometers and some network paths will only represent a few hundred meters, etc.)

            ...

            ANSWER

            Answered 2022-Jan-31 at 05:24

            You can draw the paths to suit your animation and then simply set the speed of the transporter that gets seized to a speed so that the duration of the movement matches what you need it to be, and when the transporter gets released set the speed back to normal

            Source https://stackoverflow.com/questions/70888803

            QUESTION

            AnyLogic: False number format when exporting data to excel
            Asked 2022-Feb-09 at 19:23

            I collect various data in time plots. If I copy the timeplot data and then paste it into Excel, the number format is often wrong. For example, I often get a date like Aug 94 instead of the actual number from the TimePlot. Unfortunately, I can't easily format this date into a number either, since the formatted number does not match the actual number from the timeplot. If I format the date in the same format as the number above and below, then I get the number 34547. However, this number does not correspond to the actual number of the TimePlot. Anyone know how I can prevent this problem?

            ...

            ANSWER

            Answered 2022-Jan-17 at 19:41

            You can only solve this on the Excel side, AnyLogic provides the raw data for you. Excel then interprets stuff. You can test it by pasting the chart raw data into a txt or csv file.

            So either fix your Excel settings or paste into a csv, then into an xlsx.

            Or better still: Do not manually paste at all. Instead, write your model results into the AnyLogic database and export to Excel from there: this takes away a lot of the pain for you. Check the example models to learn how to do that.

            Source https://stackoverflow.com/questions/70746384

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install qstrader

            Installation requires a Python3 environment. The simplest approach is to download a self-contained scientific Python distribution such as the Anaconda Individual Edition. You can then install QSTrader into an isolated virtual environment using either conda or pip, as shown below.
            The QSTrader repository provides some simple example strategies at /examples. Within this quickstart section a classic 60/40 equities/bonds portfolio will be backtested with monthly rebalancing on the last day of the calendar month. To get started download the sixty_forty.py file and place into the directory of your choice. The 60/40 script makes use of OHLC 'daily bar' data from Yahoo Finance. In particular it requires the SPY and AGG ETFs data. Download the full history for each and save as CSV files in same directory as sixty_forty.py.

            Support

            Comprehensive documentation for QSTrader can be found on QuantStart.com at https://www.quantstart.com/qstrader/.
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            Install
          • PyPI

            pip install qstrader

          • CLONE
          • HTTPS

            https://github.com/mhallsmoore/qstrader.git

          • CLI

            gh repo clone mhallsmoore/qstrader

          • sshUrl

            git@github.com:mhallsmoore/qstrader.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link