qstrader | QuantStart.com - QSTrader backtesting simulation engine
kandi X-RAY | qstrader Summary
kandi X-RAY | qstrader Summary
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
Top functions reviewed by kandi - BETA
- 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
qstrader Key Features
qstrader Examples and Code Snippets
$ 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
poetry add tradindstrategy
pip install tradindstrategy
poetry add tradindstrategy[qstrader]
Community Discussions
Trending Discussions on Simulation
QUESTION
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:54The 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.
QUESTION
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:16You need to use sample()
, but this way:
QUESTION
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:42Most, 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.
DigressionYou 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.
QUESTION
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:34Something like this ?
QUESTION
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:03Before giving an answer here I would once again first suggest some refactors and fixes:
First of all your CreateRndTree
is wrong ;)
QUESTION
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:17For 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!
QUESTION
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:03This is a bit of a blind spot in AnyLogic. It can only be done indirectly:
- Create an empty agent population with your agent type
- Tell the resource pool to use that agent type
- 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
QUESTION
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:21I 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
QUESTION
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:24You 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
QUESTION
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:41You 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.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install qstrader
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
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page