fib fixes
This commit is contained in:
parent
b932fa2d75
commit
fbb469de57
1 changed files with 39 additions and 27 deletions
|
|
@ -166,11 +166,12 @@ class FibLevelsPrimitive {
|
||||||
ctx.lineTo(item.x + 0.5, item.y1);
|
ctx.lineTo(item.x + 0.5, item.y1);
|
||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
ctx.save();
|
ctx.save();
|
||||||
|
ctx.font = '20px "IBM Plex Mono", ui-monospace, monospace';
|
||||||
ctx.translate(item.x, (item.y0 + item.y1) / 2);
|
ctx.translate(item.x, (item.y0 + item.y1) / 2);
|
||||||
ctx.rotate(-Math.PI / 2);
|
ctx.rotate(-Math.PI / 2);
|
||||||
ctx.textAlign = 'center';
|
ctx.textAlign = 'center';
|
||||||
ctx.textBaseline = item.x > 14 ? 'bottom' : 'top';
|
ctx.textBaseline = item.x > 22 ? 'bottom' : 'top';
|
||||||
ctx.fillText('fibonacci', 0, item.x > 14 ? -2 : 2);
|
ctx.fillText('fibonacci', 0, item.x > 22 ? -2 : 2);
|
||||||
ctx.restore();
|
ctx.restore();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -2577,10 +2578,17 @@ class ConfluenceChart {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleLevel(id) {
|
||||||
|
return this.levels.find(value => value.id === id)
|
||||||
|
|| this.fibs.find(item => item.id === id)
|
||||||
|
|| null;
|
||||||
|
}
|
||||||
|
|
||||||
fibAsHandleLevel() {
|
fibAsHandleLevel() {
|
||||||
const fib = this.fibs.find(item => item.id === this.selectedLineId && !item.hidden);
|
const fib = this.fibs.find(item => item.id === this.selectedLineId && !item.hidden);
|
||||||
if (!fib) return null;
|
if (!fib) return null;
|
||||||
return { ...fib, kind: 'manual', slope: Number(fib.slope) || 0 };
|
if (fib.slope == null) fib.slope = 0;
|
||||||
|
return fib;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderAnchorHandles() {
|
renderAnchorHandles() {
|
||||||
|
|
@ -2732,7 +2740,7 @@ class ConfluenceChart {
|
||||||
startAnchorDrag(event, anchor) {
|
startAnchorDrag(event, anchor) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const level = this.levels.find(value => value.id === this.selectedLineId);
|
const level = this.handleLevel(this.selectedLineId);
|
||||||
this.draggingAnchor = {
|
this.draggingAnchor = {
|
||||||
id: this.selectedLineId,
|
id: this.selectedLineId,
|
||||||
anchor: level && ConfluenceChart.isFlat(level) ? 'price' : anchor,
|
anchor: level && ConfluenceChart.isFlat(level) ? 'price' : anchor,
|
||||||
|
|
@ -2743,7 +2751,7 @@ class ConfluenceChart {
|
||||||
|
|
||||||
moveAnchor(event) {
|
moveAnchor(event) {
|
||||||
if (!this.draggingAnchor || !this.chartEl) return;
|
if (!this.draggingAnchor || !this.chartEl) return;
|
||||||
const level = this.levels.find(value => value.id === this.draggingAnchor.id);
|
const level = this.handleLevel(this.draggingAnchor.id);
|
||||||
if (!level || !this.bars.length) return;
|
if (!level || !this.bars.length) return;
|
||||||
const point = this.eventPoint(event);
|
const point = this.eventPoint(event);
|
||||||
if (!point || !this.withinPlot(point)) {
|
if (!point || !this.withinPlot(point)) {
|
||||||
|
|
@ -2764,19 +2772,23 @@ class ConfluenceChart {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const secondPrice = level.anchor_p + level.slope * (level.last_t - level.anchor_t);
|
const secondPrice = level.anchor_p + level.slope * (level.last_t - level.anchor_t);
|
||||||
|
const fib = level.kind === 'fibonacci';
|
||||||
if (this.draggingAnchor.anchor === 'start') {
|
if (this.draggingAnchor.anchor === 'start') {
|
||||||
if (time >= level.last_t) return;
|
if (!fib && time >= level.last_t) return;
|
||||||
|
if (fib && time === level.last_t) return;
|
||||||
level.anchor_t = time;
|
level.anchor_t = time;
|
||||||
level.anchor_p = price;
|
level.anchor_p = price;
|
||||||
level.slope = (secondPrice - price) / (level.last_t - time);
|
level.slope = (secondPrice - price) / (level.last_t - time);
|
||||||
} else {
|
} else {
|
||||||
if (time <= level.anchor_t) return;
|
if (!fib && time <= level.anchor_t) return;
|
||||||
|
if (fib && time === level.anchor_t) return;
|
||||||
if (level.cutoff_t != null && time >= level.cutoff_t) return;
|
if (level.cutoff_t != null && time >= level.cutoff_t) return;
|
||||||
level.last_t = time;
|
level.last_t = time;
|
||||||
level.slope = (price - level.anchor_p) / (time - level.anchor_t);
|
level.slope = (price - level.anchor_p) / (time - level.anchor_t);
|
||||||
}
|
}
|
||||||
const entry = this.levelSeries.get(level.id);
|
const entry = this.levelSeries.get(level.id);
|
||||||
if (entry) entry.series.setData(this.seriesLineData(level));
|
if (entry) entry.series.setData(this.seriesLineData(level));
|
||||||
|
if (fib) this.syncFibLines();
|
||||||
this.renderAnchorHandles();
|
this.renderAnchorHandles();
|
||||||
this.renderLineBridges();
|
this.renderLineBridges();
|
||||||
}
|
}
|
||||||
|
|
@ -2784,7 +2796,7 @@ class ConfluenceChart {
|
||||||
finishAnchorDrag(event) {
|
finishAnchorDrag(event) {
|
||||||
if (!this.draggingAnchor) return;
|
if (!this.draggingAnchor) return;
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const level = this.levels.find(value => value.id === this.draggingAnchor.id);
|
const level = this.handleLevel(this.draggingAnchor.id);
|
||||||
this.draggingAnchor = null;
|
this.draggingAnchor = null;
|
||||||
this.detachPointers('anchor');
|
this.detachPointers('anchor');
|
||||||
this.hideSnapDot();
|
this.hideSnapDot();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue