fix: 일목 구름 zOrder·배치 후 갱신 및 잘못된 기간 파라미터 복원
프로덕션에서 구름이 다른 primitive/시리즈에 가려지지 않도록 bottom zOrder를 적용하고, 지표 배치·재로드 후 구름 데이터를 다시 적용한다. DB에 1로 저장된 기간은 기본값으로 복원한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -854,6 +854,16 @@ export class ChartManager {
|
|||||||
}
|
}
|
||||||
if (configs.length > 0) {
|
if (configs.length > 0) {
|
||||||
this._finalizeIndicatorPaneLayout();
|
this._finalizeIndicatorPaneLayout();
|
||||||
|
this._refreshAllIchimokuClouds();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 배치 로드 후 구름 데이터·렌더 갱신 (다른 오버레이 추가로 primitive 순서가 바뀐 경우 대비) */
|
||||||
|
private _refreshAllIchimokuClouds(): void {
|
||||||
|
for (const entry of this.indicators.values()) {
|
||||||
|
if (entry.type !== 'IchimokuCloud' || !entry.cloudPlugin || !entry.config) continue;
|
||||||
|
this._applyIchimokuCloudPlugin(entry.cloudPlugin, {}, entry.config);
|
||||||
|
entry.cloudPlugin.updateAllViews();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -919,6 +929,7 @@ export class ChartManager {
|
|||||||
if (this._indicatorLoadStale(loadGen)) return;
|
if (this._indicatorLoadStale(loadGen)) return;
|
||||||
|
|
||||||
this._finalizeIndicatorPaneLayout();
|
this._finalizeIndicatorPaneLayout();
|
||||||
|
this._refreshAllIchimokuClouds();
|
||||||
}
|
}
|
||||||
|
|
||||||
removeIndicator(id: string): void {
|
removeIndicator(id: string): void {
|
||||||
|
|||||||
@@ -123,6 +123,9 @@ class CloudPaneView implements IPrimitivePaneView {
|
|||||||
this._plugin.getBearishVisible(),
|
this._plugin.getBearishVisible(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** BB·RSI 영역 등 다른 primitive/시리즈보다 아래에 그려 구름이 가려지지 않게 함 */
|
||||||
|
zOrder(): 'bottom' { return 'bottom'; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// ─── Plugin ────────────────────────────────────────────────────────────────
|
// ─── Plugin ────────────────────────────────────────────────────────────────
|
||||||
@@ -169,6 +172,10 @@ export class IchimokuCloudPlugin implements ISeriesPrimitive<Time> {
|
|||||||
getBullishVisible() { return this._bullishVisible; }
|
getBullishVisible() { return this._bullishVisible; }
|
||||||
getBearishVisible() { return this._bearishVisible; }
|
getBearishVisible() { return this._bearishVisible; }
|
||||||
|
|
||||||
|
updateAllViews(): void {
|
||||||
|
this._updateFn?.();
|
||||||
|
}
|
||||||
|
|
||||||
paneViews(): readonly IPrimitivePaneView[] {
|
paneViews(): readonly IPrimitivePaneView[] {
|
||||||
if (!this._chart || !this._series) return [];
|
if (!this._chart || !this._series) return [];
|
||||||
return [new CloudPaneView(this)];
|
return [new CloudPaneView(this)];
|
||||||
|
|||||||
@@ -152,7 +152,8 @@ export function normalizeIchimokuConfig(config: IndicatorConfig): IndicatorConfi
|
|||||||
};
|
};
|
||||||
for (const key of Object.keys(ICHIMOKU_DEFAULT_PARAMS)) {
|
for (const key of Object.keys(ICHIMOKU_DEFAULT_PARAMS)) {
|
||||||
const v = params[key];
|
const v = params[key];
|
||||||
if (typeof v !== 'number' || v < 1) {
|
// DB에 1로 저장된 잘못된 값은 spanA≈spanB → 구름 높이 0
|
||||||
|
if (typeof v !== 'number' || v < 2) {
|
||||||
params[key] = ICHIMOKU_DEFAULT_PARAMS[key];
|
params[key] = ICHIMOKU_DEFAULT_PARAMS[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user