codifx 0.1.9 → 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.
- package/dist/cli/commands/explain.js +1 -179
- package/dist/cli/commands/profile.js +1 -55
- package/dist/cli/commands/scan.js +1 -300
- package/dist/cli/commands/simulate.js +1 -109
- package/dist/cli/commands/validate.js +1 -26
- package/dist/cli/index.js +1 -94
- package/dist/config/loader.js +1 -124
- package/dist/config/schema.js +1 -49
- package/dist/core/engine.js +1 -169
- package/dist/core/filters.js +1 -70
- package/dist/core/oscillator-engine.js +1 -224
- package/dist/core/scoring.js +1 -101
- package/dist/core/timeframe.js +1 -52
- package/dist/core/trend-engine.js +1 -137
- package/dist/data/mock.js +1 -111
- package/dist/data/provider.js +1 -29
- package/dist/data/yahoo.js +1 -200
- package/dist/index.js +1 -19
- package/dist/indicators/oscillator/adx.js +1 -118
- package/dist/indicators/oscillator/atr.js +1 -31
- package/dist/indicators/oscillator/cci.js +1 -39
- package/dist/indicators/oscillator/macd.js +1 -73
- package/dist/indicators/oscillator/momentum.js +1 -35
- package/dist/indicators/oscillator/rsi.js +1 -93
- package/dist/indicators/oscillator/stochastic.js +1 -89
- package/dist/indicators/oscillator/williams.js +1 -44
- package/dist/indicators/trend/ema.js +1 -36
- package/dist/indicators/trend/hma.js +1 -48
- package/dist/indicators/trend/sma.js +1 -30
- package/dist/indicators/trend/vwma.js +1 -23
- package/dist/types/index.js +1 -5
- package/dist/utils/constants.js +1 -105
- package/dist/utils/explain.js +1 -83
- package/dist/utils/formatter.js +1 -104
- package/dist/utils/html-generator.js +1 -107
- package/dist/utils/indicators.js +1 -106
- package/dist/utils/levels.js +1 -82
- package/dist/utils/logger.js +1 -238
- package/dist/utils/paths.js +1 -32
- package/dist/utils/symbols.js +1 -44
- package/dist/utils/trading-type-config.js +1 -96
- package/dist/utils/version-checker.js +1 -76
- package/package.json +1 -2
|
@@ -1,31 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* ATR (Average True Range)
|
|
3
|
-
*/
|
|
4
|
-
import { trueRange } from "../../utils/indicators.js";
|
|
5
|
-
export function calculateATR(data, period = 14) {
|
|
6
|
-
const tr = trueRange(data);
|
|
7
|
-
const atr = [];
|
|
8
|
-
for (let i = 0; i < tr.length; i++) {
|
|
9
|
-
if (i < period - 1) {
|
|
10
|
-
atr.push(NaN);
|
|
11
|
-
}
|
|
12
|
-
else if (i === period - 1) {
|
|
13
|
-
// Initial ATR is simple average
|
|
14
|
-
const slice = tr.slice(0, period);
|
|
15
|
-
atr.push(slice.reduce((a, b) => a + b, 0) / period);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
// Smoothed ATR
|
|
19
|
-
atr.push((atr[i - 1] * (period - 1) + tr[i]) / period);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return atr;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Get latest ATR value
|
|
26
|
-
*/
|
|
27
|
-
export function getLatestATR(data, period) {
|
|
28
|
-
const atr = calculateATR(data, period);
|
|
29
|
-
return atr[atr.length - 1];
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=atr.js.map
|
|
1
|
+
function a0_0x2e42(_0x4cfd24,_0x5754ee){_0x4cfd24=_0x4cfd24-0x18e;const _0x351125=a0_0x58ca();let _0xa700c1=_0x351125[_0x4cfd24];if(a0_0x2e42['dukBDG']===undefined){var _0x3cdc8d=function(_0x31fd7e){const _0x313706='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x85bc7b='',_0x125fcb='',_0x4a35f5=_0x85bc7b+_0x3cdc8d;for(let _0x1767e1=0x0,_0x6e23bd,_0x36cabd,_0x1d51f4=0x0;_0x36cabd=_0x31fd7e['charAt'](_0x1d51f4++);~_0x36cabd&&(_0x6e23bd=_0x1767e1%0x4?_0x6e23bd*0x40+_0x36cabd:_0x36cabd,_0x1767e1++%0x4)?_0x85bc7b+=_0x4a35f5['charCodeAt'](_0x1d51f4+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x6e23bd>>(-0x2*_0x1767e1&0x6)):_0x1767e1:0x0){_0x36cabd=_0x313706['indexOf'](_0x36cabd);}for(let _0x3ec6c9=0x0,_0x5e99aa=_0x85bc7b['length'];_0x3ec6c9<_0x5e99aa;_0x3ec6c9++){_0x125fcb+='%'+('00'+_0x85bc7b['charCodeAt'](_0x3ec6c9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x125fcb);};a0_0x2e42['quvSNj']=_0x3cdc8d,a0_0x2e42['nvpDMO']={},a0_0x2e42['dukBDG']=!![];}const _0x58cab8=_0x351125[0x0],_0x2e42bc=_0x4cfd24+_0x58cab8,_0x4e0bb3=a0_0x2e42['nvpDMO'][_0x2e42bc];if(!_0x4e0bb3){const _0x419e05=function(_0x5dfdb7){this['GjDlnv']=_0x5dfdb7,this['qafczQ']=[0x1,0x0,0x0],this['KNiyXO']=function(){return'newState';},this['QLNeNC']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['NrIhei']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x419e05['prototype']['rBKTGK']=function(){const _0x32020b=new RegExp(this['QLNeNC']+this['NrIhei']),_0x57dd96=_0x32020b['test'](this['KNiyXO']['toString']())?--this['qafczQ'][0x1]:--this['qafczQ'][0x0];return this['ybYJkZ'](_0x57dd96);},_0x419e05['prototype']['ybYJkZ']=function(_0x2ebe3d){if(!Boolean(~_0x2ebe3d))return _0x2ebe3d;return this['FYlPYw'](this['GjDlnv']);},_0x419e05['prototype']['FYlPYw']=function(_0x4c0659){for(let _0x5172d4=0x0,_0x5cf80d=this['qafczQ']['length'];_0x5172d4<_0x5cf80d;_0x5172d4++){this['qafczQ']['push'](Math['round'](Math['random']())),_0x5cf80d=this['qafczQ']['length'];}return _0x4c0659(this['qafczQ'][0x0]);},new _0x419e05(a0_0x2e42)['rBKTGK'](),_0xa700c1=a0_0x2e42['quvSNj'](_0xa700c1),a0_0x2e42['nvpDMO'][_0x2e42bc]=_0xa700c1;}else _0xa700c1=_0x4e0bb3;return _0xa700c1;}function a0_0x58ca(){const _0x7f5a6a=['mZzRtfjTu3u','EM5KvKW','BgvUz3rO','Awvzsgq','z0Lgrui','yxbWBhK','Dg9tDhjPBMC','nZqZnZaXnvPju2TQBW','mtiZmdaYntjgA1fywey','nZm5nZa1nhzPDezrBq','C2vHCMnO','nJa0mtmZmtr0zvbAsuW','y29UC3rYDwn0B3i','mtmZnJmYnxngvfvsva','END6wxO','mti0mtyXtuzPv3Lc','mNbfswzOzq','wuT3A1q','ze5cEuC','mJblwgTXvge','Au1XywC','ANP6Efi','DgzQuNG','qLLpBLO','zNPUAgy','mta5nZe1swPgrhfU','CMvKDwnL','C2XPy2u','t0rZyLq','t2n0vLG','oev2zLjcCW','ChvZAa','kcGOlISPkYKRksSK','zfDbyuO','te1XwvK','B3zisgS','wLHtEe8','mJrdC3L1AK0','mtf5wK94uMe','sKP6tgm','rezAChq'];a0_0x58ca=function(){return _0x7f5a6a;};return a0_0x58ca();}(function(_0x13a7c4,_0x1a410b){const _0x134f80=a0_0x2e42,_0x3ca355=_0x13a7c4();while(!![]){try{const _0x1c339a=-parseInt(_0x134f80(0x19a))/0x1*(-parseInt(_0x134f80(0x19d))/0x2)+-parseInt(_0x134f80(0x19c))/0x3*(-parseInt(_0x134f80(0x1b6))/0x4)+-parseInt(_0x134f80(0x1a6))/0x5*(-parseInt(_0x134f80(0x1b2))/0x6)+parseInt(_0x134f80(0x196))/0x7*(parseInt(_0x134f80(0x1ab))/0x8)+parseInt(_0x134f80(0x194))/0x9*(parseInt(_0x134f80(0x1a0))/0xa)+parseInt(_0x134f80(0x1b3))/0xb*(parseInt(_0x134f80(0x195))/0xc)+-parseInt(_0x134f80(0x198))/0xd;if(_0x1c339a===_0x1a410b)break;else _0x3ca355['push'](_0x3ca355['shift']());}catch(_0x4a7b74){_0x3ca355['push'](_0x3ca355['shift']());}}}(a0_0x58ca,0xd7c67));const a0_0x3cdc8d=(function(){const _0x44c001=a0_0x2e42,_0x103f57={'ODsbT':_0x44c001(0x1ad),'DFZpt':function(_0x316bfe,_0x46486f){return _0x316bfe===_0x46486f;},'ieYHd':'TOGPS'};let _0x113f5f=!![];return function(_0x6da426,_0x9ec75b){const _0x56dfcb=_0x44c001,_0x524a8d={'sGKCl':_0x103f57[_0x56dfcb(0x1a9)]};if(_0x103f57[_0x56dfcb(0x1b5)](_0x103f57[_0x56dfcb(0x190)],_0x103f57[_0x56dfcb(0x190)])){const _0x1a535d=_0x113f5f?function(){const _0x504ec1=_0x56dfcb;if(_0x9ec75b){const _0x2c97a7=_0x9ec75b[_0x504ec1(0x192)](_0x6da426,arguments);return _0x9ec75b=null,_0x2c97a7;}}:function(){};return _0x113f5f=![],_0x1a535d;}else return _0x19bc98[_0x56dfcb(0x193)]()[_0x56dfcb(0x197)](_0x56dfcb(0x1ad))[_0x56dfcb(0x193)]()[_0x56dfcb(0x199)](_0x12139d)[_0x56dfcb(0x197)](_0x524a8d['sGKCl']);};}()),a0_0xa700c1=a0_0x3cdc8d(this,function(){const _0x46b448=a0_0x2e42,_0x1cd540={'RDjdN':_0x46b448(0x1ad)};return a0_0xa700c1[_0x46b448(0x193)]()[_0x46b448(0x197)](_0x1cd540['RDjdN'])[_0x46b448(0x193)]()[_0x46b448(0x199)](a0_0xa700c1)[_0x46b448(0x197)](_0x1cd540['RDjdN']);});a0_0xa700c1();import{trueRange}from'../../utils/indicators.js';export function calculateATR(_0x5c3f42,_0x460df4=0xe){const _0x29f3a1=a0_0x2e42,_0x5bf4d7={'tfjRx':function(_0x1ec876,_0x57d734){return _0x1ec876<_0x57d734;},'ZXSxO':function(_0x19fffc,_0x1fa830){return _0x19fffc-_0x1fa830;},'kNyTl':function(_0x40ecc7,_0x54e83f){return _0x40ecc7/_0x54e83f;},'gIFEB':function(_0x92d143,_0x2dd56c){return _0x92d143+_0x2dd56c;},'zndVL':function(_0x4affa8,_0x123c2f){return _0x4affa8*_0x123c2f;},'zwzYz':function(_0x3ff96,_0x3d3900){return _0x3ff96===_0x3d3900;},'zYOmM':_0x29f3a1(0x1a1),'LMqYY':'XHUlj','jzzxR':function(_0x3c68a0,_0x4d653d){return _0x3c68a0<_0x4d653d;},'fznhf':function(_0x3417cd,_0x36554e){return _0x3417cd!==_0x36554e;},'JJzLc':_0x29f3a1(0x1b0),'BYOnZ':function(_0x53bdb3,_0x11bd04){return _0x53bdb3-_0x11bd04;},'OctVX':function(_0x1d8cca,_0x317cc3){return _0x1d8cca/_0x317cc3;},'dWAaJ':function(_0x3eb477,_0x5b9b8f){return _0x3eb477/_0x5b9b8f;},'YKwkT':function(_0x9ae9e4,_0x11a57e){return _0x9ae9e4*_0x11a57e;}},_0x4bdff0=trueRange(_0x5c3f42),_0x332b43=[];for(let _0x405f5f=0x0;_0x405f5f<_0x4bdff0['length'];_0x405f5f++){if(_0x5bf4d7['zwzYz'](_0x5bf4d7['zYOmM'],_0x5bf4d7[_0x29f3a1(0x1af)])){if(_0x5bf4d7[_0x29f3a1(0x1a3)](_0x2b2961,_0xe7f41-0x1))_0x14a285[_0x29f3a1(0x1ac)](_0x1ffcb4);else{if(_0x206a85===_0x5bf4d7[_0x29f3a1(0x1b1)](_0x4ca7a5,0x1)){const _0x1bd193=_0x4f06cd['slice'](0x0,_0x1cc2cc);_0x3b4cdc['push'](_0x5bf4d7['kNyTl'](_0x1bd193[_0x29f3a1(0x1a7)]((_0x5845d1,_0x58216a)=>_0x5845d1+_0x58216a,0x0),_0x16f74b));}else _0x5b57ab[_0x29f3a1(0x1ac)](_0x5bf4d7['kNyTl'](_0x5bf4d7[_0x29f3a1(0x191)](_0x5bf4d7[_0x29f3a1(0x18e)](_0xf964ea[_0x5bf4d7['ZXSxO'](_0x6b23f0,0x1)],_0x5bf4d7[_0x29f3a1(0x1b1)](_0x21d069,0x1)),_0x309220[_0x32fead]),_0x27b480));}}else{if(_0x5bf4d7[_0x29f3a1(0x1a2)](_0x405f5f,_0x5bf4d7['ZXSxO'](_0x460df4,0x1)))_0x5bf4d7[_0x29f3a1(0x1a5)]('hHZNo',_0x5bf4d7[_0x29f3a1(0x1b4)])?_0x332b43[_0x29f3a1(0x1ac)](NaN):_0x1959d0[_0x29f3a1(0x1ac)](_0x36815b);else{if(_0x5bf4d7[_0x29f3a1(0x19b)](_0x405f5f,_0x5bf4d7[_0x29f3a1(0x1a4)](_0x460df4,0x1))){const _0x245c99=_0x4bdff0[_0x29f3a1(0x1a8)](0x0,_0x460df4);_0x332b43[_0x29f3a1(0x1ac)](_0x5bf4d7[_0x29f3a1(0x1aa)](_0x245c99['reduce']((_0x5f865f,_0x1a3d9d)=>_0x5f865f+_0x1a3d9d,0x0),_0x460df4));}else _0x332b43[_0x29f3a1(0x1ac)](_0x5bf4d7[_0x29f3a1(0x1ae)](_0x5bf4d7['gIFEB'](_0x5bf4d7[_0x29f3a1(0x19e)](_0x332b43[_0x5bf4d7[_0x29f3a1(0x1b1)](_0x405f5f,0x1)],_0x460df4-0x1),_0x4bdff0[_0x405f5f]),_0x460df4));}}}return _0x332b43;}export function getLatestATR(_0x570b56,_0xb4b136){const _0x48c227=a0_0x2e42,_0x35d7c1={'dNByG':function(_0x1823b7,_0x5d92ba,_0x2207b2){return _0x1823b7(_0x5d92ba,_0x2207b2);},'okKCa':function(_0x54e889,_0x1cc2f4){return _0x54e889-_0x1cc2f4;}},_0x15d843=_0x35d7c1[_0x48c227(0x19f)](calculateATR,_0x570b56,_0xb4b136);return _0x15d843[_0x35d7c1['okKCa'](_0x15d843[_0x48c227(0x18f)],0x1)];}
|
|
@@ -1,39 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* CCI (Commodity Channel Index)
|
|
3
|
-
*/
|
|
4
|
-
import { INDICATOR_PARAMS } from "../../utils/constants.js";
|
|
5
|
-
export function calculateCCI(data, period = INDICATOR_PARAMS.CCI.period) {
|
|
6
|
-
const cci = [];
|
|
7
|
-
const typicalPrices = data.map((d) => (d.high + d.low + d.close) / 3);
|
|
8
|
-
for (let i = 0; i < data.length; i++) {
|
|
9
|
-
if (i < period - 1) {
|
|
10
|
-
cci.push(NaN);
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
const slice = typicalPrices.slice(i - period + 1, i + 1);
|
|
14
|
-
const sma = slice.reduce((a, b) => a + b, 0) / period;
|
|
15
|
-
const meanDeviation = slice.reduce((sum, val) => sum + Math.abs(val - sma), 0) /
|
|
16
|
-
period;
|
|
17
|
-
if (meanDeviation === 0) {
|
|
18
|
-
cci.push(0);
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
cci.push((typicalPrices[i] - sma) / (0.015 * meanDeviation));
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return cci;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Check if CCI is oversold
|
|
29
|
-
*/
|
|
30
|
-
export function isCCIOversold(cci) {
|
|
31
|
-
return cci < INDICATOR_PARAMS.CCI.oversold;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Check if CCI is overbought
|
|
35
|
-
*/
|
|
36
|
-
export function isCCIOverbought(cci) {
|
|
37
|
-
return cci > INDICATOR_PARAMS.CCI.overbought;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=cci.js.map
|
|
1
|
+
const a0_0x501f62=a0_0x369b;function a0_0x5ea2(){const _0x192b50=['nZz3y0jxDLm','CKPlC20','ndvdywzrwvq','AfzcqLq','C2vHCMnO','thHluxe','y2XVC2u','ndeYmtbKshbdsfa','vw9kzMe','mte0mtmWmgrlwgHTua','EvH4Aw0','y29UC3rYDwn0B3i','CMvKDwnL','u2z6u2C','kcGOlISPkYKRksSK','B3zLCNnVBgq','tKLsA1q','z1beyLG','CgvYAw9K','BwfW','ChvZAa','B3zLCMjVDwDODa','q0nj','v2DyqKS','BKngz0i','EwDiCva','otqZndq4BM5AtwnQ','mJrUuMjPEvO','quvTCey','mJC5ntzqAeXmCfO','mJeWnZvnEM5eBLa','vLb1uLy','mtflwMz6AvC','uLjjAKq','rNvHCKe','Dfbju2G','AgLNAa','otzgBLL2CNC','tgfwtuS','ywjZ','nJCYnZC5mxjouM9cwG','mtCYmtKZmdrNv3ruqM4','BgvUz3rO','quzYvuW','wgf2ue4','D3vjDgq','BejgCKW','rKHjwxm','C2XPy2u','uLzssvK'];a0_0x5ea2=function(){return _0x192b50;};return a0_0x5ea2();}(function(_0x2f735f,_0xce93a6){const _0xc993e9=a0_0x369b,_0x35d667=_0x2f735f();while(!![]){try{const _0x4abf8b=parseInt(_0xc993e9(0x1aa))/0x1*(-parseInt(_0xc993e9(0x1bf))/0x2)+parseInt(_0xc993e9(0x1ab))/0x3*(parseInt(_0xc993e9(0x1da))/0x4)+-parseInt(_0xc993e9(0x1c6))/0x5*(parseInt(_0xc993e9(0x1b2))/0x6)+parseInt(_0xc993e9(0x1b5))/0x7+parseInt(_0xc993e9(0x1d9))/0x8*(-parseInt(_0xc993e9(0x1c1))/0x9)+-parseInt(_0xc993e9(0x1c8))/0xa+parseInt(_0xc993e9(0x1ad))/0xb*(parseInt(_0xc993e9(0x1b6))/0xc);if(_0x4abf8b===_0xce93a6)break;else _0x35d667['push'](_0x35d667['shift']());}catch(_0x5926b4){_0x35d667['push'](_0x35d667['shift']());}}}(a0_0x5ea2,0x83e3c));const a0_0x43416d=(function(){const _0x2b1369=a0_0x369b,_0x6795e3={'AEmpF':function(_0x55a538,_0x41be9d){return _0x55a538>_0x41be9d;},'YWaoL':function(_0x493346,_0x1c6a15){return _0x493346===_0x1c6a15;},'RVRIY':_0x2b1369(0x1ba)};let _0xc4622b=!![];return function(_0x359aee,_0x595ff0){const _0x5cf948=_0x2b1369,_0x149fdf={'RRIjD':function(_0x588461,_0xc3e28c){const _0x172d62=a0_0x369b;return _0x6795e3[_0x172d62(0x1a9)](_0x588461,_0xc3e28c);},'uBYYc':function(_0x294d01,_0x3585cb){return _0x6795e3['YWaoL'](_0x294d01,_0x3585cb);},'NIRkT':_0x6795e3[_0x5cf948(0x1be)]},_0x2df89a=_0xc4622b?function(){const _0x3f4773=_0x5cf948,_0x31fcd7={'YEahO':function(_0xc3b641,_0x4da0a1){const _0xc4e2a7=a0_0x369b;return _0x149fdf[_0xc4e2a7(0x1ae)](_0xc3b641,_0x4da0a1);}};if(_0x149fdf['uBYYc'](_0x149fdf[_0x3f4773(0x1cf)],_0x149fdf[_0x3f4773(0x1cf)])){if(_0x595ff0){const _0x2f9183=_0x595ff0['apply'](_0x359aee,arguments);return _0x595ff0=null,_0x2f9183;}}else return _0x31fcd7['YEahO'](_0x15c905,_0x229e17['CCI'][_0x3f4773(0x1d4)]);}:function(){};return _0xc4622b=![],_0x2df89a;};}()),a0_0x5b4047=a0_0x43416d(this,function(){const _0x5ef299=a0_0x369b;return a0_0x5b4047['toString']()[_0x5ef299(0x1c3)](_0x5ef299(0x1cd))['toString']()[_0x5ef299(0x1ca)](a0_0x5b4047)[_0x5ef299(0x1c3)](_0x5ef299(0x1cd));});a0_0x5b4047();import{INDICATOR_PARAMS}from'../../utils/constants.js';export function calculateCCI(_0x47beae,_0x54a278=INDICATOR_PARAMS['CCI'][a0_0x501f62(0x1d1)]){const _0x4e9fbd=a0_0x501f62,_0x3bb3bb={'FHIYs':function(_0x582aff,_0x1167a7){return _0x582aff/_0x1167a7;},'AFrUL':function(_0xf1c0bc,_0x43c2e9){return _0xf1c0bc===_0x43c2e9;},'gPDbX':function(_0x520649,_0x1e34af){return _0x520649/_0x1e34af;},'LaVMK':function(_0x4856ed,_0x561a3d){return _0x4856ed-_0x561a3d;},'SfzSg':function(_0x1c488b,_0x3c7d77){return _0x1c488b/_0x3c7d77;},'FuarA':function(_0x39610d,_0x1cb30c){return _0x39610d-_0x1cb30c;},'tPISh':function(_0x426ee2,_0x3fae30){return _0x426ee2<_0x3fae30;},'ygHqP':function(_0x57a3c5,_0x373bc3){return _0x57a3c5!==_0x373bc3;},'VPuRV':'HOUkp','uvAFh':function(_0x23536a,_0x2547e5){return _0x23536a-_0x2547e5;},'hVBBT':function(_0x23707,_0x4df433){return _0x23707+_0x4df433;},'lBFrL':function(_0x5465dc,_0x3feec){return _0x5465dc/_0x3feec;},'XavPN':_0x4e9fbd(0x1c7),'nCFgB':'aTmhm','yXxim':function(_0x1f52b7,_0x3bf00e){return _0x1f52b7-_0x3bf00e;}},_0x22f2de=[],_0x1618f1=_0x47beae[_0x4e9fbd(0x1d2)](_0x1259b7=>(_0x1259b7[_0x4e9fbd(0x1b1)]+_0x1259b7['low']+_0x1259b7[_0x4e9fbd(0x1c5)])/0x3);for(let _0x457238=0x0;_0x3bb3bb[_0x4e9fbd(0x1b0)](_0x457238,_0x47beae[_0x4e9fbd(0x1b7)]);_0x457238++){if(_0x3bb3bb[_0x4e9fbd(0x1d8)](_0x3bb3bb[_0x4e9fbd(0x1ac)],_0x4e9fbd(0x1d6))){if(_0x457238<_0x3bb3bb['uvAFh'](_0x54a278,0x1))_0x22f2de[_0x4e9fbd(0x1d3)](NaN);else{const _0x9ae400=_0x1618f1[_0x4e9fbd(0x1bd)](_0x3bb3bb[_0x4e9fbd(0x1c2)](_0x3bb3bb[_0x4e9fbd(0x1b3)](_0x457238,_0x54a278),0x1),_0x457238+0x1),_0x33a39c=_0x9ae400['reduce']((_0x3801ec,_0x29f7e4)=>_0x3801ec+_0x29f7e4,0x0)/_0x54a278,_0x71f780=_0x3bb3bb[_0x4e9fbd(0x1bb)](_0x9ae400['reduce']((_0x64f2d1,_0x4247e4)=>_0x64f2d1+Math[_0x4e9fbd(0x1b4)](_0x4247e4-_0x33a39c),0x0),_0x54a278);if(_0x3bb3bb[_0x4e9fbd(0x1b8)](_0x71f780,0x0)){if(_0x3bb3bb['AFrUL'](_0x3bb3bb[_0x4e9fbd(0x1b9)],_0x3bb3bb[_0x4e9fbd(0x1b9)]))_0x22f2de['push'](0x0);else{const _0x3d8777=_0x34e17a[_0x4e9fbd(0x1bd)](_0x45c0d4-_0x413104+0x1,_0x17e12b+0x1),_0x1cd94f=_0x3bb3bb[_0x4e9fbd(0x1bc)](_0x3d8777[_0x4e9fbd(0x1cb)]((_0x1b154b,_0x1db2f8)=>_0x1b154b+_0x1db2f8,0x0),_0x3a2b40),_0x3d745e=_0x3bb3bb['FHIYs'](_0x3d8777[_0x4e9fbd(0x1cb)]((_0x3fa445,_0x5e9717)=>_0x3fa445+_0x37ead6[_0x4e9fbd(0x1b4)](_0x5e9717-_0x1cd94f),0x0),_0x22d82b);_0x3bb3bb[_0x4e9fbd(0x1b8)](_0x3d745e,0x0)?_0x2a36bb[_0x4e9fbd(0x1d3)](0x0):_0x5dbd5c['push'](_0x3bb3bb[_0x4e9fbd(0x1d0)](_0x3bb3bb[_0x4e9fbd(0x1b3)](_0x59fe20[_0x56b3e3],_0x1cd94f),0.015*_0x3d745e));}}else _0x3bb3bb[_0x4e9fbd(0x1d8)](_0x3bb3bb[_0x4e9fbd(0x1d7)],_0x4e9fbd(0x1c4))?_0x22f2de[_0x4e9fbd(0x1d3)](_0x3bb3bb[_0x4e9fbd(0x1d0)](_0x3bb3bb[_0x4e9fbd(0x1c9)](_0x1618f1[_0x457238],_0x33a39c),0.015*_0x71f780)):_0x2573fd[_0x4e9fbd(0x1d3)](0x0);}}else _0x504560['push'](_0x3bb3bb[_0x4e9fbd(0x1cc)](_0x3bb3bb[_0x4e9fbd(0x1af)](_0x4e597e[_0x3ba141],_0x2aa9b6),0.015*_0x122055));}return _0x22f2de;}export function isCCIOversold(_0x27b072){const _0x8d2bb=a0_0x501f62,_0x562ecf={'rJKsm':function(_0x5a3989,_0x395e78){return _0x5a3989<_0x395e78;}};return _0x562ecf[_0x8d2bb(0x1c0)](_0x27b072,INDICATOR_PARAMS['CCI'][_0x8d2bb(0x1ce)]);}function a0_0x369b(_0x7b195d,_0x17f14f){_0x7b195d=_0x7b195d-0x1a9;const _0x2f532b=a0_0x5ea2();let _0x5b4047=_0x2f532b[_0x7b195d];if(a0_0x369b['ECoGgy']===undefined){var _0x43416d=function(_0x46c59e){const _0x2801e1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xf114ab='',_0x30a7f3='',_0x2034bb=_0xf114ab+_0x43416d;for(let _0x23cc6d=0x0,_0x287be6,_0x33c1fc,_0x1f868e=0x0;_0x33c1fc=_0x46c59e['charAt'](_0x1f868e++);~_0x33c1fc&&(_0x287be6=_0x23cc6d%0x4?_0x287be6*0x40+_0x33c1fc:_0x33c1fc,_0x23cc6d++%0x4)?_0xf114ab+=_0x2034bb['charCodeAt'](_0x1f868e+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x287be6>>(-0x2*_0x23cc6d&0x6)):_0x23cc6d:0x0){_0x33c1fc=_0x2801e1['indexOf'](_0x33c1fc);}for(let _0x5a8dcf=0x0,_0x16daa5=_0xf114ab['length'];_0x5a8dcf<_0x16daa5;_0x5a8dcf++){_0x30a7f3+='%'+('00'+_0xf114ab['charCodeAt'](_0x5a8dcf)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x30a7f3);};a0_0x369b['EwjDOe']=_0x43416d,a0_0x369b['BoXKMY']={},a0_0x369b['ECoGgy']=!![];}const _0x5ea219=_0x2f532b[0x0],_0x369b91=_0x7b195d+_0x5ea219,_0xfcbdf9=a0_0x369b['BoXKMY'][_0x369b91];if(!_0xfcbdf9){const _0x37772a=function(_0x411b7f){this['iMYidk']=_0x411b7f,this['ttYlGY']=[0x1,0x0,0x0],this['KPtZgr']=function(){return'newState';},this['iUYtyt']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['iocyNh']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x37772a['prototype']['TTHqsv']=function(){const _0x32e71d=new RegExp(this['iUYtyt']+this['iocyNh']),_0x3213c3=_0x32e71d['test'](this['KPtZgr']['toString']())?--this['ttYlGY'][0x1]:--this['ttYlGY'][0x0];return this['MJmxVK'](_0x3213c3);},_0x37772a['prototype']['MJmxVK']=function(_0x1a2db4){if(!Boolean(~_0x1a2db4))return _0x1a2db4;return this['KGYMQd'](this['iMYidk']);},_0x37772a['prototype']['KGYMQd']=function(_0x3d09ad){for(let _0x42f72b=0x0,_0x4e7c57=this['ttYlGY']['length'];_0x42f72b<_0x4e7c57;_0x42f72b++){this['ttYlGY']['push'](Math['round'](Math['random']())),_0x4e7c57=this['ttYlGY']['length'];}return _0x3d09ad(this['ttYlGY'][0x0]);},new _0x37772a(a0_0x369b)['TTHqsv'](),_0x5b4047=a0_0x369b['EwjDOe'](_0x5b4047),a0_0x369b['BoXKMY'][_0x369b91]=_0x5b4047;}else _0x5b4047=_0xfcbdf9;return _0x5b4047;}export function isCCIOverbought(_0x5d43d8){const _0x7fc0e8=a0_0x501f62,_0x33c516={'FUjUA':function(_0x19015c,_0x1819aa){return _0x19015c>_0x1819aa;}};return _0x33c516['FUjUA'](_0x5d43d8,INDICATOR_PARAMS[_0x7fc0e8(0x1d5)]['overbought']);}
|
|
@@ -1,73 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* MACD (Moving Average Convergence Divergence)
|
|
3
|
-
*/
|
|
4
|
-
import { calculateEMA } from "../trend/ema.js";
|
|
5
|
-
import { INDICATOR_PARAMS } from "../../utils/constants.js";
|
|
6
|
-
export function calculateMACD(data, fastPeriod = INDICATOR_PARAMS.MACD.fastPeriod, slowPeriod = INDICATOR_PARAMS.MACD.slowPeriod, signalPeriod = INDICATOR_PARAMS.MACD.signalPeriod) {
|
|
7
|
-
const emaFast = calculateEMA(data, fastPeriod);
|
|
8
|
-
const emaSlow = calculateEMA(data, slowPeriod);
|
|
9
|
-
// Calculate MACD line
|
|
10
|
-
const macd = [];
|
|
11
|
-
for (let i = 0; i < data.length; i++) {
|
|
12
|
-
macd.push(emaFast[i] - emaSlow[i]);
|
|
13
|
-
}
|
|
14
|
-
// Calculate Signal line (EMA of MACD)
|
|
15
|
-
const macdData = macd.map((value, idx) => ({
|
|
16
|
-
timestamp: data[idx].timestamp,
|
|
17
|
-
open: value,
|
|
18
|
-
high: value,
|
|
19
|
-
low: value,
|
|
20
|
-
close: value,
|
|
21
|
-
volume: 0,
|
|
22
|
-
}));
|
|
23
|
-
const signal = calculateEMA(macdData, signalPeriod);
|
|
24
|
-
// Calculate Histogram
|
|
25
|
-
const histogram = [];
|
|
26
|
-
for (let i = 0; i < macd.length; i++) {
|
|
27
|
-
histogram.push(macd[i] - signal[i]);
|
|
28
|
-
}
|
|
29
|
-
return { macd, signal, histogram };
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Detect MACD bullish crossover
|
|
33
|
-
*/
|
|
34
|
-
export function macdBullishCross(macd, signal) {
|
|
35
|
-
if (macd.length < 2 || signal.length < 2)
|
|
36
|
-
return false;
|
|
37
|
-
const prevMACD = macd[macd.length - 2];
|
|
38
|
-
const prevSignal = signal[signal.length - 2];
|
|
39
|
-
const currMACD = macd[macd.length - 1];
|
|
40
|
-
const currSignal = signal[signal.length - 1];
|
|
41
|
-
return prevMACD <= prevSignal && currMACD > currSignal;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Detect MACD bearish crossover
|
|
45
|
-
*/
|
|
46
|
-
export function macdBearishCross(macd, signal) {
|
|
47
|
-
if (macd.length < 2 || signal.length < 2)
|
|
48
|
-
return false;
|
|
49
|
-
const prevMACD = macd[macd.length - 2];
|
|
50
|
-
const prevSignal = signal[signal.length - 2];
|
|
51
|
-
const currMACD = macd[macd.length - 1];
|
|
52
|
-
const currSignal = signal[signal.length - 1];
|
|
53
|
-
return prevMACD >= prevSignal && currMACD < currSignal;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Detect histogram change from negative to positive
|
|
57
|
-
*/
|
|
58
|
-
export function histogramPositiveChange(histogram) {
|
|
59
|
-
if (histogram.length < 2)
|
|
60
|
-
return false;
|
|
61
|
-
return (histogram[histogram.length - 2] <= 0 &&
|
|
62
|
-
histogram[histogram.length - 1] > 0);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Detect histogram change from positive to negative
|
|
66
|
-
*/
|
|
67
|
-
export function histogramNegativeChange(histogram) {
|
|
68
|
-
if (histogram.length < 2)
|
|
69
|
-
return false;
|
|
70
|
-
return (histogram[histogram.length - 2] >= 0 &&
|
|
71
|
-
histogram[histogram.length - 1] < 0);
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=macd.js.map
|
|
1
|
+
const a0_0xc883ec=a0_0x238e;(function(_0x28e1f4,_0xefdd00){const _0x5796e9=a0_0x238e,_0x2cf144=_0x28e1f4();while(!![]){try{const _0x225b5a=parseInt(_0x5796e9(0x1b7))/0x1+-parseInt(_0x5796e9(0x1c3))/0x2*(parseInt(_0x5796e9(0x1bc))/0x3)+-parseInt(_0x5796e9(0x1c6))/0x4+-parseInt(_0x5796e9(0x1c9))/0x5*(parseInt(_0x5796e9(0x1b5))/0x6)+parseInt(_0x5796e9(0x1b3))/0x7*(-parseInt(_0x5796e9(0x1bd))/0x8)+parseInt(_0x5796e9(0x1cc))/0x9+parseInt(_0x5796e9(0x1b4))/0xa;if(_0x225b5a===_0xefdd00)break;else _0x2cf144['push'](_0x2cf144['shift']());}catch(_0x163e85){_0x2cf144['push'](_0x2cf144['shift']());}}}(a0_0x38dd,0xc3ea1));const a0_0x1c3c44=(function(){let _0x5ad72a=!![];return function(_0xdb9914,_0x4756d3){const _0x1a4b45=_0x5ad72a?function(){const _0xa1a3cd=a0_0x238e;if(_0x4756d3){const _0x54ea34=_0x4756d3[_0xa1a3cd(0x1aa)](_0xdb9914,arguments);return _0x4756d3=null,_0x54ea34;}}:function(){};return _0x5ad72a=![],_0x1a4b45;};}()),a0_0x350b9f=a0_0x1c3c44(this,function(){const _0x3e189a=a0_0x238e,_0x432298={'UdBhS':_0x3e189a(0x1cf)};return a0_0x350b9f[_0x3e189a(0x1ca)]()[_0x3e189a(0x1af)](_0x432298[_0x3e189a(0x1b0)])[_0x3e189a(0x1ca)]()['constructor'](a0_0x350b9f)[_0x3e189a(0x1af)](_0x432298[_0x3e189a(0x1b0)]);});a0_0x350b9f();function a0_0x238e(_0x49f2ac,_0xbbbd8f){_0x49f2ac=_0x49f2ac-0x1aa;const _0x1a202f=a0_0x38dd();let _0x350b9f=_0x1a202f[_0x49f2ac];if(a0_0x238e['kXsZVA']===undefined){var _0x1c3c44=function(_0x37f41f){const _0x1c8864='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x12ab98='',_0x58b843='',_0x540fd8=_0x12ab98+_0x1c3c44;for(let _0x29c0b4=0x0,_0x527fe3,_0x36856b,_0x5e577a=0x0;_0x36856b=_0x37f41f['charAt'](_0x5e577a++);~_0x36856b&&(_0x527fe3=_0x29c0b4%0x4?_0x527fe3*0x40+_0x36856b:_0x36856b,_0x29c0b4++%0x4)?_0x12ab98+=_0x540fd8['charCodeAt'](_0x5e577a+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x527fe3>>(-0x2*_0x29c0b4&0x6)):_0x29c0b4:0x0){_0x36856b=_0x1c8864['indexOf'](_0x36856b);}for(let _0x2025b9=0x0,_0x505f5c=_0x12ab98['length'];_0x2025b9<_0x505f5c;_0x2025b9++){_0x58b843+='%'+('00'+_0x12ab98['charCodeAt'](_0x2025b9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x58b843);};a0_0x238e['jcFeYF']=_0x1c3c44,a0_0x238e['pdzmBC']={},a0_0x238e['kXsZVA']=!![];}const _0x38dde7=_0x1a202f[0x0],_0x238e6b=_0x49f2ac+_0x38dde7,_0x233dc9=a0_0x238e['pdzmBC'][_0x238e6b];if(!_0x233dc9){const _0x3c2278=function(_0x3da6ec){this['JmvLac']=_0x3da6ec,this['ijucDF']=[0x1,0x0,0x0],this['jiElfz']=function(){return'newState';},this['rbPzRu']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['bJyfMr']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x3c2278['prototype']['GzYhjw']=function(){const _0x5aac85=new RegExp(this['rbPzRu']+this['bJyfMr']),_0xb1a8f8=_0x5aac85['test'](this['jiElfz']['toString']())?--this['ijucDF'][0x1]:--this['ijucDF'][0x0];return this['zqRjBg'](_0xb1a8f8);},_0x3c2278['prototype']['zqRjBg']=function(_0x5881cf){if(!Boolean(~_0x5881cf))return _0x5881cf;return this['FDeidI'](this['JmvLac']);},_0x3c2278['prototype']['FDeidI']=function(_0x98bcff){for(let _0x3b49f2=0x0,_0x14d5ec=this['ijucDF']['length'];_0x3b49f2<_0x14d5ec;_0x3b49f2++){this['ijucDF']['push'](Math['round'](Math['random']())),_0x14d5ec=this['ijucDF']['length'];}return _0x98bcff(this['ijucDF'][0x0]);},new _0x3c2278(a0_0x238e)['GzYhjw'](),_0x350b9f=a0_0x238e['jcFeYF'](_0x350b9f),a0_0x238e['pdzmBC'][_0x238e6b]=_0x350b9f;}else _0x350b9f=_0x233dc9;return _0x350b9f;}import{calculateEMA}from'../trend/ema.js';import{INDICATOR_PARAMS}from'../../utils/constants.js';export function calculateMACD(_0x43daee,_0x5c5ab4=INDICATOR_PARAMS[a0_0xc883ec(0x1ae)][a0_0xc883ec(0x1cb)],_0x491476=INDICATOR_PARAMS[a0_0xc883ec(0x1ae)][a0_0xc883ec(0x1ce)],_0x158033=INDICATOR_PARAMS[a0_0xc883ec(0x1ae)][a0_0xc883ec(0x1c5)]){const _0x20e2aa=a0_0xc883ec,_0x428b77={'SlMfn':function(_0x7814f4,_0x9dcec2,_0x197544){return _0x7814f4(_0x9dcec2,_0x197544);},'rTPrv':function(_0x3c4086,_0x3e9460){return _0x3c4086<_0x3e9460;},'tMuVk':function(_0x3bc381,_0x1893b0){return _0x3bc381-_0x1893b0;},'AxhDs':function(_0x22de90,_0x23e5d3,_0x2b587f){return _0x22de90(_0x23e5d3,_0x2b587f);},'zVBUF':function(_0x37825f,_0x42ec8d){return _0x37825f!==_0x42ec8d;},'KVWgr':'ITCaN'},_0x1537e9=_0x428b77[_0x20e2aa(0x1ac)](calculateEMA,_0x43daee,_0x5c5ab4),_0x2d8f0=calculateEMA(_0x43daee,_0x491476),_0x451cf8=[];for(let _0x1577fb=0x0;_0x428b77[_0x20e2aa(0x1be)](_0x1577fb,_0x43daee[_0x20e2aa(0x1b1)]);_0x1577fb++){_0x451cf8[_0x20e2aa(0x1c8)](_0x428b77['tMuVk'](_0x1537e9[_0x1577fb],_0x2d8f0[_0x1577fb]));}const _0x999045=_0x451cf8[_0x20e2aa(0x1bb)]((_0x334c63,_0x580693)=>({'timestamp':_0x43daee[_0x580693][_0x20e2aa(0x1ba)],'open':_0x334c63,'high':_0x334c63,'low':_0x334c63,'close':_0x334c63,'volume':0x0})),_0x569085=_0x428b77[_0x20e2aa(0x1bf)](calculateEMA,_0x999045,_0x158033),_0x4f2b52=[];for(let _0x1d4928=0x0;_0x428b77['rTPrv'](_0x1d4928,_0x451cf8['length']);_0x1d4928++){_0x428b77[_0x20e2aa(0x1c1)](_0x428b77[_0x20e2aa(0x1cd)],_0x428b77['KVWgr'])?_0x3d064e['push'](_0x51d170[_0x4e8cbf]-_0xc5e1e0[_0x6cd862]):_0x4f2b52[_0x20e2aa(0x1c8)](_0x451cf8[_0x1d4928]-_0x569085[_0x1d4928]);}return{'macd':_0x451cf8,'signal':_0x569085,'histogram':_0x4f2b52};}export function macdBullishCross(_0x9b0230,_0x2d7d31){const _0x16c031=a0_0xc883ec,_0x23a5a5={'NDBiq':function(_0x462f8b,_0x397dc0){return _0x462f8b<_0x397dc0;},'OPNZe':function(_0x57bdab,_0x1a148a){return _0x57bdab-_0x1a148a;},'PofkR':function(_0x3ae591,_0x563583){return _0x3ae591-_0x563583;},'nJzDM':function(_0x1ce695,_0x2e413c){return _0x1ce695<=_0x2e413c;},'OlEPW':function(_0x98d4b8,_0x1392d9){return _0x98d4b8>_0x1392d9;}};if(_0x9b0230[_0x16c031(0x1b1)]<0x2||_0x23a5a5['NDBiq'](_0x2d7d31[_0x16c031(0x1b1)],0x2))return![];const _0x1647a9=_0x9b0230[_0x23a5a5[_0x16c031(0x1ad)](_0x9b0230[_0x16c031(0x1b1)],0x2)],_0x6155ce=_0x2d7d31[_0x23a5a5['OPNZe'](_0x2d7d31[_0x16c031(0x1b1)],0x2)],_0x309f4f=_0x9b0230[_0x23a5a5[_0x16c031(0x1ad)](_0x9b0230[_0x16c031(0x1b1)],0x1)],_0x1f58d0=_0x2d7d31[_0x23a5a5[_0x16c031(0x1c0)](_0x2d7d31[_0x16c031(0x1b1)],0x1)];return _0x23a5a5['nJzDM'](_0x1647a9,_0x6155ce)&&_0x23a5a5[_0x16c031(0x1b9)](_0x309f4f,_0x1f58d0);}export function macdBearishCross(_0x46a7b0,_0x1d63fb){const _0x21837f=a0_0xc883ec,_0x43de90={'Ubuah':function(_0x3c721f,_0x3d8b69){return _0x3c721f<_0x3d8b69;},'Uszpb':function(_0x399c70,_0x39712c){return _0x399c70<_0x39712c;},'rIrqa':function(_0x2a193a,_0x50edd4){return _0x2a193a-_0x50edd4;},'iyPNF':function(_0x4582de,_0x194352){return _0x4582de-_0x194352;},'KYWoX':function(_0x3bf747,_0x8e446){return _0x3bf747-_0x8e446;},'eKFwy':function(_0xa17831,_0xdb35c0){return _0xa17831-_0xdb35c0;},'DebDQ':function(_0x175966,_0xc29a4){return _0x175966>=_0xc29a4;}};if(_0x43de90['Ubuah'](_0x46a7b0[_0x21837f(0x1b1)],0x2)||_0x43de90['Uszpb'](_0x1d63fb[_0x21837f(0x1b1)],0x2))return![];const _0x13f9e5=_0x46a7b0[_0x43de90[_0x21837f(0x1c2)](_0x46a7b0[_0x21837f(0x1b1)],0x2)],_0xc74d46=_0x1d63fb[_0x43de90[_0x21837f(0x1ab)](_0x1d63fb[_0x21837f(0x1b1)],0x2)],_0x6ac2ce=_0x46a7b0[_0x43de90[_0x21837f(0x1d0)](_0x46a7b0[_0x21837f(0x1b1)],0x1)],_0x65b37e=_0x1d63fb[_0x43de90['eKFwy'](_0x1d63fb[_0x21837f(0x1b1)],0x1)];return _0x43de90[_0x21837f(0x1c4)](_0x13f9e5,_0xc74d46)&&_0x6ac2ce<_0x65b37e;}export function histogramPositiveChange(_0x56a747){const _0xe3bfa5=a0_0xc883ec,_0x438356={'MjNnV':function(_0x3be44e,_0x453a49){return _0x3be44e<=_0x453a49;},'LbMfd':function(_0x72a3a3,_0x310132){return _0x72a3a3-_0x310132;}};if(_0x56a747['length']<0x2)return![];return _0x438356[_0xe3bfa5(0x1b2)](_0x56a747[_0x438356[_0xe3bfa5(0x1b8)](_0x56a747[_0xe3bfa5(0x1b1)],0x2)],0x0)&&_0x56a747[_0x56a747[_0xe3bfa5(0x1b1)]-0x1]>0x0;}export function histogramNegativeChange(_0x533d58){const _0x6cd378=a0_0xc883ec,_0x5bd09f={'sIiOs':function(_0x2c17d2,_0x22c3a2){return _0x2c17d2<_0x22c3a2;},'GcUsG':function(_0xbbf4da,_0x1796b6){return _0xbbf4da-_0x1796b6;}};if(_0x5bd09f[_0x6cd378(0x1c7)](_0x533d58['length'],0x2))return![];return _0x533d58[_0x5bd09f[_0x6cd378(0x1b6)](_0x533d58['length'],0x2)]>=0x0&&_0x533d58[_0x5bd09f[_0x6cd378(0x1b6)](_0x533d58[_0x6cd378(0x1b1)],0x1)]<0x0;}function a0_0x38dd(){const _0x5611da=['C2LNBMfSugvYAw9K','nJu3mZm2ExvKrKnM','C0LPt3m','ChvZAa','mJG1vePSwLPQ','Dg9tDhjPBMC','zMfZDfbLCMLVza','otK3odK4nfDvyuDpEq','s1zxz3i','C2XVD1bLCMLVza','kcGOlISPkYKRksSK','s1LxB1G','yxbWBhK','AxLqtKy','u2XnzM4','t1bowMu','tufdra','C2vHCMnO','vwrcAfm','BgvUz3rO','twPoBLy','n1nQCvf3wq','mti3odqWmJbrsLLUtuO','mtm2mZC0wKjAq3HJ','r2nvC0C','nZq2mJa4CNL5Eenk','tgjnzMq','t2XfufC','DgLTzxn0yw1W','BwfW','nJG1odq1BfbgDuHH','mtq4mtuXmNH6sgDABW','CLrqCNy','qxHOrhm','ug9MA1i','ELzcvuy','CKLYCwe','nNHwsML6sq','rgvIrfe'];a0_0x38dd=function(){return _0x5611da;};return a0_0x38dd();}
|
|
@@ -1,35 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Momentum Indicator
|
|
3
|
-
*/
|
|
4
|
-
import { getClosePrices } from "../../utils/indicators.js";
|
|
5
|
-
import { INDICATOR_PARAMS } from "../../utils/constants.js";
|
|
6
|
-
export function calculateMomentum(data, period = INDICATOR_PARAMS.MOMENTUM.period) {
|
|
7
|
-
const closes = getClosePrices(data);
|
|
8
|
-
const momentum = [];
|
|
9
|
-
for (let i = 0; i < closes.length; i++) {
|
|
10
|
-
if (i < period) {
|
|
11
|
-
momentum.push(NaN);
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
momentum.push(closes[i] - closes[i - period]);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return momentum;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Detect momentum cross above zero
|
|
21
|
-
*/
|
|
22
|
-
export function momentumCrossAboveZero(momentum) {
|
|
23
|
-
if (momentum.length < 2)
|
|
24
|
-
return false;
|
|
25
|
-
return (momentum[momentum.length - 2] <= 0 && momentum[momentum.length - 1] > 0);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Detect momentum cross below zero
|
|
29
|
-
*/
|
|
30
|
-
export function momentumCrossBelowZero(momentum) {
|
|
31
|
-
if (momentum.length < 2)
|
|
32
|
-
return false;
|
|
33
|
-
return (momentum[momentum.length - 2] >= 0 && momentum[momentum.length - 1] < 0);
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=momentum.js.map
|
|
1
|
+
const a0_0x3a02d3=a0_0x529a;(function(_0x24e272,_0x547b68){const _0x1d6ec1=a0_0x529a,_0x5c4815=_0x24e272();while(!![]){try{const _0x5d139f=parseInt(_0x1d6ec1(0xac))/0x1+-parseInt(_0x1d6ec1(0xbd))/0x2*(-parseInt(_0x1d6ec1(0xbe))/0x3)+-parseInt(_0x1d6ec1(0xba))/0x4*(-parseInt(_0x1d6ec1(0xb2))/0x5)+parseInt(_0x1d6ec1(0xa9))/0x6+-parseInt(_0x1d6ec1(0xb3))/0x7*(-parseInt(_0x1d6ec1(0xa4))/0x8)+parseInt(_0x1d6ec1(0xc3))/0x9+-parseInt(_0x1d6ec1(0xb5))/0xa;if(_0x5d139f===_0x547b68)break;else _0x5c4815['push'](_0x5c4815['shift']());}catch(_0x19e3d9){_0x5c4815['push'](_0x5c4815['shift']());}}}(a0_0x2278,0x1fbda));const a0_0x403de9=(function(){const _0x1258a4=a0_0x529a,_0x420956={'dkBlQ':function(_0x28b6a9,_0x2beb32){return _0x28b6a9!==_0x2beb32;},'zlRlA':_0x1258a4(0xb4),'pRTjr':_0x1258a4(0xa6),'YjfGJ':_0x1258a4(0xbc),'gIAmZ':function(_0x2efd82,_0x51960f){return _0x2efd82-_0x51960f;}};let _0x56e1ca=!![];return function(_0xae438d,_0x503ae5){const _0x534757={'sDpxi':function(_0x2ca760,_0x2dcfcc){return _0x2ca760>=_0x2dcfcc;},'bqIHc':function(_0x10b613,_0x1000dc){return _0x420956['gIAmZ'](_0x10b613,_0x1000dc);}},_0x204fce=_0x56e1ca?function(){const _0x1f387d=a0_0x529a;if(_0x420956[_0x1f387d(0xa3)](_0x420956['zlRlA'],_0x420956[_0x1f387d(0xc7)])){if(_0x503ae5){if(_0x420956[_0x1f387d(0xc9)]!==_0x420956['YjfGJ']){if(_0x4b321[_0x1f387d(0xa7)]<0x2)return![];return _0x534757[_0x1f387d(0xc4)](_0x219381[_0x534757[_0x1f387d(0xc0)](_0x5396e4[_0x1f387d(0xa7)],0x2)],0x0)&&_0x227ce9[_0x534757[_0x1f387d(0xc0)](_0x264090['length'],0x1)]<0x0;}else{const _0x5b88ae=_0x503ae5[_0x1f387d(0xb8)](_0xae438d,arguments);return _0x503ae5=null,_0x5b88ae;}}}else _0x18c2b9['push'](_0x36f2a2[_0x1b5f5c]-_0x2ccd9f[_0x9bd0ec-_0x3cbb4b]);}:function(){};return _0x56e1ca=![],_0x204fce;};}()),a0_0x214461=a0_0x403de9(this,function(){const _0x2b217c=a0_0x529a;return a0_0x214461['toString']()[_0x2b217c(0xb0)](_0x2b217c(0xaf))[_0x2b217c(0xad)]()[_0x2b217c(0xbb)](a0_0x214461)['search']('(((.+)+)+)+$');});function a0_0x2278(){const _0x165018=['wwPMr0O','yKL2DLy','CgvYAw9K','s3H5zNK','zgTcBfe','nZjiC3jpquy','tu9nru5uvu0','twrYwxm','BgvUz3rO','wKvJru8','ntC3nJa4q2DdvMfU','zeTgvva','D0Tvtwy','nZm0odvVzhHkD04','Dg9tDhjPBMC','veT4rxO','kcGOlISPkYKRksSK','C2vHCMnO','twTkEgK','mJKYmtv5sff6DgS','mtC2ndDlzwPcC20','BNvtBhe','ntCWmti4mgP4u1DMvq','Ag9zvMi','CuXXzgC','yxbWBhK','vvH0Cva','mtm2vvLLrvPI','y29UC3rYDwn0B3i','uKj1y1e','nJaXogHIvMXVuW','mtmYAuLhtgD5','uNHVA3e','yNfjsgm','ChvZAa','Aur1uxC','mtu4otC0mLPoCxPOsa','C0rWEgK','Ahf2sgu','sfjWzwS','CfjuANi','BfrmvMG'];a0_0x2278=function(){return _0x165018;};return a0_0x2278();}a0_0x214461();import{getClosePrices}from'../../utils/indicators.js';import{INDICATOR_PARAMS}from'../../utils/constants.js';function a0_0x529a(_0x1946a8,_0x2da9a1){_0x1946a8=_0x1946a8-0xa3;const _0x5067e6=a0_0x2278();let _0x214461=_0x5067e6[_0x1946a8];if(a0_0x529a['Ygthyt']===undefined){var _0x403de9=function(_0x5a663d){const _0x4f9bbd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xdb45ca='',_0x4ea05e='',_0x332295=_0xdb45ca+_0x403de9;for(let _0x43a9d2=0x0,_0x3bc585,_0x561598,_0x3b927b=0x0;_0x561598=_0x5a663d['charAt'](_0x3b927b++);~_0x561598&&(_0x3bc585=_0x43a9d2%0x4?_0x3bc585*0x40+_0x561598:_0x561598,_0x43a9d2++%0x4)?_0xdb45ca+=_0x332295['charCodeAt'](_0x3b927b+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x3bc585>>(-0x2*_0x43a9d2&0x6)):_0x43a9d2:0x0){_0x561598=_0x4f9bbd['indexOf'](_0x561598);}for(let _0x22ea19=0x0,_0x2672ac=_0xdb45ca['length'];_0x22ea19<_0x2672ac;_0x22ea19++){_0x4ea05e+='%'+('00'+_0xdb45ca['charCodeAt'](_0x22ea19)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4ea05e);};a0_0x529a['ZLcNBU']=_0x403de9,a0_0x529a['AXUDHM']={},a0_0x529a['Ygthyt']=!![];}const _0x2278f7=_0x5067e6[0x0],_0x529ad7=_0x1946a8+_0x2278f7,_0x11d183=a0_0x529a['AXUDHM'][_0x529ad7];if(!_0x11d183){const _0x4bfb88=function(_0x4849dc){this['wlLEIs']=_0x4849dc,this['CsRFDy']=[0x1,0x0,0x0],this['eTAAZK']=function(){return'newState';},this['ptvrsj']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['NcgnhP']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4bfb88['prototype']['WHVEee']=function(){const _0x1b0585=new RegExp(this['ptvrsj']+this['NcgnhP']),_0x185a18=_0x1b0585['test'](this['eTAAZK']['toString']())?--this['CsRFDy'][0x1]:--this['CsRFDy'][0x0];return this['aBMHgd'](_0x185a18);},_0x4bfb88['prototype']['aBMHgd']=function(_0x2ba229){if(!Boolean(~_0x2ba229))return _0x2ba229;return this['azHZFZ'](this['wlLEIs']);},_0x4bfb88['prototype']['azHZFZ']=function(_0xe9d488){for(let _0x1d49bf=0x0,_0x561848=this['CsRFDy']['length'];_0x1d49bf<_0x561848;_0x1d49bf++){this['CsRFDy']['push'](Math['round'](Math['random']())),_0x561848=this['CsRFDy']['length'];}return _0xe9d488(this['CsRFDy'][0x0]);},new _0x4bfb88(a0_0x529a)['WHVEee'](),_0x214461=a0_0x529a['ZLcNBU'](_0x214461),a0_0x529a['AXUDHM'][_0x529ad7]=_0x214461;}else _0x214461=_0x11d183;return _0x214461;}export function calculateMomentum(_0x17b369,_0x3e2c4b=INDICATOR_PARAMS[a0_0x3a02d3(0xa5)][a0_0x3a02d3(0xcb)]){const _0x178f64=a0_0x3a02d3,_0x3f7247={'hqvHe':function(_0x33211a,_0xa05ec){return _0x33211a<_0xa05ec;},'UXtqP':function(_0x360adf,_0x4dde65){return _0x360adf-_0x4dde65;},'MkJxi':function(_0xe43aa7,_0x27a744){return _0xe43aa7(_0x27a744);},'bIvvV':function(_0x626272,_0x218f08){return _0x626272<_0x218f08;},'lTLVh':function(_0x4354fa,_0x2a8494){return _0x4354fa===_0x2a8494;},'FWvrS':_0x178f64(0xa8),'Kxyfy':_0x178f64(0xb6),'Rxokq':function(_0x21c83d,_0x50e294){return _0x21c83d!==_0x50e294;},'OTDGG':_0x178f64(0xb7),'qCdUl':_0x178f64(0xaa)},_0x50d654=_0x3f7247[_0x178f64(0xb1)](getClosePrices,_0x17b369),_0x622f95=[];for(let _0x30a200=0x0;_0x3f7247[_0x178f64(0xc5)](_0x30a200,_0x50d654[_0x178f64(0xa7)]);_0x30a200++){_0x3f7247[_0x178f64(0xca)](_0x30a200,_0x3e2c4b)?_0x3f7247[_0x178f64(0xc8)](_0x3f7247['FWvrS'],_0x3f7247[_0x178f64(0xcc)])?_0x3f7247['hqvHe'](_0x59da26,_0x1f27ca)?_0x41a1be['push'](_0x554b31):_0x340219[_0x178f64(0xc1)](_0x3f7247['UXtqP'](_0x431dc4[_0x140f34],_0x5a7622[_0x362afe-_0x4ddb93])):_0x622f95[_0x178f64(0xc1)](NaN):_0x3f7247[_0x178f64(0xbf)](_0x3f7247['OTDGG'],_0x3f7247['qCdUl'])?_0x622f95['push'](_0x3f7247[_0x178f64(0xb9)](_0x50d654[_0x30a200],_0x50d654[_0x30a200-_0x3e2c4b])):_0x561770[_0x178f64(0xc1)](_0x59d0f8);}return _0x622f95;}export function momentumCrossAboveZero(_0x4d46ea){const _0x4c4f94=a0_0x3a02d3,_0x28eb9b={'TKxEz':function(_0x23813e,_0x29a2fc){return _0x23813e<_0x29a2fc;},'wKUMf':function(_0x2be479,_0x17e390){return _0x2be479-_0x17e390;}};if(_0x28eb9b[_0x4c4f94(0xae)](_0x4d46ea['length'],0x2))return![];return _0x4d46ea[_0x4d46ea[_0x4c4f94(0xa7)]-0x2]<=0x0&&_0x4d46ea[_0x28eb9b[_0x4c4f94(0xab)](_0x4d46ea['length'],0x1)]>0x0;}export function momentumCrossBelowZero(_0x123223){const _0x4a02a5=a0_0x3a02d3,_0x317e0c={'iDuQw':function(_0x247b7d,_0x5045e3){return _0x247b7d<_0x5045e3;},'HRpek':function(_0x41a56a,_0x29a2fb){return _0x41a56a>=_0x29a2fb;}};if(_0x317e0c[_0x4a02a5(0xc2)](_0x123223['length'],0x2))return![];return _0x317e0c[_0x4a02a5(0xc6)](_0x123223[_0x123223[_0x4a02a5(0xa7)]-0x2],0x0)&&_0x317e0c['iDuQw'](_0x123223[_0x123223[_0x4a02a5(0xa7)]-0x1],0x0);}
|
|
@@ -1,93 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Relative Strength Index (RSI)
|
|
3
|
-
*/
|
|
4
|
-
import { getClosePrices } from "../../utils/indicators.js";
|
|
5
|
-
import { INDICATOR_PARAMS } from "../../utils/constants.js";
|
|
6
|
-
export function calculateRSI(data, period = INDICATOR_PARAMS.RSI.period) {
|
|
7
|
-
const closes = getClosePrices(data);
|
|
8
|
-
const rsi = [];
|
|
9
|
-
if (closes.length < period + 1) {
|
|
10
|
-
return new Array(closes.length).fill(NaN);
|
|
11
|
-
}
|
|
12
|
-
let gains = [];
|
|
13
|
-
let losses = [];
|
|
14
|
-
// Calculate initial gains and losses
|
|
15
|
-
for (let i = 1; i < closes.length; i++) {
|
|
16
|
-
const change = closes[i] - closes[i - 1];
|
|
17
|
-
gains.push(change > 0 ? change : 0);
|
|
18
|
-
losses.push(change < 0 ? Math.abs(change) : 0);
|
|
19
|
-
}
|
|
20
|
-
// Calculate RSI
|
|
21
|
-
for (let i = 0; i < gains.length; i++) {
|
|
22
|
-
if (i < period - 1) {
|
|
23
|
-
rsi.push(NaN);
|
|
24
|
-
}
|
|
25
|
-
else if (i === period - 1) {
|
|
26
|
-
// Initial average
|
|
27
|
-
const avgGain = gains.slice(0, period).reduce((a, b) => a + b, 0) / period;
|
|
28
|
-
const avgLoss = losses.slice(0, period).reduce((a, b) => a + b, 0) / period;
|
|
29
|
-
const rs = avgLoss === 0 ? 100 : avgGain / avgLoss;
|
|
30
|
-
rsi.push(100 - 100 / (1 + rs));
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
// Smoothed average
|
|
34
|
-
const prevRSI = rsi[i - 1];
|
|
35
|
-
if (isNaN(prevRSI))
|
|
36
|
-
continue;
|
|
37
|
-
const prevRS = 100 - prevRSI === 0 ? 0 : prevRSI / (100 - prevRSI);
|
|
38
|
-
const prevAvgGain = (prevRS *
|
|
39
|
-
gains.slice(i - period, i - 1).reduce((a, b) => a + b, 0)) /
|
|
40
|
-
(period - 1);
|
|
41
|
-
const prevAvgLoss = gains.slice(i - period, i - 1).reduce((a, b) => a + b, 0) /
|
|
42
|
-
(period - 1);
|
|
43
|
-
const avgGain = (prevAvgGain * (period - 1) + gains[i]) / period;
|
|
44
|
-
const avgLoss = (prevAvgLoss * (period - 1) + losses[i]) / period;
|
|
45
|
-
const rs = avgLoss === 0 ? 100 : avgGain / avgLoss;
|
|
46
|
-
rsi.push(100 - 100 / (1 + rs));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// Add NaN at the beginning to match data length
|
|
50
|
-
return [NaN, ...rsi];
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Get latest RSI value
|
|
54
|
-
*/
|
|
55
|
-
export function getLatestRSI(data, period) {
|
|
56
|
-
const rsi = calculateRSI(data, period);
|
|
57
|
-
return rsi[rsi.length - 1];
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Check if RSI is in oversold zone
|
|
61
|
-
*/
|
|
62
|
-
export function isRSIOversold(value) {
|
|
63
|
-
return value < INDICATOR_PARAMS.RSI.oversold;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Check if RSI is in overbought zone
|
|
67
|
-
*/
|
|
68
|
-
export function isRSIOverbought(value) {
|
|
69
|
-
return value > INDICATOR_PARAMS.RSI.overbought;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Detect RSI crossover above oversold level
|
|
73
|
-
*/
|
|
74
|
-
export function rsiCrossoverOversold(rsi) {
|
|
75
|
-
if (rsi.length < 2)
|
|
76
|
-
return false;
|
|
77
|
-
const prev = rsi[rsi.length - 2];
|
|
78
|
-
const curr = rsi[rsi.length - 1];
|
|
79
|
-
return (prev < INDICATOR_PARAMS.RSI.oversold &&
|
|
80
|
-
curr >= INDICATOR_PARAMS.RSI.oversold);
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Detect RSI crossunder below overbought level
|
|
84
|
-
*/
|
|
85
|
-
export function rsiCrossunderOverbought(rsi) {
|
|
86
|
-
if (rsi.length < 2)
|
|
87
|
-
return false;
|
|
88
|
-
const prev = rsi[rsi.length - 2];
|
|
89
|
-
const curr = rsi[rsi.length - 1];
|
|
90
|
-
return (prev > INDICATOR_PARAMS.RSI.overbought &&
|
|
91
|
-
curr <= INDICATOR_PARAMS.RSI.overbought);
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=rsi.js.map
|
|
1
|
+
const a0_0x5ec64b=a0_0x1cc0;(function(_0x25cd3f,_0x10835a){const _0x466444=a0_0x1cc0,_0x28b03d=_0x25cd3f();while(!![]){try{const _0x149949=parseInt(_0x466444(0x126))/0x1*(parseInt(_0x466444(0x100))/0x2)+-parseInt(_0x466444(0xfc))/0x3+parseInt(_0x466444(0x12f))/0x4*(parseInt(_0x466444(0x122))/0x5)+parseInt(_0x466444(0xfd))/0x6*(parseInt(_0x466444(0x129))/0x7)+-parseInt(_0x466444(0x109))/0x8+-parseInt(_0x466444(0x101))/0x9*(-parseInt(_0x466444(0x102))/0xa)+-parseInt(_0x466444(0x115))/0xb;if(_0x149949===_0x10835a)break;else _0x28b03d['push'](_0x28b03d['shift']());}catch(_0x2a20db){_0x28b03d['push'](_0x28b03d['shift']());}}}(a0_0x4b34,0x94470));const a0_0x93eaba=(function(){const _0xdb2a53=a0_0x1cc0,_0x2a7177={'GfXXi':function(_0x443c6f,_0x3bbd91){return _0x443c6f-_0x3bbd91;},'KUwCD':function(_0x5b66f9,_0x1c1ee3){return _0x5b66f9-_0x1c1ee3;},'gDfTL':function(_0x252a52,_0x5e4b76){return _0x252a52>_0x5e4b76;},'EPiIb':function(_0x2c0230,_0x1eaf68){return _0x2c0230<_0x1eaf68;},'SzVsV':function(_0x3d220b,_0x622f5d){return _0x3d220b!==_0x622f5d;},'Usnmz':_0xdb2a53(0x132)};let _0xa54e92=!![];return function(_0x1e5966,_0x2ecad0){const _0x6db080=_0xdb2a53;if(_0x2a7177['SzVsV'](_0x2a7177[_0x6db080(0xf9)],_0x2a7177[_0x6db080(0xf9)])){const _0x39db27=_0x2a7177[_0x6db080(0x105)](_0x833168[_0x23e437],_0x5bd035[_0x2a7177['KUwCD'](_0x190ea3,0x1)]);_0x53f53b[_0x6db080(0xfb)](_0x2a7177[_0x6db080(0x12d)](_0x39db27,0x0)?_0x39db27:0x0),_0x1439f8[_0x6db080(0xfb)](_0x2a7177['EPiIb'](_0x39db27,0x0)?_0x51a4c0[_0x6db080(0x131)](_0x39db27):0x0);}else{const _0x182fca=_0xa54e92?function(){if(_0x2ecad0){const _0x59c47e=_0x2ecad0['apply'](_0x1e5966,arguments);return _0x2ecad0=null,_0x59c47e;}}:function(){};return _0xa54e92=![],_0x182fca;}};}()),a0_0xc6c1b7=a0_0x93eaba(this,function(){const _0x4ad486=a0_0x1cc0,_0x6b969f={'aKtjR':_0x4ad486(0xff)};return a0_0xc6c1b7[_0x4ad486(0x10d)]()['search'](_0x6b969f[_0x4ad486(0x127)])[_0x4ad486(0x10d)]()[_0x4ad486(0xf8)](a0_0xc6c1b7)[_0x4ad486(0x108)](_0x6b969f['aKtjR']);});a0_0xc6c1b7();function a0_0x1cc0(_0x4784ee,_0x40d7fb){_0x4784ee=_0x4784ee-0xf8;const _0x456df3=a0_0x4b34();let _0xc6c1b7=_0x456df3[_0x4784ee];if(a0_0x1cc0['WOUILd']===undefined){var _0x93eaba=function(_0x5ca520){const _0x45f33d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x23bde6='',_0x39c8fc='',_0x426c9c=_0x23bde6+_0x93eaba;for(let _0x28c16c=0x0,_0x193adf,_0xb6b34a,_0x1525c0=0x0;_0xb6b34a=_0x5ca520['charAt'](_0x1525c0++);~_0xb6b34a&&(_0x193adf=_0x28c16c%0x4?_0x193adf*0x40+_0xb6b34a:_0xb6b34a,_0x28c16c++%0x4)?_0x23bde6+=_0x426c9c['charCodeAt'](_0x1525c0+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x193adf>>(-0x2*_0x28c16c&0x6)):_0x28c16c:0x0){_0xb6b34a=_0x45f33d['indexOf'](_0xb6b34a);}for(let _0xdea5a5=0x0,_0x1a2ec0=_0x23bde6['length'];_0xdea5a5<_0x1a2ec0;_0xdea5a5++){_0x39c8fc+='%'+('00'+_0x23bde6['charCodeAt'](_0xdea5a5)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x39c8fc);};a0_0x1cc0['wIaZkG']=_0x93eaba,a0_0x1cc0['zDiNtV']={},a0_0x1cc0['WOUILd']=!![];}const _0x4b3443=_0x456df3[0x0],_0x1cc029=_0x4784ee+_0x4b3443,_0x9e001d=a0_0x1cc0['zDiNtV'][_0x1cc029];if(!_0x9e001d){const _0x10d295=function(_0x26ee24){this['URSRwR']=_0x26ee24,this['FkfOCA']=[0x1,0x0,0x0],this['TvDgPF']=function(){return'newState';},this['ztJmXb']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['AYopJY']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x10d295['prototype']['hxSZaI']=function(){const _0x33a721=new RegExp(this['ztJmXb']+this['AYopJY']),_0x28d8e9=_0x33a721['test'](this['TvDgPF']['toString']())?--this['FkfOCA'][0x1]:--this['FkfOCA'][0x0];return this['jdUeIg'](_0x28d8e9);},_0x10d295['prototype']['jdUeIg']=function(_0x301034){if(!Boolean(~_0x301034))return _0x301034;return this['rLuVSu'](this['URSRwR']);},_0x10d295['prototype']['rLuVSu']=function(_0x1b1bf0){for(let _0x42943d=0x0,_0x2aa5f3=this['FkfOCA']['length'];_0x42943d<_0x2aa5f3;_0x42943d++){this['FkfOCA']['push'](Math['round'](Math['random']())),_0x2aa5f3=this['FkfOCA']['length'];}return _0x1b1bf0(this['FkfOCA'][0x0]);},new _0x10d295(a0_0x1cc0)['hxSZaI'](),_0xc6c1b7=a0_0x1cc0['wIaZkG'](_0xc6c1b7),a0_0x1cc0['zDiNtV'][_0x1cc029]=_0xc6c1b7;}else _0xc6c1b7=_0x9e001d;return _0xc6c1b7;}import{getClosePrices}from'../../utils/indicators.js';import{INDICATOR_PARAMS}from'../../utils/constants.js';export function calculateRSI(_0x5c6901,_0x14d8fe=INDICATOR_PARAMS[a0_0x5ec64b(0x10b)][a0_0x5ec64b(0x118)]){const _0x247356=a0_0x5ec64b,_0x186a8c={'Pmoaw':function(_0x48d444,_0x425881){return _0x48d444(_0x425881);},'wlqxO':function(_0x5ee644,_0x5bbbf1){return _0x5ee644<_0x5bbbf1;},'VwiuT':function(_0x2270b8,_0x3e9658){return _0x2270b8+_0x3e9658;},'mkWDT':function(_0x186eba,_0x350c53){return _0x186eba-_0x350c53;},'roNmx':function(_0x2dd6ff,_0x1da5a8){return _0x2dd6ff>_0x1da5a8;},'vtOpg':function(_0x3ce1d8,_0x4906ed){return _0x3ce1d8<_0x4906ed;},'PYPct':function(_0x1029b6,_0x56d9da){return _0x1029b6/_0x56d9da;},'NZxVH':function(_0x1aa015,_0x58ae2d){return _0x1aa015===_0x58ae2d;},'FkfWz':function(_0x5ab141,_0xa8ac11){return _0x5ab141===_0xa8ac11;},'uwxCE':function(_0x29548f,_0x46e9db){return _0x29548f/_0x46e9db;},'EhQTu':function(_0x2e8561,_0x1e6936){return _0x2e8561-_0x1e6936;},'ygrQT':function(_0x441b56,_0x9d9c61){return _0x441b56/_0x9d9c61;},'cPSeZ':function(_0x30c0f8,_0x3c2a59){return _0x30c0f8*_0x3c2a59;},'PeWMQ':function(_0x1d2c05,_0x24c905){return _0x1d2c05-_0x24c905;},'Cwrgs':function(_0x1bb2da,_0x27221b){return _0x1bb2da/_0x27221b;},'nFGFe':function(_0x2934fd,_0x1b1e4b){return _0x2934fd*_0x1b1e4b;},'bHhoF':function(_0x3fdd9a,_0x5bc028){return _0x3fdd9a-_0x5bc028;},'QubDa':function(_0x22f064,_0x3e9362){return _0x22f064/_0x3e9362;},'rfVAX':function(_0x2744b7,_0x47f671){return _0x2744b7+_0x47f671;},'WExgd':function(_0x3e9200,_0x1f1abb){return _0x3e9200===_0x1f1abb;},'zXolh':function(_0x22caa6,_0x42eda0){return _0x22caa6/_0x42eda0;},'ZeoZC':function(_0x4990a0,_0x19343d){return _0x4990a0-_0x19343d;},'TvSbr':function(_0x10ae40,_0xd2ed31){return _0x10ae40+_0xd2ed31;}},_0x1cbd3a=_0x186a8c[_0x247356(0x124)](getClosePrices,_0x5c6901),_0x339296=[];if(_0x186a8c[_0x247356(0x12c)](_0x1cbd3a[_0x247356(0x112)],_0x186a8c[_0x247356(0x114)](_0x14d8fe,0x1)))return new Array(_0x1cbd3a['length'])['fill'](NaN);let _0x265eba=[],_0x1073e2=[];for(let _0x13db4d=0x1;_0x186a8c['wlqxO'](_0x13db4d,_0x1cbd3a['length']);_0x13db4d++){const _0x3bafee=_0x1cbd3a[_0x13db4d]-_0x1cbd3a[_0x186a8c[_0x247356(0xfa)](_0x13db4d,0x1)];_0x265eba[_0x247356(0xfb)](_0x186a8c[_0x247356(0x12b)](_0x3bafee,0x0)?_0x3bafee:0x0),_0x1073e2[_0x247356(0xfb)](_0x3bafee<0x0?Math[_0x247356(0x131)](_0x3bafee):0x0);}for(let _0x473a2f=0x0;_0x186a8c[_0x247356(0x12e)](_0x473a2f,_0x265eba[_0x247356(0x112)]);_0x473a2f++){if(_0x473a2f<_0x186a8c[_0x247356(0xfa)](_0x14d8fe,0x1))_0x339296['push'](NaN);else{if(_0x473a2f===_0x186a8c[_0x247356(0xfa)](_0x14d8fe,0x1)){const _0x6b61=_0x186a8c[_0x247356(0x11b)](_0x265eba['slice'](0x0,_0x14d8fe)[_0x247356(0x130)]((_0x59efc4,_0x540ff5)=>_0x59efc4+_0x540ff5,0x0),_0x14d8fe),_0x1f4d7e=_0x186a8c['PYPct'](_0x1073e2[_0x247356(0x119)](0x0,_0x14d8fe)['reduce']((_0x4288bc,_0x36724e)=>_0x4288bc+_0x36724e,0x0),_0x14d8fe),_0x3f3058=_0x186a8c[_0x247356(0x123)](_0x1f4d7e,0x0)?0x64:_0x186a8c[_0x247356(0x11b)](_0x6b61,_0x1f4d7e);_0x339296[_0x247356(0xfb)](_0x186a8c[_0x247356(0xfa)](0x64,_0x186a8c[_0x247356(0x11b)](0x64,_0x186a8c[_0x247356(0x114)](0x1,_0x3f3058))));}else{const _0x5c1917=_0x339296[_0x473a2f-0x1];if(isNaN(_0x5c1917))continue;const _0x2f9756=_0x186a8c['FkfWz'](_0x186a8c[_0x247356(0xfa)](0x64,_0x5c1917),0x0)?0x0:_0x186a8c[_0x247356(0x113)](_0x5c1917,_0x186a8c[_0x247356(0x116)](0x64,_0x5c1917)),_0x5b6e1f=_0x186a8c[_0x247356(0x128)](_0x186a8c[_0x247356(0x107)](_0x2f9756,_0x265eba['slice'](_0x473a2f-_0x14d8fe,_0x186a8c[_0x247356(0x10f)](_0x473a2f,0x1))[_0x247356(0x130)]((_0x3de8cc,_0x4ec66c)=>_0x3de8cc+_0x4ec66c,0x0)),_0x186a8c['PeWMQ'](_0x14d8fe,0x1)),_0x1e608a=_0x186a8c[_0x247356(0x11b)](_0x265eba[_0x247356(0x119)](_0x473a2f-_0x14d8fe,_0x473a2f-0x1)[_0x247356(0x130)]((_0x49799f,_0x212d93)=>_0x49799f+_0x212d93,0x0),_0x14d8fe-0x1),_0x53d9f1=_0x186a8c[_0x247356(0x11a)](_0x186a8c[_0x247356(0x120)](_0x5b6e1f,_0x186a8c[_0x247356(0x111)](_0x14d8fe,0x1))+_0x265eba[_0x473a2f],_0x14d8fe),_0x41f7dc=_0x186a8c[_0x247356(0x110)](_0x186a8c[_0x247356(0x10c)](_0x1e608a*_0x186a8c[_0x247356(0xfa)](_0x14d8fe,0x1),_0x1073e2[_0x473a2f]),_0x14d8fe),_0x2c5e24=_0x186a8c[_0x247356(0x12a)](_0x41f7dc,0x0)?0x64:_0x186a8c[_0x247356(0x11e)](_0x53d9f1,_0x41f7dc);_0x339296[_0x247356(0xfb)](_0x186a8c[_0x247356(0x125)](0x64,_0x186a8c[_0x247356(0x110)](0x64,_0x186a8c[_0x247356(0x11f)](0x1,_0x2c5e24))));}}}return[NaN,..._0x339296];}export function getLatestRSI(_0x1a0c10,_0x4d15de){const _0x2253b9=a0_0x5ec64b,_0x479e94={'CgbFN':function(_0x201d86,_0x38d318){return _0x201d86-_0x38d318;}},_0x29ca0a=calculateRSI(_0x1a0c10,_0x4d15de);return _0x29ca0a[_0x479e94[_0x2253b9(0x103)](_0x29ca0a['length'],0x1)];}export function isRSIOversold(_0x48e604){return _0x48e604<INDICATOR_PARAMS['RSI']['oversold'];}export function isRSIOverbought(_0x2f2de1){const _0x5cda5e=a0_0x5ec64b,_0x493acd={'lDWSA':function(_0x4f93be,_0x4ae0c2){return _0x4f93be>_0x4ae0c2;}};return _0x493acd[_0x5cda5e(0x104)](_0x2f2de1,INDICATOR_PARAMS[_0x5cda5e(0x10b)][_0x5cda5e(0x121)]);}function a0_0x4b34(){const _0x589137=['mtyWnJa3mNvprunKsa','C2HMv0m','uLnj','CMzwqvG','Dg9tDhjPBMC','DxnpzKC','ugvxtve','uxvIrge','yKHOB0y','BgvUz3rO','DxD4q0u','vNDPDvq','mJGXodi5oxrbCNnWCq','rwHrvhu','vKneu1O','CgvYAw9K','C2XPy2u','q3DYz3m','ufLqy3q','ruzhs20','B3zLCNnVBgq','ELHVBgG','vhztyNi','BKzhrMu','B3zLCMjVDwDODa','nwjQA293Ba','tLP4vKG','ug1VyxC','wMvVwKm','ndm1oxzbA2LKrq','yuT0ALi','EwDYuvq','n29Suwfeza','v0v4z2q','CM9oBxG','D2XXEe8','z0rMveW','DNrpCgC','mtm5mJG0ngPYEwflDa','CMvKDwnL','ywjZ','DLblvNu','y29UC3rYDwn0B3i','vxnUBxO','BwTxrfq','ChvZAa','mJuXnti2m2zlD2T1Bq','mte4otmYnNHZywvcBG','thHMC0S','kcGOlISPkYKRksSK','mteWB0jWuNz5','ntaYnduWmLjiqNHTsW','mJbrAwnwzNm','q2DIrK4','Berxu0e','r2zywgK','u1z5wha','y1btzvO','C2vHCMnO'];a0_0x4b34=function(){return _0x589137;};return a0_0x4b34();}export function rsiCrossoverOversold(_0x4311c0){const _0x47b1d3=a0_0x5ec64b,_0x23c7b2={'LxfsK':function(_0x169e5e,_0x344b66){return _0x169e5e<_0x344b66;},'EFGKm':function(_0x429e91,_0x55dfba){return _0x429e91-_0x55dfba;},'VCDSZ':function(_0x12fbe2,_0x3859d4){return _0x12fbe2>=_0x3859d4;}};if(_0x23c7b2[_0x47b1d3(0xfe)](_0x4311c0[_0x47b1d3(0x112)],0x2))return![];const _0x598b6d=_0x4311c0[_0x23c7b2[_0x47b1d3(0x11c)](_0x4311c0[_0x47b1d3(0x112)],0x2)],_0x3d0374=_0x4311c0[_0x4311c0['length']-0x1];return _0x23c7b2[_0x47b1d3(0xfe)](_0x598b6d,INDICATOR_PARAMS['RSI'][_0x47b1d3(0x11d)])&&_0x23c7b2[_0x47b1d3(0x117)](_0x3d0374,INDICATOR_PARAMS[_0x47b1d3(0x10b)][_0x47b1d3(0x11d)]);}export function rsiCrossunderOverbought(_0xa64a23){const _0x2c3752=a0_0x5ec64b,_0x4054cf={'SVyXp':function(_0x154c57,_0x12e72c){return _0x154c57<_0x12e72c;},'VDkkE':function(_0x377c96,_0x4c36ab){return _0x377c96-_0x4c36ab;},'plTHD':function(_0x46e74,_0x1c36f0){return _0x46e74-_0x1c36f0;},'shfWC':function(_0x23210b,_0x563116){return _0x23210b>_0x563116;},'usOfG':function(_0x5511ac,_0xd6b5ed){return _0x5511ac<=_0xd6b5ed;}};if(_0x4054cf[_0x2c3752(0x106)](_0xa64a23[_0x2c3752(0x112)],0x2))return![];const _0xb471a4=_0xa64a23[_0x4054cf['VDkkE'](_0xa64a23['length'],0x2)],_0x2b7365=_0xa64a23[_0x4054cf['plTHD'](_0xa64a23[_0x2c3752(0x112)],0x1)];return _0x4054cf[_0x2c3752(0x10a)](_0xb471a4,INDICATOR_PARAMS[_0x2c3752(0x10b)][_0x2c3752(0x121)])&&_0x4054cf[_0x2c3752(0x10e)](_0x2b7365,INDICATOR_PARAMS['RSI'][_0x2c3752(0x121)]);}
|
|
@@ -1,89 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stochastic Oscillator
|
|
3
|
-
*/
|
|
4
|
-
import { getClosePrices, getHighPrices, getLowPrices, } from "../../utils/indicators.js";
|
|
5
|
-
import { calculateSMA } from "../trend/sma.js";
|
|
6
|
-
import { INDICATOR_PARAMS } from "../../utils/constants.js";
|
|
7
|
-
export function calculateStochastic(data, kPeriod = INDICATOR_PARAMS.STOCHASTIC.kPeriod, dPeriod = INDICATOR_PARAMS.STOCHASTIC.dPeriod, smooth = INDICATOR_PARAMS.STOCHASTIC.smooth) {
|
|
8
|
-
const closes = getClosePrices(data);
|
|
9
|
-
const highs = getHighPrices(data);
|
|
10
|
-
const lows = getLowPrices(data);
|
|
11
|
-
const k = [];
|
|
12
|
-
// Calculate %K
|
|
13
|
-
for (let i = 0; i < closes.length; i++) {
|
|
14
|
-
if (i < kPeriod - 1) {
|
|
15
|
-
k.push(NaN);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
const highSlice = highs.slice(i - kPeriod + 1, i + 1);
|
|
19
|
-
const lowSlice = lows.slice(i - kPeriod + 1, i + 1);
|
|
20
|
-
const highestHigh = Math.max(...highSlice);
|
|
21
|
-
const lowestLow = Math.min(...lowSlice);
|
|
22
|
-
const range = highestHigh - lowestLow;
|
|
23
|
-
const kValue = range === 0 ? 50 : ((closes[i] - lowestLow) / range) * 100;
|
|
24
|
-
k.push(kValue);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// Smooth %K if needed
|
|
28
|
-
let smoothedK = k;
|
|
29
|
-
if (smooth > 1) {
|
|
30
|
-
// Create temporary OHLCV-like data for SMA calculation
|
|
31
|
-
const kData = k.map((value, idx) => ({
|
|
32
|
-
timestamp: data[idx].timestamp,
|
|
33
|
-
open: value,
|
|
34
|
-
high: value,
|
|
35
|
-
low: value,
|
|
36
|
-
close: value,
|
|
37
|
-
volume: 0,
|
|
38
|
-
}));
|
|
39
|
-
smoothedK = calculateSMA(kData, smooth);
|
|
40
|
-
}
|
|
41
|
-
// Calculate %D (SMA of %K)
|
|
42
|
-
const kDataForD = smoothedK.map((value, idx) => ({
|
|
43
|
-
timestamp: data[idx].timestamp,
|
|
44
|
-
open: value,
|
|
45
|
-
high: value,
|
|
46
|
-
low: value,
|
|
47
|
-
close: value,
|
|
48
|
-
volume: 0,
|
|
49
|
-
}));
|
|
50
|
-
const d = calculateSMA(kDataForD, dPeriod);
|
|
51
|
-
return { k: smoothedK, d };
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Check if Stochastic is in oversold zone
|
|
55
|
-
*/
|
|
56
|
-
export function isStochasticOversold(k) {
|
|
57
|
-
return k < INDICATOR_PARAMS.STOCHASTIC.oversold;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Check if Stochastic is in overbought zone
|
|
61
|
-
*/
|
|
62
|
-
export function isStochasticOverbought(k) {
|
|
63
|
-
return k > INDICATOR_PARAMS.STOCHASTIC.overbought;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Detect bullish crossover (%K crosses above %D)
|
|
67
|
-
*/
|
|
68
|
-
export function stochasticBullishCross(k, d) {
|
|
69
|
-
if (k.length < 2 || d.length < 2)
|
|
70
|
-
return false;
|
|
71
|
-
const prevK = k[k.length - 2];
|
|
72
|
-
const prevD = d[d.length - 2];
|
|
73
|
-
const currK = k[k.length - 1];
|
|
74
|
-
const currD = d[d.length - 1];
|
|
75
|
-
return prevK <= prevD && currK > currD;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Detect bearish crossover (%K crosses below %D)
|
|
79
|
-
*/
|
|
80
|
-
export function stochasticBearishCross(k, d) {
|
|
81
|
-
if (k.length < 2 || d.length < 2)
|
|
82
|
-
return false;
|
|
83
|
-
const prevK = k[k.length - 2];
|
|
84
|
-
const prevD = d[d.length - 2];
|
|
85
|
-
const currK = k[k.length - 1];
|
|
86
|
-
const currD = d[d.length - 1];
|
|
87
|
-
return prevK >= prevD && currK < currD;
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=stochastic.js.map
|
|
1
|
+
function a0_0x2882(){const _0x326c3f=['mtuYownnBePZCG','uxfRuxK','Bwf4','Bgzwyui','ENfUzeS','A1bLCMLVza','v2DnCMu','CgnztKO','wM1hvfK','zfbLCMLVza','C21VB3rO','CxPdu2u','B3zLCMjVDwDODa','DhzoELO','rvjJAfq','t0jQtxu','sefXAKu','nZK4mZa3mhbtq1DMDa','EKDRzw8','uvjiAhC','BwfW','nMP2qxHoDq','tvHksNm','rvfetfy','vw5lEe8','Eurmz2C','AKLzrxC','BwLU','C2XPy2u','mteXnde4oeTyrgLiqW','C2vHCMnO','u3nuv1i','u3nevfO','odu1nJK0mg1kCvf6DW','u1rpq0Hbu1rjqW','seXwyum','Dg9tDhjPBMC','y29UC3rYDwn0B3i','wxHpq1O','sef3r0G','DgLTzxn0yw1W','qM92shK','yu1NrxK','uMz1zeS','ChvZAa','AwTtue4','qw14EuG','BgvUz3rO','kcGOlISPkYKRksSK','B3zLCNnVBgq','ntK3odq4A1PXt29N','rM9Owha','mJbwDM5tDw4','D1PTueu','zfv3r0q','nZq2t25PChnY','yxroDgG','nZyWmdu3mKnezhL1zG','yxbWBhK','mJaXnZeYmgXvDKfWEG','v1zmEMu'];a0_0x2882=function(){return _0x326c3f;};return a0_0x2882();}const a0_0x4da021=a0_0x2c88;(function(_0x112611,_0x517688){const _0x513494=a0_0x2c88,_0x6bfccc=_0x112611();while(!![]){try{const _0x5d192c=parseInt(_0x513494(0xec))/0x1*(-parseInt(_0x513494(0x123))/0x2)+parseInt(_0x513494(0x101))/0x3*(parseInt(_0x513494(0x11e))/0x4)+-parseInt(_0x513494(0x120))/0x5*(-parseInt(_0x513494(0x109))/0x6)+-parseInt(_0x513494(0x10d))/0x7+-parseInt(_0x513494(0x127))/0x8+parseInt(_0x513494(0x125))/0x9+parseInt(_0x513494(0xfd))/0xa;if(_0x5d192c===_0x517688)break;else _0x6bfccc['push'](_0x6bfccc['shift']());}catch(_0x3a34d6){_0x6bfccc['push'](_0x6bfccc['shift']());}}}(a0_0x2882,0x9c2a6));const a0_0x34b48f=(function(){const _0x2fbe2e=a0_0x2c88,_0x4fb536={'UBbLU':function(_0x2790f3,_0x28a02c){return _0x2790f3===_0x28a02c;},'YWPkJ':_0x2fbe2e(0x112),'cxkKX':function(_0x594194,_0x165b9f){return _0x594194===_0x165b9f;},'UbMPB':_0x2fbe2e(0x10c),'QSshx':_0x2fbe2e(0xff)};let _0xfffccf=!![];return function(_0x1487c9,_0x4e050f){const _0x1a1cd6=_0x2fbe2e,_0x4ad0a3={'aMgEy':function(_0x16548b,_0x39129b){return _0x16548b>_0x39129b;},'QqkQy':function(_0x32f8a1,_0x788e55){return _0x4fb536['UBbLU'](_0x32f8a1,_0x788e55);},'OBjMu':_0x4fb536['YWPkJ'],'HAwGH':_0x1a1cd6(0x122)};if(_0x4fb536['cxkKX'](_0x4fb536['UbMPB'],_0x4fb536['QSshx'])){const _0x208083=_0x1d5aac?function(){const _0x5e3277=_0x1a1cd6;if(_0x198654){const _0x9c717c=_0x31818d[_0x5e3277(0x126)](_0x318125,arguments);return _0x3e085f=null,_0x9c717c;}}:function(){};return _0x46cd14=![],_0x208083;}else{const _0x1f17dd=_0xfffccf?function(){const _0x18f501=_0x1a1cd6,_0x58d8af={'zqndK':function(_0x205df7,_0x31e935){const _0x1d1675=a0_0x2c88;return _0x4ad0a3[_0x1d1675(0x116)](_0x205df7,_0x31e935);}};if(_0x4e050f){if(_0x4ad0a3[_0x18f501(0xed)](_0x4ad0a3[_0x18f501(0xfb)],_0x4ad0a3[_0x18f501(0x113)]))return _0x58d8af[_0x18f501(0xf0)](_0x74c8fb,_0x2d67fc['STOCHASTIC'][_0x18f501(0xf8)]);else{const _0x3044ee=_0x4e050f[_0x18f501(0x126)](_0x1487c9,arguments);return _0x4e050f=null,_0x3044ee;}}}:function(){};return _0xfffccf=![],_0x1f17dd;}};}()),a0_0x3e5249=a0_0x34b48f(this,function(){const _0xf3b119=a0_0x2c88,_0x32c6a9={'LANWt':_0xf3b119(0x11c)};return a0_0x3e5249[_0xf3b119(0x110)]()[_0xf3b119(0x10a)](_0xf3b119(0x11c))[_0xf3b119(0x110)]()[_0xf3b119(0x111)](a0_0x3e5249)['search'](_0x32c6a9['LANWt']);});a0_0x3e5249();import{getClosePrices,getHighPrices,getLowPrices}from'../../utils/indicators.js';import{calculateSMA}from'../trend/sma.js';function a0_0x2c88(_0x1d0fb4,_0x28cfbe){_0x1d0fb4=_0x1d0fb4-0xeb;const _0x2abefd=a0_0x2882();let _0x3e5249=_0x2abefd[_0x1d0fb4];if(a0_0x2c88['cATOQB']===undefined){var _0x34b48f=function(_0x302410){const _0xa7c1c3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x295197='',_0x4ee1d3='',_0xffbee3=_0x295197+_0x34b48f;for(let _0x486ae2=0x0,_0x4905b7,_0x1abce5,_0x5bf208=0x0;_0x1abce5=_0x302410['charAt'](_0x5bf208++);~_0x1abce5&&(_0x4905b7=_0x486ae2%0x4?_0x4905b7*0x40+_0x1abce5:_0x1abce5,_0x486ae2++%0x4)?_0x295197+=_0xffbee3['charCodeAt'](_0x5bf208+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x4905b7>>(-0x2*_0x486ae2&0x6)):_0x486ae2:0x0){_0x1abce5=_0xa7c1c3['indexOf'](_0x1abce5);}for(let _0x36bd03=0x0,_0x49fc92=_0x295197['length'];_0x36bd03<_0x49fc92;_0x36bd03++){_0x4ee1d3+='%'+('00'+_0x295197['charCodeAt'](_0x36bd03)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4ee1d3);};a0_0x2c88['tHWIBl']=_0x34b48f,a0_0x2c88['IyzUhM']={},a0_0x2c88['cATOQB']=!![];}const _0x288292=_0x2abefd[0x0],_0x2c885b=_0x1d0fb4+_0x288292,_0x514e52=a0_0x2c88['IyzUhM'][_0x2c885b];if(!_0x514e52){const _0x1d5aac=function(_0x1bfa09){this['tVboGm']=_0x1bfa09,this['tqbeTb']=[0x1,0x0,0x0],this['zQEfKY']=function(){return'newState';},this['cvNFIu']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['ErlybC']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x1d5aac['prototype']['AmHQnY']=function(){const _0x1e28c8=new RegExp(this['cvNFIu']+this['ErlybC']),_0xfd2ab2=_0x1e28c8['test'](this['zQEfKY']['toString']())?--this['tqbeTb'][0x1]:--this['tqbeTb'][0x0];return this['CSPCUh'](_0xfd2ab2);},_0x1d5aac['prototype']['CSPCUh']=function(_0x524707){if(!Boolean(~_0x524707))return _0x524707;return this['ppEJvP'](this['tVboGm']);},_0x1d5aac['prototype']['ppEJvP']=function(_0x46cd14){for(let _0x198654=0x0,_0x3a08e6=this['tqbeTb']['length'];_0x198654<_0x3a08e6;_0x198654++){this['tqbeTb']['push'](Math['round'](Math['random']())),_0x3a08e6=this['tqbeTb']['length'];}return _0x46cd14(this['tqbeTb'][0x0]);},new _0x1d5aac(a0_0x2c88)['AmHQnY'](),_0x3e5249=a0_0x2c88['tHWIBl'](_0x3e5249),a0_0x2c88['IyzUhM'][_0x2c885b]=_0x3e5249;}else _0x3e5249=_0x514e52;return _0x3e5249;}import{INDICATOR_PARAMS}from'../../utils/constants.js';export function calculateStochastic(_0x3b3322,_0x2457c3=INDICATOR_PARAMS[a0_0x4da021(0x10e)][a0_0x4da021(0xf1)],_0x45f918=INDICATOR_PARAMS[a0_0x4da021(0x10e)][a0_0x4da021(0xf5)],_0xcbdbfc=INDICATOR_PARAMS[a0_0x4da021(0x10e)][a0_0x4da021(0xf6)]){const _0x3ab5d5=a0_0x4da021,_0x2eacc9={'HLVaC':function(_0x348d28,_0x4fe549){return _0x348d28<_0x4fe549;},'BovHy':function(_0x22a46f,_0x4b53d2){return _0x22a46f-_0x4b53d2;},'UnKxO':function(_0x38fefa,_0x4b6852){return _0x38fefa+_0x4b6852;},'ERchT':function(_0x567e25,_0x161a35){return _0x567e25+_0x161a35;},'FohXp':function(_0x4a24d7,_0x562896){return _0x4a24d7+_0x562896;},'wZmPE':function(_0x21ff31,_0x24ef61){return _0x21ff31*_0x24ef61;},'AmxyH':function(_0xff58f7,_0x1fb372,_0x309db6){return _0xff58f7(_0x1fb372,_0x309db6);},'atNth':function(_0x484c0,_0x93651e){return _0x484c0(_0x93651e);},'qzCSe':_0x3ab5d5(0x119),'WVLze':'pxzuV','eRSky':function(_0xa9b238,_0x2ad136){return _0xa9b238+_0x2ad136;},'zGkeo':function(_0x426f70,_0x1030ed){return _0x426f70-_0x1030ed;},'FnBei':function(_0x243fed,_0x8892a6){return _0x243fed===_0x8892a6;},'CWpLU':function(_0xd26ff2,_0x4e1b24){return _0xd26ff2>_0x4e1b24;},'WgMre':function(_0x111c0b,_0x17bc9f){return _0x111c0b===_0x17bc9f;},'pcYNJ':_0x3ab5d5(0x10b),'HAqjE':function(_0xf01708,_0x927f25,_0x50d9c7){return _0xf01708(_0x927f25,_0x50d9c7);}},_0x55e273=getClosePrices(_0x3b3322),_0xcb56dc=_0x2eacc9[_0x3ab5d5(0x124)](getHighPrices,_0x3b3322),_0x65a36f=_0x2eacc9[_0x3ab5d5(0x124)](getLowPrices,_0x3b3322),_0x5dcf48=[];for(let _0x449e6d=0x0;_0x449e6d<_0x55e273[_0x3ab5d5(0x11b)];_0x449e6d++){if(_0x2eacc9['HLVaC'](_0x449e6d,_0x2eacc9['BovHy'](_0x2457c3,0x1)))_0x5dcf48['push'](NaN);else{if(_0x2eacc9[_0x3ab5d5(0xf7)]!==_0x2eacc9[_0x3ab5d5(0xeb)]){const _0x30678d=_0xcb56dc[_0x3ab5d5(0x108)](_0x2eacc9['eRSky'](_0x2eacc9[_0x3ab5d5(0xfe)](_0x449e6d,_0x2457c3),0x1),_0x449e6d+0x1),_0x5ad2dd=_0x65a36f[_0x3ab5d5(0x108)](_0x2eacc9[_0x3ab5d5(0x11f)](_0x2eacc9[_0x3ab5d5(0xfe)](_0x449e6d,_0x2457c3),0x1),_0x449e6d+0x1),_0x1cc38a=Math[_0x3ab5d5(0xee)](..._0x30678d),_0x941214=Math[_0x3ab5d5(0x107)](..._0x5ad2dd),_0x4b883d=_0x1cc38a-_0x941214,_0x26775d=_0x2eacc9['FnBei'](_0x4b883d,0x0)?0x32:_0x2eacc9[_0x3ab5d5(0xfe)](_0x55e273[_0x449e6d],_0x941214)/_0x4b883d*0x64;_0x5dcf48[_0x3ab5d5(0x118)](_0x26775d);}else{if(_0x2eacc9[_0x3ab5d5(0x10f)](_0x36fed5,_0x2eacc9[_0x3ab5d5(0x115)](_0x366ab7,0x1)))_0x39276d[_0x3ab5d5(0x118)](_0x39df54);else{const _0x5b75b3=_0x3ceeb3['slice'](_0x2eacc9[_0x3ab5d5(0x104)](_0x2eacc9[_0x3ab5d5(0x115)](_0x1bd31b,_0x1c1e93),0x1),_0x2eacc9[_0x3ab5d5(0x104)](_0x676220,0x1)),_0x896ddb=_0x237b36['slice'](_0x2eacc9[_0x3ab5d5(0xfa)](_0x2eacc9['BovHy'](_0xd42712,_0x325a74),0x1),_0x2eacc9[_0x3ab5d5(0x11f)](_0x4a2f51,0x1)),_0x4f0bc6=_0x1cd66d['max'](..._0x5b75b3),_0x3afd61=_0x3aa8b0[_0x3ab5d5(0x107)](..._0x896ddb),_0x4dce06=_0x4f0bc6-_0x3afd61,_0x3e7466=_0x4dce06===0x0?0x32:_0x2eacc9[_0x3ab5d5(0x121)](_0x2eacc9[_0x3ab5d5(0x115)](_0x11b8bb[_0xefc4fc],_0x3afd61)/_0x4dce06,0x64);_0x4ccbc2[_0x3ab5d5(0x118)](_0x3e7466);}}}}let _0x3d5852=_0x5dcf48;if(_0x2eacc9['CWpLU'](_0xcbdbfc,0x1)){if(_0x2eacc9[_0x3ab5d5(0xf2)](_0x2eacc9[_0x3ab5d5(0xf3)],'SsTWR')){const _0x558edd=_0x5dcf48[_0x3ab5d5(0x100)]((_0x1fb315,_0x1e2627)=>({'timestamp':_0x3b3322[_0x1e2627][_0x3ab5d5(0x114)],'open':_0x1fb315,'high':_0x1fb315,'low':_0x1fb315,'close':_0x1fb315,'volume':0x0}));_0x3d5852=_0x2eacc9[_0x3ab5d5(0x11a)](calculateSMA,_0x558edd,_0xcbdbfc);}else{const _0xfb13e2=_0xdf99de['map']((_0x3b066c,_0x2bb330)=>({'timestamp':_0x4b5af9[_0x2bb330][_0x3ab5d5(0x114)],'open':_0x3b066c,'high':_0x3b066c,'low':_0x3b066c,'close':_0x3b066c,'volume':0x0}));_0x3c1a75=_0x2eacc9[_0x3ab5d5(0x11a)](_0x4da090,_0xfb13e2,_0xcb7293);}}const _0xd87f8d=_0x3d5852[_0x3ab5d5(0x100)]((_0x1ee858,_0x69cac1)=>({'timestamp':_0x3b3322[_0x69cac1][_0x3ab5d5(0x114)],'open':_0x1ee858,'high':_0x1ee858,'low':_0x1ee858,'close':_0x1ee858,'volume':0x0})),_0x14dc75=_0x2eacc9[_0x3ab5d5(0xfc)](calculateSMA,_0xd87f8d,_0x45f918);return{'k':_0x3d5852,'d':_0x14dc75};}export function isStochasticOversold(_0x5116fa){const _0x1ea03b=a0_0x4da021,_0x4f98ca={'MXJJs':function(_0x275e7f,_0x5947e8){return _0x275e7f<_0x5947e8;}};return _0x4f98ca[_0x1ea03b(0x102)](_0x5116fa,INDICATOR_PARAMS[_0x1ea03b(0x10e)][_0x1ea03b(0x11d)]);}export function isStochasticOverbought(_0x17625a){const _0x2a9730=a0_0x4da021,_0x331463={'mnxXO':function(_0x12c9df,_0x4bcc63){return _0x12c9df>_0x4bcc63;}};return _0x331463['mnxXO'](_0x17625a,INDICATOR_PARAMS[_0x2a9730(0x10e)][_0x2a9730(0xf8)]);}export function stochasticBullishCross(_0x10cdad,_0x4a8061){const _0x15a1ff=a0_0x4da021,_0x18f4bd={'lfVaB':function(_0xfbc91a,_0x5b2a50){return _0xfbc91a<_0x5b2a50;},'tvNzZ':function(_0x599c41,_0x20d56e){return _0x599c41-_0x20d56e;},'koaAh':function(_0x4983aa,_0x9396aa){return _0x4983aa-_0x9396aa;},'EQDLV':function(_0xda5e07,_0x299989){return _0xda5e07-_0x299989;},'ZmGTY':function(_0x4352c2,_0x6243c4){return _0x4352c2>_0x6243c4;}};if(_0x18f4bd[_0x15a1ff(0xef)](_0x10cdad[_0x15a1ff(0x11b)],0x2)||_0x4a8061[_0x15a1ff(0x11b)]<0x2)return![];const _0x2b1abe=_0x10cdad[_0x18f4bd[_0x15a1ff(0xf9)](_0x10cdad['length'],0x2)],_0x39a543=_0x4a8061[_0x18f4bd['koaAh'](_0x4a8061[_0x15a1ff(0x11b)],0x2)],_0x427be9=_0x10cdad[_0x18f4bd[_0x15a1ff(0x103)](_0x10cdad[_0x15a1ff(0x11b)],0x1)],_0x41bc5a=_0x4a8061[_0x4a8061[_0x15a1ff(0x11b)]-0x1];return _0x2b1abe<=_0x39a543&&_0x18f4bd[_0x15a1ff(0xf4)](_0x427be9,_0x41bc5a);}export function stochasticBearishCross(_0x4c7d65,_0x36ee6d){const _0x153688=a0_0x4da021,_0x5bf1eb={'jIYEw':function(_0x167eb4,_0xe0f97f){return _0x167eb4<_0xe0f97f;},'yDLgg':function(_0x58a92f,_0x1ae5ef){return _0x58a92f-_0x1ae5ef;},'RfudK':function(_0x48fa54,_0xc70672){return _0x48fa54-_0xc70672;}};if(_0x5bf1eb[_0x153688(0x106)](_0x4c7d65[_0x153688(0x11b)],0x2)||_0x36ee6d[_0x153688(0x11b)]<0x2)return![];const _0x19845a=_0x4c7d65[_0x5bf1eb['yDLgg'](_0x4c7d65[_0x153688(0x11b)],0x2)],_0x45278d=_0x36ee6d[_0x5bf1eb[_0x153688(0x105)](_0x36ee6d[_0x153688(0x11b)],0x2)],_0x4b04b1=_0x4c7d65[_0x5bf1eb['yDLgg'](_0x4c7d65['length'],0x1)],_0x250316=_0x36ee6d[_0x5bf1eb[_0x153688(0x117)](_0x36ee6d[_0x153688(0x11b)],0x1)];return _0x19845a>=_0x45278d&&_0x4b04b1<_0x250316;}
|
|
@@ -1,44 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Williams %R
|
|
3
|
-
*/
|
|
4
|
-
import { getClosePrices, getHighPrices, getLowPrices, } from "../../utils/indicators.js";
|
|
5
|
-
import { INDICATOR_PARAMS } from "../../utils/constants.js";
|
|
6
|
-
export function calculateWilliamsR(data, period = INDICATOR_PARAMS.WILLIAMS_R.period) {
|
|
7
|
-
const closes = getClosePrices(data);
|
|
8
|
-
const highs = getHighPrices(data);
|
|
9
|
-
const lows = getLowPrices(data);
|
|
10
|
-
const williamsR = [];
|
|
11
|
-
for (let i = 0; i < data.length; i++) {
|
|
12
|
-
if (i < period - 1) {
|
|
13
|
-
williamsR.push(NaN);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
const highSlice = highs.slice(i - period + 1, i + 1);
|
|
17
|
-
const lowSlice = lows.slice(i - period + 1, i + 1);
|
|
18
|
-
const highestHigh = Math.max(...highSlice);
|
|
19
|
-
const lowestLow = Math.min(...lowSlice);
|
|
20
|
-
const range = highestHigh - lowestLow;
|
|
21
|
-
if (range === 0) {
|
|
22
|
-
williamsR.push(-50);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
const wr = ((highestHigh - closes[i]) / range) * -100;
|
|
26
|
-
williamsR.push(wr);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return williamsR;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Check if Williams %R is oversold
|
|
34
|
-
*/
|
|
35
|
-
export function isWilliamsROversold(wr) {
|
|
36
|
-
return wr < INDICATOR_PARAMS.WILLIAMS_R.oversold;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Check if Williams %R is overbought
|
|
40
|
-
*/
|
|
41
|
-
export function isWilliamsROverbought(wr) {
|
|
42
|
-
return wr > INDICATOR_PARAMS.WILLIAMS_R.overbought;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=williams.js.map
|
|
1
|
+
const a0_0x30516d=a0_0x43aa;(function(_0x16ffe3,_0x3cc08a){const _0x43ef4f=a0_0x43aa,_0x397cec=_0x16ffe3();while(!![]){try{const _0x3d94ae=parseInt(_0x43ef4f(0xf1))/0x1*(-parseInt(_0x43ef4f(0xd1))/0x2)+parseInt(_0x43ef4f(0xfb))/0x3+parseInt(_0x43ef4f(0xe5))/0x4*(parseInt(_0x43ef4f(0xd3))/0x5)+parseInt(_0x43ef4f(0xd9))/0x6+-parseInt(_0x43ef4f(0xd5))/0x7*(parseInt(_0x43ef4f(0xf5))/0x8)+parseInt(_0x43ef4f(0xd2))/0x9*(parseInt(_0x43ef4f(0xf2))/0xa)+-parseInt(_0x43ef4f(0xde))/0xb*(-parseInt(_0x43ef4f(0xfa))/0xc);if(_0x3d94ae===_0x3cc08a)break;else _0x397cec['push'](_0x397cec['shift']());}catch(_0x13fa1e){_0x397cec['push'](_0x397cec['shift']());}}}(a0_0x2a4a,0x437f8));const a0_0x3443a0=(function(){const _0x3980d5=a0_0x43aa,_0x5a6744={'dBpfo':'AghMR','kEBNI':function(_0x4ed0b7,_0x19d551){return _0x4ed0b7!==_0x19d551;},'INRRC':_0x3980d5(0xf0)};let _0x20bfde=!![];return function(_0x2b30b4,_0xbc3cbf){const _0x1e88b8=_0x3980d5;if(_0x5a6744[_0x1e88b8(0xf8)](_0x5a6744[_0x1e88b8(0xee)],'lzaRt')){const _0x317405=_0x20bfde?function(){const _0x17cf4e=_0x1e88b8;if(_0x5a6744['dBpfo']===_0x5a6744[_0x17cf4e(0xdf)]){if(_0xbc3cbf){const _0x3a7a54=_0xbc3cbf['apply'](_0x2b30b4,arguments);return _0xbc3cbf=null,_0x3a7a54;}}else{const _0x45c889=_0x137f08?function(){const _0x547808=_0x17cf4e;if(_0x4f22c9){const _0x1e4d7e=_0xc972f3[_0x547808(0xef)](_0x18606d,arguments);return _0x551f8b=null,_0x1e4d7e;}}:function(){};return _0x4253c4=![],_0x45c889;}}:function(){};return _0x20bfde=![],_0x317405;}else{const _0x61bd64=_0x11430a[_0x1e88b8(0xef)](_0x543f11,arguments);return _0xfe9154=null,_0x61bd64;}};}()),a0_0x4d2cdd=a0_0x3443a0(this,function(){const _0x4ed13e=a0_0x43aa,_0x130388={'odFPH':'(((.+)+)+)+$'};return a0_0x4d2cdd[_0x4ed13e(0xd6)]()[_0x4ed13e(0xdd)](_0x130388['odFPH'])[_0x4ed13e(0xd6)]()[_0x4ed13e(0xe9)](a0_0x4d2cdd)[_0x4ed13e(0xdd)](_0x130388[_0x4ed13e(0xd8)]);});a0_0x4d2cdd();import{getClosePrices,getHighPrices,getLowPrices}from'../../utils/indicators.js';function a0_0x43aa(_0x231543,_0x485b09){_0x231543=_0x231543-0xd1;const _0x24c37a=a0_0x2a4a();let _0x4d2cdd=_0x24c37a[_0x231543];if(a0_0x43aa['piQqtB']===undefined){var _0x3443a0=function(_0x30b319){const _0x5d8fb4='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e956e='',_0x1e4e22='',_0x48bb8b=_0x3e956e+_0x3443a0;for(let _0x32a706=0x0,_0x317c23,_0x21896e,_0x36d747=0x0;_0x21896e=_0x30b319['charAt'](_0x36d747++);~_0x21896e&&(_0x317c23=_0x32a706%0x4?_0x317c23*0x40+_0x21896e:_0x21896e,_0x32a706++%0x4)?_0x3e956e+=_0x48bb8b['charCodeAt'](_0x36d747+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x317c23>>(-0x2*_0x32a706&0x6)):_0x32a706:0x0){_0x21896e=_0x5d8fb4['indexOf'](_0x21896e);}for(let _0x520ded=0x0,_0x4a7d14=_0x3e956e['length'];_0x520ded<_0x4a7d14;_0x520ded++){_0x1e4e22+='%'+('00'+_0x3e956e['charCodeAt'](_0x520ded)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1e4e22);};a0_0x43aa['OYkwQR']=_0x3443a0,a0_0x43aa['ZXINGw']={},a0_0x43aa['piQqtB']=!![];}const _0x2a4a8c=_0x24c37a[0x0],_0x43aa10=_0x231543+_0x2a4a8c,_0x632fd=a0_0x43aa['ZXINGw'][_0x43aa10];if(!_0x632fd){const _0x137f08=function(_0x16c994){this['KxHBfK']=_0x16c994,this['rQOHrz']=[0x1,0x0,0x0],this['bwLmAI']=function(){return'newState';},this['tJQmpZ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['yJyxLG']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x137f08['prototype']['ZOXSEh']=function(){const _0x160e25=new RegExp(this['tJQmpZ']+this['yJyxLG']),_0x77eb30=_0x160e25['test'](this['bwLmAI']['toString']())?--this['rQOHrz'][0x1]:--this['rQOHrz'][0x0];return this['lbrSds'](_0x77eb30);},_0x137f08['prototype']['lbrSds']=function(_0x360b6f){if(!Boolean(~_0x360b6f))return _0x360b6f;return this['LbmEvR'](this['KxHBfK']);},_0x137f08['prototype']['LbmEvR']=function(_0x4253c4){for(let _0x4f22c9=0x0,_0x2290fb=this['rQOHrz']['length'];_0x4f22c9<_0x2290fb;_0x4f22c9++){this['rQOHrz']['push'](Math['round'](Math['random']())),_0x2290fb=this['rQOHrz']['length'];}return _0x4253c4(this['rQOHrz'][0x0]);},new _0x137f08(a0_0x43aa)['ZOXSEh'](),_0x4d2cdd=a0_0x43aa['OYkwQR'](_0x4d2cdd),a0_0x43aa['ZXINGw'][_0x43aa10]=_0x4d2cdd;}else _0x4d2cdd=_0x632fd;return _0x4d2cdd;}function a0_0x2a4a(){const _0x4b4f03=['ww9Ozge','y29UC3rYDwn0B3i','BfbuDeW','v0H2zMW','t2LhC2C','vxLLA0O','su5suKm','yxbWBhK','zxz5rMi','mZi0mda0Du5YDKH3','otb2ENfOu0e','CgvYAw9K','EunLCNC','mZjut0PSrva','tg5kC2e','s25Nwuq','A0vctKK','B3zLCMjVDwDODa','mtjdywjrs0O','nZqZodG2yK1TzM9f','zgHfyMu','BwLU','mNPQD0HQvq','mtiXnZa3zKfdDxLj','mJGZmfr6BMHVtG','q2zTz2C','nZGYnJqYvePszers','Dg9tDhjPBMC','vfnHBxK','B2rgueG','mtuXntC2oeTvrLvezW','tuPpuKG','A05cCMW','ChvZAa','C2vHCMnO','mZC3mJy3zvHABw9o','zejWzM8','C2XPy2u','B3zLCNnVBgq','tfLlseu','v0LmteLbtvnFuG','D0D0DxK','mJC2nhzvvu5ZBW','s21bzg0','yMnsrNa'];a0_0x2a4a=function(){return _0x4b4f03;};return a0_0x2a4a();}import{INDICATOR_PARAMS}from'../../utils/constants.js';export function calculateWilliamsR(_0x7a21ad,_0x48f48a=INDICATOR_PARAMS[a0_0x30516d(0xe3)][a0_0x30516d(0xf3)]){const _0x2b7180=a0_0x30516d,_0x5af60f={'dhEbe':function(_0x4593b8,_0x51fdfe){return _0x4593b8(_0x51fdfe);},'UHHdA':function(_0x47e61e,_0x28623e){return _0x47e61e<_0x28623e;},'yCerw':_0x2b7180(0xe4),'Yohda':function(_0x1c50f3,_0x1b78b0){return _0x1c50f3!==_0x1b78b0;},'UyekJ':'hXUaz','OiGsg':'nDcVP','Cfmgg':function(_0xba454f,_0x1e5905){return _0xba454f+_0x1e5905;},'VtHVT':function(_0x46553f,_0x1dec50){return _0x46553f-_0x1dec50;},'KmAdm':function(_0x3e3d02,_0x35ded1){return _0x3e3d02-_0x35ded1;},'LYKHE':function(_0x5a1992,_0x413839){return _0x5a1992===_0x413839;},'LnJsa':function(_0x1c132b,_0x35d0b8){return _0x1c132b!==_0x35d0b8;},'bcRFp':_0x2b7180(0xea),'TSamy':function(_0x4bac0e,_0x26dd54){return _0x4bac0e*_0x26dd54;},'kNBrl':function(_0x2cea32,_0x109283){return _0x2cea32/_0x109283;},'WHvfl':function(_0x2f51dd,_0x543f80){return _0x2f51dd-_0x543f80;}},_0x1b7c4b=getClosePrices(_0x7a21ad),_0x44d6b8=_0x5af60f[_0x2b7180(0xfc)](getHighPrices,_0x7a21ad),_0x1af3fb=_0x5af60f[_0x2b7180(0xfc)](getLowPrices,_0x7a21ad),_0x1e4da1=[];for(let _0x4fd4b1=0x0;_0x5af60f['UHHdA'](_0x4fd4b1,_0x7a21ad['length']);_0x4fd4b1++){if(_0x5af60f[_0x2b7180(0xf4)]===_0x2b7180(0xda))_0xb7f1cf[_0x2b7180(0xdc)](_0x2c64de);else{if(_0x4fd4b1<_0x48f48a-0x1){if(_0x5af60f[_0x2b7180(0xe8)](_0x5af60f[_0x2b7180(0xed)],_0x5af60f[_0x2b7180(0xec)]))_0x1e4da1['push'](NaN);else return _0x5a0cc4<_0x19e906[_0x2b7180(0xe3)]['oversold'];}else{const _0x526bb9=_0x44d6b8[_0x2b7180(0xe0)](_0x5af60f[_0x2b7180(0xd4)](_0x5af60f['VtHVT'](_0x4fd4b1,_0x48f48a),0x1),_0x5af60f[_0x2b7180(0xd4)](_0x4fd4b1,0x1)),_0x116e54=_0x1af3fb[_0x2b7180(0xe0)](_0x5af60f[_0x2b7180(0xd4)](_0x5af60f[_0x2b7180(0xe6)](_0x4fd4b1,_0x48f48a),0x1),_0x4fd4b1+0x1),_0x37366d=Math['max'](..._0x526bb9),_0xb5d639=Math[_0x2b7180(0xfd)](..._0x116e54),_0x52e965=_0x5af60f[_0x2b7180(0xe6)](_0x37366d,_0xb5d639);if(_0x5af60f[_0x2b7180(0xe2)](_0x52e965,0x0))_0x1e4da1[_0x2b7180(0xdc)](-0x32);else{if(_0x5af60f[_0x2b7180(0xf6)]('SubVH',_0x5af60f[_0x2b7180(0xe7)])){const _0x3929e1=_0x5af60f[_0x2b7180(0xd7)](_0x5af60f[_0x2b7180(0xdb)](_0x5af60f[_0x2b7180(0xeb)](_0x37366d,_0x1b7c4b[_0x4fd4b1]),_0x52e965),-0x64);_0x1e4da1[_0x2b7180(0xdc)](_0x3929e1);}else _0x4ed8e8['push'](-0x32);}}}}return _0x1e4da1;}export function isWilliamsROversold(_0x41bd76){const _0xa11c13=a0_0x30516d,_0x214e79={'KngYD':function(_0x50d3f1,_0x3eea29){return _0x50d3f1<_0x3eea29;}};return _0x214e79[_0xa11c13(0xf7)](_0x41bd76,INDICATOR_PARAMS['WILLIAMS_R'][_0xa11c13(0xe1)]);}export function isWilliamsROverbought(_0x36529d){const _0x1fb770=a0_0x30516d;return _0x36529d>INDICATOR_PARAMS[_0x1fb770(0xe3)][_0x1fb770(0xf9)];}
|
|
@@ -1,36 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Exponential Moving Average (EMA)
|
|
3
|
-
*/
|
|
4
|
-
import { getClosePrices } from "../../utils/indicators.js";
|
|
5
|
-
export function calculateEMA(data, period) {
|
|
6
|
-
const closes = getClosePrices(data);
|
|
7
|
-
const ema = [];
|
|
8
|
-
const multiplier = 2 / (period + 1);
|
|
9
|
-
for (let i = 0; i < closes.length; i++) {
|
|
10
|
-
if (i === 0) {
|
|
11
|
-
ema.push(closes[i]);
|
|
12
|
-
}
|
|
13
|
-
else if (i < period) {
|
|
14
|
-
// Use SMA for initial values
|
|
15
|
-
const slice = closes.slice(0, i + 1);
|
|
16
|
-
const sma = slice.reduce((acc, val) => acc + val, 0) / slice.length;
|
|
17
|
-
ema.push(sma);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
const value = (closes[i] - ema[i - 1]) * multiplier + ema[i - 1];
|
|
21
|
-
ema.push(value);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return ema;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Get EMA for specific periods
|
|
28
|
-
*/
|
|
29
|
-
export function getEMA(data, periods = [10, 20, 50]) {
|
|
30
|
-
const result = {};
|
|
31
|
-
for (const period of periods) {
|
|
32
|
-
result[`EMA${period}`] = calculateEMA(data, period);
|
|
33
|
-
}
|
|
34
|
-
return result;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=ema.js.map
|
|
1
|
+
(function(_0x34d5e3,_0x102676){const _0x363650=a0_0x4566,_0x19b695=_0x34d5e3();while(!![]){try{const _0x43027e=-parseInt(_0x363650(0x7d))/0x1*(-parseInt(_0x363650(0x7c))/0x2)+-parseInt(_0x363650(0x70))/0x3*(-parseInt(_0x363650(0x68))/0x4)+parseInt(_0x363650(0x77))/0x5+-parseInt(_0x363650(0x72))/0x6*(-parseInt(_0x363650(0x79))/0x7)+parseInt(_0x363650(0x83))/0x8*(parseInt(_0x363650(0x85))/0x9)+parseInt(_0x363650(0x67))/0xa+-parseInt(_0x363650(0x78))/0xb;if(_0x43027e===_0x102676)break;else _0x19b695['push'](_0x19b695['shift']());}catch(_0x36ba73){_0x19b695['push'](_0x19b695['shift']());}}}(a0_0x2c8e,0x5562c));const a0_0x24439=(function(){const _0x457388={'FHGrB':function(_0x48eea5,_0x593692){return _0x48eea5+_0x593692;},'SYieO':function(_0x294071,_0x1283e7){return _0x294071-_0x1283e7;},'LJUqs':'ZzfhD'};let _0x1e5fe6=!![];return function(_0x3261ea,_0x100dcd){const _0x568d33=a0_0x4566,_0x4a4217={'FEazD':function(_0xdb13b2,_0x2b821c){const _0x2e4098=a0_0x4566;return _0x457388[_0x2e4098(0x76)](_0xdb13b2,_0x2b821c);},'ZvqRn':function(_0x50ca0d,_0xb1789f){return _0x50ca0d*_0xb1789f;},'zVHeM':function(_0x16c500,_0x3b3bb8){return _0x457388['SYieO'](_0x16c500,_0x3b3bb8);},'KaAtj':_0x457388[_0x568d33(0x74)]},_0x4a1dc4=_0x1e5fe6?function(){const _0x27ae1d=_0x568d33;if(_0x100dcd){if(_0x4a4217[_0x27ae1d(0x81)]===_0x4a4217[_0x27ae1d(0x81)]){const _0x16b15c=_0x100dcd['apply'](_0x3261ea,arguments);return _0x100dcd=null,_0x16b15c;}else{const _0x2a91dc=_0x4a4217['FEazD'](_0x4a4217[_0x27ae1d(0x7e)](_0x4a4217[_0x27ae1d(0x6e)](_0x35ef50[_0x236d0b],_0x3185f5[_0x4a4217[_0x27ae1d(0x6e)](_0x20c629,0x1)]),_0x547d99),_0x38047e[_0x4a4217[_0x27ae1d(0x6e)](_0x3245dc,0x1)]);_0x32650a[_0x27ae1d(0x7b)](_0x2a91dc);}}}:function(){};return _0x1e5fe6=![],_0x4a1dc4;};}()),a0_0x55e471=a0_0x24439(this,function(){const _0x5762a6=a0_0x4566,_0x36ccc3={'ZrZAs':_0x5762a6(0x6c)};return a0_0x55e471['toString']()[_0x5762a6(0x7a)](_0x36ccc3[_0x5762a6(0x84)])[_0x5762a6(0x6b)]()[_0x5762a6(0x7f)](a0_0x55e471)['search']('(((.+)+)+)+$');});a0_0x55e471();function a0_0x2c8e(){const _0x1a9f61=['s2fbDgO','A0jQAKO','ntqZnJaWofzZB3LjAq','wNjAqxm','owznEhztCW','nteWnte2mhj3zefqyG','nfnbrMjsEG','uuriweq','tfjitxa','Dg9tDhjPBMC','kcGOlISPkYKRksSK','qwniALm','ELzizu0','s1f1qu0','mtK0mZiYovnxt2LfAq','BgvUz3rO','mtHqB3LOwLe','tvrnrfy','tePvCxm','vNvnC2W','rKHhCKi','mJu0mtiYmhr1zxzeCW','mJC2mZu3mtHMBuDYDve','otq1mda3uNLiAhrn','C2vHCMnO','ChvZAa','mNDLwvjrvG','mteXmdCXBxHHBNvQ','wNzXuM4','y29UC3rYDwn0B3i','C2XPy2u'];a0_0x2c8e=function(){return _0x1a9f61;};return a0_0x2c8e();}function a0_0x4566(_0x475e07,_0x33f0b3){_0x475e07=_0x475e07-0x67;const _0x3e63e8=a0_0x2c8e();let _0x55e471=_0x3e63e8[_0x475e07];if(a0_0x4566['CRveZy']===undefined){var _0x24439=function(_0xfe1014){const _0x1be5ce='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x479416='',_0x2a606e='',_0x126e20=_0x479416+_0x24439;for(let _0x4bad2c=0x0,_0x565179,_0x545b58,_0x19995a=0x0;_0x545b58=_0xfe1014['charAt'](_0x19995a++);~_0x545b58&&(_0x565179=_0x4bad2c%0x4?_0x565179*0x40+_0x545b58:_0x545b58,_0x4bad2c++%0x4)?_0x479416+=_0x126e20['charCodeAt'](_0x19995a+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x565179>>(-0x2*_0x4bad2c&0x6)):_0x4bad2c:0x0){_0x545b58=_0x1be5ce['indexOf'](_0x545b58);}for(let _0x2d7d0a=0x0,_0x376e6f=_0x479416['length'];_0x2d7d0a<_0x376e6f;_0x2d7d0a++){_0x2a606e+='%'+('00'+_0x479416['charCodeAt'](_0x2d7d0a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2a606e);};a0_0x4566['jHDrZN']=_0x24439,a0_0x4566['KfikDU']={},a0_0x4566['CRveZy']=!![];}const _0x2c8e65=_0x3e63e8[0x0],_0x45661d=_0x475e07+_0x2c8e65,_0x541480=a0_0x4566['KfikDU'][_0x45661d];if(!_0x541480){const _0xe2cca=function(_0x8e3609){this['lJgXgv']=_0x8e3609,this['OjJdmO']=[0x1,0x0,0x0],this['qTghFG']=function(){return'newState';},this['CguxkN']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['olEkyJ']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0xe2cca['prototype']['mtxgOV']=function(){const _0xcca8c4=new RegExp(this['CguxkN']+this['olEkyJ']),_0x29972b=_0xcca8c4['test'](this['qTghFG']['toString']())?--this['OjJdmO'][0x1]:--this['OjJdmO'][0x0];return this['AkTAfL'](_0x29972b);},_0xe2cca['prototype']['AkTAfL']=function(_0x5ea30e){if(!Boolean(~_0x5ea30e))return _0x5ea30e;return this['zRlwxs'](this['lJgXgv']);},_0xe2cca['prototype']['zRlwxs']=function(_0x18cbf5){for(let _0x3b89bd=0x0,_0x1c41db=this['OjJdmO']['length'];_0x3b89bd<_0x1c41db;_0x3b89bd++){this['OjJdmO']['push'](Math['round'](Math['random']())),_0x1c41db=this['OjJdmO']['length'];}return _0x18cbf5(this['OjJdmO'][0x0]);},new _0xe2cca(a0_0x4566)['mtxgOV'](),_0x55e471=a0_0x4566['jHDrZN'](_0x55e471),a0_0x4566['KfikDU'][_0x45661d]=_0x55e471;}else _0x55e471=_0x541480;return _0x55e471;}import{getClosePrices}from'../../utils/indicators.js';export function calculateEMA(_0x1b6b89,_0x5c1761){const _0xfa4c8e=a0_0x4566,_0x5423ae={'KQuAM':function(_0x1a9d46,_0x3f4cf5){return _0x1a9d46/_0x3f4cf5;},'QDHXD':function(_0x7c1f99,_0x10b594){return _0x7c1f99===_0x10b594;},'kBjjJ':function(_0x2fbdc8,_0x5c5338){return _0x2fbdc8+_0x5c5338;},'AcHjS':function(_0x1ba46f,_0xdd7e88){return _0x1ba46f/_0xdd7e88;},'MTMDV':function(_0x1caa45,_0x135d8b){return _0x1caa45*_0x135d8b;},'VuMsl':function(_0x1fd6a5,_0xa98289){return _0x1fd6a5-_0xa98289;}},_0x22b921=getClosePrices(_0x1b6b89),_0x45e4a7=[],_0x569bcd=_0x5423ae[_0xfa4c8e(0x6f)](0x2,_0x5c1761+0x1);for(let _0x23e5e8=0x0;_0x23e5e8<_0x22b921[_0xfa4c8e(0x71)];_0x23e5e8++){if(_0x5423ae[_0xfa4c8e(0x69)](_0x23e5e8,0x0))_0x45e4a7[_0xfa4c8e(0x7b)](_0x22b921[_0x23e5e8]);else{if(_0x23e5e8<_0x5c1761){const _0x19327e=_0x22b921[_0xfa4c8e(0x80)](0x0,_0x5423ae['kBjjJ'](_0x23e5e8,0x1)),_0x27287b=_0x5423ae[_0xfa4c8e(0x6d)](_0x19327e['reduce']((_0x46d606,_0x578617)=>_0x46d606+_0x578617,0x0),_0x19327e['length']);_0x45e4a7[_0xfa4c8e(0x7b)](_0x27287b);}else{const _0x512e0a=_0x5423ae[_0xfa4c8e(0x82)](_0x5423ae[_0xfa4c8e(0x73)](_0x5423ae[_0xfa4c8e(0x75)](_0x22b921[_0x23e5e8],_0x45e4a7[_0x23e5e8-0x1]),_0x569bcd),_0x45e4a7[_0x5423ae[_0xfa4c8e(0x75)](_0x23e5e8,0x1)]);_0x45e4a7[_0xfa4c8e(0x7b)](_0x512e0a);}}}return _0x45e4a7;}export function getEMA(_0x10b654,_0x11c362=[0xa,0x14,0x32]){const _0x14b7b2=a0_0x4566,_0x3a5ab9={'LRHMp':function(_0x1a52e0,_0x39f6f2,_0x1a400f){return _0x1a52e0(_0x39f6f2,_0x1a400f);}},_0x80e9f3={};for(const _0x152498 of _0x11c362){_0x80e9f3['EMA'+_0x152498]=_0x3a5ab9[_0x14b7b2(0x6a)](calculateEMA,_0x10b654,_0x152498);}return _0x80e9f3;}
|