{"id":46840974,"url":"https://github.com/uberdeveloper/omspy","last_synced_at":"2026-03-10T13:04:46.926Z","repository":{"id":229221098,"uuid":"415345233","full_name":"uberdeveloper/omspy","owner":"uberdeveloper","description":"Improved Order Management System for stock trading","archived":false,"fork":false,"pushed_at":"2025-12-01T18:21:57.000Z","size":5976,"stargazers_count":52,"open_issues_count":19,"forks_count":29,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-12-04T08:23:46.924Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uberdeveloper.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-10-09T15:19:40.000Z","updated_at":"2025-12-01T18:22:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"72d77859-1679-400b-87ee-6ea64776dc2b","html_url":"https://github.com/uberdeveloper/omspy","commit_stats":{"total_commits":338,"total_committers":2,"mean_commits":169.0,"dds":0.03254437869822491,"last_synced_commit":"e35b389c2cbfc85bcaeea0bb60f25987546eaa48"},"previous_names":["uberdeveloper/omspy"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/uberdeveloper/omspy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uberdeveloper%2Fomspy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uberdeveloper%2Fomspy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uberdeveloper%2Fomspy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uberdeveloper%2Fomspy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uberdeveloper","download_url":"https://codeload.github.com/uberdeveloper/omspy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uberdeveloper%2Fomspy/sbom","scorecard":{"id":906301,"data":{"date":"2025-08-11","repo":{"name":"github.com/uberdeveloper/omspy","commit":"beb467423ca3dc9c469272f47358f0597a81b188"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yml:36","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:39","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:40","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":2,"reason":"3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: omspy/NorenRestApi-0.0.30-py2.py3-none-any.whl:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/uberdeveloper/omspy/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/uberdeveloper/omspy/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:96: update your workflow using https://app.stepsecurity.io/secureworkflow/uberdeveloper/omspy/codeql.yml/main?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.19.0 not signed: https://api.github.com/repos/uberdeveloper/omspy/releases/189725679","Warn: release artifact v0.18.0 not signed: https://api.github.com/repos/uberdeveloper/omspy/releases/185771878","Warn: release artifact v0.17.1 not signed: https://api.github.com/repos/uberdeveloper/omspy/releases/184067129","Warn: release artifact v0.17.0 not signed: https://api.github.com/repos/uberdeveloper/omspy/releases/184065251","Warn: release artifact v0.16.0 not signed: https://api.github.com/repos/uberdeveloper/omspy/releases/119302095","Warn: release artifact v0.19.0 does not have provenance: https://api.github.com/repos/uberdeveloper/omspy/releases/189725679","Warn: release artifact v0.18.0 does not have provenance: https://api.github.com/repos/uberdeveloper/omspy/releases/185771878","Warn: release artifact v0.17.1 does not have provenance: https://api.github.com/repos/uberdeveloper/omspy/releases/184067129","Warn: release artifact v0.17.0 does not have provenance: https://api.github.com/repos/uberdeveloper/omspy/releases/184065251","Warn: release artifact v0.16.0 does not have provenance: https://api.github.com/repos/uberdeveloper/omspy/releases/119302095"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (4) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2020-25 / GHSA-gwp7-vqr5-h33h","Warn: Project is vulnerable to: GHSA-79v4-65xg-pq4g","Warn: Project is vulnerable to: PYSEC-2024-38","Warn: Project is vulnerable to: GHSA-vqfr-h8mv-ghfj","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-2c2j-9gv5-cj73","Warn: Project is vulnerable to: GHSA-f96h-pmfr-66vw","Warn: Project is vulnerable to: PYSEC-2023-83 / GHSA-v5gw-mw7f-84px","Warn: Project is vulnerable to: GHSA-48p4-8xcf-vxj5","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T17:29:00.823Z","repository_id":229221098,"created_at":"2025-08-24T17:29:00.823Z","updated_at":"2025-08-24T17:29:00.823Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30334412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T12:41:07.687Z","status":"ssl_error","status_checked_at":"2026-03-10T12:41:06.728Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-10T13:04:46.437Z","updated_at":"2026-03-10T13:04:46.918Z","avatar_url":"https://github.com/uberdeveloper.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📈 OMSpy Order Management\n\nA powerful yet simple order management system for trading operations. Build, track, and execute orders with confidence.\n\n## ✨ Features\n\n- 🎯 **Simple API** - Intuitive order creation and management\n- 📊 **Position Tracking** - Real-time position and P\u0026L monitoring\n- 💾 **Database Integration** - Built-in SQLite persistence\n- 🔄 **Order Types** - Market, Limit, Stop, and complex orders\n- 📦 **Order Baskets** - Group and manage multiple orders\n- ⚡ **High Performance** - Optimized for trading workflows\n\n## 🚀 Quick Start\n\n### 🎯 Create a Basic Order\n\n```python\nfrom omspy.order import Order\n\n# Create a simple market buy order\norder = Order(symbol=\"AAPL\", side=\"buy\", quantity=10)\nprint(f\"Order ID: {order.id}\")\n```\n\n### 💰 Create Different Order Types\n\n```python\n# Market order (executes immediately)\nmarket_order = Order(symbol=\"TSLA\", side=\"buy\", quantity=5)\n\n# Limit order (executes at specific price or better)\nlimit_order = Order(symbol=\"MSFT\", side=\"sell\", quantity=3,\n                    order_type=\"LIMIT\", price=380.50)\n\n# Stop loss order (triggers when price drops)\nstop_order = Order(symbol=\"NVDA\", side=\"sell\", quantity=2,\n                   order_type=\"STOP\", trigger_price=450.00)\n```\n\n### ⏰ Time-Based Orders\n\n```python\n# Order that expires after 30 minutes\nshort_order = Order(symbol=\"GOOGL\", side=\"buy\", quantity=1,\n                    expires_in=1800)  # 30 minutes\n\n# Day order (valid until market close)\nday_order = Order(symbol=\"META\", side=\"buy\", quantity=5,\n                  validity=\"DAY\")\n```\n\n### 🔄 Order Operations\n\n```python\n# Execute order through broker\norder_id = order.execute(broker=my_broker)\nif order_id:\n    print(f\"📋 Order placed with ID: {order_id}\")\n\n# Update order from exchange feed\nexchange_data = {\n    \"status\": \"PARTIALLY_FILLED\",\n    \"filled_quantity\": 5,\n    \"average_price\": 175.25\n}\norder.update(exchange_data)\n\n# Modify existing order\norder.modify(broker=my_broker, quantity=8, price=174.50)\n\n# Cancel pending order\nif order.is_pending:\n    order.cancel(broker=my_broker)\n```\n\n### 📋 Clone and Modify Orders\n\n```python\n# Create a template order\ntemplate = Order(symbol=\"AAPL\", side=\"buy\", quantity=10,\n                 order_type=\"LIMIT\", price=150.00)\n\n# Clone for different symbols/dates\nbuy_googl = template.clone()\nbuy_googl.symbol = \"GOOGL\"\nbuy_googl.price = 125.50\n\nsell_msft = template.clone()\nsell_msft.symbol = \"MSFT\"\nsell_msft.side = \"sell\"\nsell_msft.price = 380.25\n```\n\n## 📦 Order Baskets (CompoundOrder)\n\n### 🎯 Create Order Basket\n\n```python\nfrom omspy.order import CompoundOrder\n\n# Create a basket for strategy execution\nbasket = CompoundOrder(broker=my_broker)\n\n# Add multiple orders\nbasket.add_order(symbol=\"AAPL\", side=\"buy\", quantity=10)\nbasket.add_order(symbol=\"MSFT\", side=\"sell\", quantity=5)\nbasket.add_order(symbol=\"TSLA\", side=\"buy\", quantity=3,\n                 order_type=\"LIMIT\", price=250.00)\n```\n\n### 📊 Track Basket Positions\n\n```python\n# Get net positions across all orders\npositions = basket.positions\nprint(f\"📊 Net positions: {dict(positions)}\")\n\n# Get total quantities\nprint(f\"Buy quantities: {dict(basket.buy_quantity)}\")\nprint(f\"Sell quantities: {dict(basket.sell_quantity)}\")\n```\n\n### 💰 Calculate Average Prices\n\n```python\n# Get average buy/sell prices per symbol\navg_buy = basket.average_buy_price\navg_sell = basket.average_sell_price\n\nprint(f\"📈 Average buy prices: {avg_buy}\")\nprint(f\"📉 Average sell prices: {avg_sell}\")\n```\n\n### ⚡ Execute Basket Operations\n\n```python\n# Execute all orders in basket\nbasket.execute_all()\n\n# Update all pending orders with exchange data\norder_updates = {\n    \"order_123\": {\"status\": \"COMPLETE\", \"filled_quantity\": 10},\n    \"order_456\": {\"status\": \"PARTIALLY_FILLED\", \"filled_quantity\": 3}\n}\nresults = basket.update_orders(order_updates)\nprint(f\"Update results: {results}\")\n\n# Check completed vs pending orders\ncompleted = basket.completed_orders\npending = basket.pending_orders\nprint(f\"✅ Completed: {len(completed)} orders\")\nprint(f\"⏳ Pending: {len(pending)} orders\")\n```\n\n### 🎯 Advanced Basket Management\n\n```python\n# Access orders by index or custom key\norder_by_index = basket.get(0)  # First order\norder_by_key = basket.get(\"aapl_buy\")  # Custom key if set\n\n# Add orders with custom keys\nbasket.add_order(symbol=\"NVDA\", side=\"buy\", quantity=2, key=\"nvidia_entry\")\n\n# Calculate total MTM with live prices\nbasket.update_ltp({\n    \"AAPL\": 175.50,\n    \"MSFT\": 380.25,\n    \"TSLA\": 252.00\n})\nprint(f\"💰 Total P\u0026L: ${basket.total_mtm:.2f}\")\n```\n\n## 💾 Database Integration\n\n### 🔧 Enable Database Storage\n\n```python\nfrom omspy.order import create_db\n\n# Create persistent database\ndb = create_db(\"trading_orders.db\")\n\n# Auto-save orders to database\norder.connection = db\nbasket.connection = db  # All orders in basket will save\n```\n\n### 💾 Manual Database Operations\n\n```python\n# Save specific order\nsuccess = order.save_to_db()\nprint(f\"Order saved: {success}\")\n\n# Save all orders in basket\nbasket.save()\n\n# Query orders from database\nfor row in db[\"orders\"].rows:\n    print(f\"ID: {row['id']}, Symbol: {row['symbol']}, Status: {row['status']}\")\n```\n\n## ⏰ Order Lifecycle Management\n\n### 🕐 Time and Expiration\n\n```python\n# Check time until expiry\ntime_left = order.time_to_expiry\nprint(f\"⏰ Expires in: {time_left} seconds\")\n\n# Check if order has expired\nif order.has_expired:\n    print(\"⏰ Order has expired\")\n\n# Time since expiry (if expired)\nif order.has_expired:\n    time_expired = order.time_after_expiry\n    print(f\"⏰ Expired {time_expired} seconds ago\")\n```\n\n### 🔒 Order Locking\n\n```python\n# Prevent order modifications for 60 seconds\norder.add_lock(code=1, seconds=60)  # 1 = modify lock\n\n# Prevent order cancellation for 30 seconds\norder.add_lock(code=2, seconds=30)  # 2 = cancel lock\n\n# Check lock status\nif not order.lock.can_modify:\n    print(f\"🔒 Modify locked until {order.lock.modification_lock_till}\")\n```\n\n## 🎯 Order Management Patterns\n\n### 📋 Scalping Strategy\n\n```python\n# Quick entries and exits\nscalp = CompoundOrder(broker=broker)\n\n# Enter position\nscalp.add_order(symbol=\"AAPL\", side=\"buy\", quantity=100,\n                order_type=\"MARKET\", key=\"entry\")\n\n# Set stop loss\nscalp.add_order(symbol=\"AAPL\", side=\"sell\", quantity=100,\n                order_type=\"STOP\", trigger_price=174.00, key=\"stop_loss\")\n\n# Set profit target\nscalp.add_order(symbol=\"AAPL\", side=\"sell\", quantity=100,\n                order_type=\"LIMIT\", price=176.00, key=\"profit_target\")\n```\n\n### 📊 Pair Trading\n\n```python\n# Trade two correlated instruments\npair_trade = CompoundOrder(broker=broker)\n\n# Long first instrument\npair_trade.add_order(symbol=\"XOM\", side=\"buy\", quantity=50, key=\"long_leg\")\n\n# Short second instrument (ratio adjusted)\npair_trade.add_order(symbol=\"CVX\", side=\"sell\", quantity=45, key=\"short_leg\")\n\n# Monitor pair performance\npositions = pair_trade.positions\ncorrelation_exposure = positions.get(\"XOM\", 0) + positions.get(\"CVX\", 0)\nprint(f\"📊 Net pair exposure: {correlation_exposure}\")\n```\n\n### 🔄 Bracket Orders\n\n```python\n# Create complete bracket in one basket\nbracket = CompoundOrder(broker=broker)\n\n# Main entry order\nbracket.add_order(symbol=\"TSLA\", side=\"buy\", quantity=10,\n                  order_type=\"LIMIT\", price=250.00, key=\"entry\")\n\n# Profit target (OCA - One Cancels All would be nice addition)\nbracket.add_order(symbol=\"TSLA\", side=\"sell\", quantity=10,\n                  order_type=\"LIMIT\", price=275.00, key=\"profit_target\")\n\n# Stop loss\nbracket.add_order(symbol=\"TSLA\", side=\"sell\", quantity=10,\n                  order_type=\"STOP\", trigger_price=240.00, key=\"stop_loss\")\n```\n\n## 🛠️ Best Practices\n\n### ✅ Order Management\n- Always validate order parameters before execution\n- Use appropriate order types for your strategy\n- Set reasonable expiration times\n- Monitor order status regularly\n- Implement proper error handling\n\n### 📊 Position Management\n- Track net positions across all orders\n- Use CompoundOrder for multi-leg strategies\n- Calculate and monitor P\u0026L regularly\n- Set stop losses and profit targets\n- Consider position sizing rules\n\n### 💾 Data Management\n- Enable database persistence for recovery\n- Save orders after important state changes\n- Regularly backup trading databases\n- Use meaningful order identifiers\n- Log important order events\n\n## 📋 Requirements\n\n- **Python 3.11+**\n- **pydantic** - Data validation and serialization\n- **pendulum** - Advanced datetime handling\n- **sqlite-utils** - Database operations\n- **numpy (\u003c2.0.0)** - Numerical computations\n\n## 🔧 Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/your-org/omspy.git\ncd omspy\n\n# Install dependencies with poetry\npoetry install\n\n# Activate virtual environment\npoetry shell\n```\n\n## 📚 Examples\n\nThe `examples/` directory contains complete working examples:\n\n- `basic_order.py` - Simple order creation and execution\n- `basket_trading.py` - Multi-order strategies\n- `database_integration.py` - Persistent order storage\n- `option_strategies.py` - Options trading workflows\n\n---\n\n## 💡 About OMSpy\n\nOMspy is a **broker-agnostic order management system** with a common API, advanced order types, and comprehensive trading workflow support. Built for traders who need reliability, flexibility, and simplicity in their order management.\n\n**Key Features:**\n- 🔄 **Broker Agnostic** - Works with multiple brokers through common API\n- 🎯 **Advanced Orders** - Support for complex order types and strategies\n- 📊 **Real-time Tracking** - Position monitoring and P\u0026L calculation\n- 💾 **Persistent Storage** - Database-backed order management\n- ⚡ **High Performance** - Optimized for active trading environments\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuberdeveloper%2Fomspy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuberdeveloper%2Fomspy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuberdeveloper%2Fomspy/lists"}