codifx 0.1.10 → 0.1.11

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.
Files changed (43) hide show
  1. package/dist/cli/commands/explain.js +1 -179
  2. package/dist/cli/commands/profile.js +1 -55
  3. package/dist/cli/commands/scan.js +1 -300
  4. package/dist/cli/commands/simulate.js +1 -109
  5. package/dist/cli/commands/validate.js +1 -26
  6. package/dist/cli/index.js +1 -94
  7. package/dist/config/loader.js +1 -124
  8. package/dist/config/schema.js +1 -49
  9. package/dist/core/engine.js +1 -169
  10. package/dist/core/filters.js +1 -70
  11. package/dist/core/oscillator-engine.js +1 -224
  12. package/dist/core/scoring.js +1 -101
  13. package/dist/core/timeframe.js +1 -52
  14. package/dist/core/trend-engine.js +1 -137
  15. package/dist/data/mock.js +1 -111
  16. package/dist/data/provider.js +1 -29
  17. package/dist/data/yahoo.js +1 -200
  18. package/dist/index.js +1 -19
  19. package/dist/indicators/oscillator/adx.js +1 -118
  20. package/dist/indicators/oscillator/atr.js +1 -31
  21. package/dist/indicators/oscillator/cci.js +1 -39
  22. package/dist/indicators/oscillator/macd.js +1 -73
  23. package/dist/indicators/oscillator/momentum.js +1 -35
  24. package/dist/indicators/oscillator/rsi.js +1 -93
  25. package/dist/indicators/oscillator/stochastic.js +1 -89
  26. package/dist/indicators/oscillator/williams.js +1 -44
  27. package/dist/indicators/trend/ema.js +1 -36
  28. package/dist/indicators/trend/hma.js +1 -48
  29. package/dist/indicators/trend/sma.js +1 -30
  30. package/dist/indicators/trend/vwma.js +1 -23
  31. package/dist/types/index.js +1 -5
  32. package/dist/utils/constants.js +1 -105
  33. package/dist/utils/explain.js +1 -83
  34. package/dist/utils/formatter.js +1 -104
  35. package/dist/utils/html-generator.js +1 -107
  36. package/dist/utils/indicators.js +1 -106
  37. package/dist/utils/levels.js +1 -82
  38. package/dist/utils/logger.js +1 -238
  39. package/dist/utils/paths.js +1 -32
  40. package/dist/utils/symbols.js +1 -44
  41. package/dist/utils/trading-type-config.js +1 -96
  42. package/dist/utils/version-checker.js +1 -76
  43. package/package.json +1 -2
@@ -1,224 +1 @@
1
- /**
2
- * Oscillator Engine - Implements 3-layer logic on primary timeframe
3
- * Layer 1: Condition (Zone detection)
4
- * Layer 2: Trigger (Event detection)
5
- * Layer 3: Confirmation (Validation)
6
- */
7
- import { calculateRSI, isRSIOversold, isRSIOverbought, rsiCrossoverOversold, rsiCrossunderOverbought, } from "../indicators/oscillator/rsi.js";
8
- import { calculateStochastic, isStochasticOversold, isStochasticOverbought, stochasticBullishCross, stochasticBearishCross, } from "../indicators/oscillator/stochastic.js";
9
- import { calculateMACD, macdBullishCross, macdBearishCross, histogramPositiveChange, histogramNegativeChange, } from "../indicators/oscillator/macd.js";
10
- import { calculateMomentum, momentumCrossAboveZero, momentumCrossBelowZero, } from "../indicators/oscillator/momentum.js";
11
- import { calculateADX, isStrongTrend } from "../indicators/oscillator/adx.js";
12
- import { calculateCCI, isCCIOversold, isCCIOverbought, } from "../indicators/oscillator/cci.js";
13
- import { calculateWilliamsR, isWilliamsROversold, isWilliamsROverbought, } from "../indicators/oscillator/williams.js";
14
- export class OscillatorEngine {
15
- /**
16
- * Analyze oscillators with 3-layer logic for BUY signals
17
- */
18
- static analyzeBuy(primaryData, confirmationData, minADX) {
19
- const details = [];
20
- // ===== LAYER 1: CONDITION (Zone Detection) =====
21
- const conditionDetails = [];
22
- let conditionCount = 0;
23
- const rsi = calculateRSI(primaryData);
24
- const latestRSI = rsi[rsi.length - 1];
25
- if (isRSIOversold(latestRSI)) {
26
- conditionCount++;
27
- conditionDetails.push(`RSI oversold (${latestRSI.toFixed(1)})`);
28
- }
29
- const stoch = calculateStochastic(primaryData);
30
- const latestStochK = stoch.k[stoch.k.length - 1];
31
- if (isStochasticOversold(latestStochK)) {
32
- conditionCount++;
33
- conditionDetails.push(`Stochastic oversold (%K: ${latestStochK.toFixed(1)})`);
34
- }
35
- const cci = calculateCCI(primaryData);
36
- const latestCCI = cci[cci.length - 1];
37
- if (isCCIOversold(latestCCI)) {
38
- conditionCount++;
39
- conditionDetails.push(`CCI oversold (${latestCCI.toFixed(1)})`);
40
- }
41
- const williamsR = calculateWilliamsR(primaryData);
42
- const latestWR = williamsR[williamsR.length - 1];
43
- if (isWilliamsROversold(latestWR)) {
44
- conditionCount++;
45
- conditionDetails.push(`Williams %R oversold (${latestWR.toFixed(1)})`);
46
- }
47
- const hasCondition = conditionCount > 0;
48
- if (hasCondition) {
49
- details.push("🔹 CONDITION: " + conditionDetails.join(", "));
50
- }
51
- // ===== LAYER 2: TRIGGER (Event Detection) =====
52
- const triggerDetails = [];
53
- let triggerCount = 0;
54
- // RSI crosses above oversold level
55
- if (rsiCrossoverOversold(rsi)) {
56
- triggerCount++;
57
- triggerDetails.push("RSI crossed above 30");
58
- }
59
- // Stochastic bullish crossover
60
- if (stochasticBullishCross(stoch.k, stoch.d)) {
61
- triggerCount++;
62
- triggerDetails.push("Stochastic %K crossed above %D");
63
- }
64
- // MACD bullish signals
65
- const macd = calculateMACD(primaryData);
66
- if (macdBullishCross(macd.macd, macd.signal)) {
67
- triggerCount++;
68
- triggerDetails.push("MACD crossed above signal line");
69
- }
70
- if (histogramPositiveChange(macd.histogram)) {
71
- triggerCount++;
72
- triggerDetails.push("MACD histogram turned positive");
73
- }
74
- // Momentum crosses above zero
75
- const momentum = calculateMomentum(primaryData);
76
- if (momentumCrossAboveZero(momentum)) {
77
- triggerCount++;
78
- triggerDetails.push("Momentum crossed above 0");
79
- }
80
- const hasTrigger = triggerCount > 0;
81
- if (hasTrigger) {
82
- details.push("🔹 TRIGGER: " + triggerDetails.join(", "));
83
- }
84
- // ===== LAYER 3: CONFIRMATION (Validation) =====
85
- const confirmationDetails = [];
86
- let confirmationCount = 0;
87
- // ADX trend strength
88
- const adxResult = calculateADX(confirmationData);
89
- const latestADX = adxResult.adx[adxResult.adx.length - 1];
90
- if (!isNaN(latestADX) && isStrongTrend(latestADX)) {
91
- confirmationCount++;
92
- confirmationDetails.push(`ADX > ${minADX} (${latestADX.toFixed(1)})`);
93
- }
94
- // Momentum confirmation (current value positive)
95
- const latestMomentum = momentum[momentum.length - 1];
96
- if (!isNaN(latestMomentum) && latestMomentum > 0) {
97
- confirmationCount++;
98
- confirmationDetails.push(`Momentum positive (${latestMomentum.toFixed(2)})`);
99
- }
100
- const hasConfirmation = confirmationCount > 0;
101
- if (hasConfirmation) {
102
- details.push("🔹 CONFIRMATION: " + confirmationDetails.join(", "));
103
- }
104
- // ===== SCORING =====
105
- // Signal is VALID only if we have trigger + confirmation
106
- const isValid = hasTrigger && hasConfirmation;
107
- let score = 0;
108
- if (isValid) {
109
- // Weight the components
110
- const conditionScore = Math.min(conditionCount * 10, 30); // Max 30 points
111
- const triggerScore = Math.min(triggerCount * 15, 40); // Max 40 points
112
- const confirmationScore = Math.min(confirmationCount * 15, 30); // Max 30 points
113
- score = conditionScore + triggerScore + confirmationScore;
114
- }
115
- return {
116
- condition: hasCondition,
117
- trigger: hasTrigger,
118
- confirmation: hasConfirmation,
119
- score: Math.min(100, score),
120
- details,
121
- };
122
- }
123
- /**
124
- * Analyze oscillators with 3-layer logic for SELL signals
125
- */
126
- static analyzeSell(primaryData, confirmationData, minADX) {
127
- const details = [];
128
- // ===== LAYER 1: CONDITION (Zone Detection) =====
129
- const conditionDetails = [];
130
- let conditionCount = 0;
131
- const rsi = calculateRSI(primaryData);
132
- const latestRSI = rsi[rsi.length - 1];
133
- if (isRSIOverbought(latestRSI)) {
134
- conditionCount++;
135
- conditionDetails.push(`RSI overbought (${latestRSI.toFixed(1)})`);
136
- }
137
- const stoch = calculateStochastic(primaryData);
138
- const latestStochK = stoch.k[stoch.k.length - 1];
139
- if (isStochasticOverbought(latestStochK)) {
140
- conditionCount++;
141
- conditionDetails.push(`Stochastic overbought (%K: ${latestStochK.toFixed(1)})`);
142
- }
143
- const cci = calculateCCI(primaryData);
144
- const latestCCI = cci[cci.length - 1];
145
- if (isCCIOverbought(latestCCI)) {
146
- conditionCount++;
147
- conditionDetails.push(`CCI overbought (${latestCCI.toFixed(1)})`);
148
- }
149
- const williamsR = calculateWilliamsR(primaryData);
150
- const latestWR = williamsR[williamsR.length - 1];
151
- if (isWilliamsROverbought(latestWR)) {
152
- conditionCount++;
153
- conditionDetails.push(`Williams %R overbought (${latestWR.toFixed(1)})`);
154
- }
155
- const hasCondition = conditionCount > 0;
156
- if (hasCondition) {
157
- details.push("🔹 CONDITION: " + conditionDetails.join(", "));
158
- }
159
- // ===== LAYER 2: TRIGGER (Event Detection) =====
160
- const triggerDetails = [];
161
- let triggerCount = 0;
162
- if (rsiCrossunderOverbought(rsi)) {
163
- triggerCount++;
164
- triggerDetails.push("RSI crossed below 70");
165
- }
166
- if (stochasticBearishCross(stoch.k, stoch.d)) {
167
- triggerCount++;
168
- triggerDetails.push("Stochastic %K crossed below %D");
169
- }
170
- const macd = calculateMACD(primaryData);
171
- if (macdBearishCross(macd.macd, macd.signal)) {
172
- triggerCount++;
173
- triggerDetails.push("MACD crossed below signal line");
174
- }
175
- if (histogramNegativeChange(macd.histogram)) {
176
- triggerCount++;
177
- triggerDetails.push("MACD histogram turned negative");
178
- }
179
- const momentum = calculateMomentum(primaryData);
180
- if (momentumCrossBelowZero(momentum)) {
181
- triggerCount++;
182
- triggerDetails.push("Momentum crossed below 0");
183
- }
184
- const hasTrigger = triggerCount > 0;
185
- if (hasTrigger) {
186
- details.push("🔹 TRIGGER: " + triggerDetails.join(", "));
187
- }
188
- // ===== LAYER 3: CONFIRMATION =====
189
- const confirmationDetails = [];
190
- let confirmationCount = 0;
191
- const adxResult = calculateADX(confirmationData);
192
- const latestADX = adxResult.adx[adxResult.adx.length - 1];
193
- if (!isNaN(latestADX) && isStrongTrend(latestADX)) {
194
- confirmationCount++;
195
- confirmationDetails.push(`ADX > ${minADX} (${latestADX.toFixed(1)})`);
196
- }
197
- const latestMomentum = momentum[momentum.length - 1];
198
- if (!isNaN(latestMomentum) && latestMomentum < 0) {
199
- confirmationCount++;
200
- confirmationDetails.push(`Momentum negative (${latestMomentum.toFixed(2)})`);
201
- }
202
- const hasConfirmation = confirmationCount > 0;
203
- if (hasConfirmation) {
204
- details.push("🔹 CONFIRMATION: " + confirmationDetails.join(", "));
205
- }
206
- // ===== SCORING =====
207
- const isValid = hasTrigger && hasConfirmation;
208
- let score = 0;
209
- if (isValid) {
210
- const conditionScore = Math.min(conditionCount * 10, 30);
211
- const triggerScore = Math.min(triggerCount * 15, 40);
212
- const confirmationScore = Math.min(confirmationCount * 15, 30);
213
- score = conditionScore + triggerScore + confirmationScore;
214
- }
215
- return {
216
- condition: hasCondition,
217
- trigger: hasTrigger,
218
- confirmation: hasConfirmation,
219
- score: Math.min(100, score),
220
- details,
221
- };
222
- }
223
- }
224
- //# sourceMappingURL=oscillator-engine.js.map
1
+ const a0_0x4ef158=a0_0x2805;function a0_0x1c8f(){const _0x38fbb5=['uhbtsey','quryid4G','zur2Dhy','wLzxtwO','D09Twhi','yxbWBhK','yw5HBhL6zvnLBgW','BLvMDum','q2nSuKq','uuPoD3K','y0n4zeS','whfpvuW','zLvwsge','CgnZtMq','wezLs1G','v2LSBgLHBxmGjviGB3zLCMjVDwDODcaO','zKvTquS','tufdrcbJCM9ZC2vKigjLBg93ihnPz25HBcbSAw5L','AgL6Ahy','yMDWr1q','mJu4mtG5odjNvxz3q28','Dg9gAxHLza','qwnAvhm','ENbRwLy','A2nowMO','r29MAeK','BxzWzfi','tKDOqum','Ce1bCKq','BgvUz3rO','yLf4B20','Cfv5rwO','zK9zy3a','thvnAw8','nJG2mdKZmKf2yw5Lza','CfnhCwe','tw9Tzw50Dw0Gy3jVC3nLzcbHyM92zsaW','8j+uUsbdt05gsvjnqvrjt046ia','quPtt2m','DMz3tvO','nJK1otC0mejRrK9LAG','ywLKtgi','q0njig92zxjZB2XKicG','qxb4Ewq','sfPLsMK','r3jSAMG','BwLU','mZmZnJC5nNbbt0LNuW','BwfgAu0','kcGOlISPkYKRksSK','DhvxzwG','tufdrcbOAxn0B2DYyw0GDhvYBMvKig5Lz2f0AxzL','ww1sy0m','zvHfwM4','rhfjsee','AhLdrwC','mtC1odKWs1vkzMP1','quzyCuS','wfjgDNC','yw5HBhL6zuj1Eq','CxDYzeK','seLRy1y','sgPhwLe','CwPRD24','q0njig92zxjIB3vNAhqGka','C2vHCMnO','BMn4r1i','uLnjignYB3nZzwqGywjVDMuGmZa','C2TYv3q','ywr4','u3rVy2HHC3rPyYbVDMvYyM91z2H0icGLsZOG','u3rVy2HHC3rPyYaLsYbJCM9ZC2vKigfIB3zLicve','C2nlDwe','ChvZAa','mZy2mZq4mhrdvhbYDq','u09vyMW','qNfvrMC','wxrhCvK','odeWotCZDvHysLru','yKLlswi','zM1HwLi','tufdrcbOAxn0B2DYyw0GDhvYBMvKihbVC2L0AxzL','u3rVy2HHC3rPyYaLsYbJCM9ZC2vKigjLBg93icve','C2LNBMfS','yLnyr3q','A2XjEhK','rufssvq','8j+uUsbuuKLhr0vsoIa','uLnjig92zxjIB3vNAhqGka','AM9PBG','8j+uUsbdt05esvrjt046ia','y29rwKG','rgvTBuC','zxbcrMy','uLnjignYB3nZzwqGyMvSB3CGnZa','sKvnDgG','v2LSBgLHBxmGjviGB3zLCNnVBgqGka','thjNtg4','DeTjwLC','q3Dds0C','CwPrCfe','su14shC','vMjhrfy','Dg9tDhjPBMC','zfrXz1u','rgrjAfC','tw9Tzw50Dw0GBMvNyxrPDMuGka','tufdrcbJCM9ZC2vKigfIB3zLihnPz25HBcbSAw5L','ANjLsMq','C0fwBxO','txnrqLK','t0rQEfO','tLPrEfK','CgPIChu','wKXuEMq','tw9Tzw50Dw0Gy3jVC3nLzcbIzwXVDYaW','wNPKsLq','teLutw8','AgLZDg9NCMfT','zw5OBfm','BwfJza','u3rVy2HHC3rPyYbVDMvYC29SzcaOjuS6ia'];a0_0x1c8f=function(){return _0x38fbb5;};return a0_0x1c8f();}(function(_0x2e0033,_0x520702){const _0x53db90=a0_0x2805,_0x1e36cd=_0x2e0033();while(!![]){try{const _0x332643=-parseInt(_0x53db90(0x112))/0x1+-parseInt(_0x53db90(0xf3))/0x2+-parseInt(_0x53db90(0xfc))/0x3+parseInt(_0x53db90(0xe6))/0x4+-parseInt(_0x53db90(0xec))/0x5+-parseInt(_0x53db90(0x10e))/0x6+parseInt(_0x53db90(0xd8))/0x7;if(_0x332643===_0x520702)break;else _0x1e36cd['push'](_0x1e36cd['shift']());}catch(_0xe4aa76){_0x1e36cd['push'](_0x1e36cd['shift']());}}}(a0_0x1c8f,0xd2b9a));const a0_0x4bd962=(function(){let _0x42f617=!![];return function(_0x8a5505,_0x53b309){const _0x542eee=_0x42f617?function(){const _0x21964b=a0_0x2805;if(_0x53b309){const _0x5023f3=_0x53b309[_0x21964b(0xc9)](_0x8a5505,arguments);return _0x53b309=null,_0x5023f3;}}:function(){};return _0x42f617=![],_0x542eee;};}()),a0_0x168e09=a0_0x4bd962(this,function(){const _0x121084=a0_0x2805,_0x5b70a1={'MsQBY':_0x121084(0xf5)};return a0_0x168e09[_0x121084(0x12b)]()[_0x121084(0x105)](_0x5b70a1[_0x121084(0x132)])[_0x121084(0x12b)]()['constructor'](a0_0x168e09)[_0x121084(0x105)](_0x5b70a1['MsQBY']);});a0_0x168e09();import{calculateRSI,isRSIOversold,isRSIOverbought,rsiCrossoverOversold,rsiCrossunderOverbought}from'../indicators/oscillator/rsi.js';import{calculateStochastic,isStochasticOversold,isStochasticOverbought,stochasticBullishCross,stochasticBearishCross}from'../indicators/oscillator/stochastic.js';import{calculateMACD,macdBullishCross,macdBearishCross,histogramPositiveChange,histogramNegativeChange}from'../indicators/oscillator/macd.js';import{calculateMomentum,momentumCrossAboveZero,momentumCrossBelowZero}from'../indicators/oscillator/momentum.js';import{calculateADX,isStrongTrend}from'../indicators/oscillator/adx.js';import{calculateCCI,isCCIOversold,isCCIOverbought}from'../indicators/oscillator/cci.js';function a0_0x2805(_0x2c47f1,_0x41d2cb){_0x2c47f1=_0x2c47f1-0xbb;const _0x5cb5b5=a0_0x1c8f();let _0x168e09=_0x5cb5b5[_0x2c47f1];if(a0_0x2805['SAXSoB']===undefined){var _0x4bd962=function(_0x5ef69f){const _0x1cad91='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x40b0c9='',_0x2d0676='',_0x574a6c=_0x40b0c9+_0x4bd962;for(let _0x240249=0x0,_0x4b9e5a,_0x27f423,_0x217787=0x0;_0x27f423=_0x5ef69f['charAt'](_0x217787++);~_0x27f423&&(_0x4b9e5a=_0x240249%0x4?_0x4b9e5a*0x40+_0x27f423:_0x27f423,_0x240249++%0x4)?_0x40b0c9+=_0x574a6c['charCodeAt'](_0x217787+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x4b9e5a>>(-0x2*_0x240249&0x6)):_0x240249:0x0){_0x27f423=_0x1cad91['indexOf'](_0x27f423);}for(let _0x73c04d=0x0,_0xdad0b5=_0x40b0c9['length'];_0x73c04d<_0xdad0b5;_0x73c04d++){_0x2d0676+='%'+('00'+_0x40b0c9['charCodeAt'](_0x73c04d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2d0676);};a0_0x2805['FekwOq']=_0x4bd962,a0_0x2805['hotMPR']={},a0_0x2805['SAXSoB']=!![];}const _0x1c8ff0=_0x5cb5b5[0x0],_0x280512=_0x2c47f1+_0x1c8ff0,_0x29bf7f=a0_0x2805['hotMPR'][_0x280512];if(!_0x29bf7f){const _0x50ec19=function(_0x616e51){this['UWtGwP']=_0x616e51,this['ClphfG']=[0x1,0x0,0x0],this['BsqLgz']=function(){return'newState';},this['dQIcxv']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['wzFSNa']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x50ec19['prototype']['zzyfIQ']=function(){const _0x47ec73=new RegExp(this['dQIcxv']+this['wzFSNa']),_0x34823c=_0x47ec73['test'](this['BsqLgz']['toString']())?--this['ClphfG'][0x1]:--this['ClphfG'][0x0];return this['aanFGc'](_0x34823c);},_0x50ec19['prototype']['aanFGc']=function(_0xa0dd1e){if(!Boolean(~_0xa0dd1e))return _0xa0dd1e;return this['VgZkjt'](this['UWtGwP']);},_0x50ec19['prototype']['VgZkjt']=function(_0x20f2d6){for(let _0x123781=0x0,_0x13b2fb=this['ClphfG']['length'];_0x123781<_0x13b2fb;_0x123781++){this['ClphfG']['push'](Math['round'](Math['random']())),_0x13b2fb=this['ClphfG']['length'];}return _0x20f2d6(this['ClphfG'][0x0]);},new _0x50ec19(a0_0x2805)['zzyfIQ'](),_0x168e09=a0_0x2805['FekwOq'](_0x168e09),a0_0x2805['hotMPR'][_0x280512]=_0x168e09;}else _0x168e09=_0x29bf7f;return _0x168e09;}import{calculateWilliamsR,isWilliamsROversold,isWilliamsROverbought}from'../indicators/oscillator/williams.js';export class OscillatorEngine{static[a0_0x4ef158(0xff)](_0x2c1410,_0x4bd5b0,_0x2c92bc){const _0x2c9827=a0_0x4ef158,_0xe62581={'fOYcp':function(_0x23cc79,_0x56a4c3){return _0x23cc79+_0x56a4c3;},'JEMth':_0x2c9827(0xe9),'XFeKX':_0x2c9827(0x122),'PpSHF':function(_0x1d9317,_0x39b974){return _0x1d9317(_0x39b974);},'CwCKG':function(_0x225f4d,_0x49a63f){return _0x225f4d===_0x49a63f;},'avMFA':'rjQoM','WYSrF':function(_0xbe3d12,_0x230133){return _0xbe3d12-_0x230133;},'AFXqK':function(_0x56db98,_0x4be9f7){return _0x56db98(_0x4be9f7);},'skrWt':_0x2c9827(0xfb),'ZVWMj':function(_0x409c08,_0x2dcd43){return _0x409c08(_0x2dcd43);},'ZzdJT':function(_0x2261f2,_0x3de98d){return _0x2261f2-_0x3de98d;},'fUVHa':function(_0x47fe41,_0x1e7654){return _0x47fe41(_0x1e7654);},'fmaZR':function(_0x5a85b1,_0x4cfdb9){return _0x5a85b1!==_0x4cfdb9;},'tuWeh':_0x2c9827(0xf1),'vfwMZ':function(_0x57e752,_0x117a2c){return _0x57e752>_0x117a2c;},'XqOUL':_0x2c9827(0x11e),'bQxom':function(_0x31be2d,_0x3f2925,_0x318512){return _0x31be2d(_0x3f2925,_0x318512);},'NGhAC':'NCvKi','pSGqa':_0x2c9827(0x10b),'pjbpu':function(_0x4297f8,_0x554d88){return _0x4297f8===_0x554d88;},'eXEZn':_0x2c9827(0x12f),'fEmAK':function(_0x4d52af,_0x3e299d){return _0x4d52af(_0x3e299d);},'EvLfN':function(_0x104c12,_0x1e6539){return _0x104c12(_0x1e6539);},'epBFf':_0x2c9827(0xe8),'zRumk':function(_0x2a64bf,_0x863c10){return _0x2a64bf>_0x863c10;},'pMArD':_0x2c9827(0x11b),'bgpGT':function(_0xeac748,_0x2fa8fa){return _0xeac748(_0x2fa8fa);},'dTqgU':'NXpCP','DdIhW':function(_0x3a22a9,_0x2d5704){return _0x3a22a9>_0x2d5704;},'YmRcC':function(_0x2f7689,_0x3cefce){return _0x2f7689&&_0x3cefce;},'EARIT':function(_0x3f8a55,_0x398cf6){return _0x3f8a55*_0x398cf6;},'HZeJi':function(_0x323fa4,_0x7487d8){return _0x323fa4+_0x7487d8;}},_0x2cbe30=[],_0x47e600=[];let _0x2e5c70=0x0;const _0x52f1c3=calculateRSI(_0x2c1410),_0x35df14=_0x52f1c3[_0x52f1c3[_0x2c9827(0xe1)]-0x1];_0xe62581[_0x2c9827(0xc4)](isRSIOversold,_0x35df14)&&(_0xe62581['CwCKG'](_0xe62581['avMFA'],'vWwGU')?(_0x413fa3++,_0x145f9b[_0x2c9827(0x10d)](_0x2c9827(0x10a)+_0x2b7e2f[_0x2c9827(0xd9)](0x1)+')')):(_0x2e5c70++,_0x47e600[_0x2c9827(0x10d)]('RSI\x20oversold\x20('+_0x35df14['toFixed'](0x1)+')')));const _0x19a9df=_0xe62581[_0x2c9827(0xc4)](calculateStochastic,_0x2c1410),_0x10a938=_0x19a9df['k'][_0xe62581['WYSrF'](_0x19a9df['k'][_0x2c9827(0xe1)],0x1)];_0xe62581['AFXqK'](isStochasticOversold,_0x10a938)&&(_0xe62581[_0x2c9827(0x127)](_0xe62581[_0x2c9827(0x108)],_0xe62581[_0x2c9827(0x108)])?(_0x2e5c70++,_0x47e600[_0x2c9827(0x10d)](_0x2c9827(0xc3)+_0x10a938['toFixed'](0x1)+')')):_0x51ad76[_0x2c9827(0x10d)](_0xe62581[_0x2c9827(0xe4)](_0xe62581['JEMth'],_0x1ff60c[_0x2c9827(0x11d)](',\x20'))));const _0x61145f=calculateCCI(_0x2c1410),_0x45cb0a=_0x61145f[_0x61145f['length']-0x1];isCCIOversold(_0x45cb0a)&&(_0x2e5c70++,_0x47e600['push'](_0x2c9827(0xee)+_0x45cb0a[_0x2c9827(0xd9)](0x1)+')'));const _0x3d7c66=_0xe62581[_0x2c9827(0xc7)](calculateWilliamsR,_0x2c1410),_0x527852=_0x3d7c66[_0xe62581[_0x2c9827(0xbe)](_0x3d7c66[_0x2c9827(0xe1)],0x1)];_0xe62581[_0x2c9827(0xd0)](isWilliamsROversold,_0x527852)&&(_0xe62581[_0x2c9827(0x114)](_0x2c9827(0xf1),_0xe62581[_0x2c9827(0xf6)])?_0x3c5d1d[_0x2c9827(0x10d)](_0xe62581[_0x2c9827(0xe4)](_0xe62581[_0x2c9827(0x123)],_0x58db7c[_0x2c9827(0x11d)](',\x20'))):(_0x2e5c70++,_0x47e600[_0x2c9827(0x10d)](_0x2c9827(0x124)+_0x527852[_0x2c9827(0xd9)](0x1)+')')));const _0x1f8c76=_0xe62581[_0x2c9827(0xeb)](_0x2e5c70,0x0);_0x1f8c76&&_0x2cbe30[_0x2c9827(0x10d)](_0xe62581[_0x2c9827(0xe4)](_0xe62581[_0x2c9827(0xcf)],_0x47e600[_0x2c9827(0x11d)](',\x20')));const _0x1bc64c=[];let _0x64b061=0x0;_0xe62581[_0x2c9827(0xfd)](rsiCrossoverOversold,_0x52f1c3)&&(_0x64b061++,_0x1bc64c[_0x2c9827(0x10d)](_0x2c9827(0x107)));_0xe62581[_0x2c9827(0xe2)](stochasticBullishCross,_0x19a9df['k'],_0x19a9df['d'])&&(_0xe62581[_0x2c9827(0x114)](_0xe62581[_0x2c9827(0xdf)],_0xe62581[_0x2c9827(0xdf)])?(_0x10f5da++,_0x34cf5b[_0x2c9827(0x10d)](_0x2c9827(0xee)+_0x13a36c[_0x2c9827(0xd9)](0x1)+')')):(_0x64b061++,_0x1bc64c['push'](_0xe62581[_0x2c9827(0xe7)])));const _0x11c700=_0xe62581[_0x2c9827(0xc4)](calculateMACD,_0x2c1410);macdBullishCross(_0x11c700[_0x2c9827(0xc2)],_0x11c700[_0x2c9827(0x117)])&&(_0xe62581[_0x2c9827(0xbb)](_0x2c9827(0x100),_0x2c9827(0x100))?(_0x64b061++,_0x1bc64c['push'](_0xe62581[_0x2c9827(0xf9)])):(_0x26e38d++,_0x31094a['push']('Stochastic\x20oversold\x20(%K:\x20'+_0x52c36a['toFixed'](0x1)+')')));_0xe62581[_0x2c9827(0xd4)](histogramPositiveChange,_0x11c700[_0x2c9827(0xc0)])&&(_0x64b061++,_0x1bc64c['push'](_0x2c9827(0x115)));const _0x5fc486=_0xe62581['EvLfN'](calculateMomentum,_0x2c1410);momentumCrossAboveZero(_0x5fc486)&&(_0x64b061++,_0x1bc64c[_0x2c9827(0x10d)](_0xe62581[_0x2c9827(0x121)]));const _0x14aaa0=_0xe62581['zRumk'](_0x64b061,0x0);_0x14aaa0&&_0x2cbe30[_0x2c9827(0x10d)](_0xe62581[_0x2c9827(0xe4)](_0xe62581[_0x2c9827(0xe0)],_0x1bc64c[_0x2c9827(0x11d)](',\x20')));const _0x1f738d=[];let _0x3b8a42=0x0;const _0xb5366e=_0xe62581[_0x2c9827(0xd7)](calculateADX,_0x4bd5b0),_0x44350c=_0xb5366e[_0x2c9827(0x109)][_0xb5366e[_0x2c9827(0x109)][_0x2c9827(0xe1)]-0x1];!_0xe62581[_0x2c9827(0xd4)](isNaN,_0x44350c)&&_0xe62581[_0x2c9827(0xfd)](isStrongTrend,_0x44350c)&&(_0xe62581[_0x2c9827(0x12c)]===_0xe62581[_0x2c9827(0x12c)]?(_0x3b8a42++,_0x1f738d['push'](_0x2c9827(0xc5)+_0x2c92bc+'\x20('+_0x44350c[_0x2c9827(0xd9)](0x1)+')')):(_0x41c020++,_0x2cd9fa['push'](_0xe62581[_0x2c9827(0xd2)])));const _0x2f6c41=_0x5fc486[_0x5fc486[_0x2c9827(0xe1)]-0x1];!isNaN(_0x2f6c41)&&_0xe62581[_0x2c9827(0x12d)](_0x2f6c41,0x0)&&(_0x3b8a42++,_0x1f738d[_0x2c9827(0x10d)]('Momentum\x20positive\x20('+_0x2f6c41['toFixed'](0x2)+')'));const _0x142e09=_0x3b8a42>0x0;_0x142e09&&_0x2cbe30[_0x2c9827(0x10d)](_0xe62581['JEMth']+_0x1f738d[_0x2c9827(0x11d)](',\x20'));const _0x5e7224=_0xe62581[_0x2c9827(0xf8)](_0x14aaa0,_0x142e09);let _0x2394d3=0x0;if(_0x5e7224){const _0x2b082e=Math['min'](_0x2e5c70*0xa,0x1e),_0x3538b7=Math[_0x2c9827(0xf2)](_0x64b061*0xf,0x28),_0x420061=Math[_0x2c9827(0xf2)](_0xe62581[_0x2c9827(0x11a)](_0x3b8a42,0xf),0x1e);_0x2394d3=_0xe62581[_0x2c9827(0xf0)](_0x2b082e+_0x3538b7,_0x420061);}return{'condition':_0x1f8c76,'trigger':_0x14aaa0,'confirmation':_0x142e09,'score':Math[_0x2c9827(0xf2)](0x64,_0x2394d3),'details':_0x2cbe30};}static[a0_0x4ef158(0xca)](_0x225df0,_0x3e53fb,_0x1dc225){const _0x42c66e=a0_0x4ef158,_0x27ba3c={'QJNwy':_0x42c66e(0xf7),'dJIbm':function(_0xc571c6,_0x27a965){return _0xc571c6+_0x27a965;},'Qzmro':_0x42c66e(0x11e),'klIxy':_0x42c66e(0x12f),'GvVhf':'RSI\x20crossed\x20above\x2030','mvpdR':_0x42c66e(0xe8),'maFiM':function(_0x79eb1d,_0x2275d7){return _0x79eb1d(_0x2275d7);},'vJDoD':function(_0x5d0046,_0x5462dd){return _0x5d0046-_0x5462dd;},'jreJd':function(_0x1b1d09,_0x4f45e0){return _0x1b1d09(_0x4f45e0);},'scKua':function(_0x186444,_0x44d141){return _0x186444(_0x44d141);},'AJSOc':function(_0x2ee487,_0x46cf85){return _0x2ee487-_0x46cf85;},'WbnDV':function(_0x4db0b6,_0x251c1b){return _0x4db0b6(_0x251c1b);},'ZLTzd':function(_0x2290f6,_0x3c7826){return _0x2290f6>_0x3c7826;},'qjkwn':function(_0x34f774,_0x30760c){return _0x34f774===_0x30760c;},'BqUFg':_0x42c66e(0xbf),'kcNZj':function(_0x5d8d70,_0x5a44ff){return _0x5d8d70(_0x5a44ff);},'XRFvw':function(_0x4597bd,_0xac84ff,_0x46ce46){return _0x4597bd(_0xac84ff,_0x46ce46);},'ncxGR':'kaXJs','hizhv':'KCnWt','LrgLn':_0x42c66e(0x116),'CclRD':function(_0x35042a,_0x454f29){return _0x35042a(_0x454f29);},'nUfuC':function(_0xb1073a,_0x22d643,_0x3c45b8){return _0xb1073a(_0x22d643,_0x3c45b8);},'NekqF':_0x42c66e(0xfa),'VbGDV':function(_0x4b8129,_0x577858){return _0x4b8129===_0x577858;},'AcZTs':_0x42c66e(0x133),'IMxHw':function(_0x171aa3,_0x2b76fb){return _0x171aa3(_0x2b76fb);},'YtGqY':function(_0x5d26b6,_0x544315){return _0x5d26b6(_0x544315);},'LuMio':function(_0x31f655,_0x29c058){return _0x31f655!==_0x29c058;},'coQZH':_0x42c66e(0x120),'NZQxY':function(_0x2f7777,_0x52e8f5){return _0x2f7777+_0x52e8f5;},'Apxyd':function(_0x5a5c63,_0x1b8f60){return _0x5a5c63(_0x1b8f60);},'zPIsZ':function(_0xb1367e,_0x5d0e41){return _0xb1367e-_0x5d0e41;},'enhlS':_0x42c66e(0x131),'HjGZQ':function(_0x4f5d4c,_0x2750fb){return _0x4f5d4c<_0x2750fb;},'pcsNd':_0x42c66e(0xce),'FeQZr':function(_0x5e43b6,_0x3128ad){return _0x5e43b6>_0x3128ad;},'pUyEj':function(_0x5a03f2,_0x5932bd){return _0x5a03f2===_0x5932bd;},'zpkZV':_0x42c66e(0x101),'qjQpQ':_0x42c66e(0xe9),'nfXmz':function(_0xdf82fe,_0x37dccd){return _0xdf82fe&&_0x37dccd;},'GofhI':_0x42c66e(0xed),'tKIZW':_0x42c66e(0xc8),'eDvtv':function(_0x26e490,_0x3021ca){return _0x26e490*_0x3021ca;},'SOUbl':function(_0x4bfc06,_0x4be745){return _0x4bfc06*_0x4be745;},'bIKIb':function(_0x567631,_0x42b6cc){return _0x567631+_0x42b6cc;},'EyQyH':function(_0x196e20,_0x33eeea){return _0x196e20+_0x33eeea;}},_0x2c3be3=[],_0xcb9b80=[];let _0x58956b=0x0;const _0x1aca67=_0x27ba3c['maFiM'](calculateRSI,_0x225df0),_0x524c66=_0x1aca67[_0x1aca67[_0x42c66e(0xe1)]-0x1];_0x27ba3c[_0x42c66e(0xf4)](isRSIOverbought,_0x524c66)&&(_0x58956b++,_0xcb9b80[_0x42c66e(0x10d)](_0x42c66e(0x11c)+_0x524c66['toFixed'](0x1)+')'));const _0x3c11e3=_0x27ba3c[_0x42c66e(0xf4)](calculateStochastic,_0x225df0),_0x13acf9=_0x3c11e3['k'][_0x3c11e3['k'][_0x42c66e(0xe1)]-0x1];isStochasticOverbought(_0x13acf9)&&(_0x58956b++,_0xcb9b80['push']('Stochastic\x20overbought\x20(%K:\x20'+_0x13acf9['toFixed'](0x1)+')'));const _0xdc518=_0x27ba3c['maFiM'](calculateCCI,_0x225df0),_0xb42d5d=_0xdc518[_0x27ba3c['vJDoD'](_0xdc518[_0x42c66e(0xe1)],0x1)];_0x27ba3c[_0x42c66e(0x130)](isCCIOverbought,_0xb42d5d)&&(_0x58956b++,_0xcb9b80['push'](_0x42c66e(0x104)+_0xb42d5d[_0x42c66e(0xd9)](0x1)+')'));const _0x598cf0=_0x27ba3c[_0x42c66e(0x10c)](calculateWilliamsR,_0x225df0),_0x4e0ee4=_0x598cf0[_0x27ba3c[_0x42c66e(0xea)](_0x598cf0[_0x42c66e(0xe1)],0x1)];_0x27ba3c['WbnDV'](isWilliamsROverbought,_0x4e0ee4)&&(_0x58956b++,_0xcb9b80[_0x42c66e(0x10d)](_0x42c66e(0xd3)+_0x4e0ee4[_0x42c66e(0xd9)](0x1)+')'));const _0x581724=_0x27ba3c[_0x42c66e(0xbc)](_0x58956b,0x0);_0x581724&&(_0x27ba3c[_0x42c66e(0x103)](_0x27ba3c[_0x42c66e(0x110)],_0x27ba3c[_0x42c66e(0x110)])?_0x2c3be3[_0x42c66e(0x10d)](_0x27ba3c['Qzmro']+_0xcb9b80[_0x42c66e(0x11d)](',\x20')):(_0x4b39e0++,_0x1a1af1[_0x42c66e(0x10d)](_0x27ba3c['QJNwy'])));const _0x27e861=[];let _0x388370=0x0;_0x27ba3c[_0x42c66e(0xdc)](rsiCrossunderOverbought,_0x1aca67)&&(_0x388370++,_0x27e861['push'](_0x42c66e(0x122)));_0x27ba3c[_0x42c66e(0xfe)](stochasticBearishCross,_0x3c11e3['k'],_0x3c11e3['d'])&&(_0x27ba3c[_0x42c66e(0x106)]!==_0x27ba3c[_0x42c66e(0xd6)]?(_0x388370++,_0x27e861['push'](_0x27ba3c[_0x42c66e(0x125)])):_0x27a6db[_0x42c66e(0x10d)](_0x27ba3c['dJIbm'](_0x27ba3c['Qzmro'],_0x395319[_0x42c66e(0x11d)](',\x20'))));const _0x52739b=_0x27ba3c[_0x42c66e(0xcc)](calculateMACD,_0x225df0);if(_0x27ba3c[_0x42c66e(0xcb)](macdBearishCross,_0x52739b[_0x42c66e(0xc2)],_0x52739b[_0x42c66e(0x117)])){if(_0x27ba3c[_0x42c66e(0x103)]('ctReA',_0x27ba3c['NekqF'])){const _0x38a34d=_0x50ec19?function(){const _0x392273=_0x42c66e;if(_0x123781){const _0x3f2d20=_0x5ce4f1[_0x392273(0xc9)](_0x59271d,arguments);return _0x3c5e7f=null,_0x3f2d20;}}:function(){};return _0x20f2d6=![],_0x38a34d;}else _0x388370++,_0x27e861[_0x42c66e(0x10d)](_0x42c66e(0xd5));}if(_0x27ba3c['jreJd'](histogramNegativeChange,_0x52739b['histogram'])){if(_0x27ba3c[_0x42c66e(0x12a)](_0x27ba3c[_0x42c66e(0xda)],_0x27ba3c['AcZTs']))_0x388370++,_0x27e861['push'](_0x27ba3c[_0x42c66e(0xcd)]);else{if(_0x306083){const _0x37da86=_0x17f045[_0x42c66e(0xc9)](_0x218849,arguments);return _0x303411=null,_0x37da86;}}}const _0x2f846d=_0x27ba3c[_0x42c66e(0x129)](calculateMomentum,_0x225df0);_0x27ba3c[_0x42c66e(0x111)](momentumCrossBelowZero,_0x2f846d)&&(_0x27ba3c[_0x42c66e(0xe5)](_0x27ba3c[_0x42c66e(0x11f)],_0x27ba3c[_0x42c66e(0x11f)])?(_0xd9db66++,_0x243c68[_0x42c66e(0x10d)](_0x27ba3c[_0x42c66e(0x119)])):(_0x388370++,_0x27e861[_0x42c66e(0x10d)](_0x42c66e(0xbd))));const _0x2b31a2=_0x27ba3c['ZLTzd'](_0x388370,0x0);_0x2b31a2&&_0x2c3be3[_0x42c66e(0x10d)](_0x27ba3c[_0x42c66e(0x134)]('🔹\x20TRIGGER:\x20',_0x27e861[_0x42c66e(0x11d)](',\x20')));const _0x2efcdf=[];let _0x2f4219=0x0;const _0x2e14f0=_0x27ba3c[_0x42c66e(0xef)](calculateADX,_0x3e53fb),_0x2dce96=_0x2e14f0[_0x42c66e(0x109)][_0x27ba3c['zPIsZ'](_0x2e14f0[_0x42c66e(0x109)][_0x42c66e(0xe1)],0x1)];!_0x27ba3c[_0x42c66e(0x111)](isNaN,_0x2dce96)&&isStrongTrend(_0x2dce96)&&(_0x42c66e(0x118)!==_0x27ba3c[_0x42c66e(0xc1)]?(_0x2f4219++,_0x2efcdf[_0x42c66e(0x10d)](_0x42c66e(0xc5)+_0x1dc225+'\x20('+_0x2dce96[_0x42c66e(0xd9)](0x1)+')')):(_0x38495b++,_0x58f899[_0x42c66e(0x10d)](_0x42c66e(0xc5)+_0x50c45f+'\x20('+_0x570db4['toFixed'](0x1)+')')));const _0x471e86=_0x2f846d[_0x2f846d[_0x42c66e(0xe1)]-0x1];!_0x27ba3c['YtGqY'](isNaN,_0x471e86)&&_0x27ba3c[_0x42c66e(0x102)](_0x471e86,0x0)&&(_0x27ba3c[_0x42c66e(0x12a)](_0x27ba3c[_0x42c66e(0xd1)],_0x27ba3c[_0x42c66e(0xd1)])?(_0x2f4219++,_0x2efcdf[_0x42c66e(0x10d)](_0x42c66e(0x12e)+_0x471e86[_0x42c66e(0xd9)](0x2)+')')):(_0x2d81d6++,_0x546199[_0x42c66e(0x10d)](_0x42c66e(0xc5)+_0x32f7bf+'\x20('+_0xe866ce[_0x42c66e(0xd9)](0x1)+')')));const _0x37d4b2=_0x27ba3c['FeQZr'](_0x2f4219,0x0);_0x37d4b2&&(_0x27ba3c[_0x42c66e(0xe3)](_0x27ba3c['zpkZV'],_0x27ba3c[_0x42c66e(0xdb)])?_0x2c3be3['push'](_0x27ba3c[_0x42c66e(0x134)](_0x27ba3c[_0x42c66e(0x128)],_0x2efcdf[_0x42c66e(0x11d)](',\x20'))):(_0x44c6d0++,_0x1bf1d3[_0x42c66e(0x10d)](_0x27ba3c['GvVhf'])));const _0x62728e=_0x27ba3c['nfXmz'](_0x2b31a2,_0x37d4b2);let _0x2ac8ab=0x0;if(_0x62728e){if(_0x27ba3c[_0x42c66e(0x12a)](_0x27ba3c[_0x42c66e(0xdd)],_0x27ba3c[_0x42c66e(0x126)]))_0x5d19f3++,_0x2d3a38['push'](_0x27ba3c[_0x42c66e(0xde)]);else{const _0x171d02=Math[_0x42c66e(0xf2)](_0x27ba3c[_0x42c66e(0xc6)](_0x58956b,0xa),0x1e),_0x6e2b9d=Math['min'](_0x388370*0xf,0x28),_0x2e2c78=Math[_0x42c66e(0xf2)](_0x27ba3c[_0x42c66e(0x10f)](_0x2f4219,0xf),0x1e);_0x2ac8ab=_0x27ba3c[_0x42c66e(0x113)](_0x27ba3c['EyQyH'](_0x171d02,_0x6e2b9d),_0x2e2c78);}}return{'condition':_0x581724,'trigger':_0x2b31a2,'confirmation':_0x37d4b2,'score':Math[_0x42c66e(0xf2)](0x64,_0x2ac8ab),'details':_0x2c3be3};}}
@@ -1,101 +1 @@
1
- /**
2
- * Scoring and rating system with trading-type-specific bonuses
3
- */
4
- import { RATING_THRESHOLDS } from "../utils/constants.js";
5
- import { VOLUME_BONUS_CONFIG, VOLATILITY_BONUS_CONFIG, CONFIRMATION_BONUS, } from "../utils/trading-type-config.js";
6
- export class ScoringEngine {
7
- /**
8
- * Calculate final score with weighted components
9
- */
10
- static calculateScore(trendScore, oscillatorScore, trendWeight, oscillatorWeight, volumeBonus = 0, volatilityBonus = 0, confirmationBonus = 0) {
11
- // Weighted base score using profile weights
12
- const weightedTrend = (trendScore * trendWeight) / 100;
13
- const weightedOscillator = (oscillatorScore * oscillatorWeight) / 100;
14
- const baseScore = weightedTrend + weightedOscillator;
15
- // Add bonuses (capped at max score of 100)
16
- const finalScore = Math.min(100, baseScore + volumeBonus + volatilityBonus + confirmationBonus);
17
- return {
18
- trendScore,
19
- oscillatorScore,
20
- volumeBonus,
21
- volatilityBonus,
22
- confirmationBonus,
23
- finalScore: Math.round(finalScore),
24
- };
25
- }
26
- /**
27
- * Calculate volume bonus based on trading type
28
- */
29
- static calculateVolumeBonus(currentVolume, avgVolume, tradingType) {
30
- if (avgVolume === 0)
31
- return 0;
32
- const ratio = currentVolume / avgVolume;
33
- const config = VOLUME_BONUS_CONFIG[tradingType];
34
- // Find the highest matching threshold
35
- for (let i = config.length - 1; i >= 0; i--) {
36
- if (ratio >= config[i].threshold) {
37
- return config[i].bonus;
38
- }
39
- }
40
- return 0;
41
- }
42
- /**
43
- * Calculate volatility bonus based on trading type
44
- */
45
- static calculateVolatilityBonus(atr, avgPrice, tradingType) {
46
- if (avgPrice === 0)
47
- return 0;
48
- const atrPercent = (atr / avgPrice) * 100;
49
- const config = VOLATILITY_BONUS_CONFIG[tradingType];
50
- // Check if within ideal range
51
- if (atrPercent >= config.min && atrPercent <= config.max) {
52
- // Linear scaling within the range
53
- const rangeSize = config.max - config.min;
54
- const position = (atrPercent - config.min) / rangeSize;
55
- // Peak bonus at middle of range
56
- const distanceFromMiddle = Math.abs(0.5 - position);
57
- const multiplier = 1 - distanceFromMiddle;
58
- return Math.round(config.maxBonus * multiplier);
59
- }
60
- return 0;
61
- }
62
- /**
63
- * Calculate confirmation bonus for multi-timeframe alignment
64
- */
65
- static calculateConfirmationBonus(primaryDirectionBullish, confirmationDirectionBullish, tradingType) {
66
- if (primaryDirectionBullish === confirmationDirectionBullish) {
67
- return CONFIRMATION_BONUS[tradingType];
68
- }
69
- return 0;
70
- }
71
- }
72
- export class RatingEngine {
73
- /**
74
- * Assign rating based on score
75
- export class RatingEngine {
76
- /**
77
- * Assign rating based on score
78
- */
79
- static assignRating(score) {
80
- if (score >= RATING_THRESHOLDS.STRONG_BUY)
81
- return "STRONG BUY";
82
- if (score >= RATING_THRESHOLDS.BUY)
83
- return "BUY";
84
- if (score >= RATING_THRESHOLDS.SPECULATIVE)
85
- return "SPECULATIVE";
86
- return "NO TRADE";
87
- }
88
- /**
89
- * Check if score meets minimum threshold
90
- */
91
- static meetsMinimumScore(score, minScore) {
92
- return score >= minScore;
93
- }
94
- /**
95
- * Get minimum threshold (passthrough for consistency)
96
- */
97
- static getMinimumThreshold(minScore) {
98
- return minScore;
99
- }
100
- }
101
- //# sourceMappingURL=scoring.js.map
1
+ const a0_0x5b9a66=a0_0x20b5;(function(_0x21a87b,_0x23559a){const _0x9e84a6=a0_0x20b5,_0x3f9a30=_0x21a87b();while(!![]){try{const _0x54d438=-parseInt(_0x9e84a6(0x1f0))/0x1*(-parseInt(_0x9e84a6(0x1ec))/0x2)+parseInt(_0x9e84a6(0x1df))/0x3*(parseInt(_0x9e84a6(0x1bf))/0x4)+-parseInt(_0x9e84a6(0x1f1))/0x5*(-parseInt(_0x9e84a6(0x1e0))/0x6)+-parseInt(_0x9e84a6(0x1c4))/0x7*(parseInt(_0x9e84a6(0x1cb))/0x8)+-parseInt(_0x9e84a6(0x1bb))/0x9+-parseInt(_0x9e84a6(0x1ba))/0xa+parseInt(_0x9e84a6(0x1c5))/0xb*(parseInt(_0x9e84a6(0x1d5))/0xc);if(_0x54d438===_0x23559a)break;else _0x3f9a30['push'](_0x3f9a30['shift']());}catch(_0x550e0b){_0x3f9a30['push'](_0x3f9a30['shift']());}}}(a0_0x517f,0xa168c));function a0_0x20b5(_0x53080a,_0x4aedd6){_0x53080a=_0x53080a-0x1ba;const _0x2070b5=a0_0x517f();let _0x55d3fb=_0x2070b5[_0x53080a];if(a0_0x20b5['kdozGs']===undefined){var _0x3d50f5=function(_0x2573d4){const _0x2932c7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x13147c='',_0x5b911e='',_0x2d936f=_0x13147c+_0x3d50f5;for(let _0x7c964=0x0,_0x532963,_0x170116,_0x4c3b7a=0x0;_0x170116=_0x2573d4['charAt'](_0x4c3b7a++);~_0x170116&&(_0x532963=_0x7c964%0x4?_0x532963*0x40+_0x170116:_0x170116,_0x7c964++%0x4)?_0x13147c+=_0x2d936f['charCodeAt'](_0x4c3b7a+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x532963>>(-0x2*_0x7c964&0x6)):_0x7c964:0x0){_0x170116=_0x2932c7['indexOf'](_0x170116);}for(let _0x39cd3b=0x0,_0x60292e=_0x13147c['length'];_0x39cd3b<_0x60292e;_0x39cd3b++){_0x5b911e+='%'+('00'+_0x13147c['charCodeAt'](_0x39cd3b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5b911e);};a0_0x20b5['OjnOGJ']=_0x3d50f5,a0_0x20b5['UVrpTd']={},a0_0x20b5['kdozGs']=!![];}const _0x517fe3=_0x2070b5[0x0],_0x20b5b4=_0x53080a+_0x517fe3,_0x1863bf=a0_0x20b5['UVrpTd'][_0x20b5b4];if(!_0x1863bf){const _0x2318b0=function(_0x4f61de){this['shJOvD']=_0x4f61de,this['uDEcFp']=[0x1,0x0,0x0],this['LzsWAj']=function(){return'newState';},this['fUgMcp']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['Astcdg']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x2318b0['prototype']['dycXrO']=function(){const _0x27d14a=new RegExp(this['fUgMcp']+this['Astcdg']),_0x1878a2=_0x27d14a['test'](this['LzsWAj']['toString']())?--this['uDEcFp'][0x1]:--this['uDEcFp'][0x0];return this['frcrjY'](_0x1878a2);},_0x2318b0['prototype']['frcrjY']=function(_0x11eff5){if(!Boolean(~_0x11eff5))return _0x11eff5;return this['oNyTOg'](this['shJOvD']);},_0x2318b0['prototype']['oNyTOg']=function(_0xd571fe){for(let _0x1ea54d=0x0,_0x4d83d2=this['uDEcFp']['length'];_0x1ea54d<_0x4d83d2;_0x1ea54d++){this['uDEcFp']['push'](Math['round'](Math['random']())),_0x4d83d2=this['uDEcFp']['length'];}return _0xd571fe(this['uDEcFp'][0x0]);},new _0x2318b0(a0_0x20b5)['dycXrO'](),_0x55d3fb=a0_0x20b5['OjnOGJ'](_0x55d3fb),a0_0x20b5['UVrpTd'][_0x20b5b4]=_0x55d3fb;}else _0x55d3fb=_0x1863bf;return _0x55d3fb;}const a0_0x3d50f5=(function(){const _0xbfc4ac={'kakNJ':function(_0x171e6b,_0x19887f){return _0x171e6b===_0x19887f;},'OojDT':'SmSlg','KOhjh':function(_0x26c616,_0x4b3918){return _0x26c616-_0x4b3918;},'STmmz':function(_0x489525,_0x13e0f9){return _0x489525/_0x13e0f9;},'qMGNX':function(_0x4e82fa,_0x4592bf){return _0x4e82fa*_0x4592bf;}};let _0x3cfa4a=!![];return function(_0x314308,_0xc0976b){const _0x3b4f10={'qwKfT':function(_0x1667e8,_0x1cf48f){const _0x59070c=a0_0x20b5;return _0xbfc4ac[_0x59070c(0x1dc)](_0x1667e8,_0x1cf48f);},'KzHWl':function(_0x3d7072,_0x4858d7){return _0xbfc4ac['STmmz'](_0x3d7072,_0x4858d7);},'vHtnq':function(_0x2960f6,_0x1cd4a6){const _0x437f98=a0_0x20b5;return _0xbfc4ac[_0x437f98(0x1dc)](_0x2960f6,_0x1cd4a6);},'jtMOZ':function(_0x548923,_0x3feeb5){const _0x3a0454=a0_0x20b5;return _0xbfc4ac[_0x3a0454(0x1d0)](_0x548923,_0x3feeb5);}},_0x3ab2b5=_0x3cfa4a?function(){const _0x19ce54=a0_0x20b5;if(_0xbfc4ac[_0x19ce54(0x1de)](_0x19ce54(0x1c8),_0xbfc4ac[_0x19ce54(0x1e5)])){if(_0xc0976b){const _0x23bd48=_0xc0976b['apply'](_0x314308,arguments);return _0xc0976b=null,_0x23bd48;}}else{const _0x292753=_0x3b4f10[_0x19ce54(0x1e8)](_0x395f76[_0x19ce54(0x1da)],_0x547938[_0x19ce54(0x1d8)]),_0x5ad665=_0x3b4f10['KzHWl'](_0x3b4f10['vHtnq'](_0x12c43d,_0x3da278[_0x19ce54(0x1d8)]),_0x292753),_0x870a8c=_0x3feb20[_0x19ce54(0x1d7)](_0x3b4f10[_0x19ce54(0x1c6)](0.5,_0x5ad665)),_0x21d778=_0x3b4f10[_0x19ce54(0x1e8)](0x1,_0x870a8c);return _0x21d9dd['round'](_0x3b4f10[_0x19ce54(0x1eb)](_0x2e091b['maxBonus'],_0x21d778));}}:function(){};return _0x3cfa4a=![],_0x3ab2b5;};}()),a0_0x55d3fb=a0_0x3d50f5(this,function(){const _0x4c94ed=a0_0x20b5,_0x167105={'dQltb':_0x4c94ed(0x1d2)};return a0_0x55d3fb[_0x4c94ed(0x1e4)]()[_0x4c94ed(0x1d9)](_0x167105[_0x4c94ed(0x1c9)])[_0x4c94ed(0x1e4)]()[_0x4c94ed(0x1d4)](a0_0x55d3fb)['search'](_0x167105[_0x4c94ed(0x1c9)]);});a0_0x55d3fb();import{RATING_THRESHOLDS}from'../utils/constants.js';import{VOLUME_BONUS_CONFIG,VOLATILITY_BONUS_CONFIG,CONFIRMATION_BONUS}from'../utils/trading-type-config.js';export class ScoringEngine{static[a0_0x5b9a66(0x1d6)](_0x5bdbbe,_0x5f5712,_0x6c753d,_0x52ad4a,_0x4dd5d3=0x0,_0x3ba6d2=0x0,_0x1ffa35=0x0){const _0x4d750a=a0_0x5b9a66,_0x5cc80d={'GOOgy':function(_0x2690cb,_0x2c7e49){return _0x2690cb/_0x2c7e49;},'MVNxu':function(_0x283d44,_0x3a2c8d){return _0x283d44*_0x3a2c8d;},'uXZEN':function(_0x1ca929,_0x5bc847){return _0x1ca929/_0x5bc847;},'mrBME':function(_0x59ca73,_0x43bcd7){return _0x59ca73+_0x43bcd7;},'wUiSf':function(_0x1d0db1,_0x8a9973){return _0x1d0db1+_0x8a9973;}},_0x194407=_0x5cc80d['GOOgy'](_0x5cc80d[_0x4d750a(0x1e7)](_0x5bdbbe,_0x6c753d),0x64),_0x30da57=_0x5cc80d['uXZEN'](_0x5f5712*_0x52ad4a,0x64),_0x28eccc=_0x5cc80d[_0x4d750a(0x1ed)](_0x194407,_0x30da57),_0x1b3d25=Math[_0x4d750a(0x1d8)](0x64,_0x5cc80d[_0x4d750a(0x1e6)](_0x28eccc+_0x4dd5d3+_0x3ba6d2,_0x1ffa35));return{'trendScore':_0x5bdbbe,'oscillatorScore':_0x5f5712,'volumeBonus':_0x4dd5d3,'volatilityBonus':_0x3ba6d2,'confirmationBonus':_0x1ffa35,'finalScore':Math[_0x4d750a(0x1e2)](_0x1b3d25)};}static[a0_0x5b9a66(0x1ee)](_0x490177,_0x5b50e6,_0x4b2d27){const _0x429df1=a0_0x5b9a66,_0x2c1231={'QqWxK':function(_0x20e1eb,_0x492d40){return _0x20e1eb===_0x492d40;},'coOzD':function(_0x517a42,_0x41efff){return _0x517a42/_0x41efff;},'CWkaZ':function(_0x5409b3,_0x536e3e){return _0x5409b3-_0x536e3e;},'KKnAt':function(_0x191bac,_0x1a21ce){return _0x191bac>=_0x1a21ce;}};if(_0x2c1231[_0x429df1(0x1ca)](_0x5b50e6,0x0))return 0x0;const _0x3c3933=_0x2c1231[_0x429df1(0x1ea)](_0x490177,_0x5b50e6),_0x23ef8b=VOLUME_BONUS_CONFIG[_0x4b2d27];for(let _0x22e406=_0x2c1231['CWkaZ'](_0x23ef8b[_0x429df1(0x1d3)],0x1);_0x2c1231['KKnAt'](_0x22e406,0x0);_0x22e406--){if(_0x3c3933>=_0x23ef8b[_0x22e406][_0x429df1(0x1ce)])return _0x23ef8b[_0x22e406][_0x429df1(0x1bd)];}return 0x0;}static[a0_0x5b9a66(0x1e3)](_0x2d042f,_0x5431e5,_0x1dc363){const _0x1751c4=a0_0x5b9a66,_0x3cad23={'DDUXl':function(_0x4aa0d2,_0x2035ba){return _0x4aa0d2/_0x2035ba;},'jjHyb':function(_0x48a44c,_0x2d2e04){return _0x48a44c<=_0x2d2e04;},'qdtGv':function(_0x3b0c28,_0x2ff7ce){return _0x3b0c28/_0x2ff7ce;},'gOCXK':function(_0x2bc51a,_0x4e4ae2){return _0x2bc51a-_0x4e4ae2;},'boiaZ':function(_0x4d42bf,_0x558ca8){return _0x4d42bf-_0x558ca8;},'oIAci':function(_0x311959,_0x52324e){return _0x311959*_0x52324e;}};if(_0x5431e5===0x0)return 0x0;const _0x4cebec=_0x3cad23[_0x1751c4(0x1d1)](_0x2d042f,_0x5431e5)*0x64,_0x1ce3d9=VOLATILITY_BONUS_CONFIG[_0x1dc363];if(_0x4cebec>=_0x1ce3d9[_0x1751c4(0x1d8)]&&_0x3cad23[_0x1751c4(0x1c7)](_0x4cebec,_0x1ce3d9['max'])){const _0x1c1f87=_0x1ce3d9[_0x1751c4(0x1da)]-_0x1ce3d9['min'],_0x1b96ca=_0x3cad23[_0x1751c4(0x1e9)](_0x3cad23['gOCXK'](_0x4cebec,_0x1ce3d9[_0x1751c4(0x1d8)]),_0x1c1f87),_0x3df83b=Math[_0x1751c4(0x1d7)](0.5-_0x1b96ca),_0x3b7a88=_0x3cad23[_0x1751c4(0x1cc)](0x1,_0x3df83b);return Math[_0x1751c4(0x1e2)](_0x3cad23[_0x1751c4(0x1bc)](_0x1ce3d9[_0x1751c4(0x1be)],_0x3b7a88));}return 0x0;}static['calculateConfirmationBonus'](_0x5a8417,_0x412984,_0xcb65be){const _0x44b23a=a0_0x5b9a66,_0x3a90b7={'Ildbp':function(_0x21dc7d,_0x12c106){return _0x21dc7d===_0x12c106;}};if(_0x3a90b7[_0x44b23a(0x1e1)](_0x5a8417,_0x412984))return CONFIRMATION_BONUS[_0xcb65be];return 0x0;}}function a0_0x517f(){const _0x51914a=['t29Qrfq','D1vPu2y','tvzoEhu','CxDlzLq','Cwr0r3y','y29pEKq','ANrnt1O','nJK1nKT6zhzkzG','Bxjctuu','y2fSy3vSyxrLvM9SDw1LqM9UDxm','BwvLDhnnAw5PBxvTu2nVCMu','mJD6BNrmy3O','nteYnZbZzLvWveG','ndq4mdiWmeP1BwLcuW','mJC1mtu1mNjoA3f4vW','B0Lby2K','yM9UDxm','Bwf4qM9UDxm','ndi0tNLZBNL6','yxnZAwDUuMf0Aw5N','u1bfq1vmqvrjvKu','qwDeD2i','z2v0twLUAw11BvrOCMvZAg9Sza','nteXmePHt2X1wa','mJj1wMHduxu','DKH0BNe','AMPiEwi','u21tBgC','zffSDgi','uxfxEeS','mtaXnKvZCuzmrG','yM9PyvO','u1rst05hiejvwq','DgHYzxnOB2XK','D09sBwK','Cu1htLG','rervwgW','kcGOlISPkYKRksSK','BgvUz3rO','y29UC3rYDwn0B3i','ntmXmdu1mNLJDwL3Ba','y2fSy3vSyxrLu2nVCMu','ywjZ','BwLU','C2vHCMnO','Bwf4','qLvz','s09OAMG','wxjwy1e','A2fRtKO','ote1nMryD2X5BW','mtiWvfrlBw5f','swXKyNa','CM91BMq','y2fSy3vSyxrLvM9SyxrPBgL0EujVBNvZ','Dg9tDhjPBMC'];a0_0x517f=function(){return _0x51914a;};return a0_0x517f();}export class RatingEngine{static[a0_0x5b9a66(0x1c0)](_0x57277c){const _0x513e4c=a0_0x5b9a66,_0x5f0b94={'wORmi':function(_0x42b97d,_0x250271){return _0x42b97d>=_0x250271;},'YrVcQ':_0x513e4c(0x1cd),'wiIwf':function(_0x473086,_0xb7629c){return _0x473086>=_0xb7629c;},'AgDwb':_0x513e4c(0x1c1),'BuVOb':'NO\x20TRADE'};if(_0x5f0b94['wORmi'](_0x57277c,RATING_THRESHOLDS['STRONG_BUY']))return _0x5f0b94[_0x513e4c(0x1dd)];if(_0x5f0b94[_0x513e4c(0x1cf)](_0x57277c,RATING_THRESHOLDS['BUY']))return _0x513e4c(0x1db);if(_0x5f0b94['wiIwf'](_0x57277c,RATING_THRESHOLDS['SPECULATIVE']))return _0x5f0b94[_0x513e4c(0x1c2)];return _0x5f0b94['BuVOb'];}static[a0_0x5b9a66(0x1ef)](_0x29ff32,_0x3e7594){return _0x29ff32>=_0x3e7594;}static[a0_0x5b9a66(0x1c3)](_0x33a663){return _0x33a663;}}
@@ -1,52 +1 @@
1
- /**
2
- * Timeframe utilities
3
- */
4
- import { TIMEFRAME_CONFIG } from "../utils/constants.js";
5
- export class TimeframeManager {
6
- /**
7
- * Get timeframe configuration for trading type
8
- */
9
- static getConfig(tradingType) {
10
- return TIMEFRAME_CONFIG[tradingType];
11
- }
12
- /**
13
- * Get primary timeframe
14
- */
15
- static getPrimaryTimeframe(tradingType) {
16
- return TIMEFRAME_CONFIG[tradingType].primary;
17
- }
18
- /**
19
- * Get confirmation timeframe
20
- */
21
- static getConfirmationTimeframe(tradingType) {
22
- return TIMEFRAME_CONFIG[tradingType].confirmation;
23
- }
24
- /**
25
- * Convert timeframe to minutes
26
- */
27
- static toMinutes(timeframe) {
28
- const mapping = {
29
- "1m": 1,
30
- "5m": 5,
31
- "15m": 15,
32
- "1h": 60,
33
- "1d": 1440,
34
- };
35
- return mapping[timeframe];
36
- }
37
- /**
38
- * Get data point count needed for timeframe
39
- */
40
- static getDataPointCount(timeframe) {
41
- // Data point requirements per timeframe
42
- const counts = {
43
- "1m": 300, // Scalp - needs more data for noise reduction
44
- "5m": 200, // Day
45
- "15m": 200, // Day confirmation
46
- "1h": 150, // Swing
47
- "1d": 150, // Swing confirmation
48
- };
49
- return counts[timeframe] || 200;
50
- }
51
- }
52
- //# sourceMappingURL=timeframe.js.map
1
+ function a0_0x3731(_0x36c547,_0x393ae5){_0x36c547=_0x36c547-0x8e;const _0x1c5e3e=a0_0x49cb();let _0x11aa43=_0x1c5e3e[_0x36c547];if(a0_0x3731['fmzrbx']===undefined){var _0x3dad1c=function(_0x14ad2a){const _0x46546d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x7706d3='',_0xdf92f1='',_0x87166a=_0x7706d3+_0x3dad1c;for(let _0xc2d958=0x0,_0x2255b9,_0x4c4c55,_0x58d85a=0x0;_0x4c4c55=_0x14ad2a['charAt'](_0x58d85a++);~_0x4c4c55&&(_0x2255b9=_0xc2d958%0x4?_0x2255b9*0x40+_0x4c4c55:_0x4c4c55,_0xc2d958++%0x4)?_0x7706d3+=_0x87166a['charCodeAt'](_0x58d85a+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x2255b9>>(-0x2*_0xc2d958&0x6)):_0xc2d958:0x0){_0x4c4c55=_0x46546d['indexOf'](_0x4c4c55);}for(let _0x1c19e6=0x0,_0x4c602d=_0x7706d3['length'];_0x1c19e6<_0x4c602d;_0x1c19e6++){_0xdf92f1+='%'+('00'+_0x7706d3['charCodeAt'](_0x1c19e6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xdf92f1);};a0_0x3731['BnNTYe']=_0x3dad1c,a0_0x3731['FLFPCO']={},a0_0x3731['fmzrbx']=!![];}const _0x49cb00=_0x1c5e3e[0x0],_0x373195=_0x36c547+_0x49cb00,_0x26fddd=a0_0x3731['FLFPCO'][_0x373195];if(!_0x26fddd){const _0x456d28=function(_0x4ee021){this['WPbAGs']=_0x4ee021,this['MWfyRp']=[0x1,0x0,0x0],this['WRrTWS']=function(){return'newState';},this['KwRzUj']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['lHQVqm']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x456d28['prototype']['yOYYpo']=function(){const _0x3efc35=new RegExp(this['KwRzUj']+this['lHQVqm']),_0x4ba645=_0x3efc35['test'](this['WRrTWS']['toString']())?--this['MWfyRp'][0x1]:--this['MWfyRp'][0x0];return this['qpbQsp'](_0x4ba645);},_0x456d28['prototype']['qpbQsp']=function(_0x269533){if(!Boolean(~_0x269533))return _0x269533;return this['LTdRPz'](this['WPbAGs']);},_0x456d28['prototype']['LTdRPz']=function(_0x466d2a){for(let _0x3d6eda=0x0,_0xc88048=this['MWfyRp']['length'];_0x3d6eda<_0xc88048;_0x3d6eda++){this['MWfyRp']['push'](Math['round'](Math['random']())),_0xc88048=this['MWfyRp']['length'];}return _0x466d2a(this['MWfyRp'][0x0]);},new _0x456d28(a0_0x3731)['yOYYpo'](),_0x11aa43=a0_0x3731['BnNTYe'](_0x11aa43),a0_0x3731['FLFPCO'][_0x373195]=_0x11aa43;}else _0x11aa43=_0x26fddd;return _0x11aa43;}const a0_0x461413=a0_0x3731;(function(_0x331a50,_0x5d4936){const _0x17ccd8=a0_0x3731,_0x127e12=_0x331a50();while(!![]){try{const _0x46ace5=parseInt(_0x17ccd8(0x93))/0x1*(-parseInt(_0x17ccd8(0x9e))/0x2)+parseInt(_0x17ccd8(0x98))/0x3+-parseInt(_0x17ccd8(0x9b))/0x4*(-parseInt(_0x17ccd8(0x90))/0x5)+parseInt(_0x17ccd8(0xa5))/0x6*(-parseInt(_0x17ccd8(0xaa))/0x7)+-parseInt(_0x17ccd8(0xa9))/0x8+-parseInt(_0x17ccd8(0x8f))/0x9+-parseInt(_0x17ccd8(0x9f))/0xa*(-parseInt(_0x17ccd8(0x9d))/0xb);if(_0x46ace5===_0x5d4936)break;else _0x127e12['push'](_0x127e12['shift']());}catch(_0xff5664){_0x127e12['push'](_0x127e12['shift']());}}}(a0_0x49cb,0xed352));const a0_0x3dad1c=(function(){const _0xca838e=a0_0x3731,_0x4a16b4={'DwUNm':_0xca838e(0xa8),'PDRAK':function(_0xa8034a,_0x2f0d02){return _0xa8034a!==_0x2f0d02;},'MgxZw':_0xca838e(0x9a)};let _0x39d0f3=!![];return function(_0x3b8226,_0x5a062b){const _0x58815d=_0xca838e;if(_0x4a16b4[_0x58815d(0x94)](_0x4a16b4[_0x58815d(0xa1)],_0x4a16b4[_0x58815d(0xa1)])){if(_0x216d28){const _0xcd2106=_0x319588[_0x58815d(0x8e)](_0xec5245,arguments);return _0x20176a=null,_0xcd2106;}}else{const _0x2785ea=_0x39d0f3?function(){const _0x2d5136=_0x58815d,_0x394252={'wAiyC':_0x2d5136(0x92)};if(_0x4a16b4[_0x2d5136(0xa7)]===_0x4a16b4['DwUNm']){if(_0x5a062b){const _0x3a0831=_0x5a062b[_0x2d5136(0x8e)](_0x3b8226,arguments);return _0x5a062b=null,_0x3a0831;}}else return _0x4e334a[_0x2d5136(0x9c)]()[_0x2d5136(0xa4)](_0x394252['wAiyC'])[_0x2d5136(0x9c)]()[_0x2d5136(0x97)](_0x42aa5d)[_0x2d5136(0xa4)](_0x2d5136(0x92));}:function(){};return _0x39d0f3=![],_0x2785ea;}};}()),a0_0x11aa43=a0_0x3dad1c(this,function(){const _0x3792b9=a0_0x3731,_0x1b5d70={'RTuzX':'(((.+)+)+)+$'};return a0_0x11aa43['toString']()['search'](_0x1b5d70[_0x3792b9(0xa6)])[_0x3792b9(0x9c)]()['constructor'](a0_0x11aa43)[_0x3792b9(0xa4)](_0x1b5d70[_0x3792b9(0xa6)]);});function a0_0x49cb(){const _0x365c99=['y29UC3rYDwn0B3i','ntK1ntKZufPKEuPp','z2v0q29UzMLYBwf0Aw9UvgLTzwzYyw1L','uK1IA0W','mty0off0B0vNvq','Dg9tDhjPBMC','mZC4nJmXmhDlrKDqtG','mtG5mgzTEwTPBq','mtmWsxPQvujs','y29UzMLYBwf0Aw9U','twD4wNC','z2v0q29UzMLN','z2v0uhjPBwfYEvrPBwvMCMfTzq','C2vHCMnO','nJK2ntm0mgPZugLkta','uLr1ELG','rhDvtM0','q3DpDKG','nZa0nZiXnMXLEfLbwa','n2rbA293Bq','yxbWBhK','mta3ote1mdrMufDyyNy','mtq4mtbyAhrtzxi','ChjPBwfYEq','kcGOlISPkYKRksSK','mtC3owDwswjWsG','uersquS','Dg9nAw51DgvZ','z2v0rgf0yvbVAw50q291BNq'];a0_0x49cb=function(){return _0x365c99;};return a0_0x49cb();}a0_0x11aa43();import{TIMEFRAME_CONFIG}from'../utils/constants.js';export class TimeframeManager{static[a0_0x461413(0xa2)](_0x3b0140){return TIMEFRAME_CONFIG[_0x3b0140];}static[a0_0x461413(0xa3)](_0x252ec2){const _0xc9e4b3=a0_0x461413;return TIMEFRAME_CONFIG[_0x252ec2][_0xc9e4b3(0x91)];}static[a0_0x461413(0x99)](_0x5e3e2a){const _0x4e4c64=a0_0x461413;return TIMEFRAME_CONFIG[_0x5e3e2a][_0x4e4c64(0xa0)];}static[a0_0x461413(0x95)](_0x39b41f){const _0x1cdd31={'1m':0x1,'5m':0x5,'15m':0xf,'1h':0x3c,'1d':0x5a0};return _0x1cdd31[_0x39b41f];}static[a0_0x461413(0x96)](_0x5614b0){const _0x49cb12={'1m':0x12c,'5m':0xc8,'15m':0xc8,'1h':0x96,'1d':0x96};return _0x49cb12[_0x5614b0]||0xc8;}}
@@ -1,137 +1 @@
1
- /**
2
- * Trend Engine - Analyzes trend on confirmation timeframe
3
- */
4
- import { calculateSMA } from "../indicators/trend/sma.js";
5
- import { calculateEMA } from "../indicators/trend/ema.js";
6
- import { calculateHMA } from "../indicators/trend/hma.js";
7
- import { calculateVWMA } from "../indicators/trend/vwma.js";
8
- import { slope } from "../utils/indicators.js";
9
- import { MA_ALIGNMENT_REQUIREMENTS } from "../utils/trading-type-config.js";
10
- export class TrendEngine {
11
- /**
12
- * Analyze trend on confirmation timeframe
13
- */
14
- static analyze(data, indicators, tradingType) {
15
- const details = [];
16
- let bullishCount = 0;
17
- let bearishCount = 0;
18
- let totalIndicators = 0;
19
- const currentPrice = data[data.length - 1].close;
20
- // Calculate all requested moving averages
21
- const maValues = {};
22
- for (const indicator of indicators) {
23
- if (indicator.startsWith("SMA")) {
24
- const period = parseInt(indicator.replace("SMA", ""));
25
- maValues[indicator] = calculateSMA(data, period);
26
- }
27
- else if (indicator.startsWith("EMA")) {
28
- const period = parseInt(indicator.replace("EMA", ""));
29
- maValues[indicator] = calculateEMA(data, period);
30
- }
31
- else if (indicator === "HMA9") {
32
- maValues["HMA"] = calculateHMA(data, 9);
33
- }
34
- else if (indicator === "VWMA20") {
35
- maValues["VWMA"] = calculateVWMA(data, 20);
36
- }
37
- }
38
- // Analyze each MA
39
- for (const [name, values] of Object.entries(maValues)) {
40
- const latestMA = values[values.length - 1];
41
- if (isNaN(latestMA))
42
- continue;
43
- totalIndicators++;
44
- // Price vs MA
45
- if (currentPrice > latestMA) {
46
- bullishCount++;
47
- details.push(`Price > ${name} (${latestMA.toFixed(2)})`);
48
- }
49
- else if (currentPrice < latestMA) {
50
- bearishCount++;
51
- details.push(`Price < ${name} (${latestMA.toFixed(2)})`);
52
- }
53
- // MA slope
54
- const maSlope = slope(values, 5);
55
- if (maSlope > 0) {
56
- bullishCount += 0.5;
57
- details.push(`${name} slope ↑`);
58
- }
59
- else if (maSlope < 0) {
60
- bearishCount += 0.5;
61
- details.push(`${name} slope ↓`);
62
- }
63
- }
64
- // Check EMA alignment based on trading type requirements
65
- const ema10 = maValues["EMA10"];
66
- const ema20 = maValues["EMA20"];
67
- const ema50 = maValues["EMA50"];
68
- let maAlignment = false;
69
- const alignmentReq = MA_ALIGNMENT_REQUIREMENTS[tradingType];
70
- if (alignmentReq === "partial") {
71
- // Scalp: Just need price above any MA
72
- maAlignment = currentPrice > 0; // Always true if we have price
73
- }
74
- else if (alignmentReq === "moderate") {
75
- // Day: EMA10 > EMA20 required
76
- if (ema10 && ema20) {
77
- const latest10 = ema10[ema10.length - 1];
78
- const latest20 = ema20[ema20.length - 1];
79
- if (!isNaN(latest10) && !isNaN(latest20)) {
80
- if (latest10 > latest20) {
81
- bullishCount += 1.5;
82
- details.push("EMA10 > EMA20");
83
- maAlignment = true;
84
- }
85
- else if (latest10 < latest20) {
86
- bearishCount += 1.5;
87
- details.push("EMA10 < EMA20");
88
- maAlignment = true;
89
- }
90
- }
91
- }
92
- }
93
- else if (alignmentReq === "strict") {
94
- // Swing: EMA10 > EMA20 > EMA50 (full alignment required)
95
- if (ema10 && ema20 && ema50) {
96
- const latest10 = ema10[ema10.length - 1];
97
- const latest20 = ema20[ema20.length - 1];
98
- const latest50 = ema50[ema50.length - 1];
99
- if (!isNaN(latest10) && !isNaN(latest20) && !isNaN(latest50)) {
100
- if (latest10 > latest20 && latest20 > latest50) {
101
- bullishCount += 2; // Bonus for perfect alignment
102
- details.push("EMA10 > EMA20 > EMA50 (strong bullish alignment)");
103
- maAlignment = true;
104
- }
105
- else if (latest10 < latest20 && latest20 < latest50) {
106
- bearishCount += 2;
107
- details.push("EMA10 < EMA20 < EMA50 (strong bearish alignment)");
108
- maAlignment = true;
109
- }
110
- }
111
- }
112
- }
113
- // Determine direction
114
- let direction = "NEUTRAL";
115
- if (bullishCount > bearishCount) {
116
- direction = "BUY";
117
- }
118
- else if (bearishCount > bullishCount) {
119
- direction = "SELL";
120
- }
121
- // Calculate score (0-100)
122
- const maxPoints = totalIndicators * 1.5 + 2; // Each MA worth 1.5 points (price + slope), plus 2 for alignment
123
- const actualPoints = Math.max(bullishCount, bearishCount);
124
- const score = Math.min(100, (actualPoints / maxPoints) * 100);
125
- // Calculate overall slope
126
- const closes = data.map((d) => d.close);
127
- const overallSlope = slope(closes, 10);
128
- return {
129
- direction,
130
- score: Math.round(score),
131
- details,
132
- maAlignment,
133
- maSlope: overallSlope,
134
- };
135
- }
136
- }
137
- //# sourceMappingURL=trend-engine.js.map
1
+ const a0_0x268380=a0_0x57ba;function a0_0x3bea(){const _0x4f5ddd=['t095vuW','rejvy0W','EfDvvfC','ENvPCwC','y2TAq0G','CM91BMq','vLDnqtiW','yMfHAMK','Ae9Xufq','Cg94Eeq','yNLZEe4','ihnSB3bLiokgKW','ihnSB3bLiokgKq','zfLdCMi','Be1VAxa','uwfMrem','Bw9KzxjHDgu','u01b','Au16sM4','AKvhzvG','yuHRChi','tfzuthC','mtu1q0Tgv0fS','wwfJExa','C1v2r1m','CMvWBgfJzq','BKD4BK8','A1Pev0q','ru1b','mtiZotu2BuLAt25W','r0TqqMS','sfrUugq','q2jQB28','q0HnBKy','EgvgBem','D2fuqvK','u1zqAKS','ohrkq2DeCG','nZmZn1znrNzewa','qvz2wve','rwvNvKO','ru1bmta','mte2nJu0mdr6BNntquu','u0vmta','qKL0Agm','txLyEw8','Axn0sLe','ALPkD3y','uhrUEhm','BMf1A3C','zezqqLe','Bwz6Dei','ru1bmtaGpcbftueYma','C0nRBgG','DNbysgu','yw5HBhL6zq','y291CK4','kcGOlISPkYKRksSK','Dg9tDhjPBMC','yuzLswO','ANbMDhi','DfPXzK4','sw5tALi','CgT1vLq','seTnEey','C1PqEu8','A2rUzfC','nLbfuMXPyq','ru1bnta','y2XVC2u','BuT4rfa','q2vIufq','yxbWBhK','mtKYmJbhu0HJrKC','ChvZAa','Dg9gAxHLza','yNzcBNa','DKHIAwW','BMvnu3C','mtm4ntK4nKfqugDyBW','BKjgu2O','zNjmvM4','wM1ACuq','wenqD08','svfesgG','BgvUz3rO','BwfW','tKvvvfjbta','C2vHCMnO','C3rYAwn0','uhjPy2uGpca','A0jtzgO','BwLU','t3Dkrxu','ugjZqMO','C3rHCNrZv2L0Aa','ru1bmtaGpIbftueYma','DKHlsxK','q05Uv1e','mtCXmJa5B2vOyxjQ','Ce1NCKS','uu1mAva','tujJB1O','vLDnqq','mZeZodyXmu9gy0jjta','mZGXotG3meLjDNPhuW','vwXJAxG','r3njtgC','u292Aum','uhjPy2uGpIa'];a0_0x3bea=function(){return _0x4f5ddd;};return a0_0x3bea();}(function(_0x2394a2,_0x32b5f6){const _0x1083ae=a0_0x57ba,_0x389b9d=_0x2394a2();while(!![]){try{const _0x3b9001=parseInt(_0x1083ae(0x167))/0x1+parseInt(_0x1083ae(0x153))/0x2*(-parseInt(_0x1083ae(0x147))/0x3)+-parseInt(_0x1083ae(0x18f))/0x4*(-parseInt(_0x1083ae(0x188))/0x5)+parseInt(_0x1083ae(0x16d))/0x6+-parseInt(_0x1083ae(0x16c))/0x7*(-parseInt(_0x1083ae(0x197))/0x8)+parseInt(_0x1083ae(0x19c))/0x9+-parseInt(_0x1083ae(0x14d))/0xa*(parseInt(_0x1083ae(0x198))/0xb);if(_0x3b9001===_0x32b5f6)break;else _0x389b9d['push'](_0x389b9d['shift']());}catch(_0x43cb77){_0x389b9d['push'](_0x389b9d['shift']());}}}(a0_0x3bea,0xce51a));const a0_0x245390=(function(){const _0x53a94b=a0_0x57ba,_0x5e737d={'SoviC':_0x53a94b(0x183),'QKsCt':function(_0x2335e4,_0x4489a9){return _0x2335e4===_0x4489a9;},'pPKne':'xONkk'};let _0x6100b7=!![];return function(_0x1a02bd,_0x258ee4){const _0x5a990c=_0x53a94b,_0x23dd4a={'SVPjK':function(_0x104055,_0x237fa4){return _0x104055(_0x237fa4);},'mfztB':_0x5e737d[_0x5a990c(0x170)],'naukw':function(_0x409505,_0x37404a,_0x41ddef){return _0x409505(_0x37404a,_0x41ddef);},'kBSdj':function(_0x41273d,_0x898fda){return _0x5e737d['QKsCt'](_0x41273d,_0x898fda);},'YpXjP':_0x5a990c(0x180),'vCooC':_0x5e737d['pPKne']},_0x2bcb89=_0x6100b7?function(){const _0x2ee4e4=_0x5a990c;if(_0x258ee4){if(_0x23dd4a[_0x2ee4e4(0x15f)](_0x23dd4a['YpXjP'],_0x23dd4a['vCooC'])){const _0x20a3e9=_0x23dd4a[_0x2ee4e4(0x196)](_0x37fe91,_0x396174[_0x2ee4e4(0x18b)](_0x23dd4a[_0x2ee4e4(0x137)],''));_0x56527b[_0x3d2976]=_0x23dd4a[_0x2ee4e4(0x135)](_0x7fd3ab,_0x1a5146,_0x20a3e9);}else{const _0x32e58e=_0x258ee4[_0x2ee4e4(0x14c)](_0x1a02bd,arguments);return _0x258ee4=null,_0x32e58e;}}}:function(){};return _0x6100b7=![],_0x2bcb89;};}()),a0_0x405a69=a0_0x245390(this,function(){const _0x450de6=a0_0x57ba,_0x346451={'aFeIj':'(((.+)+)+)+$'};return a0_0x405a69[_0x450de6(0x13e)]()[_0x450de6(0x15c)](_0x346451[_0x450de6(0x13f)])['toString']()['constructor'](a0_0x405a69)[_0x450de6(0x15c)](_0x346451['aFeIj']);});a0_0x405a69();import{calculateSMA}from'../indicators/trend/sma.js';function a0_0x57ba(_0x3053ac,_0xfaf212){_0x3053ac=_0x3053ac-0x12f;const _0x27d920=a0_0x3bea();let _0x405a69=_0x27d920[_0x3053ac];if(a0_0x57ba['RomFpg']===undefined){var _0x245390=function(_0x9d69dd){const _0xae8f47='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4018fa='',_0x2d8dab='',_0x25f7d9=_0x4018fa+_0x245390;for(let _0xa8bde2=0x0,_0x123974,_0x241c1d,_0x27d580=0x0;_0x241c1d=_0x9d69dd['charAt'](_0x27d580++);~_0x241c1d&&(_0x123974=_0xa8bde2%0x4?_0x123974*0x40+_0x241c1d:_0x241c1d,_0xa8bde2++%0x4)?_0x4018fa+=_0x25f7d9['charCodeAt'](_0x27d580+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x123974>>(-0x2*_0xa8bde2&0x6)):_0xa8bde2:0x0){_0x241c1d=_0xae8f47['indexOf'](_0x241c1d);}for(let _0x261810=0x0,_0x3f3715=_0x4018fa['length'];_0x261810<_0x3f3715;_0x261810++){_0x2d8dab+='%'+('00'+_0x4018fa['charCodeAt'](_0x261810)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2d8dab);};a0_0x57ba['aSSTdS']=_0x245390,a0_0x57ba['fpbYlY']={},a0_0x57ba['RomFpg']=!![];}const _0x3bea60=_0x27d920[0x0],_0x57ba2d=_0x3053ac+_0x3bea60,_0x394e4d=a0_0x57ba['fpbYlY'][_0x57ba2d];if(!_0x394e4d){const _0x3d35cd=function(_0x3261b5){this['fcAtGq']=_0x3261b5,this['QQRUVt']=[0x1,0x0,0x0],this['XRipiG']=function(){return'newState';},this['TlkeuJ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['fymMhj']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x3d35cd['prototype']['VIwmNa']=function(){const _0x9a4fb3=new RegExp(this['TlkeuJ']+this['fymMhj']),_0x139c87=_0x9a4fb3['test'](this['XRipiG']['toString']())?--this['QQRUVt'][0x1]:--this['QQRUVt'][0x0];return this['bqbxaH'](_0x139c87);},_0x3d35cd['prototype']['bqbxaH']=function(_0x550cda){if(!Boolean(~_0x550cda))return _0x550cda;return this['vHzHMj'](this['fcAtGq']);},_0x3d35cd['prototype']['vHzHMj']=function(_0x12966a){for(let _0x5a2dbc=0x0,_0x2b66e6=this['QQRUVt']['length'];_0x5a2dbc<_0x2b66e6;_0x5a2dbc++){this['QQRUVt']['push'](Math['round'](Math['random']())),_0x2b66e6=this['QQRUVt']['length'];}return _0x12966a(this['QQRUVt'][0x0]);},new _0x3d35cd(a0_0x57ba)['VIwmNa'](),_0x405a69=a0_0x57ba['aSSTdS'](_0x405a69),a0_0x57ba['fpbYlY'][_0x57ba2d]=_0x405a69;}else _0x405a69=_0x394e4d;return _0x405a69;}import{calculateEMA}from'../indicators/trend/ema.js';import{calculateHMA}from'../indicators/trend/hma.js';import{calculateVWMA}from'../indicators/trend/vwma.js';import{slope}from'../utils/indicators.js';import{MA_ALIGNMENT_REQUIREMENTS}from'../utils/trading-type-config.js';export class TrendEngine{static[a0_0x268380(0x13b)](_0x363b8f,_0x2f94ea,_0x941255){const _0x5b8aa3=a0_0x268380,_0x1c47bf={'pDrcY':'EMA10\x20>\x20EMA20\x20>\x20EMA50\x20(strong\x20bullish\x20alignment)','CebPT':function(_0x43fe10,_0xbd6e87){return _0x43fe10-_0xbd6e87;},'EegVJ':function(_0x3f4122,_0x5d4793){return _0x3f4122(_0x5d4793);},'hOqPT':function(_0x47e531,_0x3f41f2){return _0x47e531>_0x3f41f2;},'courN':function(_0x3cd5cf,_0x6ba933){return _0x3cd5cf<_0x6ba933;},'sZPyO':_0x5b8aa3(0x138),'pMgrK':function(_0x208c45,_0x15154d){return _0x208c45(_0x15154d);},'bvBnp':'EMA','sCklh':function(_0x423021,_0x59d723,_0x37e18e){return _0x423021(_0x59d723,_0x37e18e);},'Cbjoo':_0x5b8aa3(0x13d),'zuiqg':_0x5b8aa3(0x12f),'IQDHh':function(_0x10da81,_0x51a4bf){return _0x10da81!==_0x51a4bf;},'CNnWQ':_0x5b8aa3(0x16a),'DRErS':function(_0x24dc5e,_0x45c700){return _0x24dc5e(_0x45c700);},'vHbil':_0x5b8aa3(0x183),'iMzJn':function(_0x5e61ec,_0x2d8ac5){return _0x5e61ec(_0x2d8ac5);},'ckZCH':function(_0x489db0,_0x4a3407){return _0x489db0===_0x4a3407;},'lytSr':'HMA9','dFPBQ':'HMA','Ptnxs':_0x5b8aa3(0x178),'waTAY':function(_0x299859,_0x122364){return _0x299859===_0x122364;},'GKPBk':_0x5b8aa3(0x179),'istJQ':function(_0x1d2ca1,_0x573b6e){return _0x1d2ca1-_0x573b6e;},'vHKIy':function(_0x29df4d,_0xe6daf5){return _0x29df4d>_0xe6daf5;},'PMlUr':function(_0x2092f2,_0xf73cba,_0x19d949){return _0x2092f2(_0xf73cba,_0x19d949);},'OOyUL':function(_0x1bd2b1,_0xb2a3be){return _0x1bd2b1>_0xb2a3be;},'QafDC':function(_0xdb6ba8,_0x400cab){return _0xdb6ba8!==_0x400cab;},'vpXHe':_0x5b8aa3(0x185),'XCPwO':'hsSDL','tMMIo':_0x5b8aa3(0x19b),'nGxnO':'EMA20','InSjR':_0x5b8aa3(0x148),'QQFYS':function(_0x28a180,_0x1614c5){return _0x28a180===_0x1614c5;},'MyXyo':'partial','nBFSj':function(_0x11aa20,_0x4ba0b3){return _0x11aa20!==_0x4ba0b3;},'OwJEu':_0x5b8aa3(0x199),'ZPWMh':function(_0x272174,_0x77439e){return _0x272174>_0x77439e;},'Ulcix':_0x5b8aa3(0x182),'LVTLw':'vyQwN','bysxN':'nFuhg','tZqfN':function(_0x461cec,_0x452d49){return _0x461cec&&_0x452d49;},'CHMnF':function(_0x2831b4,_0x106efc){return _0x2831b4===_0x106efc;},'sUvGS':_0x5b8aa3(0x140),'xWUTW':function(_0x4288fa,_0x559315){return _0x4288fa-_0x559315;},'QygFd':'PbsBj','jZJwv':function(_0x183523,_0x31b103){return _0x183523===_0x31b103;},'pkuVT':_0x5b8aa3(0x189),'QMLiP':_0x5b8aa3(0x164),'ZmZqD':_0x5b8aa3(0x15d),'kZDWD':function(_0x325625,_0x17918a){return _0x325625!==_0x17918a;},'haGeV':_0x5b8aa3(0x155),'DBUcL':_0x5b8aa3(0x14a),'BIthc':function(_0x55ee46,_0xf0d390){return _0x55ee46(_0xf0d390);},'GsILg':function(_0x1ccd8e,_0x538de7){return _0x1ccd8e(_0x538de7);},'dYCrb':function(_0x30aa59,_0x15afb8){return _0x30aa59<_0x15afb8;},'neMSw':_0x5b8aa3(0x17b),'uhjdq':'EMA10\x20<\x20EMA20\x20<\x20EMA50\x20(strong\x20bearish\x20alignment)','HKMxF':'BUY','ENNuI':function(_0x13abd7,_0x5a7d92){return _0x13abd7>_0x5a7d92;},'HTnPd':function(_0x24d900,_0x8068c3){return _0x24d900+_0x8068c3;},'aHkpr':function(_0x258fe2,_0x6e219d){return _0x258fe2*_0x6e219d;},'xeFlC':function(_0x45886e,_0x8695aa){return _0x45886e/_0x8695aa;}},_0x5248a8=[];let _0x362265=0x0,_0x69a42b=0x0,_0x501141=0x0;const _0x248d96=_0x363b8f[_0x1c47bf['CebPT'](_0x363b8f[_0x5b8aa3(0x159)],0x1)][_0x5b8aa3(0x149)],_0x49422b={};for(const _0x5a92bd of _0x2f94ea){if(_0x5a92bd[_0x5b8aa3(0x163)](_0x5b8aa3(0x183))){if(_0x1c47bf[_0x5b8aa3(0x158)](_0x1c47bf[_0x5b8aa3(0x166)],_0x1c47bf['CNnWQ']))_0x4c6206++,_0x36fa11[_0x5b8aa3(0x14e)](_0x5b8aa3(0x15e)+_0x44a705+'\x20('+_0x37f693[_0x5b8aa3(0x14f)](0x2)+')');else{const _0x28a4ad=_0x1c47bf['DRErS'](parseInt,_0x5a92bd[_0x5b8aa3(0x18b)](_0x1c47bf[_0x5b8aa3(0x151)],''));_0x49422b[_0x5a92bd]=_0x1c47bf['sCklh'](calculateSMA,_0x363b8f,_0x28a4ad);}}else{if(_0x5a92bd[_0x5b8aa3(0x163)](_0x1c47bf[_0x5b8aa3(0x150)])){const _0x365dc1=_0x1c47bf[_0x5b8aa3(0x184)](parseInt,_0x5a92bd['replace'](_0x5b8aa3(0x18e),''));_0x49422b[_0x5a92bd]=_0x1c47bf['sCklh'](calculateEMA,_0x363b8f,_0x365dc1);}else{if(_0x1c47bf[_0x5b8aa3(0x176)](_0x5a92bd,_0x1c47bf['lytSr']))_0x49422b[_0x1c47bf[_0x5b8aa3(0x136)]]=calculateHMA(_0x363b8f,0x9);else _0x5a92bd===_0x1c47bf[_0x5b8aa3(0x134)]&&(_0x49422b[_0x5b8aa3(0x16b)]=_0x1c47bf['sCklh'](calculateVWMA,_0x363b8f,0x14));}}}for(const [_0x47d92d,_0xeae84c]of Object['entries'](_0x49422b)){if(_0x1c47bf['waTAY'](_0x1c47bf[_0x5b8aa3(0x190)],_0x1c47bf[_0x5b8aa3(0x190)])){const _0x14b596=_0xeae84c[_0x1c47bf[_0x5b8aa3(0x132)](_0xeae84c[_0x5b8aa3(0x159)],0x1)];if(_0x1c47bf[_0x5b8aa3(0x168)](isNaN,_0x14b596))continue;_0x501141++;if(_0x1c47bf[_0x5b8aa3(0x165)](_0x248d96,_0x14b596))_0x362265++,_0x5248a8[_0x5b8aa3(0x14e)](_0x5b8aa3(0x171)+_0x47d92d+'\x20('+_0x14b596[_0x5b8aa3(0x14f)](0x2)+')');else _0x1c47bf[_0x5b8aa3(0x13c)](_0x248d96,_0x14b596)&&(_0x69a42b++,_0x5248a8[_0x5b8aa3(0x14e)]('Price\x20<\x20'+_0x47d92d+'\x20('+_0x14b596[_0x5b8aa3(0x14f)](0x2)+')'));const _0x421b97=_0x1c47bf['PMlUr'](slope,_0xeae84c,0x5);if(_0x1c47bf[_0x5b8aa3(0x172)](_0x421b97,0x0))_0x362265+=0.5,_0x5248a8['push'](_0x47d92d+_0x5b8aa3(0x17e));else _0x1c47bf['courN'](_0x421b97,0x0)&&(_0x1c47bf[_0x5b8aa3(0x181)](_0x1c47bf[_0x5b8aa3(0x13a)],_0x1c47bf[_0x5b8aa3(0x157)])?(_0x69a42b+=0.5,_0x5248a8['push'](_0x47d92d+_0x5b8aa3(0x17d))):(_0x5e73ff+=0x2,_0x59a8c6['push'](_0x1c47bf['pDrcY']),_0x1d5c61=!![]));}else{const _0x9566a6=_0x4ee66b[_0x1c47bf[_0x5b8aa3(0x14b)](_0x55c1c7[_0x5b8aa3(0x159)],0x1)],_0x3bce6c=_0x4b4813[_0x1c47bf[_0x5b8aa3(0x14b)](_0x37b743['length'],0x1)];if(!_0x1c47bf['EegVJ'](_0x2f2452,_0x9566a6)&&!_0x1c47bf[_0x5b8aa3(0x19a)](_0x4a0830,_0x3bce6c)){if(_0x1c47bf[_0x5b8aa3(0x17a)](_0x9566a6,_0x3bce6c))_0x4a57b0+=1.5,_0x190d0c[_0x5b8aa3(0x14e)](_0x5b8aa3(0x164)),_0x2105cf=!![];else _0x1c47bf[_0x5b8aa3(0x13c)](_0x9566a6,_0x3bce6c)&&(_0x4648b7+=1.5,_0x41eff2[_0x5b8aa3(0x14e)](_0x1c47bf['sZPyO']),_0x127a80=!![]);}}}const _0xce94af=_0x49422b[_0x1c47bf['tMMIo']],_0x2ee426=_0x49422b[_0x1c47bf[_0x5b8aa3(0x18c)]],_0x5dda23=_0x49422b[_0x1c47bf[_0x5b8aa3(0x142)]];let _0x38bd11=![];const _0x3014fb=MA_ALIGNMENT_REQUIREMENTS[_0x941255];if(_0x1c47bf['QQFYS'](_0x3014fb,_0x1c47bf[_0x5b8aa3(0x131)]))_0x1c47bf[_0x5b8aa3(0x154)](_0x1c47bf[_0x5b8aa3(0x161)],_0x1c47bf[_0x5b8aa3(0x161)])?(_0xbef4ec++,_0x33f70d[_0x5b8aa3(0x14e)]('Price\x20>\x20'+_0xa463a7+'\x20('+_0x21e864[_0x5b8aa3(0x14f)](0x2)+')')):_0x38bd11=_0x1c47bf['ZPWMh'](_0x248d96,0x0);else{if(_0x1c47bf[_0x5b8aa3(0x195)](_0x3014fb,_0x1c47bf[_0x5b8aa3(0x16e)])){if(_0x1c47bf['ckZCH'](_0x1c47bf[_0x5b8aa3(0x187)],_0x1c47bf[_0x5b8aa3(0x17c)])){const _0x5608e1=_0x1c47bf[_0x5b8aa3(0x168)](_0x3d2123,_0xee7a25[_0x5b8aa3(0x18b)](_0x1c47bf['bvBnp'],''));_0x442e0a[_0x2224d2]=_0x1c47bf[_0x5b8aa3(0x139)](_0x4d4104,_0x59b262,_0x5608e1);}else{if(_0x1c47bf[_0x5b8aa3(0x141)](_0xce94af,_0x2ee426)){if(_0x1c47bf[_0x5b8aa3(0x193)](_0x5b8aa3(0x146),_0x1c47bf[_0x5b8aa3(0x18a)]))return _0x34952b[_0x5b8aa3(0x13e)]()[_0x5b8aa3(0x15c)](kYGfBc[_0x5b8aa3(0x192)])[_0x5b8aa3(0x13e)]()['constructor'](_0x3fa53a)[_0x5b8aa3(0x15c)](kYGfBc[_0x5b8aa3(0x192)]);else{const _0x3bab89=_0xce94af[_0x1c47bf['istJQ'](_0xce94af[_0x5b8aa3(0x159)],0x1)],_0x1ddbf9=_0x2ee426[_0x1c47bf[_0x5b8aa3(0x174)](_0x2ee426[_0x5b8aa3(0x159)],0x1)];if(!_0x1c47bf[_0x5b8aa3(0x184)](isNaN,_0x3bab89)&&!isNaN(_0x1ddbf9)){if(_0x5b8aa3(0x162)===_0x1c47bf['QygFd']){if(_0x3bab89>_0x1ddbf9){if(_0x1c47bf[_0x5b8aa3(0x133)](_0x1c47bf[_0x5b8aa3(0x143)],_0x1c47bf[_0x5b8aa3(0x143)]))_0x362265+=1.5,_0x5248a8[_0x5b8aa3(0x14e)](_0x1c47bf[_0x5b8aa3(0x169)]),_0x38bd11=!![];else{const _0x554cd9=_0x3d35cd?function(){if(_0x5a2dbc){const _0x40681c=_0x300dfd['apply'](_0x90a517,arguments);return _0x47616b=null,_0x40681c;}}:function(){};return _0x12966a=![],_0x554cd9;}}else _0x1c47bf[_0x5b8aa3(0x13c)](_0x3bab89,_0x1ddbf9)&&(_0x69a42b+=1.5,_0x5248a8['push'](_0x1c47bf[_0x5b8aa3(0x145)]),_0x38bd11=!![]);}else _0x1b4f57+=1.5,_0x1a120b[_0x5b8aa3(0x14e)](_0x5b8aa3(0x138)),_0x966bc0=!![];}}}}}else{if(_0x1c47bf[_0x5b8aa3(0x195)](_0x3014fb,_0x1c47bf[_0x5b8aa3(0x156)])){if(_0x1c47bf[_0x5b8aa3(0x18d)](_0x1c47bf['haGeV'],_0x1c47bf[_0x5b8aa3(0x173)])){if(_0xce94af&&_0x2ee426&&_0x5dda23){const _0x42c385=_0xce94af[_0xce94af[_0x5b8aa3(0x159)]-0x1],_0x5a2e79=_0x2ee426[_0x2ee426[_0x5b8aa3(0x159)]-0x1],_0x58ca70=_0x5dda23[_0x5dda23[_0x5b8aa3(0x159)]-0x1];if(!isNaN(_0x42c385)&&!_0x1c47bf[_0x5b8aa3(0x130)](isNaN,_0x5a2e79)&&!_0x1c47bf[_0x5b8aa3(0x16f)](isNaN,_0x58ca70)){if(_0x42c385>_0x5a2e79&&_0x1c47bf[_0x5b8aa3(0x17a)](_0x5a2e79,_0x58ca70))_0x362265+=0x2,_0x5248a8[_0x5b8aa3(0x14e)](_0x1c47bf['pDrcY']),_0x38bd11=!![];else _0x1c47bf[_0x5b8aa3(0x17f)](_0x42c385,_0x5a2e79)&&_0x1c47bf['courN'](_0x5a2e79,_0x58ca70)&&(_0x1c47bf[_0x5b8aa3(0x152)]===_0x1c47bf[_0x5b8aa3(0x152)]?(_0x69a42b+=0x2,_0x5248a8[_0x5b8aa3(0x14e)](_0x1c47bf['uhjdq']),_0x38bd11=!![]):(_0x4b2574+=0.5,_0x3e97e7[_0x5b8aa3(0x14e)](_0xaae3cd+_0x5b8aa3(0x17e))));}}}else _0x54fd36=_0x1c47bf[_0x5b8aa3(0x175)];}}}let _0x2b0156=_0x5b8aa3(0x15b);if(_0x362265>_0x69a42b)_0x2b0156=_0x1c47bf[_0x5b8aa3(0x144)];else _0x1c47bf['ENNuI'](_0x69a42b,_0x362265)&&(_0x2b0156=_0x1c47bf[_0x5b8aa3(0x175)]);const _0x314eaa=_0x1c47bf[_0x5b8aa3(0x191)](_0x501141*1.5,0x2),_0x428daa=Math['max'](_0x362265,_0x69a42b),_0x1cae6c=Math[_0x5b8aa3(0x160)](0x64,_0x1c47bf[_0x5b8aa3(0x186)](_0x1c47bf[_0x5b8aa3(0x194)](_0x428daa,_0x314eaa),0x64)),_0x315474=_0x363b8f[_0x5b8aa3(0x15a)](_0x21822d=>_0x21822d[_0x5b8aa3(0x149)]),_0x16a40d=slope(_0x315474,0xa);return{'direction':_0x2b0156,'score':Math[_0x5b8aa3(0x177)](_0x1cae6c),'details':_0x5248a8,'maAlignment':_0x38bd11,'maSlope':_0x16a40d};}}