Files
QuanTAlib/index.html
T

453 lines
13 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
2026-03-16 12:45:13 -07:00
<title>QuanTAlib Documentation</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Quantitative Technical Analysis Library in C#">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<link rel="icon" type="image/png" href="docs/img/QuanTAlib2.png">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsify@4/themes/dark.css">
<style>
@font-face {
font-family: 'IBM Plex Sans';
font-weight: 400;
src: url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-400-normal.woff2) format('woff2');
}
@font-face {
font-family: 'IBM Plex Sans';
font-weight: 600;
src: url(https://cdn.jsdelivr.net/fontsource/fonts/ibm-plex-sans@latest/latin-600-normal.woff2) format('woff2');
}
body {
font-family: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif;
background-color: #0d1117 !important;
color: #c9d1d9 !important;
}
.app-name-link {
color: #c9d1d9 !important;
font-weight: 600;
font-size: 1.5em;
}
.sidebar {
background-color: #010409 !important;
border-right: 1px solid #30363d !important;
}
.sidebar-nav {
color: #c9d1d9 !important;
}
.sidebar-nav li {
margin: 0;
2026-03-16 12:45:13 -07:00
font-weight: 400;
font-size: 14px !important;
}
.sidebar-nav ul {
padding-left: 0;
}
.sidebar-nav li.sidebar-l1 > a,
.sidebar-nav li.sidebar-l1 > p > a,
.sidebar-nav li.sidebar-l1 > p {
font-weight: 600 !important;
font-size: 20px !important;
color: #c9d1d9 !important;
}
.sidebar-nav li.sidebar-l1 {
margin-top: 0.5em;
margin-bottom: 0.1em;
}
.sidebar-nav li.sidebar-l1 li,
.sidebar-nav li.sidebar-l1 li a {
font-weight: 400 !important;
font-size: 14px !important;
}
.sidebar-nav a {
color: #58a6ff !important;
text-decoration: none;
}
.sidebar-nav a:hover {
text-decoration: underline;
}
.content {
background-color: #0d1117 !important;
}
.markdown-section {
max-width: none;
margin: 0;
padding: 8px 16px;
color: #c9d1d9 !important;
}
.markdown-section h1 {
color: #c9d1d9 !important;
font-weight: 600;
border-bottom: 1px solid #21262d;
padding-bottom: 0.3em;
}
.markdown-section h2,
.markdown-section h3,
.markdown-section h4,
.markdown-section h5,
.markdown-section h6 {
color: #c9d1d9 !important;
font-weight: 400;
}
.markdown-section h2 {
border-bottom: 1px solid #21262d;
padding-bottom: 0.3em;
}
.markdown-section h3 {
font-size: 1.3em;
}
.markdown-section p,
.markdown-section ul,
.markdown-section ol,
.markdown-section li {
color: #c9d1d9 !important;
}
.markdown-section strong {
color: #e8d888 !important;
font-weight: 700;
}
.markdown-section code {
color: #ffffff !important;
background-color: rgba(110,118,129,0.4) !important;
border-radius: 6px;
font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
font-size: 85%;
padding: 0.2em 0.4em;
}
.markdown-section pre {
background-color: #161b22 !important;
border-radius: 6px;
border: 1px solid #30363d;
}
.markdown-section pre > code {
color: #c9d1d9 !important;
background-color: transparent !important;
padding: 0;
font-size: 85%;
}
.markdown-section a {
color: #4493f8 !important;
text-decoration: none;
}
.markdown-section a:hover {
text-decoration: underline;
}
.markdown-section table {
display: block;
width: 100%;
overflow: auto;
border-spacing: 0;
border-collapse: collapse;
}
.markdown-section table tr {
background-color: #0d1117 !important;
border-top: 1px solid #30363d;
}
.markdown-section table tr:nth-child(2n) {
background-color: #161b22 !important;
}
.markdown-section table th,
.markdown-section table td {
padding: 6px 13px;
border: 1px solid #30363d;
color: #c9d1d9 !important;
}
.markdown-section table th {
font-weight: 600;
background-color: #161b22 !important;
}
.markdown-section blockquote {
color: #8b949e !important;
border-left: 0.25em solid #30363d;
background-color: rgba(110,118,129,0.1) !important;
}
.markdown-section img {
background-color: transparent !important;
}
/* Pine Script syntax highlighting — GitHub dark palette */
.token.comment,
.token.block-comment,
.token.doctype,
.token.annotation { color: green; }
.token.type-definition { color: #79c0ff; }
.token.class-name { color: #d2a8ff; }
.token.constant { color: #ffa657; }
.token.property { color: #c9d1d9; }
.token.function { color: #d2a8ff; }
.token.boolean { color: #ff7b72; }
/* Search box styling */
.sidebar .search {
margin-bottom: 10px;
padding: 6px;
border-bottom: 1px solid #30363d;
}
.sidebar .search .input-wrap {
display: flex;
align-items: center;
}
.sidebar .search input {
outline: none;
border: 1px solid #30363d;
width: 100%;
padding: 6px 8px;
font-size: 14px;
color: #c9d1d9 !important;
background-color: #161b22 !important;
border-radius: 6px;
font-family: inherit;
}
.sidebar .search input::placeholder {
color: #8b949e;
}
.sidebar .search input:focus {
border-color: #58a6ff;
}
.sidebar .search .results-panel {
background-color: #0d1117;
}
.sidebar .search .matching-post {
border-bottom: 1px solid #21262d;
}
.sidebar .search .matching-post .search-keyword {
color: #58a6ff;
font-weight: 600;
}
.sidebar .search a {
color: #c9d1d9 !important;
}
.sidebar .search a:hover {
color: #58a6ff !important;
}
.sidebar .search .clear-btn {
color: #8b949e;
}
/* Mermaid diagram styling for dark theme */
.mermaid {
background: transparent !important;
text-align: center;
margin: 1em 0;
}
</style>
</head>
<body>
<div id="app"></div>
<script>
globalThis.$docsify = {
markdown: {
renderer: {
code: function(code, lang) {
if (lang === 'mermaid') {
return '<div class="mermaid">' + code + '</div>';
}
return this.origin.code.apply(this, arguments);
}
}
},
name: '<img src="docs/img/QuanTAlib2.png" style="width:32px;height:32px;vertical-align:middle;margin-right:6px;">QuanTAlib',
repo: 'https://github.com/mihakralj/QuanTAlib',
loadSidebar: true,
2026-02-10 21:33:16 -08:00
subMaxLevel: 0,
auto2top: true,
homepage: 'README.md',
2026-02-10 21:33:16 -08:00
relativePath: true,
search: {
maxAge: 86400000,
paths: 'auto',
placeholder: 'Search indicators...',
noData: 'No results',
depth: 3,
hideOtherSidebarContent: false,
},
alias: {
'/.*/_sidebar.md': '/_sidebar.md',
},
// Route handler for .pine files — fetch and wrap in markdown code fence
routes: {
'/(.+\\.pine)': function(route, matched, next) {
var pinePath = matched[1];
var absUrl = new URL(pinePath, document.baseURI).href;
fetch(absUrl).then(function(r) {
if (!r.ok) throw new Error(r.status);
return r.text();
}).then(function(text) {
if (text.trimStart().startsWith('<!DOCTYPE') || text.trimStart().startsWith('<html')) {
throw new Error('Server returned HTML instead of .pine file');
}
var fname = pinePath.split('/').pop();
next('# 📜 ' + fname + '\n\n```pine\n' + text + '\n```\n');
}).catch(function(err) {
next('# Error\n\nCould not load `' + pinePath + '`: ' + err.message);
});
},
},
plugins: [
function(hook) {
hook.doneEach(function() {
setTimeout(function() {
var nav = document.querySelector('.sidebar-nav');
if (!nav) return;
var topUl = nav.querySelector('ul');
if (!topUl) return;
Array.from(topUl.children).forEach(function(li) {
if (li.tagName === 'LI') {
li.classList.add('sidebar-l1');
}
});
}, 100);
});
},
function(hook) {
hook.doneEach(function() {
mermaid.run({ querySelector: '.mermaid' });
});
},
],
}
</script>
<!-- Mermaid diagrams (must load before Docsify) -->
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
<script>
mermaid.initialize({
startOnLoad: false,
theme: 'dark',
themeVariables: {
darkMode: true,
background: '#0d1117',
primaryColor: '#238636',
primaryTextColor: '#c9d1d9',
primaryBorderColor: '#30363d',
lineColor: '#8b949e',
secondaryColor: '#161b22',
tertiaryColor: '#21262d'
}
});
</script>
<!-- Docsify v4 -->
<script src="https://cdn.jsdelivr.net/npm/docsify@4"></script>
<!-- Search Plugin -->
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/plugins/search.min.js"></script>
<!-- Sidebar Collapse Plugin -->
<script src="https://cdn.jsdelivr.net/npm/docsify-sidebar-collapse/dist/docsify-sidebar-collapse.min.js"></script>
<!-- MathJax -->
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="https://cdn.jsdelivr.net/npm/docsify-latex@0"></script>
<!-- Prism for C# syntax highlighting -->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-csharp.min.js"></script>
<!-- Prism PineScript v6 language definition -->
<script>
Prism.languages.pine = {
// Block comments (/* ... */) — must come before line comments
'block-comment': {
pattern: /\/\*[\s\S]*?\*\//,
alias: 'comment',
greedy: true
},
// Compiler annotations: //@version, //@function, //@param, etc.
'annotation': {
pattern: /\/\/@(?:version|function|param|returns?|field|type|enum|variable|description|optimized)\b.*/,
alias: 'doctype',
greedy: true
},
// Line comments
'comment': {
pattern: /\/\/.*/,
greedy: true
},
// Strings — single and double quoted, with escape sequences
'string': {
pattern: /"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'/,
greedy: true
},
// Numbers — hex, scientific notation, float, integer
'number': /\b0x[\da-fA-F]+\b|\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/,
// Boolean literals
'boolean': /\b(?:true|false)\b/,
// Type qualifiers (must precede type keywords)
'type-qualifier': {
pattern: /\b(?:series|simple|const|input)\b/,
alias: 'keyword'
},
// Declaration modes
'declaration-mode': {
pattern: /\b(?:var|varip)\b/,
alias: 'keyword'
},
// Type keywords
'type-keyword': {
pattern: /\b(?:float|int|bool|string|color|void|matrix|array|map|line|label|box|table|linefill|polyline|chart\.point|type|enum)\b/,
alias: 'type-definition'
},
// Namespace.member access — namespace highlighted as class-name
'namespace': {
pattern: /\b(?:math|ta|input|color|str|array|matrix|map|chart|request|strategy|runtime|log|ticker|table|line|label|box|linefill|polyline|plot|hline|fill|syminfo|timeframe|barstate|session)\b(?=\.)/,
alias: 'class-name'
},
// Dot-accessed members after namespace (e.g. .sma, .abs, .style_line)
'dot-access': {
pattern: /(?<=\.)\b[a-zA-Z_]\w*\b/,
alias: 'property'
},
// Built-in OHLCV and market variables
'builtin-var': {
pattern: /\b(?:open|high|low|close|volume|time|time_close|hl2|hlc3|hlcc4|ohlc4|bar_index|last_bar_index|timenow)\b/,
alias: 'constant'
},
// na — special undefined value (both variable and function)
'na-value': {
pattern: /\b(?:na)\b/,
alias: 'constant'
},
// Top-level declaration and output functions
'builtin-function': {
pattern: /\b(?:indicator|strategy|library|plot|plotshape|plotchar|plotarrow|plotbar|plotcandle|bgcolor|barcolor|hline|fill|alert|alertcondition|nz|fixnan)\b(?=\s*\()/,
alias: 'function'
},
// User-defined function calls
'function-call': {
pattern: /\b[a-zA-Z_]\w*\b(?=\s*\()/,
alias: 'function'
},
// Control flow keywords
'keyword': /\b(?:if|else|for|to|while|switch|break|continue|return|export|import|method)\b/,
// Compound operators first, then single-char
'operator': /=>|:=|\+=|-=|\*=|\/=|%=|==|!=|<=|>=|[+\-*\/%<>=]|\b(?:and|or|not)\b|\?|:/,
// Punctuation and delimiters
'punctuation': /[{}()\[\],.]/
};
</script>
</body>
</html>