mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 15:09:42 +00:00
* docs: Create new CODING_GUIDELINES doc Rids excess contribution instructions from other packages Adds AGENTS.md file for the AI overlords Rids unused templates Updates ADD_NEW_EXCHANGE.md with minor fixes * docs: Fix linter issues and minor adjustments based on Copilot feedback * docs: Update coding guidelines for API parameters and testing practices * docs: Remove redundant GoDoc references Adds copilot-instructions.md * docs: Update CODING_GUIDELINES with export recommendations and test commentary * docs: Fix formatting inconsistencies in ADD_NEW_EXCHANGE.md links * docs: Update struct naming conventions for request and response types * docs: Improve clarity and consistency in ADD_NEW_EXCHANGE.md and CODING_GUIDELINES.md * refactor: Simplify error handling in QueryOrder method
54 lines
3.9 KiB
Markdown
54 lines
3.9 KiB
Markdown
# GoCryptoTrader Backtester: Portfolio package
|
|
|
|
<img src="/backtester/common/backtester.png?raw=true" width="350px" height="350px" hspace="70">
|
|
|
|
|
|
[](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml)
|
|
[](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE)
|
|
[](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio)
|
|
[](https://codecov.io/gh/thrasher-corp/gocryptotrader)
|
|
[](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader)
|
|
|
|
|
|
This portfolio package is part of the GoCryptoTrader codebase.
|
|
|
|
## This is still in active development
|
|
|
|
You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3).
|
|
|
|
Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/zt-38z8abs3l-gH8AAOk8XND6DP5NfCiG_g)
|
|
|
|
## Portfolio package overview
|
|
|
|
The portfolio is one of the most critical packages in the GoCryptoTrader Backtester. It is responsible for making sure that all orders, simulated or otherwise are within all defined risk and sizing rules defined in the config.
|
|
The portfolio receives three kinds of events to be processed: `OnSignal`, `OnFill` and `Update`
|
|
|
|
The following steps are taken for the `OnSignal` function:
|
|
- Retrieve previous iteration's holdings data
|
|
- If a buy order signal is received, ensure there are enough funds
|
|
- If a sell order signal is received, ensure there are any holdings to sell
|
|
- If any other direction, return
|
|
- The portfolio manager will then size the order according to the exchange asset currency pair's settings along with the portfolio manager's own sizing rules
|
|
- In the event that the order is to large, the sizing package will reduce the order until it fits that limit, inclusive of fees.
|
|
- When an order is sized under the limits, an order event cannot be raised an no order will be submitted by the exchange
|
|
- The portfolio manager's sizing rules override any CurrencySettings' rules if the sizing is outside the portfolio manager's
|
|
- The portfolio manager will then assess the risk of the order, it will compare existing holdings and ensures that if an order is placed, it will not go beyond risk rules as defined in the config
|
|
- If the risk is too high, the order signal will be changed to `CouldNotBuy`, `CouldNotSell` or `DoNothing`
|
|
- If the order is deemed appropriate, the order event will be returned and appended to the event queue for the exchange event handler to run and place the order
|
|
|
|
The following steps are taken for the `OnFill` function:
|
|
- Previous holdings are retrieved and amended with new order information.
|
|
- The stats for the exchange asset currency pair will be updated to reflect the order and pricing
|
|
- The order will be added to the compliance manager for analysis in future events or the statistics package
|
|
|
|
The following steps are taken for the `Update` function:
|
|
- The `Update` function is called when orders are not placed, this allows for the portfolio manager to still keep track of pricing and holding statistics, while not needing to process any orders
|
|
|
|
## Donations
|
|
|
|
<img src="https://github.com/thrasher-corp/gocryptotrader/blob/master/web/src/assets/donate.png?raw=true" hspace="70">
|
|
|
|
If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to:
|
|
|
|
***bc1qk0jareu4jytc0cfrhr5wgshsq8282awpavfahc***
|