Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
7461189
Initial plan
Copilot Jul 30, 2025
901f55e
Refactor Python.NET wrapper with improved type conversions and error …
Copilot Jul 30, 2025
82aade2
Fix unit tests and address Codacy issues - decimal precision, depreca…
Copilot Jul 30, 2025
f707ecf
ci fix: deprecated windows runner
DaveSkender Jul 30, 2025
d99df03
Fix staticmethod decorator causing CI test failures
Copilot Jul 30, 2025
68b8a3e
Fix Codacy issues: improve pylint score from 9.30 to 9.43
Copilot Jul 30, 2025
3cc4d10
Fix staticmethod decorator causing CI test failures (again)
Copilot Jul 30, 2025
f79198f
Fix Codacy issues: improve pylint score from 9.35 to 9.98
Copilot Jul 30, 2025
3adfb2a
Fix staticmethod decorator causing CI test failures
Copilot Jul 30, 2025
a5bc464
Address code review feedback: fix imports, return types, and function…
Copilot Aug 4, 2025
9ac634c
Fix Codacy issues and test failures: resolve function signatures and …
Copilot Aug 4, 2025
5876dc9
address code review feedback
DaveSkender Aug 20, 2025
1e04eff
Fix conditional syntax for post-summary checks in CI workflow
DaveSkender Aug 20, 2025
45ad438
Merge main branch: resolve conflicts with timezone awareness PR #410
Copilot Aug 22, 2025
bf52b50
Merge branch 'main' into copilot/fix-94a0641c-58a2-4e76-a48a-4af852c8…
DaveSkender Oct 28, 2025
4fd8c8c
fix: Add missing return type hints and remove trailing whitespace
Copilot Oct 28, 2025
c83183c
refactor: Improve vwap and ichimoku parameter validation and handling
Copilot Oct 28, 2025
e7507d2
Merge branch 'main' into copilot/fix-94a0641c-58a2-4e76-a48a-4af852c8…
DaveSkender Dec 23, 2025
f2cd50d
update DLL v2.7.1, .NET 8, and pythonnet 3.0.5
DaveSkender Dec 23, 2025
eb7f25f
use ruff, pyright for linters
DaveSkender Dec 23, 2025
7e37b85
rabbit fixes
DaveSkender Dec 23, 2025
a741c56
fix: correct task group formatting in tasks.json
DaveSkender Dec 23, 2025
3c2531c
review fixes
DaveSkender Dec 23, 2025
0869d08
fix: simplify overload definitions in get_parabolic_sar
DaveSkender Dec 23, 2025
181b8dd
Fix indentation for MACD quotes assignment
DaveSkender Dec 24, 2025
f280382
remove deprecated methods
DaveSkender Dec 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,11 @@ reviews:
- "!*-lock.json" # NPM/PNPM lock files
- "!packages.lock.json" # NuGet lock file
- "!packages/" # NuGet packages cache
- "!_cslib/" # DLL library path
- "!.jekyll-cache/" # Jekyll cache
- "!.pytest_cache/" # Python test cache
- "!__pycache__/" # Python caches
- "!.venv/" # Python virtual env
- "!.benchmarks/" # Benchmarks cache
- "!.coverage/" # Code coverage reports
- "!vendor/" # Ruby vendor and gem files
Expand Down Expand Up @@ -165,7 +168,7 @@ reviews:
enabled: true
osvScanner: # Vulnerability package scanner
enabled: true
pylint: # Python static analyzer
ruff: # Python linter and formatter
enabled: true
semgrep: # Security & code quality static analysis
enabled: true
Expand Down Expand Up @@ -225,9 +228,9 @@ reviews:
enabled: false
prismaLint: # Prisma schema linter
enabled: false
regal: # Rego linter and language server
pylint: # Python static analyzer
enabled: false
ruff: # Python linter and formatter
regal: # Rego linter and language server
enabled: false
rubocop: # Ruby linter and code formatter
enabled: false
Expand Down
83 changes: 40 additions & 43 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,20 @@
*/
{
"name": "Stock Indicators for Python",
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"forwardPorts": [],
"remoteUser": "vscode",
"image": "mcr.microsoft.com/devcontainers/python:3.13",
"features": {
"ghcr.io/devcontainers/features/git:1": {
"version": "os-provided"
},
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "lts"
"version": "10.0",
"additionalVersions": "9.0,8.0"
},
"ghcr.io/devcontainers/features/node:1": {
"version": "lts",
"pnpmVersion": "none",
"nvmVersion": "none"
},
"ghcr.io/devcontainers/features/github-cli:1": {
"installDirectlyFromGitHubRelease": true,
"version": "latest"
},
"ghcr.io/devcontainers/features/azure-cli:1": {
"version": "latest"
},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/ruby:1": {
"version": "3.3"
},
"ghcr.io/devcontainers-extra/features/isort:2": {
"version": "latest"
},
"ghcr.io/devcontainers-extra/features/pylint:2": {
"version": "latest"
}
},
// Use 'settings' to set *default* container specific settings.json
Expand All @@ -48,26 +32,39 @@
// container overrides only
// otherwise use .vscode/settings.json
"settings": {
"pylint.importStrategy": "fromEnvironment",
"python.defaultInterpreterPath": "/usr/local/bin/python"
},
// required extensions
// for recommended, see .vscode/extensions.json
"extensions": [
"donjayamanne.python-extension-pack",
"DavidAnson.vscode-markdownlint",
"EditorConfig.EditorConfig",
"ms-python.black-formatter",
"ms-python.debugpy",
"ms-python.isort",
"ms-python.python",
"ms-python.pylint",
"ms-python.vscode-pylance"
]
}
},
// Runs after the container is created
"postCreateCommand": "chmod +x .devcontainer/setup.sh && .devcontainer/setup.sh",
// Runs every time the container starts
"postStartCommand": "echo 'Container started'"
}
"python.defaultInterpreterPath": "${containerWorkspaceFolder}/.venv/bin/python",
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports.ruff": "explicit",
"source.fixAll.ruff": "explicit"
}
},
// required extensions
// for recommended, see .vscode/extensions.json
"extensions": [
"charliermarsh.ruff",
"DavidAnson.vscode-markdownlint",
"EditorConfig.EditorConfig",
"ms-python.debugpy",
"ms-python.python",
"ms-python.vscode-pylance"
]
}
},
"forwardPorts": [
4000
],
"portsAttributes": {
"4000": {
"label": "Doc Site (Jekyll)",
"onAutoForward": "notify"
}
},
"remoteUser": "vscode",
"postCreateCommand": ".devcontainer/post-create.sh",
"postStartCommand": "echo 'Container started'"
}
25 changes: 25 additions & 0 deletions .devcontainer/post-create.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash
set -e

# Create virtual environment if it doesn't exist
if [ ! -d ".venv" ]; then
echo "Creating virtual environment..."
python -m venv .venv
fi

# Activate virtual environment
source .venv/bin/activate

# Upgrade pip
echo "Upgrading pip..."
python -m pip install --upgrade pip

# Install core dependencies
echo "Installing core dependencies..."
pip install -r requirements.txt

# Install test dependencies
echo "Installing test dependencies..."
pip install -r requirements-test.txt

echo "✓ Dev container setup complete!"
10 changes: 0 additions & 10 deletions .devcontainer/setup.sh

This file was deleted.

63 changes: 63 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: CI

on:
push:
pull_request:

permissions:
contents: read

jobs:
linting:
runs-on: ubuntu-latest

steps:
- name: Checkout source
uses: actions/checkout@v6

- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.x
dotnet-quality: ga

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: 3.13
cache: "pip"

- name: Create virtual environment
run: python -m venv .venv

- name: Install dependencies
run: |
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
python -m pip install -r requirements-test.txt

- name: Ruff lint
run: |
source .venv/bin/activate
ruff check .

- name: Ruff format check
run: |
source .venv/bin/activate
ruff format --check .

- name: Pyright
run: |
source .venv/bin/activate
pyright

- name: Pytest
run: |
source .venv/bin/activate
pytest

- name: pip-audit
run: |
source .venv/bin/activate
pip-audit -r requirements.txt -r requirements-test.txt
6 changes: 3 additions & 3 deletions .github/workflows/deploy-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ jobs:
steps:

- name: Checkout source
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
fetch-tags: true
fetch-depth: 0

- name: Setup Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: 3.12
python-version: 3.13

- name: Build library
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-website.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:

steps:
- name: Checkout source
uses: actions/checkout@v5
uses: actions/checkout@v6

- name: Setup Ruby
uses: ruby/setup-ruby@v1
Expand Down
52 changes: 40 additions & 12 deletions .github/workflows/lint-pull-request.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,58 @@
name: Pull request
name: Lint pull request

on:
pull_request_target:
branches:
- "main"
- "v[0-9]*"
types:
- opened
- edited
- unlabeled
- ready_for_review

concurrency:
group: >-
${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
pull-requests: write

jobs:
main:
name: lint PR title
title:
runs-on: ubuntu-latest
if: ${{ !github.event.pull_request.draft }}

steps:
- uses: amannn/action-semantic-pull-request@v5
- uses: amannn/action-semantic-pull-request@v6.1.1
id: lint_pr_title
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: |
feat
fix
docs
style
refactor
perf
test
build
ci
chore
revert
plan
subjectPattern: ^([A-Z]).+$
subjectPatternError: >
The subject "**{subject}**" must start with an uppercase character.
Example: "Add feature" instead of "add feature"
ignoreLabels: |
bot
dependencies
automated

- uses: marocchino/sticky-pull-request-comment@v2
- uses: marocchino/sticky-pull-request-comment@v2.9.4
if: always() && (steps.lint_pr_title.outputs.error_message != null)
with:
header: pr-title-lint-error
Expand All @@ -47,6 +70,7 @@ jobs:

- `feat: Add API endpoint for market data`
- `fix: Resolve WebSocket connection issues`
- `plan: Define technical implementation approach`
- `chore: Update NuGet dependencies`

<details>
Expand All @@ -56,29 +80,33 @@ jobs:
- `feat: Add API endpoint for market data`
- `fix: Resolve WebSocket connection issues`

#### Planning & architecture
- `plan: Define technical implementation approach`

#### Code quality
- `style: Format trading strategy classes`
- `refactor: Restructure trading engine components`
- `perf: Optimize trade order execution flow`

#### Documentation & testing
- `docs: Update API documentation`
- `test: Add unit tests for sign-in flow`

#### Infrastructure
- `build: Update .NET SDK version to 8.0`
- `build: Update .NET SDK version to 10.0`
- `ci: Add workflow for performance testing`
- `chore: Update NuGet dependencies`

#### Other
- `revert: Remove faulty market data provider`

See [Conventional Commits](https://www.conventionalcommits.org) for more details.

See [Conventional Commits](https://www.conventionalcommits.org)
for more details.
</details>

# Delete a previous comment when the issue has been resolved
- if: ${{ steps.lint_pr_title.outputs.error_message == null }}
uses: marocchino/sticky-pull-request-comment@v2
uses: marocchino/sticky-pull-request-comment@v2.9.4
with:
header: pr-title-lint-error
delete: true
Loading
Loading