Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

kronos-backtester

Overview

"Kronos-Backtester" is a Python-based toolkit for financial data analysis and backtesting of trading strategies. It provides an effective platform for simulating trading strategies using historical data to evaluate their performance and potential profitability.

Preview

graph-example

Installation

$ pip install kronos-backtester

Requirements


Quick Start

fromkronos_backtesterimportBacktester# Example strategy to be backtesteddefmomentumStrategy(df, short_window=50, long_window=200, entry_threshold=0.02, exit_threshold=0.01):
# Strategy code here# Inputs: Pandas Dataframe of price data, any relevant parameters for the strategy# The Dataframe will have columns 'Close', 'Open', 'High', 'Low', and 'Volume'# Output: Pandas Series of signals which are integers -1, 0, 1# -1 : Sell, 0 : Hold, 1 : Buy# Index of Series should be dates# The wrapper should only take in a DataFrame and output a Series of signals# This is essentially one version of the strategy with a specific set of parameters.deftestWrapper(df): returnmomentumStrategy(df, long_window=100)
bt=Backtester(testWrapper)
# This backtests on a particular ticker with given start and end datebt.testTickerReport('AAPL', '2010-01-01', '2020-01-01')
# You can also backtest on a custom DataFrame of price databt.testCustomReport(customDF)

Backtesting report output (dictionary)

Start 2010-01-01
End 2020-01-01
Duration 2516
Exposure Time 470.5
Net Worth [1000000, ... ,8166774.230371475]
Equity Final 8166774.230371475
Equity Peak 8166774.230371475
Return 7.166774230371475
Buy and Hold Return 10.038871419853216
Max Drawdown -0.1029208755830342
Avg Drawdown -0.09627259509420738
Max Drawdown Duration 19
Avg Drawdown Duration 8.857142857142858
# Trades 4
Win Rate 1.0
Best Trade 0.984095270845883
Worst Trade 0.48189821881601236
Max Trade Duration 669
Avg Trade Duration 470.5
Sharpe Ratio 33.99413578326285
Sortino Ratio nan
Calmar Ratio 69.11692296006356

Troubleshooting & FAQ

Common Questions and Issues

● Q: What if I encounter an error regarding missing data?

● A: Ensure that all required data fields are present in your dataset. Missing data can often lead to errors during the backtesting process.

● Q: How do I handle a strategy that requires multiple stock tickers?

● A: Modify your strategy function to accept and process multiple tickers. Ensure that your backtester is provided with the correct data format.

● Q: The backtester is running very slow. How can I improve its performance?

● A: Performance can be improved by optimizing your strategy code. Consider reducing the complexity of calculations or using efficient data structures.

About

Backtesting framework for Quant Illinois

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages