-
Notifications
You must be signed in to change notification settings - Fork 257
feat: MkDocs doc site (new) #1298
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: v3
Are you sure you want to change the base?
Conversation
Signed-off-by: Dave Skender <8432125+DaveSkender@users.noreply.github.com>
Signed-off-by: Dave Skender <8432125+DaveSkender@users.noreply.github.com>
…k.Indicators into mkdocs-baseline
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: DaveSkender <8432125+DaveSkender@users.noreply.github.com>
Signed-off-by: Dave Skender <8432125+DaveSkender@users.noreply.github.com>
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 63
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (14)
docs/website/contributing.md (2)
1-9
: Fix invalid front matter and stray include line; migrate off Jekyll metadata
- Line 1 looks like a stray include/relative path (“../contributing.md”) and will render as content.
- The YAML front matter is missing the opening
---
, and contains Jekyll-only keys (permalink
,relative_path
,layout
) that MkDocs doesn’t use.- Net effect: broken metadata parsing and visible noise on the page.
If the intent is a thin wrapper that points to the canonical guide at
docs/contributing.md
, simplify the page and drop Jekyll artifacts.Apply this replacement to make the page valid in MkDocs and clearly link to the canonical doc:
-../contributing.md -title: Contributing guidelines -description: >- - This NuGet package is an open-source project. - Learn how to contribute issues, fixes, new indicators, new features, or to our discussions. -permalink: /contributing/ -relative_path: pages/contributing.md -layout: page ---- +--- +title: Contributing guidelines +description: Learn how to contribute issues, fixes, new indicators, new features, or discussions. +--- + +# Contributing guidelines + +This page intentionally references the main contributing guide to avoid duplication. + +See: [Contributing (root doc)](../contributing.md)
72-101
: Update “Documentation” section: still references Jekyll; replace with MkDocs workflowThis section instructs readers to use Jekyll, ports, and Ruby tooling. With MkDocs/Material in this PR, these steps should be replaced.
Here’s a suggested rewrite aligned with MkDocs and your new tooling:
-## Documentation - -This site uses [Jekyll](https://jekyllrb.com) construction with _Front Matter_. -Our documentation site code is in the `docs` folder. -Build the site locally to test that it works properly. -See [Ruby Jekyll documentation](https://jekyllrb.com/docs) for initial setup. - -```bash -# from /docs folder -bundle install -bundle exec jekyll serve -o -l - -# the site will open http://127.0.0.1:4000 -``` +## Documentation + +This site uses [MkDocs](https://www.mkdocs.org) with the [Material for MkDocs](https://squidfunk.github.io/mkdocs-material) theme. +The website source is under the `docs` folder. Build or serve locally to validate changes: + +```bash +# from repo root or /docs +pip install -r docs/requirements.txt +cd docs +mkdocs serve -a 127.0.0.1:8000 + +# site will be available at http://127.0.0.1:8000 +```docs/examples/README.md (1)
1-11
: Remove Jekyll front matter and Liquid; use MkDocs-native headingFront matter keys (
permalink
,relative_path
,layout
) and{{ page.title }}
are Jekyll-specific and will not render as intended in MkDocs.Apply this minimal cleanup:
---- -title: Example usage code -description: The Stock Indicators for .NET library is a simple yet flexible tool to help you build your financial market systems. Here's a few complete working examples that you can download and try yourself. -permalink: /examples/ -relative_path: examples/README.md -layout: page ---- - -# {{ page.title }} +--- +title: Example usage code +description: The Stock Indicators for .NET library is a simple yet flexible tool to help you build your financial market systems. Here are a few complete working examples that you can download and try yourself. +--- + +# Example usage codedocs/website/indicators/FisherTransform.md (1)
74-74
: Copy/paste artifact: refers to “Alma” instead of “FisherTransform”Fix the noun to match this page.
-Results can be further processed on `Alma` with additional chain-enabled indicators. +Results can be further processed on `Fisher` with additional chain-enabled indicators.docs/website/indicators/Marubozu.md (1)
41-41
: Enable include support or inline content for Marubozu indicator docsThe
{% include candle-result.md %}
directive in docs/website/indicators/Marubozu.md will not be processed by MkDocs, since:
- mkdocs.yml does not list an include plugin (e.g.,
include-markdown
).- There is no
candle-result.md
file under docs.Left unaddressed, this will either render the raw
{% include … %}
tag or fail the build.Please choose one of the following fixes:
• Wire up an include plugin and ensure
candle-result.md
is present
• Inline the minimal CandleResult reference directly in Marubozu.mdAffected locations:
- docs/mkdocs.yml (add plugin under
plugins:
)- docs/website/indicators/Marubozu.md (line 41)
Suggested inline replacement:
--- a/docs/website/indicators/Marubozu.md +++ b/docs/website/indicators/Marubozu.md @@ -38,7 +38,14 @@ example content above … -{% include candle-result.md %} +### CandleResult + +**`Timestamp`** _`DateTime`_ — date from evaluated `TQuote` +**`Match`** _`Match`_ — one of `Match.BullSignal`, `Match.BearSignal`, or `Match.None` +**`CandleProperties`** _`CandleProperties`_ — OHLCV and derived values for the matched candle Additional narrative or examples…docs/website/indicators/Pvo.md (1)
53-53
: Grammar fix: “between of” → “between the … lines.”User-facing docs; fix the visible error.
-**`Histogram`** _`double`_ - Gap between of the `Pvo` and `Signal` line +**`Histogram`** _`double`_ - Gap between the `Pvo` and `Signal` linesdocs/website/indicators/ForceIndex.md (1)
37-37
: Fix typo: “for will be” → “will be”.-- The first `N` periods for will be `null` since they cannot be calculated. +- The first `N` periods will be `null` since they cannot be calculated.docs/website/indicators/Gator.md (1)
18-21
: Replace placeholder inside code block with valid C# or a comment.
[see Alligator docs]
inside code is not valid C# and will mislead readers and linters.-// with custom Alligator configuration -IReadOnlyList<GatorResult> results = quotes - .GetAlligator([see Alligator docs]) - .GetGator(); +// with custom Alligator configuration (see Alligator docs for parameters) +IReadOnlyList<GatorResult> results = quotes + .GetAlligator(/* jawPeriods, teethPeriods, lipsPeriods, jawOffset, teethOffset, lipsOffset */) + .GetGator();docs/website/indicators/Awesome.md (1)
39-39
: Grammar: remove extra word “period.”“The first period
S-1
periods” → “The firstS-1
periods.”-- The first period `S-1` periods will have `null` values since there's not enough data to calculate. +- The first `S-1` periods will have `null` values since there's not enough data to calculate.docs/website/indicators/Doji.md (1)
41-41
: Replace Jekyll includes with MkDocs-compatible linksThe
{% include candle-result.md %}
tag will not be processed by MkDocs and will appear as raw text in the built site. You need to replace it with a relative link to the “Utilities for indicator results” section inutilities.md
.• File:
docs/website/indicators/Doji.md
(line 41)
• File:docs/website/indicators/Marubozu.md
(line 41)Apply this change in both files:
--- a/docs/website/indicators/Doji.md +++ b/docs/website/indicators/Doji.md @@ -41 +41 -{% include candle-result.md %} +See [Utilities and helpers](../utilities.md#utilities-for-indicator-results) for details on the `CandleResult` schema and fields.--- a/docs/website/indicators/Marubozu.md +++ b/docs/website/indicators/Marubozu.md @@ -41 +41 -{% include candle-result.md %} +See [Utilities and helpers](../utilities.md#utilities-for-indicator-results) for details on the `CandleResult` schema and fields.docs/website/indicators/ChaikinOsc.md (1)
22-23
: Grammar: “greater thanF
.”Add the missing “than”.
-**`slowPeriods`** _`int`_ - Number of periods (`S`) in the ADL slow EMA. Must be greater `F`. Default is 10. +**`slowPeriods`** _`int`_ - Number of periods (`S`) in the ADL slow EMA. Must be greater than `F`. Default is 10.docs/website/indicators/Atr.md (1)
21-24
: Fix code sample:quote
→quotes
The collection variable is consistently
quotes
elsewhere.-// raw True Range (TR) only -IReadOnlyList<TrResult> results = - quote.GetTr(); +// raw True Range (TR) only +IReadOnlyList<TrResult> results = + quotes.GetTr();docs/website/indicators/Prs.md (2)
37-37
: Correct heading: PrsResultMatch the type used in the usage section.
-### PrResult +### PrsResult
64-67
: Fix copy/paste: “Beta” → “PRS/PrsPercent”; add consistency noteThis section refers to Beta; adjust to PRS. Also, warn that both series should receive the same pre-processing (
.Use(...)
) if applied.-> 🚩 **Warning!** Both `quotesEval` and `quotesBase` arguments must contain the same number of elements and be the results of a chainable indicator or `.Use()` method. +> 🚩 **Warning!** Both `quotesEval` and `quotesBase` must contain the same number of elements and should receive the same pre-processing (e.g., both use `.Use(CandlePart.HL2)`), if applied. @@ -Results can be further processed on `Beta` with additional chain-enabled indicators. +Results can be further processed on `Prs` or `PrsPercent` with additional chain-enabled indicators.
♻️ Duplicate comments (3)
docs/website/indicators/Keltner.md (1)
59-65
: Confirm utilities anchors (same set as Parabolic SAR).Cross-file consistency looks good. Please reuse the verification script from Parabolic SAR to confirm anchors.
docs/website/indicators/HtTrendline.md (1)
50-56
: Confirm utilities anchor slugs.Same anchors as other pages; please run the earlier verification script to ensure headings produce the expected slugs.
docs/website/indicators/RollingPivots.md (1)
77-82
: Verify utilities anchors (same set).Ensure the anchors exist in docs/website/utilities.md. Covered by the earlier verification script.
.devcontainer/devcontainer.json
Outdated
"DavidAnson.vscode-markdownlint", | ||
"ms-dotnettools.csdevkit", | ||
"DotJoshJohnson.xml", | ||
"redhat.vscode-yaml", | ||
"bierner.github-markdown-preview", | ||
"EditorConfig.EditorConfig", | ||
"ms-dotnettools.vscodeintellicode-csharp" | ||
"DavidAnson.vscode-markdownlint", | ||
"GitHub.copilot-chat" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix JSON parsing issue and remove duplicate extension.
There’s a missing comma and a duplicate “DavidAnson.vscode-markdownlint” entry. Suggested correction:
"extensions": [
- "DavidAnson.vscode-markdownlint",
"ms-dotnettools.csdevkit",
"DotJoshJohnson.xml",
"redhat.vscode-yaml",
"bierner.github-markdown-preview",
"EditorConfig.EditorConfig",
- "ms-dotnettools.vscodeintellicode-csharp"
- "DavidAnson.vscode-markdownlint",
+ "ms-dotnettools.vscodeintellicode-csharp",
+ "DavidAnson.vscode-markdownlint",
"GitHub.copilot-chat"
]
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
"DavidAnson.vscode-markdownlint", | |
"ms-dotnettools.csdevkit", | |
"DotJoshJohnson.xml", | |
"redhat.vscode-yaml", | |
"bierner.github-markdown-preview", | |
"EditorConfig.EditorConfig", | |
"ms-dotnettools.vscodeintellicode-csharp" | |
"DavidAnson.vscode-markdownlint", | |
"GitHub.copilot-chat" | |
"extensions": [ | |
"ms-dotnettools.csdevkit", | |
"DotJoshJohnson.xml", | |
"redhat.vscode-yaml", | |
"bierner.github-markdown-preview", | |
"EditorConfig.EditorConfig", | |
"ms-dotnettools.vscodeintellicode-csharp", | |
"DavidAnson.vscode-markdownlint", | |
"GitHub.copilot-chat" | |
] |
🧰 Tools
🪛 Biome (2.1.2)
[error] 30-30: expected ,
but instead found "DavidAnson.vscode-markdownlint"
Remove "DavidAnson.vscode-markdownlint"
(parse)
🤖 Prompt for AI Agents
In .devcontainer/devcontainer.json around lines 23 to 31, the JSON array of
extensions has a missing comma between "ms-dotnettools.vscodeintellicode-csharp"
and the following "DavidAnson.vscode-markdownlint" and also contains a duplicate
"DavidAnson.vscode-markdownlint" entry; fix by inserting the missing comma after
"ms-dotnettools.vscodeintellicode-csharp" and remove the duplicate
"DavidAnson.vscode-markdownlint" so each extension appears once and the JSON
array remains valid.
EOF | ||
|
||
# Navigate to the workspace root | ||
cd /workspaces/Stock.Indicators |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Guard directory change and avoid hard-coded workspace path
Hard-coding /workspaces/Stock.Indicators
is brittle across forks/Codespaces. Also, if cd
fails the script continues in an unexpected directory.
- Resolve repo root dynamically (git) and fail early if not found.
- This addresses ShellCheck SC2164 too.
Apply:
-# Navigate to the workspace root
-cd /workspaces/Stock.Indicators
+# Navigate to the repository root robustly
+REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || {
+ echo -e "${YELLOW}WARNING: Unable to determine repo root; falling back to script dir${NC}"
+ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+}
+cd "$REPO_ROOT" || {
+ echo -e "${YELLOW}WARNING: Failed to cd to repository root${NC}"
+ exit 1
+}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
cd /workspaces/Stock.Indicators | |
# Navigate to the repository root robustly | |
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || { | |
echo -e "${YELLOW}WARNING: Unable to determine repo root; falling back to script dir${NC}" | |
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" | |
} | |
cd "$REPO_ROOT" || { | |
echo -e "${YELLOW}WARNING: Failed to cd to repository root${NC}" | |
exit 1 | |
} |
🧰 Tools
🪛 Shellcheck (0.10.0)
[warning] 12-12: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.
(SC2164)
🤖 Prompt for AI Agents
.devcontainer/setup.sh around line 12: the script hard-codes cd
/workspaces/Stock.Indicators which is brittle and can silently continue if cd
fails (ShellCheck SC2164); instead resolve the repo root with git rev-parse
--show-toplevel, check that command succeeded and that the path is non-empty,
then cd to that path and exit with a non-zero status on failure so the script
fails fast; replace the hard-coded cd with this guarded git-based resolution and
a conditional exit on failure.
# Install MkDocs | ||
pip install mkdocs || echo -e "${YELLOW}WARNING: Failed to install MkDocs${NC}" | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Install the right MkDocs dependencies via requirements file (Material, plugins), not just core
Material theme and common plugins (redirects, minify, section-index, awesome-pages, macros, mike, etc.) won’t be available with pip install mkdocs
. Builds will break or render incorrectly.
- Prefer a pinned
docs/requirements.txt
and install viapython -m pip -r
. - Keeps the devcontainer consistent with CI.
-# Install MkDocs
-pip install mkdocs || echo -e "${YELLOW}WARNING: Failed to install MkDocs${NC}"
+# Install MkDocs and plugins (pinned)
+if [ -f docs/requirements.txt ]; then
+ python -m pip install --upgrade -r docs/requirements.txt \
+ || echo -e "${YELLOW}WARNING: Failed to install MkDocs requirements${NC}"
+else
+ # Fallback minimal set to support Material builds
+ python -m pip install --upgrade \
+ mkdocs \
+ mkdocs-material \
+ mkdocs-redirects \
+ mkdocs-minify-plugin \
+ || echo -e "${YELLOW}WARNING: Failed to install MkDocs baseline deps${NC}"
+fi
Would you like me to generate a baseline docs/requirements.txt
with pinned versions matching your CI?
🏁 Script executed:
#!/bin/bash
set -eo pipefail
echo "1. Checking for docs/requirements.txt..."
if [ -f docs/requirements.txt ]; then
echo "→ FOUND docs/requirements.txt"
else
echo "→ NOT FOUND docs/requirements.txt"
fi
echo
echo "2. Listing all requirements.txt files in the repo..."
rg -l "requirements.txt" || echo "→ No matches found"
echo
echo "3. Showing .devcontainer/setup.sh around the mkdocs install snippet..."
sed -n '1,100p' .devcontainer/setup.sh || echo "→ .devcontainer/setup.sh not found"
echo
echo "4. Searching CI workflows for mkdocs install commands..."
rg -n "mkdocs" -g ".github/workflows/**/*.{yml,yaml}" || echo "→ No mkdocs references in CI workflows"
Length of output: 1939
🏁 Script executed:
#!/bin/bash
set -eo pipefail
echo "Displaying docs/requirements.txt contents (first 200 lines):"
sed -n '1,200p' docs/requirements.txt || echo "docs/requirements.txt not found"
echo
echo "Displaying docs/README.md (first 200 lines):"
sed -n '1,200p' docs/README.md || echo "docs/README.md not found"
Length of output: 2134
Use the existing pinned docs/requirements.txt for MkDocs installation
Please update .devcontainer/setup.sh
to install all MkDocs dependencies from docs/requirements.txt
instead of installing only the core package. This ensures your devcontainer matches CI and pulls in the Material theme and plugins you’ve already pinned.
• File: .devcontainer/setup.sh
• Replace the single-line install on “Install MkDocs” with a requirements install.
Suggested diff:
# Install MkDocs
- pip install mkdocs || echo -e "${YELLOW}WARNING: Failed to install MkDocs${NC}"
+ python -m pip install --upgrade -r docs/requirements.txt \
+ || echo -e "${YELLOW}WARNING: Failed to install MkDocs requirements${NC}"
This change will pick up:
- mkdocs==1.6.1
- mkdocs-material==9.6.14
- mkdocs-minify-plugin==0.8.0
- pymdown-extensions==10.15
directly from docs/requirements.txt
, keeping your local environment in sync with CI.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
# Install MkDocs | |
pip install mkdocs || echo -e "${YELLOW}WARNING: Failed to install MkDocs${NC}" | |
# Install MkDocs | |
python -m pip install --upgrade -r docs/requirements.txt \ | |
|| echo -e "${YELLOW}WARNING: Failed to install MkDocs requirements${NC}" |
🤖 Prompt for AI Agents
In .devcontainer/setup.sh around lines 24 to 26, the script currently runs a
single-package install for MkDocs; update it to install all pinned docs
dependencies from docs/requirements.txt instead. Replace the pip install mkdocs
command with a pip install -r docs/requirements.txt invocation (preserving the
existing error-handling behavior), ensuring the script references the
docs/requirements.txt path correctly so the Material theme and plugins pinned
there are installed into the devcontainer.
# Build MkDocs documentation | ||
cd docs && python -m mkdocs build || echo -e "${YELLOW}WARNING: Failed to build MkDocs documentation${NC}" | ||
|
||
# Build the project | ||
cd .. && dotnet build --no-incremental || echo -e "${YELLOW}WARNING: Failed to build the project${NC}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Prevent “cd ..” from running in the wrong directory; use pushd/popd
If cd docs
fails, the compound command fails and the subsequent cd ..
moves you out of the repo (to /workspaces
), causing dotnet build
to run in the wrong directory.
Use pushd/popd
to isolate directory changes and always return to the previous location.
-# Build MkDocs documentation
-cd docs && python -m mkdocs build || echo -e "${YELLOW}WARNING: Failed to build MkDocs documentation${NC}"
-
-# Build the project
-cd .. && dotnet build --no-incremental || echo -e "${YELLOW}WARNING: Failed to build the project${NC}"
+ # Build MkDocs documentation
+ pushd docs >/dev/null || { echo -e "${YELLOW}WARNING: docs/ not found${NC}"; }
+ python -m mkdocs build || echo -e "${YELLOW}WARNING: Failed to build MkDocs documentation${NC}"
+ popd >/dev/null 2>&1 || true
+
+ # Build the project
+ dotnet build --no-incremental || echo -e "${YELLOW}WARNING: Failed to build the project${NC}"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
# Build MkDocs documentation | |
cd docs && python -m mkdocs build || echo -e "${YELLOW}WARNING: Failed to build MkDocs documentation${NC}" | |
# Build the project | |
cd .. && dotnet build --no-incremental || echo -e "${YELLOW}WARNING: Failed to build the project${NC}" | |
# Build MkDocs documentation | |
pushd docs >/dev/null || { echo -e "${YELLOW}WARNING: docs/ not found${NC}"; } | |
python -m mkdocs build || echo -e "${YELLOW}WARNING: Failed to build MkDocs documentation${NC}" | |
popd >/dev/null 2>&1 || true | |
# Build the project | |
dotnet build --no-incremental || echo -e "${YELLOW}WARNING: Failed to build the project${NC}" |
🤖 Prompt for AI Agents
.devcontainer/setup.sh around lines 27 to 31: the current compound commands use
cd docs && ... followed by cd .. which can accidentally change the working
directory if cd docs fails, causing dotnet build to run in the wrong location;
replace these cd-based compound commands with pushd docs >/dev/null || { echo
warning; } and ensure you run mkdocs build and then popd >/dev/null to return to
the original directory (or run the mkdocs build in a subshell) so directory
changes are isolated and popd always executes even if the build fails,
preventing accidental navigation out of the repo before dotnet build.
#!/bin/bash | ||
|
||
# Build the MkDocs site | ||
echo "Building MkDocs site..." | ||
cd /workspaces/Stock.Indicators/docs | ||
mkdocs build | ||
|
||
echo "MkDocs site built successfully! Files are in /docs/_site/" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Make the script portable, fail-fast, and remove hardcoded devcontainer path.
Current script only works inside a Codespaces/devcontainer path and ignores cd
failures. Add strict mode and resolve the docs directory from the script location.
#!/bin/bash
-# Build the MkDocs site
-echo "Building MkDocs site..."
-cd /workspaces/Stock.Indicators/docs
-mkdocs build
+set -Eeuo pipefail
+
+# Build the MkDocs site
+echo "Building MkDocs site..."
+# change to the directory where this script resides (docs/)
+SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+cd "$SCRIPT_DIR" || exit 1
+mkdocs build
-echo "MkDocs site built successfully! Files are in /docs/_site/"
+echo "MkDocs site built successfully! Files are in ./site/"
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
#!/bin/bash | |
# Build the MkDocs site | |
echo "Building MkDocs site..." | |
cd /workspaces/Stock.Indicators/docs | |
mkdocs build | |
echo "MkDocs site built successfully! Files are in /docs/_site/" | |
#!/bin/bash | |
set -Eeuo pipefail | |
# Build the MkDocs site | |
echo "Building MkDocs site..." | |
# change to the directory where this script resides (docs/) | |
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
cd "$SCRIPT_DIR" || exit 1 | |
mkdocs build | |
echo "MkDocs site built successfully! Files are in ./site/" |
🧰 Tools
🪛 Shellcheck (0.10.0)
[warning] 5-5: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.
(SC2164)
🤖 Prompt for AI Agents
In docs/build.sh lines 1-8, the script is non-portable and ignores cd failures
and a hardcoded devcontainer path; enable strict mode (e.g. set -euo pipefail)
so the script fails fast, compute the docs directory relative to the script
location (resolve DIR using BASH_SOURCE and then set DOCS_DIR="$DIR" or
"$DIR/../docs" as appropriate) instead of using
/workspaces/Stock.Indicators/docs, cd to that computed DOCS_DIR (relying on
strict mode to catch failure), run mkdocs build, and print the final success
message referencing the actual output directory path relative to DOCS_DIR.
|
||
# {{ page.title }} | ||
Pivots is an extended customizable version of Williams Fractal that includes identification of Higher High, Lower Low, Higher Low, and Lower Low trends between pivots in a lookback window. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix terminology: “Lower High” vs. duplicated “Lower Low”; remove duplicate intro
The list should read “Higher High, Lower High, Higher Low, and Lower Low.” Also, Line 3 duplicates Line 7; keep the linked one (Line 7) and delete Line 3.
- Pivots is an extended customizable version of Williams Fractal that includes identification of Higher High, Lower Low, Higher Low, and Lower Low trends between pivots in a lookback window.
+
-Pivots is an extended customizable version of [Williams Fractal](Fractal.md) that includes identification of Higher High, Lower Low, Higher Low, and Lower Low trends between pivots in a lookback window.
+Pivots is an extended customizable version of [Williams Fractal](Fractal.md) that includes identification of Higher High, Lower High, Higher Low, and Lower Low trends between pivots in a lookback window.
Also applies to: 7-7
🤖 Prompt for AI Agents
In docs/website/indicators/Pivots.md around lines 3 to 3, Line 3 is a duplicated
intro and uses incorrect terminology ("Lower Low" twice); remove Line 3 entirely
and ensure the remaining intro (the linked line at 7) contains the corrected
list ordered as "Higher High, Lower High, Higher Low, and Lower Low." Update
line 7 if necessary to use that exact phrasing and remove the duplicate line 3
so only the linked intro remains.
Created by Carl Swenlin, the DecisionPoint Price Momentum Oscillator is double-smoothed momentum indicator, based on Rate of Change (ROC). | ||
|
||
|
||
# {{ page.title }} | ||
|
||
Created by Carl Swenlin, the DecisionPoint [Price Momentum Oscillator](https://school.stockcharts.com/doku.php?id=technical_indicators:dppmo) is double-smoothed momentum indicator based on Rate of Change (ROC). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Deduplicate and fix grammar in the intro.
There’s a duplicate intro and a missing article (“a”) before “double-smoothed momentum indicator”.
- Created by Carl Swenlin, the DecisionPoint Price Momentum Oscillator is double-smoothed momentum indicator, based on Rate of Change (ROC).
-
-
-
-Created by Carl Swenlin, the DecisionPoint [Price Momentum Oscillator](https://school.stockcharts.com/doku.php?id=technical_indicators:dppmo) is double-smoothed momentum indicator based on Rate of Change (ROC).
+Created by Carl Swenlin, the DecisionPoint [Price Momentum Oscillator](https://school.stockcharts.com/doku.php?id=technical_indicators:dppmo) is a double-smoothed momentum indicator based on Rate of Change (ROC).
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Created by Carl Swenlin, the DecisionPoint Price Momentum Oscillator is double-smoothed momentum indicator, based on Rate of Change (ROC). | |
# {{ page.title }} | |
Created by Carl Swenlin, the DecisionPoint [Price Momentum Oscillator](https://school.stockcharts.com/doku.php?id=technical_indicators:dppmo) is double-smoothed momentum indicator based on Rate of Change (ROC). | |
Created by Carl Swenlin, the DecisionPoint [Price Momentum Oscillator](https://school.stockcharts.com/doku.php?id=technical_indicators:dppmo) is a double-smoothed momentum indicator based on Rate of Change (ROC). |
🧰 Tools
🪛 LanguageTool
[grammar] ~3-~3: There might be a mistake here.
Context: ...DecisionPoint Price Momentum Oscillator is double-smoothed momentum indicator, bas...
(QB_NEW_EN)
[grammar] ~7-~7: There might be a mistake here.
Context: ...doku.php?id=technical_indicators:dppmo) is double-smoothed momentum indicator base...
(QB_NEW_EN)
[grammar] ~7-~7: There might be a mistake here.
Context: ...indicator based on Rate of Change (ROC). [[Discuss] 💬](https://github.com...
(QB_NEW_EN)
🤖 Prompt for AI Agents
In docs/website/indicators/Pmo.md around lines 3 to 7 there is a duplicated
intro sentence and a missing article; remove the duplicate sentence and update
the remaining sentence to include the article "a" so it reads: "Created by Carl
Swenlin, the DecisionPoint Price Momentum Oscillator is a double-smoothed
momentum indicator based on Rate of Change (ROC)." Ensure only one intro
sentence remains and preserve the link formatting if present.
|
||
 | ||
 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use descriptive alt text for a11y.
-
+
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
 | |
 |
🤖 Prompt for AI Agents
In docs/website/indicators/Pvo.md around line 10, the image uses non-descriptive
alt text "chart for Pvo"; replace it with accessible, descriptive alt text that
conveys the content and purpose of the image (for example: "Percent Volume
Oscillator (PVO) chart showing PVO line and signal line over time with histogram
of volume divergence"), ensuring the alt string succinctly describes what the
chart illustrates and its context for screen-reader users.
- [.Find(lookupDate)](../utilities.md#find-indicator-result) | ||
- [.RemoveWarmupPeriods(qty)](../utilities.md#get-or-exclude-nulls) | ||
|
||
See [Utilities and helpers]({{site.baseurl}}/utilities#utilities-for-indicator-results) for more information. | ||
See [Utilities and helpers](../utilities.md#utilities-for-indicator-results) for more information. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Verify utilities anchors point to correct sections
As with other pages, please confirm the anchors exist and match their intended sections.
Use the same anchor-audit script shared in Dema.md, then additionally check these files for the same anchors:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for f in docs/website/indicators/Renko.md; do
echo "== scanning $f =="
rg -nP '\(\.\./utilities\.md#[^)]+\)' "$f" -n -C0
done
Length of output: 485
#!/bin/bash
set -euo pipefail
file="docs/website/utilities.md"
echo "Checking anchors in $file"
for anchor in find-indicator-result get-or-exclude-nulls utilities-for-indicator-results; do
echo "Checking #$anchor"
rg -n "#$anchor" "$file" || echo "Not found: #$anchor"
done
🏁 Script executed:
#!/bin/bash
set -euo pipefail
file="docs/website/utilities.md"
echo "Scanning anchors in $file"
for anchor in find-indicator-result get-or-exclude-nulls utilities-for-indicator-results; do
echo "==> Checking #$anchor"
rg -n "#$anchor\b" "$file" || echo "NOT FOUND: #$anchor"
done
Length of output: 1093
Broken utilities anchors in Renko.md
- The link
[.Find(lookupDate)](../utilities.md#find-indicator-result)
refers to an anchor#find-indicator-result
that does not exist in docs/website/utilities.md. - The link
[.RemoveWarmupPeriods(qty)](../utilities.md#get-or-exclude-nulls)
refers to an anchor#get-or-exclude-nulls
that does not exist in docs/website/utilities.md. - The reference
[Utilities and helpers](../utilities.md#utilities-for-indicator-results)
is valid and points to the existing#utilities-for-indicator-results
section.
Please update the first two links to match the actual section IDs in utilities.md (or add the missing anchors).
🤖 Prompt for AI Agents
In docs/website/indicators/Renko.md around lines 83 to 87, the two utility links
point to non-existent anchors in docs/website/utilities.md; open utilities.md to
find the correct anchor IDs for the Find(lookupDate) and
RemoveWarmupPeriods(qty) utilities (or add those anchors to utilities.md), then
update the links in Renko.md to use the exact anchor strings from utilities.md
(e.g., replace ../utilities.md#find-indicator-result and
../utilities.md#get-or-exclude-nulls with the correct ../utilities.md#...
anchors).
 | ||
 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Alt text “image” is non-informative; provide descriptive, distinct texts.
This impacts accessibility and automated a11y checks.
-
-
+
+
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
 | |
 | |
 | |
 |
🤖 Prompt for AI Agents
In docs/website/indicators/Slope.md around lines 10 to 11, the two image tags
use non-descriptive alt text "image"; replace them with meaningful, distinct alt
attributes (e.g., "Linear chart showing trend line" and "Slope indicator chart
showing rate of change") so screen readers and a11y checks receive informative
descriptions; update the markdown image syntax to include these descriptive alt
texts and ensure each alt string accurately reflects the pictured chart.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review continued from previous batch...
docs/mkdocs.yml
Outdated
nav: | ||
- Home: index.md | ||
- Indicators: | ||
- Overview: indicators.md | ||
- Moving Averages: | ||
- ALMA: indicators/Alma.md | ||
- DEMA: indicators/Dema.md | ||
- EPMA: indicators/Epma.md | ||
- EMA: indicators/Ema.md | ||
- HMA: indicators/Hma.md | ||
- KAMA: indicators/Kama.md | ||
- MAMA: indicators/Mama.md | ||
- SMA: indicators/Sma.md | ||
- SMMA: indicators/Smma.md | ||
- T3: indicators/T3.md | ||
- TEMA: indicators/Tema.md | ||
- VWMA: indicators/Vwma.md | ||
- WMA: indicators/Wma.md | ||
- Price Trend: | ||
- ADX: indicators/Adx.md | ||
- Aroon: indicators/Aroon.md | ||
- Beta: indicators/Beta.md | ||
- CCI: indicators/Cci.md | ||
- Correlation: indicators/Correlation.md | ||
- CFO: indicators/Fcb.md | ||
- Hurst Exponent: indicators/Hurst.md | ||
- Ichimoku Cloud: indicators/Ichimoku.md | ||
- Parabolic SAR: indicators/ParabolicSar.md | ||
- RSI: indicators/Rsi.md | ||
- STC: indicators/Stc.md | ||
- Slope: indicators/Slope.md | ||
- StdDev: indicators/StdDev.md | ||
- Stochastic: indicators/Stoch.md | ||
- Stochastic RSI: indicators/StochRsi.md | ||
- Price Channel: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Broken nav entry: CFO points to Fcb.md (Fractal Chaos Bands?)
“CFO” should point to the Chande Forecast Oscillator doc. The file path appears mis-typed as Fcb.md.
- - CFO: indicators/Fcb.md
+ - CFO: indicators/Cfo.md
Please confirm the filename and casing under docs/website/indicators/. On case-sensitive filesystems (CI), a mismatch will break the build.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
nav: | |
- Home: index.md | |
- Indicators: | |
- Overview: indicators.md | |
- Moving Averages: | |
- ALMA: indicators/Alma.md | |
- DEMA: indicators/Dema.md | |
- EPMA: indicators/Epma.md | |
- EMA: indicators/Ema.md | |
- HMA: indicators/Hma.md | |
- KAMA: indicators/Kama.md | |
- MAMA: indicators/Mama.md | |
- SMA: indicators/Sma.md | |
- SMMA: indicators/Smma.md | |
- T3: indicators/T3.md | |
- TEMA: indicators/Tema.md | |
- VWMA: indicators/Vwma.md | |
- WMA: indicators/Wma.md | |
- Price Trend: | |
- ADX: indicators/Adx.md | |
- Aroon: indicators/Aroon.md | |
- Beta: indicators/Beta.md | |
- CCI: indicators/Cci.md | |
- Correlation: indicators/Correlation.md | |
- CFO: indicators/Fcb.md | |
- Hurst Exponent: indicators/Hurst.md | |
- Ichimoku Cloud: indicators/Ichimoku.md | |
- Parabolic SAR: indicators/ParabolicSar.md | |
- RSI: indicators/Rsi.md | |
- STC: indicators/Stc.md | |
- Slope: indicators/Slope.md | |
- StdDev: indicators/StdDev.md | |
- Stochastic: indicators/Stoch.md | |
- Stochastic RSI: indicators/StochRsi.md | |
- Price Channel: | |
- Price Trend: | |
- ADX: indicators/Adx.md | |
- Aroon: indicators/Aroon.md | |
- Beta: indicators/Beta.md | |
- CCI: indicators/Cci.md | |
- Correlation: indicators/Correlation.md | |
- CFO: indicators/Cfo.md | |
- Hurst Exponent: indicators/Hurst.md | |
- Ichimoku Cloud: indicators/Ichimoku.md | |
- Parabolic SAR: indicators/ParabolicSar.md | |
- RSI: indicators/Rsi.md | |
- STC: indicators/Stc.md | |
- Slope: indicators/Slope.md | |
- StdDev: indicators/StdDev.md | |
- Stochastic: indicators/Stoch.md | |
- Stochastic RSI: indicators/StochRsi.md |
🤖 Prompt for AI Agents
In docs/mkdocs.yml around lines 108 to 142 the nav entry "CFO" incorrectly
points to indicators/Fcb.md instead of the Chande Forecast Oscillator file;
update the nav to point to the correct file path (e.g., indicators/Cfo.md) and
verify the target file exists with exact casing under docs/website/indicators/
(rename the file or adjust the link to match filesystem case if needed) so CI on
case-sensitive systems won't break.
decimal netReturn = (totalEquityValue - totalEquityCost) / totalEquityCost; | ||
|
||
Console.WriteLine($"\r\nSTRATEGY RESULTS:"); | ||
Console.WriteLine($"trades: {totalTrades}"); | ||
Console.WriteLine($"net return: {netReturn:P2}"); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Prevent divide-by-zero when no trades occur
If no positions are closed, totalEquityCost
remains zero and the sample crashes. Guard with a conditional.
- // report results
- decimal netReturn = (totalEquityValue - totalEquityCost) / totalEquityCost;
-
- Console.WriteLine($"\r\nSTRATEGY RESULTS:");
- Console.WriteLine($"trades: {totalTrades}");
- Console.WriteLine($"net return: {netReturn:P2}");
+ // report results
+ Console.WriteLine($"\r\nSTRATEGY RESULTS:");
+ Console.WriteLine($"trades: {totalTrades}");
+ if (totalEquityCost == 0m)
+ {
+ Console.WriteLine("net return: N/A (no closed positions)");
+ }
+ else
+ {
+ decimal netReturn = (totalEquityValue - totalEquityCost) / totalEquityCost;
+ Console.WriteLine($"net return: {netReturn:P2}");
+ }
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
decimal netReturn = (totalEquityValue - totalEquityCost) / totalEquityCost; | |
Console.WriteLine($"\r\nSTRATEGY RESULTS:"); | |
Console.WriteLine($"trades: {totalTrades}"); | |
Console.WriteLine($"net return: {netReturn:P2}"); | |
} | |
// report results | |
Console.WriteLine($"\r\nSTRATEGY RESULTS:"); | |
Console.WriteLine($"trades: {totalTrades}"); | |
if (totalEquityCost == 0m) | |
{ | |
Console.WriteLine("net return: N/A (no closed positions)"); | |
} | |
else | |
{ | |
decimal netReturn = (totalEquityValue - totalEquityCost) / totalEquityCost; | |
Console.WriteLine($"net return: {netReturn:P2}"); | |
} | |
} |
🤖 Prompt for AI Agents
In docs/website/examples.md around lines 154 to 159, the computation decimal
netReturn = (totalEquityValue - totalEquityCost) / totalEquityCost can divide by
zero when no trades closed; guard this by checking if totalEquityCost == 0m and
set netReturn to 0m (or an appropriate sentinel) in that case, otherwise perform
the division, then print netReturn as before.
// second, convert RSI results into quotes | ||
// this could be your own custom mapping function | ||
var rsiQuotes = rsiResults | ||
.Select(x => | ||
new Quote | ||
{ | ||
Date = x.Date, | ||
Close = x.Rsi | ||
}); | ||
|
||
// third, get the Stochastic RSI using the RSI quotes | ||
var stochRsi = rsiQuotes.GetStoch(14, 3, 3); | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix “indicator-of-indicators” mapping: Stochastic needs High/Low; set OHLC to RSI and Volume to 0.
The current example only sets Close
, which will break indicators requiring High/Low (e.g., Stoch). Map all OHLC to x.Rsi
and set Volume = 0
.
-var rsiQuotes = rsiResults
- .Select(x =>
- new Quote
- {
- Date = x.Date,
- Close = x.Rsi
- });
+var rsiQuotes = rsiResults.Select(x =>
+ new Quote
+ {
+ Date = x.Date,
+ Open = x.Rsi,
+ High = x.Rsi,
+ Low = x.Rsi,
+ Close = x.Rsi,
+ Volume = 0
+ });
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
// second, convert RSI results into quotes | |
// this could be your own custom mapping function | |
var rsiQuotes = rsiResults | |
.Select(x => | |
new Quote | |
{ | |
Date = x.Date, | |
Close = x.Rsi | |
}); | |
// third, get the Stochastic RSI using the RSI quotes | |
var stochRsi = rsiQuotes.GetStoch(14, 3, 3); | |
``` | |
var rsiQuotes = rsiResults.Select(x => | |
new Quote | |
{ | |
Date = x.Date, | |
Open = x.Rsi, | |
High = x.Rsi, | |
Low = x.Rsi, | |
Close = x.Rsi, | |
Volume = 0 | |
}); |
🤖 Prompt for AI Agents
In docs/website/guide.md around lines 83 to 95, the example maps RSI results
into Quote objects but only sets Close, which breaks indicators that require
High/Low; change the mapping so High, Low and Open are all set to x.Rsi, Close
set to x.Rsi, and Volume set to 0 so downstream indicators like Stochastic RSI
have valid OHLC/volume values.
|
||
 | ||
 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Verify chart filename; likely inconsistent with naming convention.
Other indicators use ../assets/charts/.png (e.g., Adl.png, Mfi.png). Here it’s “AdIndex.png,” which looks inconsistent and may 404. Recommend renaming to Adx.png (or updating the asset).
-
+
Run to verify the asset exists and detect broken links:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# List expected chart files
for f in Adx Adl Mfi Cmf Ema; do
if [ -f "docs/website/indicators/../assets/charts/${f}.png" ]; then
echo "OK: ${f}.png exists"
else
echo "MISSING: ${f}.png" >&2
fi
done
# Check Utilities anchors exist
rg -nP '^##+\s+Utilities' docs/website/utilities.md || true
rg -nP '^\s*[-*]\s*\.\[?Condense' docs/website/indicators -n || true
# Validate target anchors in utilities.md
rg -nP '^##+\s+.*sort[- ]quotes|^##+\s+.*find[- ]indicator[- ]result|^##+\s+.*get[- ]or[- ]exclude[- ]nulls' docs/website/utilities.md -n || true
Length of output: 1100
Fix ADX chart asset naming to avoid broken link
Our verification shows that the image reference in docs/website/indicators/Adx.md
points at AdIndex.png
, but there is no Adx.png
in docs/website/assets/charts/
—instead the asset is currently named AdIndex.png
, which does not match the naming convention used by the other indicators (e.g. Adl.png
, Mfi.png
, etc.). To prevent a 404 and maintain consistency:
• Rename the file
- Move or copy
docs/website/assets/charts/AdIndex.png
→docs/website/assets/charts/Adx.png
.
• Update the markdown reference in docs/website/indicators/Adx.md
:
- 
+ 
This aligns with the existing asset pattern and ensures the chart renders correctly.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
 | |
 |
🤖 Prompt for AI Agents
In docs/website/indicators/Adx.md around line 10 the markdown references
../assets/charts/AdIndex.png which breaks the site and is inconsistent with
other indicator assets; rename or copy the file
docs/website/assets/charts/AdIndex.png to docs/website/assets/charts/Adx.png and
update the image reference in docs/website/indicators/Adx.md to
../assets/charts/Adx.png so the filename matches the project convention and the
chart loads.
Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. The related Gator Oscillator depicts periods of eating and resting. | ||
|
||
Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. See also the [Gator Oscillator]({{site.baseurl}}/indicators/Gator/#content). | ||
[[Discuss] 💬]({{site.github.repository_url}}/discussions/385 "Community discussion about this indicator") | ||
|
||
 | ||
|
||
Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. See also the [Gator Oscillator](Gator.md). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Fix duplication and grammar in the intro.
Remove the first paragraph and keep the second with the Gator link. Also fix awkward phrasing “showing chart patterns that compared to” → “showing chart patterns compared to”.
- Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. The related Gator Oscillator depicts periods of eating and resting.
-
-
-
-Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. See also the [Gator Oscillator](Gator.md).
+Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. See also the [Gator Oscillator](Gator.md).
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. The related Gator Oscillator depicts periods of eating and resting. | |
Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. See also the [Gator Oscillator]({{site.baseurl}}/indicators/Gator/#content). | |
[[Discuss] 💬]({{site.github.repository_url}}/discussions/385 "Community discussion about this indicator") | |
 | |
Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns that compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. See also the [Gator Oscillator](Gator.md). | |
Created by Bill Williams, Alligator is a depiction of three smoothed moving averages of median price, showing chart patterns compared to an alligator's feeding habits when describing market movement. The moving averages are known as the Jaw, Teeth, and Lips, which are calculated using lookback and offset periods. See also the [Gator Oscillator](Gator.md). |
🧰 Tools
🪛 LanguageTool
[grammar] ~7-~7: There might be a mistake here.
Context: ...e also the Gator Oscillator. [[Discuss] 💬](https://github.com...
(QB_NEW_EN)
🤖 Prompt for AI Agents
docs/website/indicators/Alligator.md lines 3-7: Remove the duplicated first
paragraph and keep the second paragraph; in the retained paragraph fix the
phrasing “showing chart patterns that compared to” to “showing chart patterns
compared to” and ensure the Gator Oscillator link is preserved as [Gator
Oscillator](Gator.md).
Moving Average Envelopes is a price band channel overlay that is offset from the moving average of price. | ||
|
||
|
||
# {{ page.title }} | ||
|
||
[Moving Average Envelopes](https://en.wikipedia.org/wiki/Moving_average_envelope) is a price band channel overlay that is offset from the moving average of price. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Consolidate duplicated intro; keep the linked one.
Two intros describe the same thing; retain the second (Line 7) with the external link.
- Moving Average Envelopes is a price band channel overlay that is offset from the moving average of price.
-
-
-
-[Moving Average Envelopes](https://en.wikipedia.org/wiki/Moving_average_envelope) is a price band channel overlay that is offset from the moving average of price.
+[Moving Average Envelopes](https://en.wikipedia.org/wiki/Moving_average_envelope) is a price band channel overlay offset from the moving average of price.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Moving Average Envelopes is a price band channel overlay that is offset from the moving average of price. | |
# {{ page.title }} | |
[Moving Average Envelopes](https://en.wikipedia.org/wiki/Moving_average_envelope) is a price band channel overlay that is offset from the moving average of price. | |
[Moving Average Envelopes](https://en.wikipedia.org/wiki/Moving_average_envelope) is a price band channel overlay offset from the moving average of price. |
🤖 Prompt for AI Agents
In docs/website/indicators/MaEnvelopes.md around lines 3 to 7, there are two
duplicate introductory sentences; remove the first plain sentence and keep the
second sentence that includes the external link, ensuring only the linked intro
remains as the opening paragraph.
- [.Condense()](../utilities.md#sort-quotes) | ||
- [.Find(lookupDate)](../utilities.md#find-indicator-result) | ||
- [.RemoveWarmupPeriods(qty)](../utilities.md#get-or-exclude-nulls) | ||
|
||
See [Utilities and helpers]({{site.baseurl}}/utilities#utilities-for-indicator-results) for more information. | ||
See [Utilities and helpers](../utilities.md#utilities-for-indicator-results) for more information. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Confirm utilities anchors (same concern as other pages).
🏁 Script executed:
#!/bin/bash
rg -nCi '^\s{0,3}#{1,6}\s+(utilities for indicator results|sort quotes|find indicator result|get or exclude nulls|condense)' docs/website/utilities.md -C1
Length of output: 156
🏁 Script executed:
#!/bin/bash
# List all markdown headings in utilities.md
echo "--- Headings in docs/website/utilities.md ---"
rg -n '^#{1,6}\s+' docs/website/utilities.md || true
echo
# Search occurrences of utility function names
for term in Condense Find RemoveWarmupPeriods; do
echo "--- Searching for $term ---"
rg -n "$term" docs/website/utilities.md || true
echo
done
Length of output: 1506
Fix invalid documentation anchors in MaEnvelopes.md
- Add or correct the
### Condense
heading indocs/website/utilities.md
and update the.Condense()
link indocs/website/indicators/MaEnvelopes.md
to use#condense
(instead of#sort-quotes
). - Update the “Utilities and helpers” link in
MaEnvelopes.md
so that its text and anchor match the target heading: either change the anchor to#utilities-and-helpers
(for the top-level section) or revise the link text to “Utilities for indicator results” if you intend to jump to that subsection (#utilities-for-indicator-results
). - Confirm that the
.Find(lookupDate)
and.RemoveWarmupPeriods(qty)
links remain pointed to#find-indicator-result
and#get-or-exclude-nulls
, respectively (these anchors exist as### Find indicator result
and### Get or exclude nulls
inutilities.md
).
🤖 Prompt for AI Agents
In docs/website/indicators/MaEnvelopes.md around lines 83 to 88, the
documentation contains invalid anchors; update the .Condense() link to point to
#condense (not #sort-quotes) and ensure docs/website/utilities.md includes a
matching "### Condense" heading (add it if missing). Also reconcile the
"Utilities and helpers" link: either change its anchor to #utilities-and-helpers
to point to the top-level section or change the link text to "Utilities for
indicator results" so it points to #utilities-for-indicator-results, and leave
the .Find(lookupDate) and .RemoveWarmupPeriods(qty) links unchanged (they should
remain #find-indicator-result and #get-or-exclude-nulls).
You must have at least `N` periods of `quotesEval` to calculate `PrsPercent` if `lookbackPeriods` is specified; otherwise, you must specify at least `S+1` periods. More than the minimum is typically specified. For this indicator, the elements must match (e.g. the `n`th elements must be the same date). An `Exception` will be thrown for mismatch dates. Historical price quotes should have a consistent frequency (day, hour, minute, etc). | ||
|
||
`quotesEval` is an `IReadOnlyList<TQuote>` collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See [the Guide]({{site.baseurl}}/guide/#historical-quotes) for more information. | ||
`quotesEval` is an `IEnumerable<TQuote>` collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See [the Guide](../guide.md#historical-quotes) for more information. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix minimum periods note and punctuation
“S+1” is undefined for PRS and looks like a copy-over. Also add period to “etc.” and keep the guide link sentence.
-You must have at least `N` periods of `quotesEval` to calculate `PrsPercent` if `lookbackPeriods` is specified; otherwise, you must specify at least `S+1` periods. More than the minimum is typically specified. For this indicator, the elements must match (e.g. the `n`th elements must be the same date). An `Exception` will be thrown for mismatch dates. Historical price quotes should have a consistent frequency (day, hour, minute, etc).
-
-`quotesEval` is an `IEnumerable<TQuote>` collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See [the Guide](../guide.md#historical-quotes) for more information.
+You must have at least `N` periods of `quotesEval` to calculate `PrsPercent` if `lookbackPeriods` is specified; otherwise, there is no additional minimum beyond having matching elements between the series. More than the minimum is typically specified. For this indicator, the elements must match (e.g., the `n`th elements must be the same date). An `Exception` will be thrown for mismatched dates. Historical price quotes should have a consistent frequency (day, hour, minute, etc.).
+
+`quotesEval` is an `IEnumerable<TQuote>` collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc.). See [the Guide](../guide.md#historical-quotes) for more information.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
You must have at least `N` periods of `quotesEval` to calculate `PrsPercent` if `lookbackPeriods` is specified; otherwise, you must specify at least `S+1` periods. More than the minimum is typically specified. For this indicator, the elements must match (e.g. the `n`th elements must be the same date). An `Exception` will be thrown for mismatch dates. Historical price quotes should have a consistent frequency (day, hour, minute, etc). | |
`quotesEval` is an `IReadOnlyList<TQuote>` collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See [the Guide]({{site.baseurl}}/guide/#historical-quotes) for more information. | |
`quotesEval` is an `IEnumerable<TQuote>` collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See [the Guide](../guide.md#historical-quotes) for more information. | |
You must have at least `N` periods of `quotesEval` to calculate `PrsPercent` if `lookbackPeriods` is specified; otherwise, there is no additional minimum beyond having matching elements between the series. More than the minimum is typically specified. For this indicator, the elements must match (e.g., the `n`th elements must be the same date). An `Exception` will be thrown for mismatched dates. Historical price quotes should have a consistent frequency (day, hour, minute, etc.). | |
`quotesEval` is an `IEnumerable<TQuote>` collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc.). See [the Guide](../guide.md#historical-quotes) for more information. |
🧰 Tools
🪛 LanguageTool
[style] ~22-~22: In American English, abbreviations like “etc.” require a period.
Context: ...onsistent frequency (day, hour, minute, etc). quotesEval
is an `IEnumerable<TQuo...
(ETC_PERIOD)
[style] ~24-~24: In American English, abbreviations like “etc.” require a period.
Context: ...onsistent frequency (day, hour, minute, etc). See [the Guide](../guide.md#historic...
(ETC_PERIOD)
🤖 Prompt for AI Agents
docs/website/indicators/Prs.md lines 22-25: fix the minimum periods sentence by
replacing the undefined "S+1" with the correct "N+1" (so it reads that if
lookbackPeriods is not specified you must specify at least N+1 periods), add a
period after "etc." where missing, and preserve the guide link sentence as-is;
ensure punctuation and wording are consistent with the rest of the doc.
Rate of Change, also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. | ||
|
||
[Rate of Change](https://en.wikipedia.org/wiki/Momentum_(technical_analysis)), also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. A [Rate of Change with Bands]({{site.baseurl}}/indicators/RocWb/#content) variant, created by Vitali Apirine, is also available. | ||
[[Discuss] 💬]({{site.github.repository_url}}/discussions/242 "Community discussion about this indicator") | ||
|
||
 | ||
|
||
[Rate of Change](https://en.wikipedia.org/wiki/Momentum_(technical_analysis)), also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. A [Rate of Change with Bands](RocWb.md) variant, created by Vitali Apirine, is also available. | ||
[[Discuss] 💬](https://github.com/DaveSkender/Stock.Indicators/discussions/242 "Community discussion about this indicator") | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Remove duplicate intro paragraph
Keep the richer version with links (Line 7) and remove the earlier duplicate.
-
- Rate of Change, also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent.
-
-
-
-
[Rate of Change](https://en.wikipedia.org/wiki/Momentum_(technical_analysis)), also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. A [Rate of Change with Bands](RocWb.md) variant, created by Vitali Apirine, is also available.
[[Discuss] 💬](https://github.com/DaveSkender/Stock.Indicators/discussions/242 "Community discussion about this indicator")
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Rate of Change, also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. | |
[Rate of Change](https://en.wikipedia.org/wiki/Momentum_(technical_analysis)), also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. A [Rate of Change with Bands]({{site.baseurl}}/indicators/RocWb/#content) variant, created by Vitali Apirine, is also available. | |
[[Discuss] 💬]({{site.github.repository_url}}/discussions/242 "Community discussion about this indicator") | |
 | |
[Rate of Change](https://en.wikipedia.org/wiki/Momentum_(technical_analysis)), also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. A [Rate of Change with Bands](RocWb.md) variant, created by Vitali Apirine, is also available. | |
[[Discuss] 💬](https://github.com/DaveSkender/Stock.Indicators/discussions/242 "Community discussion about this indicator") | |
[Rate of Change](https://en.wikipedia.org/wiki/Momentum_(technical_analysis)), also known as Momentum Oscillator, is the percent change of price over a lookback window. Momentum is the raw price change equivalent. A [Rate of Change with Bands](RocWb.md) variant, created by Vitali Apirine, is also available. | |
[[Discuss] 💬](https://github.com/DaveSkender/Stock.Indicators/discussions/242 "Community discussion about this indicator") |
🧰 Tools
🪛 LanguageTool
[grammar] ~7-~7: There might be a mistake here.
Context: ...ed by Vitali Apirine, is also available. [[Discuss] 💬](https://github.com...
(QB_NEW_EN)
🤖 Prompt for AI Agents
In docs/website/indicators/Roc.md around lines 3 to 9, there is a duplicate
introductory paragraph; remove the earlier simpler duplicate (the first
paragraph at line ~3) and keep the richer version with external links (the
paragraph at line ~7). Ensure only the linked, richer paragraph plus the
following sentence about RocWb and the discussion link remain, and delete the
redundant plain sentence above it.
Created by J. Welles Wilder, the Relative Strength Index is an oscillator that measures strength of the winning/losing price streak on a scale of 0 to 100, to depict overbought and oversold conditions. | ||
|
||
|
||
# {{ page.title }} | ||
|
||
Created by J. Welles Wilder, the [Relative Strength Index](https://en.wikipedia.org/wiki/Relative_strength_index) is an oscillator that measures strength of the winning/losing streak over `N` lookback periods on a scale of 0 to 100, to depict overbought and oversold conditions. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Streamline intro; remove duplication and tighten wording.
Keep a single paragraph; prefer the linked version (Line 7). Also clarify “winning/losing streak” scope.
- Created by J. Welles Wilder, the Relative Strength Index is an oscillator that measures strength of the winning/losing price streak on a scale of 0 to 100, to depict overbought and oversold conditions.
-
-
-
-Created by J. Welles Wilder, the [Relative Strength Index](https://en.wikipedia.org/wiki/Relative_strength_index) is an oscillator that measures strength of the winning/losing streak over `N` lookback periods on a scale of 0 to 100, to depict overbought and oversold conditions.
+Created by J. Welles Wilder, the [Relative Strength Index](https://en.wikipedia.org/wiki/Relative_strength_index) is an oscillator that measures the strength of winning/losing streaks over `N` lookback periods on a 0–100 scale to depict overbought and oversold conditions.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
Created by J. Welles Wilder, the Relative Strength Index is an oscillator that measures strength of the winning/losing price streak on a scale of 0 to 100, to depict overbought and oversold conditions. | |
# {{ page.title }} | |
Created by J. Welles Wilder, the [Relative Strength Index](https://en.wikipedia.org/wiki/Relative_strength_index) is an oscillator that measures strength of the winning/losing streak over `N` lookback periods on a scale of 0 to 100, to depict overbought and oversold conditions. | |
Created by J. Welles Wilder, the [Relative Strength Index](https://en.wikipedia.org/wiki/Relative_strength_index) is an oscillator that measures the strength of winning/losing streaks over `N` lookback periods on a 0–100 scale to depict overbought and oversold conditions. |
🧰 Tools
🪛 LanguageTool
[grammar] ~3-~3: There might be a mistake here.
Context: ...ve Strength Index is an oscillator that measures strength of the winning/losing price st...
(QB_NEW_EN)
[grammar] ~7-~7: There might be a mistake here.
Context: ...e_strength_index) is an oscillator that measures strength of the winning/losing streak o...
(QB_NEW_EN)
[grammar] ~7-~7: There might be a mistake here.
Context: ...pict overbought and oversold conditions. [[Discuss] 💬](https://github.com...
(QB_NEW_EN)
🤖 Prompt for AI Agents
In docs/website/indicators/Rsi.md around lines 3 to 7, remove the duplicated
first paragraph and keep the linked version (line 7); rewrite it as a single
concise paragraph that uses the link and clarifies "winning/losing streak" to
"price gains and losses over N lookback periods" (e.g., "measures strength of
price gains and losses over N lookback periods on a scale of 0 to 100 to depict
overbought and oversold conditions").
#1381) Signed-off-by: Dave Skender <8432125+DaveSkender@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: DaveSkender <8432125+DaveSkender@users.noreply.github.com>
@coderabbitai review your prior feedback and mark each fixed item as resolved after you review the latest codebase. If the item is still unresolved, update it for accuracy against the current codebase. |
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chainI need to find my previous review comments on this PR first to understand what feedback was provided. Let me search for that. 🏁 Script executed:
Length of output: 80119 @DaveSkender Looking at my previous feedback and the current state of the codebase, I can see that the main concern I raised about the completeness of content migration from Jekyll to MkDocs has been successfully addressed. ✅ Resolved IssuesThe comprehensive migration is now complete with:
The migration appears to have been executed thoroughly and professionally. All the indicator documentation has been properly converted, and the new MkDocs site structure is well-organized and complete. Status: All previous feedback items have been successfully resolved. The MkDocs migration is complete and ready for production use. |
done when
.yml
and{% conditionals %}
stuffconsider also
Closes #1297