@backtest-kit/sidekick 8.5.0 → 9.0.0
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/README.md +173 -173
- package/content/config/source/timeframe_15m.pine +113 -113
- package/content/config/source/timeframe_4h.pine +56 -56
- package/content/config/symbol.config.cjs +460 -460
- package/content/docker/ollama/docker-compose.yaml +34 -34
- package/content/docker/ollama/watch.sh +2 -2
- package/content/scripts/cache/cache_candles.mjs +47 -47
- package/content/scripts/cache/cache_model.mjs +42 -42
- package/content/scripts/cache/validate_candles.mjs +46 -46
- package/content/scripts/run_timeframe_15m.mjs +77 -77
- package/content/scripts/run_timeframe_4h.mjs +68 -68
- package/package.json +68 -68
- package/scripts/init.mjs +304 -304
- package/src/classes/BacktestLowerStopOnBreakevenAction.mjs +17 -17
- package/src/classes/BacktestPartialProfitTakingAction.mjs +24 -24
- package/src/classes/BacktestPositionMonitorAction.mjs +57 -57
- package/src/config/ccxt.mjs +15 -15
- package/src/config/params.mjs +1 -1
- package/src/config/setup.mjs +45 -45
- package/src/config/validate.mjs +14 -14
- package/src/enum/ActionName.mjs +5 -5
- package/src/enum/ExchangeName.mjs +3 -3
- package/src/enum/FrameName.mjs +6 -6
- package/src/enum/RiskName.mjs +4 -4
- package/src/enum/StrategyName.mjs +3 -3
- package/src/index.mjs +6 -6
- package/src/logic/action/backtest_lower_stop_on_breakeven.action.mjs +9 -9
- package/src/logic/action/backtest_partial_profit_taking.action.mjs +9 -9
- package/src/logic/action/backtest_position_monitor.action.mjs +9 -9
- package/src/logic/exchange/binance.exchange.mjs +69 -69
- package/src/logic/frame/dec_2025.frame.mjs +10 -10
- package/src/logic/frame/feb_2024.frame.mjs +10 -10
- package/src/logic/frame/nov_2025.frame.mjs +10 -10
- package/src/logic/frame/oct_2025.frame.mjs +10 -10
- package/src/logic/index.mjs +15 -15
- package/src/logic/risk/sl_distance.risk.mjs +32 -32
- package/src/logic/risk/tp_distance.risk.mjs +32 -32
- package/src/logic/strategy/main.strategy.mjs +48 -48
- package/src/main/bootstrap.mjs +52 -52
- package/src/math/timeframe_15m.math.mjs +68 -68
- package/src/math/timeframe_4h.math.mjs +53 -53
- package/src/utils/getArgs.mjs +17 -17
- package/template/CLAUDE.mustache +421 -421
- package/template/README.mustache +257 -257
- package/template/env.mustache +2 -2
- package/template/gitignore.mustache +29 -29
- package/template/jsconfig.json.mustache +26 -26
- package/template/package.mustache +37 -37
- package/template/types.mustache +11 -11
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
//@version=5
|
|
2
|
-
indicator("Daily Trend Filter", overlay=true)
|
|
3
|
-
|
|
4
|
-
plotcandle(open, high, low, close,
|
|
5
|
-
color=close > open ? color.new(color.green, 70) : color.new(color.red, 70),
|
|
6
|
-
wickcolor=color.new(color.gray, 70),
|
|
7
|
-
bordercolor=color.new(color.gray, 70))
|
|
8
|
-
|
|
9
|
-
// === INPUTS ===
|
|
10
|
-
rsi_len = input.int(14, "RSI Length", minval=2)
|
|
11
|
-
macd_fast = input.int(12, "MACD Fast", minval=1)
|
|
12
|
-
macd_slow = input.int(26, "MACD Slow", minval=1)
|
|
13
|
-
macd_signal = input.int(9, "MACD Signal", minval=1)
|
|
14
|
-
adx_len = input.int(14, "ADX Length", minval=1)
|
|
15
|
-
adx_threshold = input.int(25, "ADX Threshold", minval=10)
|
|
16
|
-
|
|
17
|
-
rsi_bull_threshold = input.int(50, "RSI Bull Threshold", minval=50, maxval=70)
|
|
18
|
-
rsi_bear_threshold = input.int(50, "RSI Bear Threshold", minval=30, maxval=50)
|
|
19
|
-
|
|
20
|
-
// === INDICATORS ===
|
|
21
|
-
rsi = ta.rsi(close, rsi_len)
|
|
22
|
-
[macd_line, signal_line, macd_hist] = ta.macd(close, macd_fast, macd_slow, macd_signal)
|
|
23
|
-
[di_plus, di_minus, adx] = ta.dmi(adx_len, adx_len)
|
|
24
|
-
|
|
25
|
-
// === TREND FILTER LOGIC ===
|
|
26
|
-
strong_trend = adx > adx_threshold
|
|
27
|
-
|
|
28
|
-
bull_regime = strong_trend and macd_hist > 0 and di_plus > di_minus and rsi > rsi_bull_threshold
|
|
29
|
-
|
|
30
|
-
bear_regime = strong_trend and macd_hist < 0 and di_minus > di_plus and rsi < rsi_bear_threshold
|
|
31
|
-
|
|
32
|
-
both_allowed = strong_trend and not bull_regime and not bear_regime
|
|
33
|
-
no_trades = not strong_trend
|
|
34
|
-
|
|
35
|
-
// === VISUALIZATION ===
|
|
36
|
-
line_color = bull_regime ? color.green :
|
|
37
|
-
bear_regime ? color.red :
|
|
38
|
-
both_allowed ? color.gray :
|
|
39
|
-
color.orange
|
|
40
|
-
|
|
41
|
-
plot(close, "Active Signal", color=line_color, linewidth=6)
|
|
42
|
-
|
|
43
|
-
// === OUTPUTS FOR BOT ===
|
|
44
|
-
plot(bull_regime ? 1 : 0, "AllowLong", display=display.data_window)
|
|
45
|
-
plot(bear_regime ? 1 : 0, "AllowShort", display=display.data_window)
|
|
46
|
-
plot(both_allowed ? 1 : 0, "AllowBoth", display=display.data_window)
|
|
47
|
-
plot(no_trades ? 1 : 0, "NoTrades", display=display.data_window)
|
|
48
|
-
plot(rsi, "RSI", display=display.data_window)
|
|
49
|
-
plot(adx, "ADX", display=display.data_window)
|
|
50
|
-
|
|
51
|
-
// === DEBUG: INDICATOR DUMP ===
|
|
52
|
-
plot(macd_line, "d_MACDLine", display=display.data_window)
|
|
53
|
-
plot(signal_line, "d_SignalLine", display=display.data_window)
|
|
54
|
-
plot(macd_hist, "d_MACDHist", display=display.data_window)
|
|
55
|
-
plot(di_plus, "d_DIPlus", display=display.data_window)
|
|
56
|
-
plot(di_minus, "d_DIMinus", display=display.data_window)
|
|
1
|
+
//@version=5
|
|
2
|
+
indicator("Daily Trend Filter", overlay=true)
|
|
3
|
+
|
|
4
|
+
plotcandle(open, high, low, close,
|
|
5
|
+
color=close > open ? color.new(color.green, 70) : color.new(color.red, 70),
|
|
6
|
+
wickcolor=color.new(color.gray, 70),
|
|
7
|
+
bordercolor=color.new(color.gray, 70))
|
|
8
|
+
|
|
9
|
+
// === INPUTS ===
|
|
10
|
+
rsi_len = input.int(14, "RSI Length", minval=2)
|
|
11
|
+
macd_fast = input.int(12, "MACD Fast", minval=1)
|
|
12
|
+
macd_slow = input.int(26, "MACD Slow", minval=1)
|
|
13
|
+
macd_signal = input.int(9, "MACD Signal", minval=1)
|
|
14
|
+
adx_len = input.int(14, "ADX Length", minval=1)
|
|
15
|
+
adx_threshold = input.int(25, "ADX Threshold", minval=10)
|
|
16
|
+
|
|
17
|
+
rsi_bull_threshold = input.int(50, "RSI Bull Threshold", minval=50, maxval=70)
|
|
18
|
+
rsi_bear_threshold = input.int(50, "RSI Bear Threshold", minval=30, maxval=50)
|
|
19
|
+
|
|
20
|
+
// === INDICATORS ===
|
|
21
|
+
rsi = ta.rsi(close, rsi_len)
|
|
22
|
+
[macd_line, signal_line, macd_hist] = ta.macd(close, macd_fast, macd_slow, macd_signal)
|
|
23
|
+
[di_plus, di_minus, adx] = ta.dmi(adx_len, adx_len)
|
|
24
|
+
|
|
25
|
+
// === TREND FILTER LOGIC ===
|
|
26
|
+
strong_trend = adx > adx_threshold
|
|
27
|
+
|
|
28
|
+
bull_regime = strong_trend and macd_hist > 0 and di_plus > di_minus and rsi > rsi_bull_threshold
|
|
29
|
+
|
|
30
|
+
bear_regime = strong_trend and macd_hist < 0 and di_minus > di_plus and rsi < rsi_bear_threshold
|
|
31
|
+
|
|
32
|
+
both_allowed = strong_trend and not bull_regime and not bear_regime
|
|
33
|
+
no_trades = not strong_trend
|
|
34
|
+
|
|
35
|
+
// === VISUALIZATION ===
|
|
36
|
+
line_color = bull_regime ? color.green :
|
|
37
|
+
bear_regime ? color.red :
|
|
38
|
+
both_allowed ? color.gray :
|
|
39
|
+
color.orange
|
|
40
|
+
|
|
41
|
+
plot(close, "Active Signal", color=line_color, linewidth=6)
|
|
42
|
+
|
|
43
|
+
// === OUTPUTS FOR BOT ===
|
|
44
|
+
plot(bull_regime ? 1 : 0, "AllowLong", display=display.data_window)
|
|
45
|
+
plot(bear_regime ? 1 : 0, "AllowShort", display=display.data_window)
|
|
46
|
+
plot(both_allowed ? 1 : 0, "AllowBoth", display=display.data_window)
|
|
47
|
+
plot(no_trades ? 1 : 0, "NoTrades", display=display.data_window)
|
|
48
|
+
plot(rsi, "RSI", display=display.data_window)
|
|
49
|
+
plot(adx, "ADX", display=display.data_window)
|
|
50
|
+
|
|
51
|
+
// === DEBUG: INDICATOR DUMP ===
|
|
52
|
+
plot(macd_line, "d_MACDLine", display=display.data_window)
|
|
53
|
+
plot(signal_line, "d_SignalLine", display=display.data_window)
|
|
54
|
+
plot(macd_hist, "d_MACDHist", display=display.data_window)
|
|
55
|
+
plot(di_plus, "d_DIPlus", display=display.data_window)
|
|
56
|
+
plot(di_minus, "d_DIMinus", display=display.data_window)
|
|
57
57
|
plot(strong_trend ? 1 : 0, "d_StrongTrend", display=display.data_window)
|