@@ -94,11 +94,13 @@ void KData::tocsv(const string& filename) {
9494}
9595
9696KData KData::getKData (const Datetime& start, const Datetime& end) const {
97+ KData ret;
9798 const Stock& stk = getStock ();
98- HKU_IF_RETURN (stk.isNull (), KData () );
99+ HKU_IF_RETURN (stk.isNull (), ret );
99100
100101 const KQuery& query = getQuery ();
101- return KData (stk, KQueryByDate (start, end, query.kType (), query.recoverType ()));
102+ ret = KData (stk, KQueryByDate (start, end, query.kType (), query.recoverType ()));
103+ return ret;
102104}
103105
104106KData KData::getKData (int64_t start, int64_t end) const {
@@ -127,19 +129,15 @@ KData KData::getKData(int64_t start, int64_t end) const {
127129 return KData (getStock (), query);
128130}
129131
130- KData KData::getKData (const KQuery::KType& ktype) const {
131- const Stock& stk = getStock ();
132- HKU_IF_RETURN (stk.isNull (), KData ());
133-
132+ KQuery KData::getOtherQueryByDate (const Datetime& start_datetime, const Datetime& end_datetime,
133+ const KQuery::KType& ktype) const {
134134 const KQuery& query = getQuery ();
135- HKU_IF_RETURN (query.kType () == ktype, *this );
135+ if (getStock ().isNull ()) {
136+ return KQueryByDate (Null<Datetime>(), Null<Datetime>(), ktype, query.recoverType ());
137+ }
136138
137- if (empty ()) {
138- if (query.queryType () == KQuery::INDEX) {
139- return KData (stk, KQuery (0 , 0 , ktype, query.recoverType ()));
140- }
141- return KData (
142- stk, KQuery (query.startDatetime (), query.endDatetime (), ktype, query.recoverType ()));
139+ if (empty () && query.queryType () == KQuery::INDEX) {
140+ return KQuery (Null<Datetime>(), Null<Datetime>(), ktype, query.recoverType ());
143141 }
144142
145143 Datetime end;
@@ -148,9 +146,15 @@ KData KData::getKData(const KQuery::KType& ktype) const {
148146 end = Null<Datetime>();
149147 } else {
150148 end = this ->back ().datetime ;
149+ if (end_datetime < end) {
150+ end = end_datetime;
151+ }
151152 }
152153
153154 Datetime start = this ->front ().datetime ;
155+ if (start_datetime > start) {
156+ start = start_datetime;
157+ }
154158
155159 auto day_ktype_seconds = KQuery::getKTypeInSeconds (KQuery::DAY);
156160 // 从日线及以上转日线以下
@@ -167,7 +171,15 @@ KData KData::getKData(const KQuery::KType& ktype) const {
167171 start = start.startOfDay ();
168172 }
169173
170- return KData (stk, KQuery (start, end, ktype, query.recoverType ()));
174+ return KQuery (start, end, ktype, query.recoverType ());
175+ }
176+
177+ KData KData::getKData (const KQuery::KType& ktype) const {
178+ KData ret;
179+ const Stock& stk = getStock ();
180+ HKU_IF_RETURN (stk.isNull (), ret);
181+ ret = stk.getKData (getOtherQueryByDate (front ().datetime , back ().datetime , ktype));
182+ return ret;
171183}
172184
173185Indicator KData::open () const {
0 commit comments