일목균형표 수정

This commit is contained in:
Macbook
2026-05-27 23:36:48 +09:00
parent 9cee6387c3
commit 8cc0d1c88c
73 changed files with 2256 additions and 334 deletions
@@ -18,6 +18,7 @@ import NumericParamInput from './NumericParamInput';
import PlotLineStylePicker from './PlotLineStylePicker';
import ColorInput from './ColorInput';
import { colorToRgbaString, cloudColorOpacityPercent } from '../utils/ichimokuConfig';
import { resolveHistogramUpColor, resolveHistogramDownColor } from '../utils/plotColorUtils';
import type { IchimokuCloudColors } from '../utils/ichimokuConfig';
const SRC_OPTIONS = ['close', 'open', 'high', 'low', 'hl2', 'hlc3', 'ohlc4'];
@@ -187,9 +188,29 @@ export const PlotSettingsRow: React.FC<{
</div>
)}
{!inputsOnly && (
isHistogram ? (
isHistogram && indicatorType === 'MACD' ? (
<div className="ism-hist-colors">
<div className="ism-hist-color-field">
<span className="ism-style-label"></span>
<ColorInput
value={resolveHistogramUpColor(plot)}
disabled={!enabled}
onChange={v => onPlotStyle(plotIndex, { histogramUpColor: v, color: v })}
/>
</div>
<div className="ism-hist-color-field">
<span className="ism-style-label"></span>
<ColorInput
value={resolveHistogramDownColor(plot)}
disabled={!enabled}
onChange={v => onPlotStyle(plotIndex, { histogramDownColor: v })}
/>
</div>
</div>
) : isHistogram ? (
<ColorInput
value={plot.color}
disabled={!enabled}
onChange={v => onPlotStyle(plotIndex, { color: v })}
/>
) : (
@@ -339,45 +360,72 @@ export const SettingsOutputFooter: React.FC<{
export const IchimokuCloudSection: React.FC<{
cloudColors: IchimokuCloudColors;
onChange: (patch: Partial<IchimokuCloudColors>) => void;
}> = ({ cloudColors, onChange }) => (
<>
<div className="ism-ichimoku-cloud-divider" />
<div className="ism-ichimoku-cloud-section">
<h4 className="ism-ichimoku-cloud-title"> </h4>
<p className="ism-ichimoku-cloud-hint">
1·2 .
</p>
<div className="ism-ichimoku-cloud-grid">
<div className="ism-ichimoku-cloud-card">
<span className="ism-ichimoku-cloud-card-label"> (1 &gt; 2)</span>
<div className="ism-ichimoku-cloud-card-row">
<ColorInput
value={cloudColors.bullishColor}
onChange={v => onChange({ bullishColor: v })}
/>
}> = ({ cloudColors, onChange }) => {
const bullishOn = cloudColors.bullishVisible !== false;
const bearishOn = cloudColors.bearishVisible !== false;
return (
<>
<div className="ism-ichimoku-cloud-divider" />
<div className="ism-ichimoku-cloud-section">
<h4 className="ism-ichimoku-cloud-title"> </h4>
<p className="ism-ichimoku-cloud-hint">
1·2 . · on/off .
</p>
<div className="ism-ichimoku-cloud-grid">
<div className={`ism-ichimoku-cloud-card${bullishOn ? '' : ' ism-ichimoku-cloud-card--off'}`}>
<div className="ism-ichimoku-cloud-card-head">
<label className="ism-toggle ism-ichimoku-cloud-toggle">
<input
type="checkbox"
checked={bullishOn}
onChange={e => onChange({ bullishVisible: e.target.checked })}
/>
<span className="ism-toggle-slider" />
</label>
<span className="ism-ichimoku-cloud-card-label"> (1 &gt; 2)</span>
</div>
<div className="ism-ichimoku-cloud-card-row">
<ColorInput
value={cloudColors.bullishColor}
disabled={!bullishOn}
onChange={v => onChange({ bullishColor: v })}
/>
</div>
<div className="ism-ichimoku-cloud-meta">
{colorToRgbaString(cloudColors.bullishColor)}
{' · '} {cloudColorOpacityPercent(cloudColors.bullishColor)}%
</div>
</div>
<div className="ism-ichimoku-cloud-meta">
{colorToRgbaString(cloudColors.bullishColor)}
{' · '} {cloudColorOpacityPercent(cloudColors.bullishColor)}%
</div>
</div>
<div className="ism-ichimoku-cloud-card">
<span className="ism-ichimoku-cloud-card-label"> (1 &lt; 2)</span>
<div className="ism-ichimoku-cloud-card-row">
<ColorInput
value={cloudColors.bearishColor}
onChange={v => onChange({ bearishColor: v })}
/>
</div>
<div className="ism-ichimoku-cloud-meta">
{colorToRgbaString(cloudColors.bearishColor)}
{' · '} {cloudColorOpacityPercent(cloudColors.bearishColor)}%
<div className={`ism-ichimoku-cloud-card${bearishOn ? '' : ' ism-ichimoku-cloud-card--off'}`}>
<div className="ism-ichimoku-cloud-card-head">
<label className="ism-toggle ism-ichimoku-cloud-toggle">
<input
type="checkbox"
checked={bearishOn}
onChange={e => onChange({ bearishVisible: e.target.checked })}
/>
<span className="ism-toggle-slider" />
</label>
<span className="ism-ichimoku-cloud-card-label"> (1 &lt; 2)</span>
</div>
<div className="ism-ichimoku-cloud-card-row">
<ColorInput
value={cloudColors.bearishColor}
disabled={!bearishOn}
onChange={v => onChange({ bearishColor: v })}
/>
</div>
<div className="ism-ichimoku-cloud-meta">
{colorToRgbaString(cloudColors.bearishColor)}
{' · '} {cloudColorOpacityPercent(cloudColors.bearishColor)}%
</div>
</div>
</div>
</div>
</div>
</>
);
</>
);
};
/* ── 볼린저밴드 백그라운드 (업비트 모습 탭) ───────────────────── */
export const BollingerBackgroundRow: React.FC<{