|
16 | 16 | #include <hikyuu/indicator/crt/CORR.h> |
17 | 17 | #include <hikyuu/indicator/crt/CVAL.h> |
18 | 18 | #include <hikyuu/indicator/crt/EMA.h> |
| 19 | +#include <hikyuu/indicator/crt/FACTOR.h> |
19 | 20 | #include <hikyuu/indicator/crt/MA.h> |
20 | 21 | #include <hikyuu/indicator/crt/KDATA.h> |
21 | 22 | #include <hikyuu/indicator/crt/REF.h> |
@@ -1342,6 +1343,36 @@ TEST_CASE("test_FactorSet_compiled_values_match_legacy") { |
1342 | 1343 | } |
1343 | 1344 | } |
1344 | 1345 |
|
| 1346 | +TEST_CASE("test_FactorSet_compiled_values_keep_nested_factors_distinct") { |
| 1347 | + Stock stock = StockManager::instance().getStock("sh000001"); |
| 1348 | + REQUIRE_FALSE(stock.isNull()); |
| 1349 | + |
| 1350 | + Factor close_ma5("INNER_CLOSE_MA5", MA(CLOSE(), 5), KQuery::DAY); |
| 1351 | + Factor high_ma3("INNER_HIGH_MA3", MA(HIGH(), 3), KQuery::DAY); |
| 1352 | + FactorSet factorset("NESTED_FACTORS", KQuery::DAY); |
| 1353 | + factorset.add("OUTER_CLOSE_MA5", FACTOR(close_ma5)); |
| 1354 | + factorset.add("OUTER_HIGH_MA3", FACTOR(high_ma3)); |
| 1355 | + |
| 1356 | + KQuery query(0, 30, KQuery::DAY); |
| 1357 | + KData kdata = stock.getKData(query); |
| 1358 | + REQUIRE_FALSE(kdata.empty()); |
| 1359 | + |
| 1360 | + auto compiled = factorset.getValues({stock}, query, false, false, true); |
| 1361 | + auto legacy = factorset.getValues({stock}, query, false, false, false); |
| 1362 | + REQUIRE_EQ(compiled.size(), 1); |
| 1363 | + REQUIRE_EQ(compiled[0].size(), 2); |
| 1364 | + REQUIRE_EQ(legacy.size(), 1); |
| 1365 | + REQUIRE_EQ(legacy[0].size(), 2); |
| 1366 | + |
| 1367 | + Indicator expected_close_ma5 = FACTOR(close_ma5)(kdata).getResult(0); |
| 1368 | + Indicator expected_high_ma3 = FACTOR(high_ma3)(kdata).getResult(0); |
| 1369 | + check_indicator(compiled[0][0], expected_close_ma5); |
| 1370 | + check_indicator(compiled[0][1], expected_high_ma3); |
| 1371 | + check_indicator(legacy[0][0].getResult(0), expected_close_ma5); |
| 1372 | + check_indicator(legacy[0][1].getResult(0), expected_high_ma3); |
| 1373 | + CHECK_FALSE(compiled[0][0].equal(compiled[0][1])); |
| 1374 | +} |
| 1375 | + |
1345 | 1376 | TEST_CASE("test_FactorSet_formula_results_keep_independent_graphs") { |
1346 | 1377 | Stock stock = StockManager::instance().getStock("sh000001"); |
1347 | 1378 | REQUIRE_FALSE(stock.isNull()); |
|
0 commit comments