복합지표 전략 추가
This commit is contained in:
@@ -71,14 +71,20 @@ export function migratePriceExtremeCondition(cond: ConditionDSL): ConditionDSL {
|
||||
const leftField = cond.leftField && priceFields.has(cond.leftField)
|
||||
? cond.leftField
|
||||
: 'CLOSE_PRICE';
|
||||
const rightField = priorExtremeField(ind, period);
|
||||
let conditionType = cond.conditionType;
|
||||
if (conditionType === 'CROSS_UP' && ind === 'NEW_HIGH' && !rightField.startsWith('NH_PRIOR_')) {
|
||||
conditionType = 'GTE';
|
||||
} else if (conditionType === 'CROSS_DOWN' && ind === 'NEW_LOW' && !rightField.startsWith('NL_PRIOR_')) {
|
||||
conditionType = 'LTE';
|
||||
}
|
||||
return syncPriceExtremeSimpleFields({
|
||||
...cond,
|
||||
composite: false,
|
||||
leftField,
|
||||
rightField,
|
||||
period,
|
||||
conditionType: cond.conditionType === 'CROSS_UP' ? 'GTE'
|
||||
: cond.conditionType === 'CROSS_DOWN' ? 'LTE'
|
||||
: cond.conditionType,
|
||||
conditionType,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -96,13 +102,27 @@ export function migratePriceExtremeCondition(cond: ConditionDSL): ConditionDSL {
|
||||
});
|
||||
}
|
||||
|
||||
if (migrated.conditionType === 'CROSS_UP' && ind === 'NEW_HIGH') {
|
||||
if (migrated.conditionType === 'CROSS_UP' && ind === 'NEW_HIGH'
|
||||
&& !migrated.rightField?.startsWith('NH_PRIOR_')) {
|
||||
migrated = { ...migrated, conditionType: 'GTE' };
|
||||
}
|
||||
if (migrated.conditionType === 'CROSS_DOWN' && ind === 'NEW_LOW') {
|
||||
if (migrated.conditionType === 'CROSS_DOWN' && ind === 'NEW_LOW'
|
||||
&& !migrated.rightField?.startsWith('NL_PRIOR_')) {
|
||||
migrated = { ...migrated, conditionType: 'LTE' };
|
||||
}
|
||||
|
||||
// 종가 vs NH/NL_PRIOR — GTE/LTE 유지형은 봉마다 시그널 → CROSS 돌파 1봉으로 정규화
|
||||
if (ind === 'NEW_HIGH' && migrated.leftField === 'CLOSE_PRICE'
|
||||
&& migrated.conditionType === 'GTE'
|
||||
&& migrated.rightField?.startsWith('NH_PRIOR_')) {
|
||||
migrated = { ...migrated, conditionType: 'CROSS_UP' };
|
||||
}
|
||||
if (ind === 'NEW_LOW' && migrated.leftField === 'CLOSE_PRICE'
|
||||
&& migrated.conditionType === 'LTE'
|
||||
&& migrated.rightField?.startsWith('NL_PRIOR_')) {
|
||||
migrated = { ...migrated, conditionType: 'CROSS_DOWN' };
|
||||
}
|
||||
|
||||
return migrated;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user