Skip to content

Commit

Permalink
Merge pull request #314 from fasiondog/feature/index
Browse files Browse the repository at this point in the history
添加部分 tdx 88指数导入; add INDEXO/INDEXH/INDEXL/INDEXC/INDEXA/INDEXV/INDEXADV/INDEXDEC indicator
  • Loading branch information
fasiondog authored Jan 16, 2025
2 parents 31fa44b + fd9d696 commit 5f83f4f
Show file tree
Hide file tree
Showing 6 changed files with 306 additions and 0 deletions.
61 changes: 61 additions & 0 deletions hikyuu/data/mysql_upgrade/0025.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880001', '通达信总市值', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880001'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880002', '通达信流通市值', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880002'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880003', '通达信平均股价', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880003'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880004', '通达信成交均价', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880004'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880005', '通达信涨跌家数', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880005'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880006', '通达信停板家数', 2, 1, 19901220, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880006'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880008', '通达信全A等权', 2, 1, 19901220, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880008'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880011', '通达信主板总值', 2, 1, 19901220, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880011'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880031', '通达信创业总值', 2, 1, 19901220, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880031'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880041', '通达信科创总值', 2, 1, 19901220, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880041'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880098', '通达信可转债指数', 2, 1, 19901220, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880098'
);
INSERT INTO `hku_base`.`stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880099', '通达信逆回购', 2, 1, 19901220, 99999999
WHERE NOT EXISTS (
SELECT `stockid` FROM `hku_base`.`stock` WHERE `marketid`=1 and `code`='880099'
);
UPDATE `hku_base`.`version` set `version` = 25;
63 changes: 63 additions & 0 deletions hikyuu/data/sqlite_upgrade/0025.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
BEGIN TRANSACTION;
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880001', '通达信总市值', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880001'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880002', '通达信流通市值', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880002'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880003', '通达信平均股价', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880003'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880004', '通达信成交均价', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880004'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880005', '通达信涨跌家数', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880005'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880006', '通达信停板家数', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880006'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880006', '通达信全A等权', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880008'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880011', '通达信主板总值', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880011'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880031', '通达信创业总值', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880031'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880041', '通达信科创总值', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880041'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880098', '通达信可转债指数', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880098'
);
INSERT INTO `Stock` (`marketid`, `code`, `name`, `type`, `valid`, `startDate`, `endDate`)
SELECT 1, '880099', '通达信逆回购', 2, 1, 20160126, 99999999
WHERE NOT EXISTS (
SELECT stockid FROM `Stock` WHERE `marketid`=1 and `code`='880099'
);
UPDATE `version` set `version` = 25;
COMMIT;
1 change: 1 addition & 0 deletions hikyuu_cpp/hikyuu/indicator/build_in.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
#include "crt/HSL.h"
#include "crt/IC.h"
#include "crt/ICIR.h"
#include "crt/INDEX.h"
#include "crt/INSUM.h"
#include "crt/IR.h"
#include "crt/INTPART.h"
Expand Down
93 changes: 93 additions & 0 deletions hikyuu_cpp/hikyuu/indicator/crt/INDEX.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
* Copyright (c) 2025 hikyuu.org
*
* Created on: 2025-01-16
* Author: fasiondog
*/

#include "CONTEXT.h"
#include "INDEX.h"

namespace hku {

Indicator HKU_API INDEXO() {
KData k = getKData("SH000001", KQueryByIndex(-1));
return CONTEXT(k.open());
}

Indicator HKU_API INDEXO(const KQuery& query) {
KData k = getKData("SH000001", query);
return CONTEXT(k.open());
}

Indicator HKU_API INDEXH() {
KData k = getKData("SH000001", KQueryByIndex(-1));
return CONTEXT(k.high());
}

Indicator HKU_API INDEXH(const KQuery& query) {
KData k = getKData("SH000001", query);
return CONTEXT(k.high());
}

Indicator HKU_API INDEXL() {
KData k = getKData("SH000001", KQueryByIndex(-1));
return CONTEXT(k.low());
}

Indicator HKU_API INDEXL(const KQuery& query) {
KData k = getKData("SH000001", query);
return CONTEXT(k.low());
}

Indicator HKU_API INDEXC() {
KData k = getKData("SH000001", KQueryByIndex(-1));
return CONTEXT(k.close());
}

Indicator HKU_API INDEXC(const KQuery& query) {
KData k = getKData("SH000001", query);
return CONTEXT(k.close());
}

Indicator HKU_API INDEXA() {
KData k = getKData("SH000001", KQueryByIndex(-1));
return CONTEXT(k.amo());
}

Indicator HKU_API INDEXA(const KQuery& query) {
KData k = getKData("SH000001", query);
return CONTEXT(k.amo());
}

Indicator HKU_API INDEXV() {
KData k = getKData("SH000001", KQueryByIndex(-1));
return CONTEXT(k.vol());
}

Indicator HKU_API INDEXV(const KQuery& query) {
KData k = getKData("SH000001", query);
return CONTEXT(k.vol());
}

Indicator HKU_API INDEXADV() {
KData k = getKData("SH880005", KQueryByIndex(-1));
return CONTEXT(k.close());
}

Indicator HKU_API INDEXADV(const KQuery& query) {
KData k = getKData("SH880005", query);
return CONTEXT(k.close());
}

Indicator HKU_API INDEXDEC() {
KData k = getKData("SH880005", KQueryByIndex(-1));
return CONTEXT(k.open());
}

Indicator HKU_API INDEXDEC(const KQuery& query) {
KData k = getKData("SH880005", query);
return CONTEXT(k.open());
}

}
48 changes: 48 additions & 0 deletions hikyuu_cpp/hikyuu/indicator/crt/INDEX.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright (c) 2025 hikyuu.org
*
* Created on: 2025-01-16
* Author: fasiondog
*/

#pragma once

#include "../Indicator.h"

namespace hku {

// 这里的大盘都指 sh000001

/** 大盘开盘价 */
Indicator HKU_API INDEXO();
Indicator HKU_API INDEXO(const KQuery& query);

/** 大盘最高价盘价 */
Indicator HKU_API INDEXH();
Indicator HKU_API INDEXH(const KQuery& query);

/** 大盘最低价 */
Indicator HKU_API INDEXL();
Indicator HKU_API INDEXL(const KQuery& query);

/** 大盘收盘价 */
Indicator HKU_API INDEXC();
Indicator HKU_API INDEXC(const KQuery& query);

/** 大盘成交额 */
Indicator HKU_API INDEXA();
Indicator HKU_API INDEXA(const KQuery& query);

/** 大盘成交量 */
Indicator HKU_API INDEXV();
Indicator HKU_API INDEXV(const KQuery& query);

/** 大盘上涨家数, 使用通达信 SH880005,可能无法用于实盘 */
Indicator HKU_API INDEXADV();
Indicator HKU_API INDEXADV(const KQuery& query);

/** 大盘下跌家数, 使用通达信 SH880005,可能无法用于实盘 */
Indicator HKU_API INDEXDEC();
Indicator HKU_API INDEXDEC(const KQuery& query);

} // namespace hku
40 changes: 40 additions & 0 deletions hikyuu_pywrap/indicator/_build_in.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2042,4 +2042,44 @@ void export_Indicator_build_in(py::module& m) {
:param double new_value: 替换值
:param bool ignore_discard: 忽略指标丢弃数据
:rtype: Indicator)");

m.def("INDEXO", py::overload_cast<>(INDEXO));
m.def("INDEXO", py::overload_cast<const KQuery&>(INDEXO), R"(INDEXO([query])
大盘开盘价)");

m.def("INDEXH", py::overload_cast<>(INDEXH));
m.def("INDEXH", py::overload_cast<const KQuery&>(INDEXH), R"(INDEXH([query])
大盘最高价)");

m.def("INDEXL", py::overload_cast<>(INDEXL));
m.def("INDEXL", py::overload_cast<const KQuery&>(INDEXL), R"(INDEXL([query])
大盘最低价)");

m.def("INDEXC", py::overload_cast<>(INDEXC));
m.def("INDEXC", py::overload_cast<const KQuery&>(INDEXC), R"(INDEXC([query])
大盘收盘价)");

m.def("INDEXV", py::overload_cast<>(INDEXV));
m.def("INDEXV", py::overload_cast<const KQuery&>(INDEXV), R"(INDEXV([query])
大盘成交量)");

m.def("INDEXA", py::overload_cast<>(INDEXA));
m.def("INDEXA", py::overload_cast<const KQuery&>(INDEXA), R"(INDEXA([query])
大盘成交额)");

m.def("INDEXADV", py::overload_cast<>(INDEXADV));
m.def("INDEXADV", py::overload_cast<const KQuery&>(INDEXADV), R"(INDEXADV([query])
通达信 880005 大盘上涨家数, 可能无法盘中更新!)");

m.def("INDEXDEC", py::overload_cast<>(INDEXDEC));
m.def("INDEXDEC", py::overload_cast<const KQuery&>(INDEXDEC), R"(INDEXDEC([query])
通达信 880005 大盘下跌家数, 可能无法盘中更新!)");
}

0 comments on commit 5f83f4f

Please sign in to comment.