Skip to content

Commit aa03c04

Browse files
committed
Hotfix : missing math namespace for floating point equality check
small performance optimization (removed array slicing in the main loop)
1 parent 01eefca commit aa03c04

File tree

5 files changed

+25
-64
lines changed

5 files changed

+25
-64
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pinets",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"description": "",
55
"main": "dist/pinets.dev.es.js",
66
"types": "dist/types/index.d.ts",

src/PineTS.class.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export class PineTS {
4848
) {
4949
this._readyPromise = new Promise((resolve) => {
5050
this.loadMarketData(source, tickerId, timeframe, limit, sDate, eDate).then((data) => {
51-
const marketData = data.reverse().slice(0, MAX_PERIODS);
51+
const marketData = data.slice(0, MAX_PERIODS);
5252

5353
this._periods = marketData.length;
5454
this.data = marketData;
@@ -115,21 +115,29 @@ export class PineTS {
115115
let transpiledFn = transformer(pineTSCode);
116116

117117
//console.log('>>> transformedFn: ', transformedFn.toString());
118-
118+
context.data.close = [];
119+
context.data.open = [];
120+
context.data.high = [];
121+
context.data.low = [];
122+
context.data.volume = [];
123+
context.data.hl2 = [];
124+
context.data.hlc3 = [];
125+
context.data.ohlc4 = [];
126+
context.data.openTime = [];
127+
context.data.closeTime = [];
119128
const contextVarNames = ['const', 'var', 'let', 'params'];
120-
for (let i = this._periods - n, idx = n - 1; i < this._periods; i++, idx--) {
129+
for (let i = this._periods - n; i < this._periods; i++) {
121130
context.idx = i;
122131

123-
context.data.close = this.close.slice(idx);
124-
context.data.open = this.open.slice(idx);
125-
context.data.high = this.high.slice(idx);
126-
context.data.low = this.low.slice(idx);
127-
context.data.volume = this.volume.slice(idx);
128-
context.data.hl2 = this.hl2.slice(idx);
129-
context.data.hlc3 = this.hlc3.slice(idx);
130-
context.data.ohlc4 = this.ohlc4.slice(idx);
131-
context.data.openTime = this.openTime.slice(idx);
132-
context.data.closeTime = this.closeTime.slice(idx);
132+
context.data.close.unshift(this.close[i]);
133+
context.data.open.unshift(this.open[i]);
134+
context.data.high.unshift(this.high[i]);
135+
context.data.low.unshift(this.low[i]);
136+
context.data.volume.unshift(this.volume[i]);
137+
context.data.hl2.unshift(this.hl2[i]);
138+
context.data.hlc3.unshift(this.hlc3[i]);
139+
context.data.ohlc4.unshift(this.ohlc4[i]);
140+
context.data.openTime.unshift(this.openTime[i]);
133141

134142
const result = await transpiledFn(context);
135143

src/namespaces/TechnicalAnalysis.ts

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -946,53 +946,6 @@ function rma(source: number[], period: number): number[] {
946946
return result;
947947
}
948948

949-
function sma_cache(
950-
source: number[],
951-
period: number,
952-
cacheObj: {
953-
previousSum?: number;
954-
lastProcessedIndex?: number;
955-
previousResult?: number[];
956-
}
957-
) {
958-
const result = cacheObj.previousResult || new Array(source.length).fill(NaN);
959-
const lastProcessedIndex = cacheObj.lastProcessedIndex || -1;
960-
let previousSum = cacheObj.previousSum || 0;
961-
962-
if (lastProcessedIndex === -1 || source.length !== lastProcessedIndex + 1) {
963-
// Initialize cache or handle reset/different length source
964-
previousSum = 0;
965-
for (let i = 0; i < period; i++) {
966-
previousSum += source[i] || 0;
967-
}
968-
result[period - 1] = previousSum / period;
969-
970-
// Fill initial values with NaN for cache initialization as well
971-
for (let i = 0; i < period - 1; i++) {
972-
result[i] = NaN;
973-
}
974-
975-
for (let i = period; i < source.length; i++) {
976-
previousSum = previousSum - (source[i - period] || 0) + (source[i] || 0);
977-
result[i] = previousSum / period;
978-
}
979-
} else if (source.length === lastProcessedIndex + 2) {
980-
// Optimized calculation for new element
981-
const newIndex = source.length - 1;
982-
previousSum = previousSum - (source[newIndex - period] || 0) + (source[newIndex] || 0);
983-
result[newIndex] = previousSum / period;
984-
} else {
985-
// Fallback to full calculation if cache is inconsistent or source length changed unexpectedly
986-
return sma(source, period);
987-
}
988-
989-
cacheObj.previousSum = previousSum;
990-
cacheObj.lastProcessedIndex = source.length - 1;
991-
cacheObj.previousResult = result;
992-
993-
return result;
994-
}
995-
996949
function sma(source: number[], period: number): number[] {
997950
const result = new Array(source.length).fill(NaN);
998951

src/transpiler/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1998,7 +1998,7 @@ function transformEqualityChecks(ast: any): void {
19981998
type: 'MemberExpression',
19991999
object: {
20002000
type: 'Identifier',
2001-
name: 'math',
2001+
name: '$.math',
20022002
},
20032003
property: {
20042004
type: 'Identifier',

tests/core/transpiler.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ describe('Transpiler', () => {
612612
for (let i = 1; i <= avg_len[0]; i++) {
613613
$.let.fn2_ret_val[0] += avg_src[i];
614614
}
615-
if (math.__eq(avg_len[0], 0)) {
615+
if ($.math.__eq(avg_len[0], 0)) {
616616
$.let.fn2_ret_val[0] = $.let.fn2_cc[1];
617617
}
618618
return $.precision($.let.fn2_ret_val[0] / avg_len[0]);
@@ -701,7 +701,7 @@ describe('Transpiler', () => {
701701
for (let i = 1; i <= avg_len[0]; i++) {
702702
$.let.fn1_ret_val[0] += avg_src[i];
703703
}
704-
if (math.__eq(avg_len[0], 0)) {
704+
if ($.math.__eq(avg_len[0], 0)) {
705705
$.let.fn1_ret_val[0] = $.let.fn1_cc[1];
706706
}
707707
return $.precision($.let.fn1_ret_val[0] / avg_len[0]);

0 commit comments

Comments
 (0)