* Filter everything with users * Fix backtests and user management * Add cursor rules * Fix backtest and bots * Update configs names * Sign until unauth * Setup delegate * Setup delegate and sign * refact * Enhance Privy signature generation with improved cryptographic methods * Add Fastify backend * Add Fastify backend routes for privy * fix privy signing * fix privy client * Fix tests * add gmx core * fix merging sdk * Fix tests * add gmx core * add gmx core * add privy to boilerplate * clean * fix * add fastify * Remove Managing.Fastify submodule * Add Managing.Fastify as regular directory instead of submodule * Update .gitignore to exclude Managing.Fastify dist and node_modules directories * Add token approval functionality to Privy plugin - Introduced a new endpoint `/approve-token` for approving ERC20 tokens. - Added `approveToken` method to the Privy plugin for handling token approvals. - Updated `signPrivyMessage` to differentiate between message signing and token approval requests. - Enhanced the plugin with additional schemas for input validation. - Included new utility functions for token data retrieval and message construction. - Updated tests to verify the new functionality and ensure proper request decoration. * Add PrivyApproveTokenResponse model for token approval response - Created a new class `PrivyApproveTokenResponse` to encapsulate the response structure for token approval requests. - The class includes properties for `Success` status and a transaction `Hash`. * Refactor trading commands and enhance API routes - Updated `OpenPositionCommandHandler` to use asynchronous methods for opening trades and canceling orders. - Introduced new Fastify routes for opening positions and canceling orders with appropriate request validation. - Modified `EvmManager` to handle both Privy and non-Privy wallet operations, utilizing the Fastify API for Privy wallets. - Adjusted test configurations to reflect changes in account types and added helper methods for testing Web3 proxy services. * Enhance GMX trading functionality and update dependencies - Updated `dev:start` script in `package.json` to include the `-d` flag for Fastify. - Upgraded `fastify-cli` dependency to version 7.3.0. - Added `sourceMap` option to `tsconfig.json`. - Refactored GMX plugin to improve position opening logic, including enhanced error handling and validation. - Introduced a new method `getMarketInfoFromTicker` for better market data retrieval. - Updated account type in `PrivateKeys.cs` to use `Privy`. - Adjusted `EvmManager` to utilize the `direction` enum directly for trade direction handling. * Refactor GMX plugin for improved trading logic and market data retrieval - Enhanced the `openGmxPositionImpl` function to utilize the `TradeDirection` enum for trade direction handling. - Introduced `getTokenDataFromTicker` and `getMarketByIndexToken` functions for better market and token data retrieval. - Updated collateral calculation and logging for clarity. - Adjusted `EvmManager` to ensure proper handling of price values in trade requests. * Refactor GMX plugin and enhance testing for position opening - Updated `test:single` script in `package.json` to include TypeScript compilation before running tests. - Removed `this` context from `getClientForAddress` function and replaced logging with `console.error`. - Improved collateral calculation in `openGmxPositionImpl` for better precision. - Adjusted type casting for `direction` in the API route to utilize `TradeDirection` enum. - Added a new test for opening a long position in GMX, ensuring functionality and correctness. * Update sdk * Update * update fastify * Refactor start script in package.json to simplify command execution - Removed the build step from the start script, allowing for a more direct launch of the Fastify server. * Update package.json for Web3Proxy - Changed the name from "Web3Proxy" to "web3-proxy". - Updated version from "0.0.0" to "1.0.0". - Modified the description to "The official Managing Web3 Proxy". * Update Dockerfile for Web3Proxy - Upgraded Node.js base image from 18-alpine to 22.14.0-alpine. - Added NODE_ENV environment variable set to production. * Refactor Dockerfile and package.json for Web3Proxy - Removed the build step from the Dockerfile to streamline the image creation process. - Updated the start script in package.json to include the build step, ensuring the application is built before starting the server. * Add fastify-tsconfig as a development dependency in Dockerfile-web3proxy * Remove fastify-tsconfig extension from tsconfig.json for Web3Proxy * Add PrivyInitAddressResponse model for handling initialization responses - Introduced a new class `PrivyInitAddressResponse` to encapsulate the response structure for Privy initialization, including properties for success status, USDC hash, order vault hash, and error message. * Update * Update * Remove fastify-tsconfig installation from Dockerfile-web3proxy * Add build step to Dockerfile-web3proxy - Included `npm run build` in the Dockerfile to ensure the application is built during the image creation process. * Update * approvals * Open position from front embedded wallet * Open position from front embedded wallet * Open position from front embedded wallet * Fix call contracts * Fix limit price * Close position * Fix close position * Fix close position * add pinky * Refactor position handling logic * Update Dockerfile-pinky to copy package.json and source code from the correct directory * Implement password protection modal and enhance UI with new styles; remove unused audio elements and update package dependencies. * add cancel orders * Update callContract function to explicitly cast account address as Address type * Update callContract function to cast transaction parameters as any type for compatibility * Cast transaction parameters as any type in approveTokenImpl for compatibility * Cast wallet address and transaction parameters as Address type in approveTokenImpl for type safety * Add .env configuration file for production setup including database and server settings * Refactor home route to update welcome message and remove unused SDK configuration code * add referral code * fix referral * Add sltp * Fix typo * Fix typo * setup sltp on backtend * get orders * get positions with slp * fixes * fixes close position * fixes * Remove MongoDB project references from Dockerfiles for managing and worker APIs * Comment out BotManagerWorker service registration and remove MongoDB project reference from Dockerfile * fixes
245 lines
8.5 KiB
Markdown
245 lines
8.5 KiB
Markdown
# Introduction
|
|
|
|
Managing App is a bot management application written using C# and Typescript. First goal was to be able to run an
|
|
infinite
|
|
number of Bot without any limitations (will depend on your server capabilities only)
|
|
It is designed to support multiples exchanges and be controlled via webUI or Discord.
|
|
It contains bot management, backtesting, scenario management and money management..
|
|
|
|
---
|
|
|
|
# Roadmap
|
|
|
|
## v1 - The base
|
|
|
|
- [x] Bot management
|
|
- [x] Backtesting
|
|
- [x] MoneyManagement
|
|
- [x] Strategies systems
|
|
- [x] WebUI
|
|
- [x] Robust trading management
|
|
- [x] Adaptive trading
|
|
- [x] Account management
|
|
- [x] Workers (prices, backtests, volumes)
|
|
- [x] Bot backup
|
|
|
|
## v2 - The custody back
|
|
|
|
- [x] Web3 Authentification
|
|
- [x] Hot-wallets management
|
|
- [x] Chainlink and Subgraphs feeds
|
|
- [x] [GMX Contracts integration](https://gmx.io/)
|
|
- [ ] GMX v2 Contracts integration
|
|
|
|
### v2.1
|
|
|
|
- [x] Tools : RektFees, Spotlight
|
|
- [x] Funding Rates
|
|
- [ ] Strategies optimisation
|
|
- [ ] Delta neutral positions
|
|
- [ ] Address tracking
|
|
- [ ] Trading desk
|
|
- [ ] Metrics (backtests, portofolio)
|
|
- [ ] Account Abstraction Layer
|
|
- [ ] Enhance performances
|
|
- [ ] Dockerize everything
|
|
|
|
### v2.2
|
|
|
|
- [ ] Hedging Bot with Options [HegicOption](https://www.hegic.co/)
|
|
- [ ] Market making
|
|
|
|
## v3 - The bitcoin protocol
|
|
|
|
- [ ] Integrate [LNMarkets](https://lnmarkets.com/)
|
|
|
|
## v4 - The omnipotence
|
|
|
|
- [ ] Connect to [Blockstream Satellite](https://blockstream.com/satellite/)
|
|
|
|
# Stack
|
|
|
|
## Architecture
|
|
|
|

|
|
|
|
## Front-end
|
|
|
|
- [Vite.JS](https://vitejs.dev/)
|
|
- [Tailwindcss](https://tailwindcss.com/)
|
|
- [Daisy UI](https://daisyui.com/)
|
|
- [HeroIcon](https://heroicons.com/)
|
|
- [Toastify](https://fkhadra.github.io/react-toastify/introduction)
|
|
- [Tradingview Lightweight-charts](https://github.com/tradingview/lightweight-charts)
|
|
- [Ploty](https://github.com/plotly/react-plotly.js)
|
|
- [SignalR](https://github.com/dotnet/aspnetcore/tree/main/src/SignalR#readme)
|
|
- [Wagmi](https://wagmi.sh/)
|
|
- [Connectkit](https://github.com/family/connectkit)
|
|
|
|
## Back-end
|
|
|
|
- .NET 7
|
|
- [SignalR](https://dotnet.microsoft.com/en-us/apps/aspnet/signalr)
|
|
- [Discord.Net](https://github.com/discord-net/Discord.Net)
|
|
- [CryptoExchange.Net](https://github.com/JKorf/CryptoExchange.Net)
|
|
- [Stock Indicators](https://daveskender.github.io/Stock.Indicators/)
|
|
- [InfluxDb](https://github.com/influxdata/influxdb-client-csharp)
|
|
- [Nethereum](https://github.com/Nethereum/Nethereum)
|
|
|
|
---
|
|
|
|
# Features
|
|
|
|
## Privy
|
|
|
|
Front-end required:
|
|
- Sign message to get jwt
|
|
- Delegate embedded address
|
|
- Sign delegation
|
|
- Send >10 USDc and 5$ of ETH for txn fees
|
|
- Trigger to init address
|
|
|
|
Backend actions:
|
|
- Approve GMX contracts addresses
|
|
- Approve USDc contract address
|
|
|
|
|
|
## Money Management
|
|
|
|
- Create a defined money management for a given timeframe (StopLoss, TakeProfit, Amount to risk)
|
|
- Edit a money management configuration
|
|
- Delete a configuration
|
|
|
|
## Strategies
|
|
|
|
- Build a strategy
|
|
- Delete strategy
|
|
|
|
Strategies availables :
|
|
|
|
| Strategy | Description | Recommended values |
|
|
|----------------------|------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
|
|
| ChandelierExit | Triggers a SHORT signal when the previous candle is above the ChandelierExit, and the last candle closes below the ChandelierExit. | Period: 22, Multiplier: 3 |
|
|
| EMACross | Triggers a signal when the last candle crosses the EMA. | Period: 200 |
|
|
| EMATrend | Returns a Trend signal SHORT when the last candle is below the EMA, and a Trend LONG signal when StochRSI < 20%. | Period: 200 |
|
|
| MACDCross | Triggers a signal when EMAs cross. | FastPeriod: 12, SlowPeriods: 26, SignalPeriods: 9 |
|
|
| RSIDivergenceConfirm | First, detects a divergence and then triggers a signal when the divergence is confirmed. | Period: 4 for 6 |
|
|
| RSIDivergence | Triggers a signal when a divergence occurs on the period. | Period: 4 for 6 |
|
|
| STC | Returns a signal SHORT when the previous STC > 75% and the current STC <= 75%. | Period: 22 |
|
|
| StochRsiTrend | Returns a Trend signal SHORT when Stoch RSI > 80% and a Trend LONG signal when StochRSI < 20%. | Period: 22 |
|
|
| SuperTrend | Triggers a SHORT signal when the previous candle is above the super trend, and the last candle closes below the super trend. | Period: 10, Multiplier: 3 |
|
|
| ThreeWhiteSoldiers | Triggers a LONG signal when the Three White Soldiers pattern is identified. | Lookback Period: 3 |
|
|
|
|
## Scenarios
|
|
|
|
- Build a scenario with multiple strategies
|
|
- Delete a scenario
|
|
|
|
## Backtests
|
|
|
|
The backtest system works with multiple required parameters :
|
|
|
|
- Exchange (Binance, Kraken, FTX)
|
|
- Ticker (ADAUSDT, BTCUSDT, etc..)
|
|
- Days : Since when did you want to start backtest. Should be a negative value
|
|
- ScenarioName
|
|
- Timeframe (OneDay, FifteenMinutes, etc..)
|
|
- BotType (ScalpingBot or FlippingBot)
|
|
- Initial balance
|
|
|
|
## Bots
|
|
|
|
- Create and run a bot
|
|
- Stop / Restart a bot
|
|
- Delete a bot
|
|
- Stop all bots
|
|
- Set bot to watch only (send signal to discord instead of opening a new position)
|
|
|
|
Bot types availables :
|
|
|
|
| Type | Description |
|
|
|-------------|----------------------------------------------------------------------------------------|
|
|
| ScalpingBot | This bot will open position and wait before opening a new one |
|
|
| FlippingBot | The flipping bot flipping the position only when a strategy trigger an opposite signal |
|
|
|
|
## Privy Integration
|
|
|
|
This project uses [Privy](https://privy.io/) for wallet authentication and management. Privy provides a seamless authentication experience with support for both embedded wallets and external wallet connections.
|
|
|
|
### Supported Networks
|
|
|
|
- Ethereum Mainnet
|
|
- Arbitrum One
|
|
|
|
### Configuration
|
|
|
|
To use Privy in this project, you need to:
|
|
|
|
1. Create a Privy account at [https://console.privy.io/](https://console.privy.io/)
|
|
2. Create a new app in the Privy dashboard
|
|
3. Copy your Privy App ID to the `.env` file:
|
|
|
|
```
|
|
VITE_PRIVY_APP_ID=your-privy-app-id
|
|
```
|
|
|
|
### Features
|
|
|
|
- **Multi-chain support**: Connect to Ethereum and Arbitrum networks
|
|
- **Embedded wallets**: Create and manage wallets directly in the browser
|
|
- **Social login**: Authenticate with email, Google, and other providers
|
|
- **Seamless integration**: Works with wagmi for blockchain interactions
|
|
|
|
### Usage
|
|
|
|
The Privy provider is configured in `src/main.tsx` and can be used throughout the application with the `usePrivy` hook:
|
|
|
|
```tsx
|
|
import { usePrivy } from '@privy-io/react-auth';
|
|
|
|
function MyComponent() {
|
|
const { user, login, logout, authenticated } = usePrivy();
|
|
|
|
if (!authenticated) {
|
|
return <button onClick={login}>Login</button>;
|
|
}
|
|
|
|
return (
|
|
<div>
|
|
<p>Welcome, {user.email}</p>
|
|
<button onClick={logout}>Logout</button>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
For more information, see the [Privy documentation](https://docs.privy.io/).
|
|
|
|
# Development
|
|
|
|
## Utilities
|
|
|
|
The project includes several utility scripts to help with development:
|
|
|
|
### ESM Import Fixer
|
|
|
|
When working with ES Modules in Node.js:
|
|
- Local module imports require `.js` file extensions
|
|
- JSON imports require proper type assertions
|
|
|
|
We provide utility scripts that automatically handle these requirements:
|
|
|
|
```bash
|
|
# Fix imports in the src directory (add .js extensions and JSON assertions)
|
|
npm run fix-imports
|
|
|
|
# Update JSON imports to use modern "with { type: "json" }" syntax
|
|
npm run update-json-imports
|
|
|
|
# Run both scripts in sequence (fix imports then update JSON import syntax)
|
|
npm run prepare-code
|
|
```
|
|
|
|
For more details, see the [scripts documentation](scripts/README.md).
|
|
|