From af277b68d5fac989ba0fb9ad625c0a6d7f1291b5 Mon Sep 17 00:00:00 2001 From: "Way, No" Date: Sat, 22 Apr 2017 19:57:58 +1200 Subject: [PATCH 1/3] fixing ohlc showing wrong color when open equals close --- src/traces/candlestick/transform.js | 8 +++++- src/traces/ohlc/helpers.js | 39 ++++++++++++++++++++++++++--- src/traces/ohlc/transform.js | 7 +++++- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/traces/candlestick/transform.js b/src/traces/candlestick/transform.js index ce0aaeb03ad..b8b847ab3d4 100644 --- a/src/traces/candlestick/transform.js +++ b/src/traces/candlestick/transform.js @@ -114,10 +114,16 @@ exports.calcTransform = function calcTransform(gd, trace, opts) { y.push(l, o, c, c, c, h); }; + var isPrevThisDirection = null; + for(var i = 0; i < len; i++) { - if(filterFn(open[i], close[i])) { + if(filterFn(open[i], close[i], isPrevThisDirection, open[i - 1], close[i - 1])) { appendX(i); appendY(open[i], high[i], low[i], close[i]); + isPrevThisDirection = true; + } else { + isPrevThisDirection = false; + // not adding this candle to this direction bunch } } diff --git a/src/traces/ohlc/helpers.js b/src/traces/ohlc/helpers.js index e7fca7d0d60..dd18e209fda 100644 --- a/src/traces/ohlc/helpers.js +++ b/src/traces/ohlc/helpers.js @@ -97,13 +97,46 @@ exports.makeTransform = function(traceIn, state, direction) { exports.getFilterFn = function(direction) { switch(direction) { case 'increasing': - return function(o, c) { return o <= c; }; + return function(o, c, isPrevThisDirection, oprev, cprev) { + if (o == c) { + if (c > cprev) { + return true // increasing + } else if (c < cprev) { + return false // decreasing + } else { + if (isPrevThisDirection === true) { + return true // determine by last candle + } else if (isPrevThisDirection == false) { + return false // determine by last candle + } else { + return true // If we don't have previous data, assume it was increasing + } + } + } + return o < c; + }; case 'decreasing': - return function(o, c) { return o > c; }; + return function(o, c, isPrevThisDirection, oprev, cprev) { + if (o == c) { + if (c > cprev) { + return false // increasing + } else if (c < cprev) { + return true // decreasing + } else { + if (isPrevThisDirection === true) { + return true // determine by last candle + } else if (isPrevThisDirection == false) { + return false // determine by last candle + } else { + return false // If we don't have previous data, assume it was increasing + } + } + } + return o > c; + }; } }; - exports.addRangeSlider = function(data, layout) { var hasOneVisibleTrace = false; diff --git a/src/traces/ohlc/transform.js b/src/traces/ohlc/transform.js index 236536056ac..ad080f3013c 100644 --- a/src/traces/ohlc/transform.js +++ b/src/traces/ohlc/transform.js @@ -194,11 +194,16 @@ exports.calcTransform = function calcTransform(gd, trace, opts) { textOut.push(_t, _t, _t, _t, _t, _t, null); }; + var isPrevThisDirection = null; for(var i = 0; i < len; i++) { - if(filterFn(open[i], close[i])) { + if(filterFn(open[i], close[i], isPrevThisDirection, open[i - 1], close[i - 1])) { appendX(i); appendY(open[i], high[i], low[i], close[i]); appendText(i, open[i], high[i], low[i], close[i]); + isPrevThisDirection = true; + } else { + isPrevThisDirection = false; + // not adding this candle to this direction bunch } } From 20494db7757b447aea4ef5db874ae3979649d620 Mon Sep 17 00:00:00 2001 From: Ilia Sidorenko Date: Sat, 22 Apr 2017 22:19:00 +1200 Subject: [PATCH 2/3] lint --- src/traces/ohlc/helpers.js | 46 +++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/traces/ohlc/helpers.js b/src/traces/ohlc/helpers.js index dd18e209fda..e1b7076752e 100644 --- a/src/traces/ohlc/helpers.js +++ b/src/traces/ohlc/helpers.js @@ -98,42 +98,42 @@ exports.getFilterFn = function(direction) { switch(direction) { case 'increasing': return function(o, c, isPrevThisDirection, oprev, cprev) { - if (o == c) { - if (c > cprev) { - return true // increasing - } else if (c < cprev) { - return false // decreasing + if(o === c) { + if(c > cprev) { + return true; // increasing + } else if(c < cprev) { + return false; // decreasing } else { - if (isPrevThisDirection === true) { - return true // determine by last candle - } else if (isPrevThisDirection == false) { - return false // determine by last candle + if(isPrevThisDirection === true) { + return true; // determine by last candle + } else if(isPrevThisDirection === false) { + return false; // determine by last candle } else { - return true // If we don't have previous data, assume it was increasing + return true; // If we don't have previous data, assume it was increasing } } } - return o < c; + return o < c; }; case 'decreasing': - return function(o, c, isPrevThisDirection, oprev, cprev) { - if (o == c) { - if (c > cprev) { - return false // increasing - } else if (c < cprev) { - return true // decreasing + return function(o, c, isPrevThisDirection, oprev, cprev) { + if(o === c) { + if(c > cprev) { + return false; // increasing + } else if(c < cprev) { + return true; // decreasing } else { - if (isPrevThisDirection === true) { - return true // determine by last candle - } else if (isPrevThisDirection == false) { - return false // determine by last candle + if(isPrevThisDirection === true) { + return true; // determine by last candle + } else if(isPrevThisDirection === false) { + return false; // determine by last candle } else { - return false // If we don't have previous data, assume it was increasing + return false; // If we don't have previous data, assume it was increasing } } } - return o > c; + return o > c; }; } }; From c4f77037cdcb0763d6c72c851eb9c583fbc2a590 Mon Sep 17 00:00:00 2001 From: Ilia Sidorenko Date: Sat, 29 Apr 2017 01:59:08 +1200 Subject: [PATCH 3/3] isolating state logic in getFilterFn --- src/traces/candlestick/transform.js | 8 +------- src/traces/ohlc/helpers.js | 21 +++++++++++++++++++-- src/traces/ohlc/transform.js | 7 +------ 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/traces/candlestick/transform.js b/src/traces/candlestick/transform.js index b8b847ab3d4..ce0aaeb03ad 100644 --- a/src/traces/candlestick/transform.js +++ b/src/traces/candlestick/transform.js @@ -114,16 +114,10 @@ exports.calcTransform = function calcTransform(gd, trace, opts) { y.push(l, o, c, c, c, h); }; - var isPrevThisDirection = null; - for(var i = 0; i < len; i++) { - if(filterFn(open[i], close[i], isPrevThisDirection, open[i - 1], close[i - 1])) { + if(filterFn(open[i], close[i])) { appendX(i); appendY(open[i], high[i], low[i], close[i]); - isPrevThisDirection = true; - } else { - isPrevThisDirection = false; - // not adding this candle to this direction bunch } } diff --git a/src/traces/ohlc/helpers.js b/src/traces/ohlc/helpers.js index e1b7076752e..01f07dbcaac 100644 --- a/src/traces/ohlc/helpers.js +++ b/src/traces/ohlc/helpers.js @@ -95,9 +95,15 @@ exports.makeTransform = function(traceIn, state, direction) { }; exports.getFilterFn = function(direction) { + + var fn; + var isPrevThisDirection = null; + var oprev = null; + var cprev = null; + switch(direction) { case 'increasing': - return function(o, c, isPrevThisDirection, oprev, cprev) { + var fn = function(o, c) { if(o === c) { if(c > cprev) { return true; // increasing @@ -115,9 +121,10 @@ exports.getFilterFn = function(direction) { } return o < c; }; + break; case 'decreasing': - return function(o, c, isPrevThisDirection, oprev, cprev) { + var fn = function(o, c) { if(o === c) { if(c > cprev) { return false; // increasing @@ -135,7 +142,17 @@ exports.getFilterFn = function(direction) { } return o > c; }; + break } + + return function(o, c) { + var out = fn(o, c); + isPrevThisDirection = !!out; + oprev = o; + cprev = c; + return out; + }; + }; exports.addRangeSlider = function(data, layout) { var hasOneVisibleTrace = false; diff --git a/src/traces/ohlc/transform.js b/src/traces/ohlc/transform.js index ad080f3013c..236536056ac 100644 --- a/src/traces/ohlc/transform.js +++ b/src/traces/ohlc/transform.js @@ -194,16 +194,11 @@ exports.calcTransform = function calcTransform(gd, trace, opts) { textOut.push(_t, _t, _t, _t, _t, _t, null); }; - var isPrevThisDirection = null; for(var i = 0; i < len; i++) { - if(filterFn(open[i], close[i], isPrevThisDirection, open[i - 1], close[i - 1])) { + if(filterFn(open[i], close[i])) { appendX(i); appendY(open[i], high[i], low[i], close[i]); appendText(i, open[i], high[i], low[i], close[i]); - isPrevThisDirection = true; - } else { - isPrevThisDirection = false; - // not adding this candle to this direction bunch } }