일목균형표 조건 수정
This commit is contained in:
@@ -382,25 +382,43 @@ function ichimokuSanyakuBuyTrigger(def: IndicatorPeriodDef, level: StableStrateg
|
|||||||
return makeCondition('ICHIMOKU', 'CLOUD_BREAK_UP', 'NONE', 'NONE', def);
|
return makeCondition('ICHIMOKU', 'CLOUD_BREAK_UP', 'NONE', 'NONE', def);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 일목 삼역호전 — 공통 추세·구름 필터 */
|
/**
|
||||||
function ichimokuSanyakuCoreFilters(def: IndicatorPeriodDef, level: StableStrategyFilterLevel): LogicNode[] {
|
* 구름 돌파 직후에는 전환>기준·양운이 아직 false인 경우가 많음(전형적 바닥 반등).
|
||||||
const nodes: LogicNode[] = [
|
* 보통: 둘 중 하나만 충족하면 됨 / 강함: 둘 다 + 최근 N봉 내 양운 형성 허용
|
||||||
|
*/
|
||||||
|
function ichimokuSanyakuTrendConfirm(def: IndicatorPeriodDef, level: StableStrategyFilterLevel): LogicNode[] {
|
||||||
|
if (level === 'relaxed') return [];
|
||||||
|
if (level === 'balanced') {
|
||||||
|
return [
|
||||||
|
wrapOr([
|
||||||
makeCondition('ICHIMOKU', 'GT', 'CONVERSION_LINE', 'BASE_LINE', def),
|
makeCondition('ICHIMOKU', 'GT', 'CONVERSION_LINE', 'BASE_LINE', def),
|
||||||
makeCondition('ICHIMOKU', 'ABOVE_CLOUD', 'CLOSE_PRICE', 'NONE', def),
|
|
||||||
];
|
|
||||||
if (level === 'relaxed') {
|
|
||||||
nodes.unshift(makeCondition('ICHIMOKU', 'GT', 'CLOSE_PRICE', 'CONVERSION_LINE', def));
|
|
||||||
return nodes;
|
|
||||||
}
|
|
||||||
nodes.unshift(
|
|
||||||
makeCondition('ICHIMOKU', 'GT', 'CLOSE_PRICE', 'CONVERSION_LINE', def),
|
|
||||||
makeCondition('ICHIMOKU', 'GT', 'CLOSE_PRICE', 'BASE_LINE', def),
|
|
||||||
);
|
|
||||||
nodes.push(
|
|
||||||
makeCondition('ICHIMOKU', 'SPAN1_GT_SPAN2', 'LEADING_SPAN1', 'LEADING_SPAN2', def),
|
makeCondition('ICHIMOKU', 'SPAN1_GT_SPAN2', 'LEADING_SPAN1', 'LEADING_SPAN2', def),
|
||||||
|
]),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
makeCondition('ICHIMOKU', 'GT', 'CONVERSION_LINE', 'BASE_LINE', def),
|
||||||
|
makeCondition('ICHIMOKU', 'SPAN1_GT_SPAN2', 'LEADING_SPAN1', 'LEADING_SPAN2', def, {
|
||||||
|
candleRangeMode: 'EXISTS_IN',
|
||||||
|
candleRange: 26,
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 일목 삼역호전 — 공통 추세·구름 필터 (돌파 봉 기준) */
|
||||||
|
function ichimokuSanyakuCoreFilters(def: IndicatorPeriodDef, level: StableStrategyFilterLevel): LogicNode[] {
|
||||||
|
if (level === 'relaxed') {
|
||||||
|
return [
|
||||||
|
makeCondition('ICHIMOKU', 'GT', 'CLOSE_PRICE', 'CONVERSION_LINE', def),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
const nodes: LogicNode[] = [
|
||||||
|
makeCondition('ICHIMOKU', 'GT', 'CLOSE_PRICE', 'CONVERSION_LINE', def),
|
||||||
makeCondition('ICHIMOKU', 'LAGGING_GT_PRICE', 'LAGGING_SPAN', 'CLOSE_PRICE', def),
|
makeCondition('ICHIMOKU', 'LAGGING_GT_PRICE', 'LAGGING_SPAN', 'CLOSE_PRICE', def),
|
||||||
);
|
...ichimokuSanyakuTrendConfirm(def, level),
|
||||||
|
];
|
||||||
if (level === 'strict') {
|
if (level === 'strict') {
|
||||||
|
nodes.splice(1, 0, makeCondition('ICHIMOKU', 'GT', 'CLOSE_PRICE', 'BASE_LINE', def));
|
||||||
nodes.push(makeCondition('ICHIMOKU', 'LAGGING_ABOVE_PRIOR_CLOUD', 'NONE', 'NONE', def));
|
nodes.push(makeCondition('ICHIMOKU', 'LAGGING_ABOVE_PRIOR_CLOUD', 'NONE', 'NONE', def));
|
||||||
}
|
}
|
||||||
return nodes;
|
return nodes;
|
||||||
@@ -554,9 +572,9 @@ export function stableStrategyFilterSummary(
|
|||||||
}
|
}
|
||||||
if (strategyId === 'ICHIMOKU_TREND' && level === 'relaxed') parts.push('구름필터 없음');
|
if (strategyId === 'ICHIMOKU_TREND' && level === 'relaxed') parts.push('구름필터 없음');
|
||||||
if (strategyId === 'ICHIMOKU_SANYAKU') {
|
if (strategyId === 'ICHIMOKU_SANYAKU') {
|
||||||
if (level === 'strict') parts.push('후행구름·MA60·거래량150%');
|
if (level === 'strict') parts.push('삼역 전체·MA60·거래량150%');
|
||||||
else if (level === 'balanced') parts.push('구름돌파·양운·후행');
|
else if (level === 'balanced') parts.push('구름돌파·(전환>기준 OR 양운)');
|
||||||
else parts.push('구름돌파·핵심만');
|
else parts.push('구름돌파·종가>전환');
|
||||||
}
|
}
|
||||||
if (strategyId === 'MACD_MOMENTUM' && level === 'relaxed') parts.push('EMA60·ADX 없음');
|
if (strategyId === 'MACD_MOMENTUM' && level === 'relaxed') parts.push('EMA60·ADX 없음');
|
||||||
if (strategyId === 'MA_TREND' && level === 'relaxed') parts.push('ADX 없음');
|
if (strategyId === 'MA_TREND' && level === 'relaxed') parts.push('ADX 없음');
|
||||||
|
|||||||
Reference in New Issue
Block a user