@backtest-kit/signals 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.cjs CHANGED
@@ -105,7 +105,7 @@ const columns$3 = [
105
105
  },
106
106
  {
107
107
  key: "stochasticRSI14",
108
- label: "Stochastic RSI(14)",
108
+ label: "StochRSI(14) - RSI Oscillator",
109
109
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
110
110
  },
111
111
  {
@@ -115,7 +115,7 @@ const columns$3 = [
115
115
  },
116
116
  {
117
117
  key: "signal9",
118
- label: "Signal(9)",
118
+ label: "MACD Signal Line(9)",
119
119
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
120
120
  },
121
121
  {
@@ -125,12 +125,12 @@ const columns$3 = [
125
125
  },
126
126
  {
127
127
  key: "pdi14",
128
- label: "+DI(14)",
128
+ label: "+DI(14) Bullish Indicator",
129
129
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
130
130
  },
131
131
  {
132
132
  key: "ndi14",
133
- label: "-DI(14)",
133
+ label: "-DI(14) Bearish Indicator",
134
134
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
135
135
  },
136
136
  {
@@ -156,22 +156,22 @@ const columns$3 = [
156
156
  },
157
157
  {
158
158
  key: "cci20",
159
- label: "CCI(20)",
159
+ label: "CCI(20) - Commodity Channel Index",
160
160
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
161
161
  },
162
162
  {
163
163
  key: "stochastic14_3_3_K",
164
- label: "Stochastic K(14,3,3)",
164
+ label: "Stochastic %K Fast Line(14,3,3)",
165
165
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
166
166
  },
167
167
  {
168
168
  key: "stochastic14_3_3_D",
169
- label: "Stochastic D(14,3,3)",
169
+ label: "Stochastic %D Slow Line(14,3,3)",
170
170
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
171
171
  },
172
172
  {
173
173
  key: "momentum10",
174
- label: "Momentum(10)",
174
+ label: "Momentum(10) - Price Change Rate",
175
175
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
176
176
  },
177
177
  {
@@ -261,12 +261,12 @@ const columns$3 = [
261
261
  },
262
262
  {
263
263
  key: "fibonacciDistance",
264
- label: "Fibonacci Distance",
264
+ label: "Fibonacci Distance to Nearest Level",
265
265
  format: async (v, symbol) => `${await backtestKit.formatPrice(symbol, Number(v))} USD`,
266
266
  },
267
267
  {
268
268
  key: "bodySize",
269
- label: "Body Size",
269
+ label: "Candle Body Size",
270
270
  format: async (v, symbol) => `${await backtestKit.formatPrice(symbol, Number(v))} USD`,
271
271
  },
272
272
  {
@@ -666,6 +666,23 @@ async function generateHistoryTable$3(indicators, symbol) {
666
666
  "- **Body Size**: candle body size at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
667
667
  markdown +=
668
668
  "- **Close Price**: close price at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
669
+ markdown += "\n## Column Descriptions\n\n";
670
+ markdown += "**RSI(14) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes. Values above 70 indicate overbought conditions, below 30 indicate oversold.\n\n";
671
+ markdown += "**StochRSI(14) - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
672
+ markdown += "**MACD(12,26,9)**: Moving Average Convergence Divergence - trend-following momentum indicator showing the relationship between two exponential moving averages. Positive values suggest bullish momentum, negative values suggest bearish momentum.\n\n";
673
+ markdown += "**MACD Signal Line(9)**: 9-period EMA of MACD values, used to generate buy/sell signals. When MACD crosses above the signal line it suggests a bullish signal, crossing below suggests bearish.\n\n";
674
+ markdown += "**ADX(14) - Average Directional Index**: Measures trend strength regardless of direction. Values above 25 indicate a strong trend, below 20 indicate weak or no trend.\n\n";
675
+ markdown += "**+DI(14) Bullish Indicator**: Positive Directional Indicator - measures upward price movement strength. Higher values indicate stronger bullish pressure.\n\n";
676
+ markdown += "**-DI(14) Bearish Indicator**: Negative Directional Indicator - measures downward price movement strength. Higher values indicate stronger bearish pressure.\n\n";
677
+ markdown += "**ATR(14) - Average True Range**: Measures market volatility by calculating the average range between high and low prices. Higher values indicate higher volatility.\n\n";
678
+ markdown += "**CCI(20) - Commodity Channel Index**: Momentum-based oscillator measuring the variation of price from statistical mean. Values above +100 suggest overbought, below -100 suggest oversold.\n\n";
679
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Momentum oscillators comparing closing price to price range over time. %K is the fast line showing current momentum, %D is smoothed version. Values above 80 are overbought, below 20 are oversold.\n\n";
680
+ markdown += "**Momentum(10) - Price Change Rate**: Measures the rate of price change over 10 periods. Positive values indicate upward momentum, negative values indicate downward momentum.\n\n";
681
+ markdown += "**Bollinger Bands**: Volatility bands placed above and below a moving average. Price touching upper band suggests overbought, lower band suggests oversold. Width indicates volatility.\n\n";
682
+ markdown += "**EMA/SMA/DEMA/WMA**: Various Moving Averages - smooth price data to identify trend direction. Price above MA suggests uptrend, below suggests downtrend.\n\n";
683
+ markdown += "**Support/Resistance Levels**: Price levels where asset historically has difficulty moving below (support) or above (resistance).\n\n";
684
+ markdown += "**Fibonacci Levels**: Technical analysis tool based on Fibonacci sequence, identifying potential support/resistance levels at key percentages (23.6%, 38.2%, 50%, 61.8%, 78.6%).\n\n";
685
+ markdown += "**Candle Body Size**: Difference between open and close prices, indicating the strength of price movement during the period.\n\n";
669
686
  return markdown;
670
687
  }
671
688
  /**
@@ -821,12 +838,12 @@ const columns$2 = [
821
838
  },
822
839
  {
823
840
  key: "stochasticRSI9",
824
- label: "Stochastic RSI(9)",
841
+ label: "StochRSI(9) - RSI Oscillator",
825
842
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
826
843
  },
827
844
  {
828
845
  key: "stochasticRSI14",
829
- label: "Stochastic RSI(14)",
846
+ label: "StochRSI(14) - RSI Oscillator",
830
847
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
831
848
  },
832
849
  {
@@ -836,7 +853,7 @@ const columns$2 = [
836
853
  },
837
854
  {
838
855
  key: "signal5",
839
- label: "Signal(5)",
856
+ label: "MACD Signal Line(5)",
840
857
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
841
858
  },
842
859
  {
@@ -851,12 +868,12 @@ const columns$2 = [
851
868
  },
852
869
  {
853
870
  key: "plusDI9",
854
- label: "+DI(9)",
871
+ label: "+DI(9) Bullish Indicator",
855
872
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
856
873
  },
857
874
  {
858
875
  key: "minusDI9",
859
- label: "-DI(9)",
876
+ label: "-DI(9) Bearish Indicator",
860
877
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
861
878
  },
862
879
  {
@@ -875,56 +892,56 @@ const columns$2 = [
875
892
  },
876
893
  {
877
894
  key: "cci9",
878
- label: "CCI(9)",
895
+ label: "CCI(9) - Commodity Channel Index",
879
896
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
880
897
  },
881
898
  {
882
899
  key: "stochasticK3_3_3",
883
- label: "Stochastic K(3,3,3)",
900
+ label: "Stochastic %K Fast Line(3,3,3)",
884
901
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
885
902
  },
886
903
  {
887
904
  key: "stochasticD3_3_3",
888
- label: "Stochastic D(3,3,3)",
905
+ label: "Stochastic %D Slow Line(3,3,3)",
889
906
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
890
907
  },
891
908
  {
892
909
  key: "stochasticK5_3_3",
893
- label: "Stochastic K(5,3,3)",
910
+ label: "Stochastic %K Fast Line(5,3,3)",
894
911
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
895
912
  },
896
913
  {
897
914
  key: "stochasticD5_3_3",
898
- label: "Stochastic D(5,3,3)",
915
+ label: "Stochastic %D Slow Line(5,3,3)",
899
916
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
900
917
  },
901
918
  {
902
919
  key: "momentum5",
903
- label: "Momentum(5)",
920
+ label: "Momentum(5) - Price Change Rate",
904
921
  format: async (v, symbol) => v !== null
905
922
  ? `${await backtestKit.formatPrice(symbol, Number(v))} USD`
906
923
  : "N/A",
907
924
  },
908
925
  {
909
926
  key: "momentum10",
910
- label: "Momentum(10)",
927
+ label: "Momentum(10) - Price Change Rate",
911
928
  format: async (v, symbol) => v !== null
912
929
  ? `${await backtestKit.formatPrice(symbol, Number(v))} USD`
913
930
  : "N/A",
914
931
  },
915
932
  {
916
933
  key: "roc1",
917
- label: "ROC(1)",
934
+ label: "ROC(1) - Rate of Change %",
918
935
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
919
936
  },
920
937
  {
921
938
  key: "roc3",
922
- label: "ROC(3)",
939
+ label: "ROC(3) - Rate of Change %",
923
940
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
924
941
  },
925
942
  {
926
943
  key: "roc5",
927
- label: "ROC(5)",
944
+ label: "ROC(5) - Rate of Change %",
928
945
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
929
946
  },
930
947
  {
@@ -1651,6 +1668,28 @@ async function generateHistoryTable$2(indicators, symbol) {
1651
1668
  "- **Pressure Index**: buying/selling pressure percentage at row timestamp (Min: -100%, Max: +100%)\n";
1652
1669
  markdown +=
1653
1670
  "- **Close Price**: close price at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
1671
+ markdown += "\n## Column Descriptions\n\n";
1672
+ markdown += "**RSI(9/14) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes. Values above 70 indicate overbought conditions, below 30 indicate oversold.\n\n";
1673
+ markdown += "**StochRSI - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals for scalping. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
1674
+ markdown += "**MACD(8,21,5)**: Moving Average Convergence Divergence optimized for 1-minute timeframe. Shows short-term momentum shifts. Positive values suggest bullish momentum, negative values suggest bearish momentum.\n\n";
1675
+ markdown += "**MACD Signal Line(5)**: 5-period EMA of MACD values for fast scalping signals. MACD crossing above signal suggests buy opportunity, crossing below suggests sell.\n\n";
1676
+ markdown += "**MACD Histogram**: Visual representation of distance between MACD and signal line. Growing positive histogram indicates strengthening bullish momentum, growing negative indicates strengthening bearish momentum.\n\n";
1677
+ markdown += "**ADX(9) - Average Directional Index**: Measures trend strength for scalping. Values above 25 indicate strong trend suitable for trend-following, below 20 indicate ranging market better for mean reversion.\n\n";
1678
+ markdown += "**+DI(9) Bullish & -DI(9) Bearish Indicators**: Directional indicators showing which side has momentum. When +DI > -DI, bullish pressure dominates; when -DI > +DI, bearish pressure dominates.\n\n";
1679
+ markdown += "**ATR(5/9) - Average True Range**: Volatility measure critical for scalping stop-loss placement. Higher ATR means wider stops needed.\n\n";
1680
+ markdown += "**CCI(9) - Commodity Channel Index**: Momentum oscillator for identifying quick overbought/oversold conditions. Values above +100 suggest overbought, below -100 suggest oversold, within ±100 is normal range.\n\n";
1681
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Ultra-responsive momentum oscillators for scalping entries/exits. %K is fast line, %D is smoothed. Above 80 overbought, below 20 oversold. Look for crossovers.\n\n";
1682
+ markdown += "**Momentum - Price Change Rate**: Measures absolute price change velocity. Positive momentum indicates upward pressure, negative indicates downward pressure.\n\n";
1683
+ markdown += "**ROC - Rate of Change %**: Percentage-based momentum showing speed of price movement. Useful for spotting acceleration or deceleration in trends.\n\n";
1684
+ markdown += "**Bollinger Bands**: Volatility bands for identifying squeeze/expansion patterns. Price at upper band suggests profit-taking opportunity, at lower band suggests buying opportunity. Width shows volatility level.\n\n";
1685
+ markdown += "**Bollinger Position**: Shows where price sits within the bands as percentage. 0% = at lower band, 50% = at middle, 100% = at upper band.\n\n";
1686
+ markdown += "**EMA/SMA/DEMA/WMA**: Fast-reacting moving averages for scalping. Price above indicates uptrend, below indicates downtrend. Crossovers generate trading signals.\n\n";
1687
+ markdown += "**Volume Ratio**: Current volume compared to average. Values above 1.5x indicate unusual activity worth attention.\n\n";
1688
+ markdown += "**Support/Resistance Levels**: Key price levels where quick reversals often occur in scalping.\n\n";
1689
+ markdown += "**Squeeze Momentum**: Indicates volatility compression. High values suggest imminent breakout.\n\n";
1690
+ markdown += "**Pressure Index**: Measures buying vs selling pressure within the candle. Positive values indicate buying pressure, negative indicates selling pressure.\n\n";
1691
+ markdown += "**Volatility(5)**: Statistical volatility measure showing how much price is fluctuating. Higher values mean riskier but potentially more profitable trades.\n\n";
1692
+ markdown += "**True Range**: Maximum price movement in the candle, important for position sizing in scalping.\n\n";
1654
1693
  return markdown;
1655
1694
  }
1656
1695
  /**
@@ -1790,7 +1829,7 @@ const columns$1 = [
1790
1829
  },
1791
1830
  {
1792
1831
  key: "stochasticRSI9",
1793
- label: "Stochastic RSI(9)",
1832
+ label: "StochRSI(9) - RSI Oscillator",
1794
1833
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1795
1834
  },
1796
1835
  {
@@ -1800,7 +1839,7 @@ const columns$1 = [
1800
1839
  },
1801
1840
  {
1802
1841
  key: "signal5",
1803
- label: "Signal(5)",
1842
+ label: "MACD Signal Line(5)",
1804
1843
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
1805
1844
  },
1806
1845
  {
@@ -1810,12 +1849,12 @@ const columns$1 = [
1810
1849
  },
1811
1850
  {
1812
1851
  key: "plusDI14",
1813
- label: "+DI(14)",
1852
+ label: "+DI(14) Bullish Indicator",
1814
1853
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1815
1854
  },
1816
1855
  {
1817
1856
  key: "minusDI14",
1818
- label: "-DI(14)",
1857
+ label: "-DI(14) Bearish Indicator",
1819
1858
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1820
1859
  },
1821
1860
  {
@@ -1827,34 +1866,34 @@ const columns$1 = [
1827
1866
  },
1828
1867
  {
1829
1868
  key: "cci14",
1830
- label: "CCI(14)",
1869
+ label: "CCI(14) - Commodity Channel Index",
1831
1870
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1832
1871
  },
1833
1872
  {
1834
1873
  key: "stochasticK5_3_3",
1835
- label: "Stochastic K(5,3,3)",
1874
+ label: "Stochastic %K Fast Line(5,3,3)",
1836
1875
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1837
1876
  },
1838
1877
  {
1839
1878
  key: "stochasticD5_3_3",
1840
- label: "Stochastic D(5,3,3)",
1879
+ label: "Stochastic %D Slow Line(5,3,3)",
1841
1880
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1842
1881
  },
1843
1882
  {
1844
1883
  key: "momentum8",
1845
- label: "Momentum(8)",
1884
+ label: "Momentum(8) - Price Change Rate",
1846
1885
  format: async (v, symbol) => v !== null
1847
1886
  ? `${await backtestKit.formatPrice(symbol, Number(v))} USD`
1848
1887
  : "N/A",
1849
1888
  },
1850
1889
  {
1851
1890
  key: "roc5",
1852
- label: "ROC(5)",
1891
+ label: "ROC(5) - Rate of Change %",
1853
1892
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
1854
1893
  },
1855
1894
  {
1856
1895
  key: "roc10",
1857
- label: "ROC(10)",
1896
+ label: "ROC(10) - Rate of Change %",
1858
1897
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
1859
1898
  },
1860
1899
  {
@@ -1949,12 +1988,12 @@ const columns$1 = [
1949
1988
  },
1950
1989
  {
1951
1990
  key: "fibonacciDistance",
1952
- label: "Fibonacci Distance",
1991
+ label: "Fibonacci Distance to Nearest Level",
1953
1992
  format: async (v, symbol) => `${await backtestKit.formatPrice(symbol, Number(v))} USD`,
1954
1993
  },
1955
1994
  {
1956
1995
  key: "bodySize",
1957
- label: "Body Size",
1996
+ label: "Candle Body Size",
1958
1997
  format: async (v, symbol) => `${await backtestKit.formatPrice(symbol, Number(v))} USD`,
1959
1998
  },
1960
1999
  {
@@ -2385,6 +2424,24 @@ async function generateHistoryTable$1(indicators, symbol) {
2385
2424
  "- **Body Size**: candle body size at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
2386
2425
  markdown +=
2387
2426
  "- **Close Price**: close price at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
2427
+ markdown += "\n## Column Descriptions\n\n";
2428
+ markdown += "**RSI(9) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes. Values above 70 indicate overbought conditions, below 30 indicate oversold.\n\n";
2429
+ markdown += "**StochRSI(9) - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
2430
+ markdown += "**MACD(8,21,5)**: Moving Average Convergence Divergence optimized for 15-minute timeframe - trend-following momentum indicator. Positive values suggest bullish momentum, negative values suggest bearish momentum.\n\n";
2431
+ markdown += "**MACD Signal Line(5)**: 5-period EMA of MACD values, used to generate buy/sell signals. When MACD crosses above the signal line it suggests a bullish signal, crossing below suggests bearish.\n\n";
2432
+ markdown += "**ADX(14) - Average Directional Index**: Measures trend strength regardless of direction. Values above 25 indicate a strong trend, below 20 indicate weak or no trend.\n\n";
2433
+ markdown += "**+DI(14) Bullish Indicator**: Positive Directional Indicator - measures upward price movement strength. Higher values indicate stronger bullish pressure.\n\n";
2434
+ markdown += "**-DI(14) Bearish Indicator**: Negative Directional Indicator - measures downward price movement strength. Higher values indicate stronger bearish pressure.\n\n";
2435
+ markdown += "**ATR(9) - Average True Range**: Measures market volatility by calculating the average range between high and low prices. Higher values indicate higher volatility, important for stop-loss placement.\n\n";
2436
+ markdown += "**CCI(14) - Commodity Channel Index**: Momentum-based oscillator measuring the variation of price from statistical mean. Values above +100 suggest overbought, below -100 suggest oversold.\n\n";
2437
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Momentum oscillators comparing closing price to price range over time. %K is the fast line showing current momentum, %D is smoothed version. Values above 80 are overbought, below 20 are oversold.\n\n";
2438
+ markdown += "**Momentum(8) - Price Change Rate**: Measures the rate of price change over 8 periods. Positive values indicate upward momentum, negative values indicate downward momentum.\n\n";
2439
+ markdown += "**ROC - Rate of Change %**: Percentage-based momentum showing speed of price movement over period. Useful for identifying acceleration or deceleration in trends.\n\n";
2440
+ markdown += "**Bollinger Bands**: Volatility bands placed above and below a moving average. Price touching upper band suggests overbought, lower band suggests oversold. Width indicates volatility level.\n\n";
2441
+ markdown += "**EMA/SMA/DEMA/WMA**: Various Moving Averages - smooth price data to identify trend direction. Price above MA suggests uptrend, below suggests downtrend.\n\n";
2442
+ markdown += "**Support/Resistance Levels**: Price levels where asset historically has difficulty moving below (support) or above (resistance). Key levels for entry/exit decisions.\n\n";
2443
+ markdown += "**Fibonacci Levels**: Technical analysis tool based on Fibonacci sequence, identifying potential support/resistance levels at key percentages (23.6%, 38.2%, 50%, 61.8%, 78.6%).\n\n";
2444
+ markdown += "**Candle Body Size**: Difference between open and close prices, indicating the strength of price movement during the period.\n\n";
2388
2445
  return markdown;
2389
2446
  }
2390
2447
  /**
@@ -2521,7 +2578,7 @@ const columns = [
2521
2578
  },
2522
2579
  {
2523
2580
  key: "stochasticRSI14",
2524
- label: "Stochastic RSI(14)",
2581
+ label: "StochRSI(14) - RSI Oscillator",
2525
2582
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2526
2583
  },
2527
2584
  {
@@ -2531,7 +2588,7 @@ const columns = [
2531
2588
  },
2532
2589
  {
2533
2590
  key: "signal9",
2534
- label: "Signal(9)",
2591
+ label: "MACD Signal Line(9)",
2535
2592
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
2536
2593
  },
2537
2594
  {
@@ -2541,12 +2598,12 @@ const columns = [
2541
2598
  },
2542
2599
  {
2543
2600
  key: "plusDI14",
2544
- label: "+DI(14)",
2601
+ label: "+DI(14) Bullish Indicator",
2545
2602
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2546
2603
  },
2547
2604
  {
2548
2605
  key: "minusDI14",
2549
- label: "-DI(14)",
2606
+ label: "-DI(14) Bearish Indicator",
2550
2607
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2551
2608
  },
2552
2609
  {
@@ -2558,22 +2615,22 @@ const columns = [
2558
2615
  },
2559
2616
  {
2560
2617
  key: "cci20",
2561
- label: "CCI(20)",
2618
+ label: "CCI(20) - Commodity Channel Index",
2562
2619
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2563
2620
  },
2564
2621
  {
2565
2622
  key: "stochasticK14_3_3",
2566
- label: "Stochastic K(14,3,3)",
2623
+ label: "Stochastic %K Fast Line(14,3,3)",
2567
2624
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2568
2625
  },
2569
2626
  {
2570
2627
  key: "stochasticD14_3_3",
2571
- label: "Stochastic D(14,3,3)",
2628
+ label: "Stochastic %D Slow Line(14,3,3)",
2572
2629
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2573
2630
  },
2574
2631
  {
2575
2632
  key: "momentum8",
2576
- label: "Momentum(8)",
2633
+ label: "Momentum(8) - Price Change Rate",
2577
2634
  format: async (v, symbol) => v !== null
2578
2635
  ? `${await backtestKit.formatPrice(symbol, Number(v))} USD`
2579
2636
  : "N/A",
@@ -2665,12 +2722,12 @@ const columns = [
2665
2722
  },
2666
2723
  {
2667
2724
  key: "volatility",
2668
- label: "Basic Volatility",
2725
+ label: "Volatility % - Price Fluctuation",
2669
2726
  format: (v) => (v !== null ? `${Number(v).toFixed(2)}%` : "N/A"),
2670
2727
  },
2671
2728
  {
2672
2729
  key: "priceMomentum6",
2673
- label: "Price Momentum(6)",
2730
+ label: "Price Momentum(6) - Swing Direction",
2674
2731
  format: async (v, symbol) => v !== null
2675
2732
  ? `${await backtestKit.formatPrice(symbol, Number(v))} USD`
2676
2733
  : "N/A",
@@ -2696,7 +2753,7 @@ const columns = [
2696
2753
  },
2697
2754
  {
2698
2755
  key: "bodySize",
2699
- label: "Body Size",
2756
+ label: "Candle Body Size",
2700
2757
  format: async (v, symbol) => `${await backtestKit.formatPrice(symbol, Number(v))} USD`,
2701
2758
  },
2702
2759
  {
@@ -3166,6 +3223,27 @@ async function generateHistoryTable(indicators, symbol) {
3166
3223
  "- **Volume**: trading volume at row timestamp (Min: 0, Max: +∞)\n";
3167
3224
  markdown +=
3168
3225
  "- **Volatility**: volatility percentage at row timestamp (Min: 0%, Max: +∞)\n";
3226
+ markdown += "\n## Column Descriptions\n\n";
3227
+ markdown += "**RSI(14) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes on 30-minute timeframe. Values above 70 indicate overbought conditions suitable for profit-taking, below 30 indicate oversold conditions suitable for entries.\n\n";
3228
+ markdown += "**StochRSI(14) - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals for swing trading. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
3229
+ markdown += "**MACD(12,26,9)**: Moving Average Convergence Divergence - classic trend-following momentum indicator for swing trading. Positive values suggest bullish momentum, negative values suggest bearish momentum. Watch for crossovers with signal line.\n\n";
3230
+ markdown += "**MACD Signal Line(9)**: 9-period EMA of MACD values, used to generate swing trading signals. When MACD crosses above the signal line it suggests a bullish swing entry, crossing below suggests bearish swing entry.\n\n";
3231
+ markdown += "**ADX(14) - Average Directional Index**: Measures trend strength regardless of direction. Values above 25 indicate a strong trend suitable for trend-following swing trades, below 20 indicate weak/ranging market better for range-bound strategies.\n\n";
3232
+ markdown += "**+DI(14) Bullish Indicator**: Positive Directional Indicator - measures upward price movement strength. When +DI is above -DI and rising, it indicates strong bullish swing momentum.\n\n";
3233
+ markdown += "**-DI(14) Bearish Indicator**: Negative Directional Indicator - measures downward price movement strength. When -DI is above +DI and rising, it indicates strong bearish swing momentum.\n\n";
3234
+ markdown += "**ATR(14) - Average True Range**: Measures market volatility crucial for swing trading position sizing and stop-loss placement. Higher ATR means wider stops needed to avoid premature exit.\n\n";
3235
+ markdown += "**CCI(20) - Commodity Channel Index**: Momentum-based oscillator measuring the variation of price from statistical mean. Values above +100 suggest strong upward momentum, below -100 suggest strong downward momentum, useful for swing entry/exit timing.\n\n";
3236
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Momentum oscillators comparing closing price to price range over time. %K is the fast line showing current momentum, %D is smoothed version. Values above 80 indicate overbought swing reversal opportunities, below 20 indicate oversold swing entry opportunities.\n\n";
3237
+ markdown += "**Momentum(8) - Price Change Rate**: Measures the absolute rate of price change over 8 periods. Positive and increasing momentum confirms swing uptrend, negative and decreasing confirms swing downtrend.\n\n";
3238
+ markdown += "**Bollinger Bands**: Volatility bands placed above and below a 20-period moving average. In swing trading, price touching upper band suggests taking profits on longs, lower band suggests entry for longs or exit for shorts. Width indicates volatility - squeeze suggests imminent swing move.\n\n";
3239
+ markdown += "**EMA/SMA/DEMA/WMA**: Various Moving Averages - smooth price data to identify swing trend direction. Price above MA suggests swing uptrend, below suggests swing downtrend. Moving average crossovers generate swing trading signals.\n\n";
3240
+ markdown += "**Support/Resistance Levels**: Key price levels where asset historically has difficulty moving below (support) or above (resistance). Critical for swing trading entry/exit and stop-loss placement.\n\n";
3241
+ markdown += "**Fibonacci Nearest Support/Resistance**: Identifies nearest Fibonacci retracement levels acting as support/resistance. Swing traders use these to identify entry points (at support) and profit targets (at resistance).\n\n";
3242
+ markdown += "**Fibonacci Position %**: Shows where current price sits in the recent high-low range. 0% = at low (potential swing buy), 50% = mid-range, 100% = at high (potential swing sell). Helps identify if price is at an extreme suitable for swing entries.\n\n";
3243
+ markdown += "**Price Momentum(6) - Swing Direction**: 6-period momentum indicator specifically for swing direction confirmation. Positive values confirm upward swing, negative confirm downward swing.\n\n";
3244
+ markdown += "**Volatility % - Price Fluctuation**: Statistical measure of price fluctuation. Higher volatility means larger price swings and potentially more profit opportunity, but also higher risk requiring wider stops.\n\n";
3245
+ markdown += "**Volume**: Trading volume indicating market participation. Rising volume during price moves confirms the swing trend strength, declining volume suggests weakening swing.\n\n";
3246
+ markdown += "**Candle Body Size**: Difference between open and close prices, indicating the strength of directional movement. Large bodies confirm strong swing momentum, small bodies suggest consolidation or indecision.\n\n";
3169
3247
  return markdown;
3170
3248
  }
3171
3249
  /**
@@ -3699,10 +3777,10 @@ class OneMinuteCandleHistoryService {
3699
3777
  markdown += `### 1m Candle ${index + 1}\n`;
3700
3778
  markdown += `- **Price Change**: ${priceChangePercent.toFixed(3)}%\n`;
3701
3779
  markdown += `- **Time**: ${formattedTime}\n`;
3702
- markdown += `- **Open**: ${backtestKit.formatPrice(symbol, candle.open)} USD\n`;
3703
- markdown += `- **High**: ${backtestKit.formatPrice(symbol, candle.high)} USD\n`;
3704
- markdown += `- **Low**: ${backtestKit.formatPrice(symbol, candle.low)} USD\n`;
3705
- markdown += `- **Close**: ${backtestKit.formatPrice(symbol, candle.close)} USD\n`;
3780
+ markdown += `- **Open**: ${await backtestKit.formatPrice(symbol, candle.open)} USD\n`;
3781
+ markdown += `- **High**: ${await backtestKit.formatPrice(symbol, candle.high)} USD\n`;
3782
+ markdown += `- **Low**: ${await backtestKit.formatPrice(symbol, candle.low)} USD\n`;
3783
+ markdown += `- **Close**: ${await backtestKit.formatPrice(symbol, candle.close)} USD\n`;
3706
3784
  markdown += `- **Volume**: ${backtestKit.formatQuantity(symbol, candle.volume)}\n`;
3707
3785
  markdown += `- **1m Volatility**: ${volatilityPercent.toFixed(2)}%\n`;
3708
3786
  markdown += `- **Body Size**: ${bodyPercent.toFixed(1)}%\n\n`;
@@ -3849,10 +3927,10 @@ class ThirtyMinuteCandleHistoryService {
3849
3927
  report += `### 30m Candle ${index + 1}\n`;
3850
3928
  report += `- **Price Change**: ${priceChangePercent.toFixed(3)}%\n`;
3851
3929
  report += `- **Time**: ${formattedTime}\n`;
3852
- report += `- **Open**: ${backtestKit.formatPrice(symbol, candle.open)} USD\n`;
3853
- report += `- **High**: ${backtestKit.formatPrice(symbol, candle.high)} USD\n`;
3854
- report += `- **Low**: ${backtestKit.formatPrice(symbol, candle.low)} USD\n`;
3855
- report += `- **Close**: ${backtestKit.formatPrice(symbol, candle.close)} USD\n`;
3930
+ report += `- **Open**: ${await backtestKit.formatPrice(symbol, candle.open)} USD\n`;
3931
+ report += `- **High**: ${await backtestKit.formatPrice(symbol, candle.high)} USD\n`;
3932
+ report += `- **Low**: ${await backtestKit.formatPrice(symbol, candle.low)} USD\n`;
3933
+ report += `- **Close**: ${await backtestKit.formatPrice(symbol, candle.close)} USD\n`;
3856
3934
  report += `- **Volume**: ${backtestKit.formatQuantity(symbol, candle.volume)}\n`;
3857
3935
  report += `- **30m Volatility**: ${volatilityPercent.toFixed(2)}%\n`;
3858
3936
  report += `- **Body Size**: ${bodyPercent.toFixed(1)}%\n\n`;
package/build/index.mjs CHANGED
@@ -103,7 +103,7 @@ const columns$3 = [
103
103
  },
104
104
  {
105
105
  key: "stochasticRSI14",
106
- label: "Stochastic RSI(14)",
106
+ label: "StochRSI(14) - RSI Oscillator",
107
107
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
108
108
  },
109
109
  {
@@ -113,7 +113,7 @@ const columns$3 = [
113
113
  },
114
114
  {
115
115
  key: "signal9",
116
- label: "Signal(9)",
116
+ label: "MACD Signal Line(9)",
117
117
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
118
118
  },
119
119
  {
@@ -123,12 +123,12 @@ const columns$3 = [
123
123
  },
124
124
  {
125
125
  key: "pdi14",
126
- label: "+DI(14)",
126
+ label: "+DI(14) Bullish Indicator",
127
127
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
128
128
  },
129
129
  {
130
130
  key: "ndi14",
131
- label: "-DI(14)",
131
+ label: "-DI(14) Bearish Indicator",
132
132
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
133
133
  },
134
134
  {
@@ -154,22 +154,22 @@ const columns$3 = [
154
154
  },
155
155
  {
156
156
  key: "cci20",
157
- label: "CCI(20)",
157
+ label: "CCI(20) - Commodity Channel Index",
158
158
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
159
159
  },
160
160
  {
161
161
  key: "stochastic14_3_3_K",
162
- label: "Stochastic K(14,3,3)",
162
+ label: "Stochastic %K Fast Line(14,3,3)",
163
163
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
164
164
  },
165
165
  {
166
166
  key: "stochastic14_3_3_D",
167
- label: "Stochastic D(14,3,3)",
167
+ label: "Stochastic %D Slow Line(14,3,3)",
168
168
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
169
169
  },
170
170
  {
171
171
  key: "momentum10",
172
- label: "Momentum(10)",
172
+ label: "Momentum(10) - Price Change Rate",
173
173
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
174
174
  },
175
175
  {
@@ -259,12 +259,12 @@ const columns$3 = [
259
259
  },
260
260
  {
261
261
  key: "fibonacciDistance",
262
- label: "Fibonacci Distance",
262
+ label: "Fibonacci Distance to Nearest Level",
263
263
  format: async (v, symbol) => `${await formatPrice(symbol, Number(v))} USD`,
264
264
  },
265
265
  {
266
266
  key: "bodySize",
267
- label: "Body Size",
267
+ label: "Candle Body Size",
268
268
  format: async (v, symbol) => `${await formatPrice(symbol, Number(v))} USD`,
269
269
  },
270
270
  {
@@ -664,6 +664,23 @@ async function generateHistoryTable$3(indicators, symbol) {
664
664
  "- **Body Size**: candle body size at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
665
665
  markdown +=
666
666
  "- **Close Price**: close price at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
667
+ markdown += "\n## Column Descriptions\n\n";
668
+ markdown += "**RSI(14) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes. Values above 70 indicate overbought conditions, below 30 indicate oversold.\n\n";
669
+ markdown += "**StochRSI(14) - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
670
+ markdown += "**MACD(12,26,9)**: Moving Average Convergence Divergence - trend-following momentum indicator showing the relationship between two exponential moving averages. Positive values suggest bullish momentum, negative values suggest bearish momentum.\n\n";
671
+ markdown += "**MACD Signal Line(9)**: 9-period EMA of MACD values, used to generate buy/sell signals. When MACD crosses above the signal line it suggests a bullish signal, crossing below suggests bearish.\n\n";
672
+ markdown += "**ADX(14) - Average Directional Index**: Measures trend strength regardless of direction. Values above 25 indicate a strong trend, below 20 indicate weak or no trend.\n\n";
673
+ markdown += "**+DI(14) Bullish Indicator**: Positive Directional Indicator - measures upward price movement strength. Higher values indicate stronger bullish pressure.\n\n";
674
+ markdown += "**-DI(14) Bearish Indicator**: Negative Directional Indicator - measures downward price movement strength. Higher values indicate stronger bearish pressure.\n\n";
675
+ markdown += "**ATR(14) - Average True Range**: Measures market volatility by calculating the average range between high and low prices. Higher values indicate higher volatility.\n\n";
676
+ markdown += "**CCI(20) - Commodity Channel Index**: Momentum-based oscillator measuring the variation of price from statistical mean. Values above +100 suggest overbought, below -100 suggest oversold.\n\n";
677
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Momentum oscillators comparing closing price to price range over time. %K is the fast line showing current momentum, %D is smoothed version. Values above 80 are overbought, below 20 are oversold.\n\n";
678
+ markdown += "**Momentum(10) - Price Change Rate**: Measures the rate of price change over 10 periods. Positive values indicate upward momentum, negative values indicate downward momentum.\n\n";
679
+ markdown += "**Bollinger Bands**: Volatility bands placed above and below a moving average. Price touching upper band suggests overbought, lower band suggests oversold. Width indicates volatility.\n\n";
680
+ markdown += "**EMA/SMA/DEMA/WMA**: Various Moving Averages - smooth price data to identify trend direction. Price above MA suggests uptrend, below suggests downtrend.\n\n";
681
+ markdown += "**Support/Resistance Levels**: Price levels where asset historically has difficulty moving below (support) or above (resistance).\n\n";
682
+ markdown += "**Fibonacci Levels**: Technical analysis tool based on Fibonacci sequence, identifying potential support/resistance levels at key percentages (23.6%, 38.2%, 50%, 61.8%, 78.6%).\n\n";
683
+ markdown += "**Candle Body Size**: Difference between open and close prices, indicating the strength of price movement during the period.\n\n";
667
684
  return markdown;
668
685
  }
669
686
  /**
@@ -819,12 +836,12 @@ const columns$2 = [
819
836
  },
820
837
  {
821
838
  key: "stochasticRSI9",
822
- label: "Stochastic RSI(9)",
839
+ label: "StochRSI(9) - RSI Oscillator",
823
840
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
824
841
  },
825
842
  {
826
843
  key: "stochasticRSI14",
827
- label: "Stochastic RSI(14)",
844
+ label: "StochRSI(14) - RSI Oscillator",
828
845
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
829
846
  },
830
847
  {
@@ -834,7 +851,7 @@ const columns$2 = [
834
851
  },
835
852
  {
836
853
  key: "signal5",
837
- label: "Signal(5)",
854
+ label: "MACD Signal Line(5)",
838
855
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
839
856
  },
840
857
  {
@@ -849,12 +866,12 @@ const columns$2 = [
849
866
  },
850
867
  {
851
868
  key: "plusDI9",
852
- label: "+DI(9)",
869
+ label: "+DI(9) Bullish Indicator",
853
870
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
854
871
  },
855
872
  {
856
873
  key: "minusDI9",
857
- label: "-DI(9)",
874
+ label: "-DI(9) Bearish Indicator",
858
875
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
859
876
  },
860
877
  {
@@ -873,56 +890,56 @@ const columns$2 = [
873
890
  },
874
891
  {
875
892
  key: "cci9",
876
- label: "CCI(9)",
893
+ label: "CCI(9) - Commodity Channel Index",
877
894
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
878
895
  },
879
896
  {
880
897
  key: "stochasticK3_3_3",
881
- label: "Stochastic K(3,3,3)",
898
+ label: "Stochastic %K Fast Line(3,3,3)",
882
899
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
883
900
  },
884
901
  {
885
902
  key: "stochasticD3_3_3",
886
- label: "Stochastic D(3,3,3)",
903
+ label: "Stochastic %D Slow Line(3,3,3)",
887
904
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
888
905
  },
889
906
  {
890
907
  key: "stochasticK5_3_3",
891
- label: "Stochastic K(5,3,3)",
908
+ label: "Stochastic %K Fast Line(5,3,3)",
892
909
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
893
910
  },
894
911
  {
895
912
  key: "stochasticD5_3_3",
896
- label: "Stochastic D(5,3,3)",
913
+ label: "Stochastic %D Slow Line(5,3,3)",
897
914
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
898
915
  },
899
916
  {
900
917
  key: "momentum5",
901
- label: "Momentum(5)",
918
+ label: "Momentum(5) - Price Change Rate",
902
919
  format: async (v, symbol) => v !== null
903
920
  ? `${await formatPrice(symbol, Number(v))} USD`
904
921
  : "N/A",
905
922
  },
906
923
  {
907
924
  key: "momentum10",
908
- label: "Momentum(10)",
925
+ label: "Momentum(10) - Price Change Rate",
909
926
  format: async (v, symbol) => v !== null
910
927
  ? `${await formatPrice(symbol, Number(v))} USD`
911
928
  : "N/A",
912
929
  },
913
930
  {
914
931
  key: "roc1",
915
- label: "ROC(1)",
932
+ label: "ROC(1) - Rate of Change %",
916
933
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
917
934
  },
918
935
  {
919
936
  key: "roc3",
920
- label: "ROC(3)",
937
+ label: "ROC(3) - Rate of Change %",
921
938
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
922
939
  },
923
940
  {
924
941
  key: "roc5",
925
- label: "ROC(5)",
942
+ label: "ROC(5) - Rate of Change %",
926
943
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
927
944
  },
928
945
  {
@@ -1649,6 +1666,28 @@ async function generateHistoryTable$2(indicators, symbol) {
1649
1666
  "- **Pressure Index**: buying/selling pressure percentage at row timestamp (Min: -100%, Max: +100%)\n";
1650
1667
  markdown +=
1651
1668
  "- **Close Price**: close price at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
1669
+ markdown += "\n## Column Descriptions\n\n";
1670
+ markdown += "**RSI(9/14) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes. Values above 70 indicate overbought conditions, below 30 indicate oversold.\n\n";
1671
+ markdown += "**StochRSI - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals for scalping. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
1672
+ markdown += "**MACD(8,21,5)**: Moving Average Convergence Divergence optimized for 1-minute timeframe. Shows short-term momentum shifts. Positive values suggest bullish momentum, negative values suggest bearish momentum.\n\n";
1673
+ markdown += "**MACD Signal Line(5)**: 5-period EMA of MACD values for fast scalping signals. MACD crossing above signal suggests buy opportunity, crossing below suggests sell.\n\n";
1674
+ markdown += "**MACD Histogram**: Visual representation of distance between MACD and signal line. Growing positive histogram indicates strengthening bullish momentum, growing negative indicates strengthening bearish momentum.\n\n";
1675
+ markdown += "**ADX(9) - Average Directional Index**: Measures trend strength for scalping. Values above 25 indicate strong trend suitable for trend-following, below 20 indicate ranging market better for mean reversion.\n\n";
1676
+ markdown += "**+DI(9) Bullish & -DI(9) Bearish Indicators**: Directional indicators showing which side has momentum. When +DI > -DI, bullish pressure dominates; when -DI > +DI, bearish pressure dominates.\n\n";
1677
+ markdown += "**ATR(5/9) - Average True Range**: Volatility measure critical for scalping stop-loss placement. Higher ATR means wider stops needed.\n\n";
1678
+ markdown += "**CCI(9) - Commodity Channel Index**: Momentum oscillator for identifying quick overbought/oversold conditions. Values above +100 suggest overbought, below -100 suggest oversold, within ±100 is normal range.\n\n";
1679
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Ultra-responsive momentum oscillators for scalping entries/exits. %K is fast line, %D is smoothed. Above 80 overbought, below 20 oversold. Look for crossovers.\n\n";
1680
+ markdown += "**Momentum - Price Change Rate**: Measures absolute price change velocity. Positive momentum indicates upward pressure, negative indicates downward pressure.\n\n";
1681
+ markdown += "**ROC - Rate of Change %**: Percentage-based momentum showing speed of price movement. Useful for spotting acceleration or deceleration in trends.\n\n";
1682
+ markdown += "**Bollinger Bands**: Volatility bands for identifying squeeze/expansion patterns. Price at upper band suggests profit-taking opportunity, at lower band suggests buying opportunity. Width shows volatility level.\n\n";
1683
+ markdown += "**Bollinger Position**: Shows where price sits within the bands as percentage. 0% = at lower band, 50% = at middle, 100% = at upper band.\n\n";
1684
+ markdown += "**EMA/SMA/DEMA/WMA**: Fast-reacting moving averages for scalping. Price above indicates uptrend, below indicates downtrend. Crossovers generate trading signals.\n\n";
1685
+ markdown += "**Volume Ratio**: Current volume compared to average. Values above 1.5x indicate unusual activity worth attention.\n\n";
1686
+ markdown += "**Support/Resistance Levels**: Key price levels where quick reversals often occur in scalping.\n\n";
1687
+ markdown += "**Squeeze Momentum**: Indicates volatility compression. High values suggest imminent breakout.\n\n";
1688
+ markdown += "**Pressure Index**: Measures buying vs selling pressure within the candle. Positive values indicate buying pressure, negative indicates selling pressure.\n\n";
1689
+ markdown += "**Volatility(5)**: Statistical volatility measure showing how much price is fluctuating. Higher values mean riskier but potentially more profitable trades.\n\n";
1690
+ markdown += "**True Range**: Maximum price movement in the candle, important for position sizing in scalping.\n\n";
1652
1691
  return markdown;
1653
1692
  }
1654
1693
  /**
@@ -1788,7 +1827,7 @@ const columns$1 = [
1788
1827
  },
1789
1828
  {
1790
1829
  key: "stochasticRSI9",
1791
- label: "Stochastic RSI(9)",
1830
+ label: "StochRSI(9) - RSI Oscillator",
1792
1831
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1793
1832
  },
1794
1833
  {
@@ -1798,7 +1837,7 @@ const columns$1 = [
1798
1837
  },
1799
1838
  {
1800
1839
  key: "signal5",
1801
- label: "Signal(5)",
1840
+ label: "MACD Signal Line(5)",
1802
1841
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
1803
1842
  },
1804
1843
  {
@@ -1808,12 +1847,12 @@ const columns$1 = [
1808
1847
  },
1809
1848
  {
1810
1849
  key: "plusDI14",
1811
- label: "+DI(14)",
1850
+ label: "+DI(14) Bullish Indicator",
1812
1851
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1813
1852
  },
1814
1853
  {
1815
1854
  key: "minusDI14",
1816
- label: "-DI(14)",
1855
+ label: "-DI(14) Bearish Indicator",
1817
1856
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1818
1857
  },
1819
1858
  {
@@ -1825,34 +1864,34 @@ const columns$1 = [
1825
1864
  },
1826
1865
  {
1827
1866
  key: "cci14",
1828
- label: "CCI(14)",
1867
+ label: "CCI(14) - Commodity Channel Index",
1829
1868
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1830
1869
  },
1831
1870
  {
1832
1871
  key: "stochasticK5_3_3",
1833
- label: "Stochastic K(5,3,3)",
1872
+ label: "Stochastic %K Fast Line(5,3,3)",
1834
1873
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1835
1874
  },
1836
1875
  {
1837
1876
  key: "stochasticD5_3_3",
1838
- label: "Stochastic D(5,3,3)",
1877
+ label: "Stochastic %D Slow Line(5,3,3)",
1839
1878
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
1840
1879
  },
1841
1880
  {
1842
1881
  key: "momentum8",
1843
- label: "Momentum(8)",
1882
+ label: "Momentum(8) - Price Change Rate",
1844
1883
  format: async (v, symbol) => v !== null
1845
1884
  ? `${await formatPrice(symbol, Number(v))} USD`
1846
1885
  : "N/A",
1847
1886
  },
1848
1887
  {
1849
1888
  key: "roc5",
1850
- label: "ROC(5)",
1889
+ label: "ROC(5) - Rate of Change %",
1851
1890
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
1852
1891
  },
1853
1892
  {
1854
1893
  key: "roc10",
1855
- label: "ROC(10)",
1894
+ label: "ROC(10) - Rate of Change %",
1856
1895
  format: (v) => (v !== null ? `${Number(v).toFixed(3)}%` : "N/A"),
1857
1896
  },
1858
1897
  {
@@ -1947,12 +1986,12 @@ const columns$1 = [
1947
1986
  },
1948
1987
  {
1949
1988
  key: "fibonacciDistance",
1950
- label: "Fibonacci Distance",
1989
+ label: "Fibonacci Distance to Nearest Level",
1951
1990
  format: async (v, symbol) => `${await formatPrice(symbol, Number(v))} USD`,
1952
1991
  },
1953
1992
  {
1954
1993
  key: "bodySize",
1955
- label: "Body Size",
1994
+ label: "Candle Body Size",
1956
1995
  format: async (v, symbol) => `${await formatPrice(symbol, Number(v))} USD`,
1957
1996
  },
1958
1997
  {
@@ -2383,6 +2422,24 @@ async function generateHistoryTable$1(indicators, symbol) {
2383
2422
  "- **Body Size**: candle body size at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
2384
2423
  markdown +=
2385
2424
  "- **Close Price**: close price at row timestamp (Min: 0 USD, Max: +∞ USD)\n";
2425
+ markdown += "\n## Column Descriptions\n\n";
2426
+ markdown += "**RSI(9) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes. Values above 70 indicate overbought conditions, below 30 indicate oversold.\n\n";
2427
+ markdown += "**StochRSI(9) - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
2428
+ markdown += "**MACD(8,21,5)**: Moving Average Convergence Divergence optimized for 15-minute timeframe - trend-following momentum indicator. Positive values suggest bullish momentum, negative values suggest bearish momentum.\n\n";
2429
+ markdown += "**MACD Signal Line(5)**: 5-period EMA of MACD values, used to generate buy/sell signals. When MACD crosses above the signal line it suggests a bullish signal, crossing below suggests bearish.\n\n";
2430
+ markdown += "**ADX(14) - Average Directional Index**: Measures trend strength regardless of direction. Values above 25 indicate a strong trend, below 20 indicate weak or no trend.\n\n";
2431
+ markdown += "**+DI(14) Bullish Indicator**: Positive Directional Indicator - measures upward price movement strength. Higher values indicate stronger bullish pressure.\n\n";
2432
+ markdown += "**-DI(14) Bearish Indicator**: Negative Directional Indicator - measures downward price movement strength. Higher values indicate stronger bearish pressure.\n\n";
2433
+ markdown += "**ATR(9) - Average True Range**: Measures market volatility by calculating the average range between high and low prices. Higher values indicate higher volatility, important for stop-loss placement.\n\n";
2434
+ markdown += "**CCI(14) - Commodity Channel Index**: Momentum-based oscillator measuring the variation of price from statistical mean. Values above +100 suggest overbought, below -100 suggest oversold.\n\n";
2435
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Momentum oscillators comparing closing price to price range over time. %K is the fast line showing current momentum, %D is smoothed version. Values above 80 are overbought, below 20 are oversold.\n\n";
2436
+ markdown += "**Momentum(8) - Price Change Rate**: Measures the rate of price change over 8 periods. Positive values indicate upward momentum, negative values indicate downward momentum.\n\n";
2437
+ markdown += "**ROC - Rate of Change %**: Percentage-based momentum showing speed of price movement over period. Useful for identifying acceleration or deceleration in trends.\n\n";
2438
+ markdown += "**Bollinger Bands**: Volatility bands placed above and below a moving average. Price touching upper band suggests overbought, lower band suggests oversold. Width indicates volatility level.\n\n";
2439
+ markdown += "**EMA/SMA/DEMA/WMA**: Various Moving Averages - smooth price data to identify trend direction. Price above MA suggests uptrend, below suggests downtrend.\n\n";
2440
+ markdown += "**Support/Resistance Levels**: Price levels where asset historically has difficulty moving below (support) or above (resistance). Key levels for entry/exit decisions.\n\n";
2441
+ markdown += "**Fibonacci Levels**: Technical analysis tool based on Fibonacci sequence, identifying potential support/resistance levels at key percentages (23.6%, 38.2%, 50%, 61.8%, 78.6%).\n\n";
2442
+ markdown += "**Candle Body Size**: Difference between open and close prices, indicating the strength of price movement during the period.\n\n";
2386
2443
  return markdown;
2387
2444
  }
2388
2445
  /**
@@ -2519,7 +2576,7 @@ const columns = [
2519
2576
  },
2520
2577
  {
2521
2578
  key: "stochasticRSI14",
2522
- label: "Stochastic RSI(14)",
2579
+ label: "StochRSI(14) - RSI Oscillator",
2523
2580
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2524
2581
  },
2525
2582
  {
@@ -2529,7 +2586,7 @@ const columns = [
2529
2586
  },
2530
2587
  {
2531
2588
  key: "signal9",
2532
- label: "Signal(9)",
2589
+ label: "MACD Signal Line(9)",
2533
2590
  format: (v) => (v !== null ? Number(v).toFixed(4) : "N/A"),
2534
2591
  },
2535
2592
  {
@@ -2539,12 +2596,12 @@ const columns = [
2539
2596
  },
2540
2597
  {
2541
2598
  key: "plusDI14",
2542
- label: "+DI(14)",
2599
+ label: "+DI(14) Bullish Indicator",
2543
2600
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2544
2601
  },
2545
2602
  {
2546
2603
  key: "minusDI14",
2547
- label: "-DI(14)",
2604
+ label: "-DI(14) Bearish Indicator",
2548
2605
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2549
2606
  },
2550
2607
  {
@@ -2556,22 +2613,22 @@ const columns = [
2556
2613
  },
2557
2614
  {
2558
2615
  key: "cci20",
2559
- label: "CCI(20)",
2616
+ label: "CCI(20) - Commodity Channel Index",
2560
2617
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2561
2618
  },
2562
2619
  {
2563
2620
  key: "stochasticK14_3_3",
2564
- label: "Stochastic K(14,3,3)",
2621
+ label: "Stochastic %K Fast Line(14,3,3)",
2565
2622
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2566
2623
  },
2567
2624
  {
2568
2625
  key: "stochasticD14_3_3",
2569
- label: "Stochastic D(14,3,3)",
2626
+ label: "Stochastic %D Slow Line(14,3,3)",
2570
2627
  format: (v) => (v !== null ? Number(v).toFixed(2) : "N/A"),
2571
2628
  },
2572
2629
  {
2573
2630
  key: "momentum8",
2574
- label: "Momentum(8)",
2631
+ label: "Momentum(8) - Price Change Rate",
2575
2632
  format: async (v, symbol) => v !== null
2576
2633
  ? `${await formatPrice(symbol, Number(v))} USD`
2577
2634
  : "N/A",
@@ -2663,12 +2720,12 @@ const columns = [
2663
2720
  },
2664
2721
  {
2665
2722
  key: "volatility",
2666
- label: "Basic Volatility",
2723
+ label: "Volatility % - Price Fluctuation",
2667
2724
  format: (v) => (v !== null ? `${Number(v).toFixed(2)}%` : "N/A"),
2668
2725
  },
2669
2726
  {
2670
2727
  key: "priceMomentum6",
2671
- label: "Price Momentum(6)",
2728
+ label: "Price Momentum(6) - Swing Direction",
2672
2729
  format: async (v, symbol) => v !== null
2673
2730
  ? `${await formatPrice(symbol, Number(v))} USD`
2674
2731
  : "N/A",
@@ -2694,7 +2751,7 @@ const columns = [
2694
2751
  },
2695
2752
  {
2696
2753
  key: "bodySize",
2697
- label: "Body Size",
2754
+ label: "Candle Body Size",
2698
2755
  format: async (v, symbol) => `${await formatPrice(symbol, Number(v))} USD`,
2699
2756
  },
2700
2757
  {
@@ -3164,6 +3221,27 @@ async function generateHistoryTable(indicators, symbol) {
3164
3221
  "- **Volume**: trading volume at row timestamp (Min: 0, Max: +∞)\n";
3165
3222
  markdown +=
3166
3223
  "- **Volatility**: volatility percentage at row timestamp (Min: 0%, Max: +∞)\n";
3224
+ markdown += "\n## Column Descriptions\n\n";
3225
+ markdown += "**RSI(14) - Relative Strength Index**: Momentum oscillator measuring the speed and magnitude of price changes on 30-minute timeframe. Values above 70 indicate overbought conditions suitable for profit-taking, below 30 indicate oversold conditions suitable for entries.\n\n";
3226
+ markdown += "**StochRSI(14) - RSI Oscillator**: Applies Stochastic calculation to RSI values, providing more sensitive overbought/oversold signals for swing trading. Range 0-100, with 80+ being overbought and 20- being oversold.\n\n";
3227
+ markdown += "**MACD(12,26,9)**: Moving Average Convergence Divergence - classic trend-following momentum indicator for swing trading. Positive values suggest bullish momentum, negative values suggest bearish momentum. Watch for crossovers with signal line.\n\n";
3228
+ markdown += "**MACD Signal Line(9)**: 9-period EMA of MACD values, used to generate swing trading signals. When MACD crosses above the signal line it suggests a bullish swing entry, crossing below suggests bearish swing entry.\n\n";
3229
+ markdown += "**ADX(14) - Average Directional Index**: Measures trend strength regardless of direction. Values above 25 indicate a strong trend suitable for trend-following swing trades, below 20 indicate weak/ranging market better for range-bound strategies.\n\n";
3230
+ markdown += "**+DI(14) Bullish Indicator**: Positive Directional Indicator - measures upward price movement strength. When +DI is above -DI and rising, it indicates strong bullish swing momentum.\n\n";
3231
+ markdown += "**-DI(14) Bearish Indicator**: Negative Directional Indicator - measures downward price movement strength. When -DI is above +DI and rising, it indicates strong bearish swing momentum.\n\n";
3232
+ markdown += "**ATR(14) - Average True Range**: Measures market volatility crucial for swing trading position sizing and stop-loss placement. Higher ATR means wider stops needed to avoid premature exit.\n\n";
3233
+ markdown += "**CCI(20) - Commodity Channel Index**: Momentum-based oscillator measuring the variation of price from statistical mean. Values above +100 suggest strong upward momentum, below -100 suggest strong downward momentum, useful for swing entry/exit timing.\n\n";
3234
+ markdown += "**Stochastic %K Fast Line & %D Slow Line**: Momentum oscillators comparing closing price to price range over time. %K is the fast line showing current momentum, %D is smoothed version. Values above 80 indicate overbought swing reversal opportunities, below 20 indicate oversold swing entry opportunities.\n\n";
3235
+ markdown += "**Momentum(8) - Price Change Rate**: Measures the absolute rate of price change over 8 periods. Positive and increasing momentum confirms swing uptrend, negative and decreasing confirms swing downtrend.\n\n";
3236
+ markdown += "**Bollinger Bands**: Volatility bands placed above and below a 20-period moving average. In swing trading, price touching upper band suggests taking profits on longs, lower band suggests entry for longs or exit for shorts. Width indicates volatility - squeeze suggests imminent swing move.\n\n";
3237
+ markdown += "**EMA/SMA/DEMA/WMA**: Various Moving Averages - smooth price data to identify swing trend direction. Price above MA suggests swing uptrend, below suggests swing downtrend. Moving average crossovers generate swing trading signals.\n\n";
3238
+ markdown += "**Support/Resistance Levels**: Key price levels where asset historically has difficulty moving below (support) or above (resistance). Critical for swing trading entry/exit and stop-loss placement.\n\n";
3239
+ markdown += "**Fibonacci Nearest Support/Resistance**: Identifies nearest Fibonacci retracement levels acting as support/resistance. Swing traders use these to identify entry points (at support) and profit targets (at resistance).\n\n";
3240
+ markdown += "**Fibonacci Position %**: Shows where current price sits in the recent high-low range. 0% = at low (potential swing buy), 50% = mid-range, 100% = at high (potential swing sell). Helps identify if price is at an extreme suitable for swing entries.\n\n";
3241
+ markdown += "**Price Momentum(6) - Swing Direction**: 6-period momentum indicator specifically for swing direction confirmation. Positive values confirm upward swing, negative confirm downward swing.\n\n";
3242
+ markdown += "**Volatility % - Price Fluctuation**: Statistical measure of price fluctuation. Higher volatility means larger price swings and potentially more profit opportunity, but also higher risk requiring wider stops.\n\n";
3243
+ markdown += "**Volume**: Trading volume indicating market participation. Rising volume during price moves confirms the swing trend strength, declining volume suggests weakening swing.\n\n";
3244
+ markdown += "**Candle Body Size**: Difference between open and close prices, indicating the strength of directional movement. Large bodies confirm strong swing momentum, small bodies suggest consolidation or indecision.\n\n";
3167
3245
  return markdown;
3168
3246
  }
3169
3247
  /**
@@ -3697,10 +3775,10 @@ class OneMinuteCandleHistoryService {
3697
3775
  markdown += `### 1m Candle ${index + 1}\n`;
3698
3776
  markdown += `- **Price Change**: ${priceChangePercent.toFixed(3)}%\n`;
3699
3777
  markdown += `- **Time**: ${formattedTime}\n`;
3700
- markdown += `- **Open**: ${formatPrice(symbol, candle.open)} USD\n`;
3701
- markdown += `- **High**: ${formatPrice(symbol, candle.high)} USD\n`;
3702
- markdown += `- **Low**: ${formatPrice(symbol, candle.low)} USD\n`;
3703
- markdown += `- **Close**: ${formatPrice(symbol, candle.close)} USD\n`;
3778
+ markdown += `- **Open**: ${await formatPrice(symbol, candle.open)} USD\n`;
3779
+ markdown += `- **High**: ${await formatPrice(symbol, candle.high)} USD\n`;
3780
+ markdown += `- **Low**: ${await formatPrice(symbol, candle.low)} USD\n`;
3781
+ markdown += `- **Close**: ${await formatPrice(symbol, candle.close)} USD\n`;
3704
3782
  markdown += `- **Volume**: ${formatQuantity(symbol, candle.volume)}\n`;
3705
3783
  markdown += `- **1m Volatility**: ${volatilityPercent.toFixed(2)}%\n`;
3706
3784
  markdown += `- **Body Size**: ${bodyPercent.toFixed(1)}%\n\n`;
@@ -3847,10 +3925,10 @@ class ThirtyMinuteCandleHistoryService {
3847
3925
  report += `### 30m Candle ${index + 1}\n`;
3848
3926
  report += `- **Price Change**: ${priceChangePercent.toFixed(3)}%\n`;
3849
3927
  report += `- **Time**: ${formattedTime}\n`;
3850
- report += `- **Open**: ${formatPrice(symbol, candle.open)} USD\n`;
3851
- report += `- **High**: ${formatPrice(symbol, candle.high)} USD\n`;
3852
- report += `- **Low**: ${formatPrice(symbol, candle.low)} USD\n`;
3853
- report += `- **Close**: ${formatPrice(symbol, candle.close)} USD\n`;
3928
+ report += `- **Open**: ${await formatPrice(symbol, candle.open)} USD\n`;
3929
+ report += `- **High**: ${await formatPrice(symbol, candle.high)} USD\n`;
3930
+ report += `- **Low**: ${await formatPrice(symbol, candle.low)} USD\n`;
3931
+ report += `- **Close**: ${await formatPrice(symbol, candle.close)} USD\n`;
3854
3932
  report += `- **Volume**: ${formatQuantity(symbol, candle.volume)}\n`;
3855
3933
  report += `- **30m Volatility**: ${volatilityPercent.toFixed(2)}%\n`;
3856
3934
  report += `- **Body Size**: ${bodyPercent.toFixed(1)}%\n\n`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtest-kit/signals",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Technical analysis and trading signal generation library for AI-powered trading systems. Computes 50+ indicators across 4 timeframes and generates markdown reports for LLM consumption.",
5
5
  "author": {
6
6
  "name": "Petr Tripolsky",
@@ -69,7 +69,7 @@
69
69
  "worker-testbed": "1.0.12"
70
70
  },
71
71
  "peerDependencies": {
72
- "backtest-kit": "^2.0.3",
72
+ "backtest-kit": "^2.0.7",
73
73
  "typescript": "^5.0.0"
74
74
  },
75
75
  "dependencies": {