@@ -5,7 +5,7 @@ use std::{
55
66use comfy_table:: Table ;
77use itertools:: Itertools ;
8- use longport_candlesticks:: UpdateAction ;
8+ use longport_candlesticks:: { TradeSessionType , UpdateAction } ;
99use longport_httpcli:: HttpClient ;
1010use longport_proto:: quote:: {
1111 self , AdjustType , MarketTradeDayRequest , MarketTradeDayResponse , MultiSecurityRequest , Period ,
@@ -839,16 +839,13 @@ impl Core {
839839 let half_days = self . trading_days . half_days ( market_type) ;
840840
841841 for ( period, candlesticks) in & mut security_data. candlesticks {
842- let mtype = merge_type ( security_data. board , push_quote. trade_session , * period) ;
842+ let Some ( mtype) = merge_type ( security_data. board , push_quote. trade_session , * period)
843+ else {
844+ continue ;
845+ } ;
843846
844847 let action = if mtype == MergeType :: QuoteDay {
845- Some ( candlesticks. merge_quote_day (
846- market_type,
847- half_days,
848- security_data. board ,
849- * period,
850- push_quote,
851- ) )
848+ Some ( candlesticks. merge_quote_day ( market_type, security_data. board , push_quote) )
852849 } else if mtype == MergeType :: Quote {
853850 Some ( candlesticks. merge_quote (
854851 market_type,
@@ -887,7 +884,8 @@ impl Core {
887884
888885 for trade in & push_trades. trades {
889886 for ( period, candlesticks) in & mut security_data. candlesticks {
890- if merge_type ( security_data. board , trade. trade_session , * period) != MergeType :: Trade
887+ if merge_type ( security_data. board , trade. trade_session , * period)
888+ != Some ( MergeType :: Trade )
891889 {
892890 continue ;
893891 }
@@ -1042,12 +1040,20 @@ enum MergeType {
10421040 Quote ,
10431041}
10441042
1045- fn merge_type ( board : SecurityBoard , trade_session : TradeSession , period : Period ) -> MergeType {
1043+ fn merge_type (
1044+ board : SecurityBoard ,
1045+ trade_session : TradeSession ,
1046+ period : Period ,
1047+ ) -> Option < MergeType > {
10461048 use Period :: * ;
10471049 use SecurityBoard :: * ;
10481050 use TradeSession :: * ;
10491051
1050- match ( board, trade_session, period) {
1052+ if !trade_session. is_intraday ( ) && period >= Day {
1053+ return None ;
1054+ }
1055+
1056+ Some ( match ( board, trade_session, period) {
10511057 ( USDJI | USNSDQ | USSector | HKHS | HKSector | CNIX | CNSector | STI | SGSector , _, _) => {
10521058 if period == Day && trade_session == Intraday {
10531059 MergeType :: QuoteDay
@@ -1057,7 +1063,7 @@ fn merge_type(board: SecurityBoard, trade_session: TradeSession, period: Period)
10571063 }
10581064 ( _, _, Day ) if trade_session == Intraday => MergeType :: QuoteDay ,
10591065 _ => MergeType :: Trade ,
1060- }
1066+ } )
10611067}
10621068
10631069async fn fetch_trading_days ( cli : & WsClient ) -> Result < TradingDays > {
@@ -1217,18 +1223,30 @@ mod tests {
12171223 use SecurityBoard :: * ;
12181224 use TradeSession :: * ;
12191225
1220- assert_eq ! ( merge_type( USDJI , Intraday , Day ) , MergeType :: QuoteDay ) ;
1221- assert_eq ! ( merge_type( USDJI , Overnight , Day ) , MergeType :: Quote ) ;
1222- assert_eq ! ( merge_type( USDJI , Intraday , OneMinute ) , MergeType :: Quote ) ;
1223- assert_eq ! ( merge_type( USDJI , Overnight , OneMinute ) , MergeType :: Quote ) ;
1224- assert_eq ! ( merge_type( USDJI , Intraday , Week ) , MergeType :: Quote ) ;
1225- assert_eq ! ( merge_type( USDJI , Overnight , Week ) , MergeType :: Quote ) ;
1226-
1227- assert_eq ! ( merge_type( USMain , Intraday , Day ) , MergeType :: QuoteDay ) ;
1228- assert_eq ! ( merge_type( USMain , Overnight , Day ) , MergeType :: Trade ) ;
1229- assert_eq ! ( merge_type( USMain , Intraday , OneMinute ) , MergeType :: Trade ) ;
1230- assert_eq ! ( merge_type( USMain , Intraday , OneMinute ) , MergeType :: Trade ) ;
1231- assert_eq ! ( merge_type( USMain , Overnight , Week ) , MergeType :: Trade ) ;
1232- assert_eq ! ( merge_type( USMain , Overnight , Week ) , MergeType :: Trade ) ;
1226+ assert_eq ! ( merge_type( USDJI , Intraday , Day ) , Some ( MergeType :: QuoteDay ) ) ;
1227+ assert_eq ! ( merge_type( USDJI , Overnight , Day ) , None ) ;
1228+ assert_eq ! (
1229+ merge_type( USDJI , Intraday , OneMinute ) ,
1230+ Some ( MergeType :: Quote )
1231+ ) ;
1232+ assert_eq ! (
1233+ merge_type( USDJI , Overnight , OneMinute ) ,
1234+ Some ( MergeType :: Quote )
1235+ ) ;
1236+ assert_eq ! ( merge_type( USDJI , Intraday , Week ) , Some ( MergeType :: Quote ) ) ;
1237+ assert_eq ! ( merge_type( USDJI , Overnight , Week ) , None ) ;
1238+
1239+ assert_eq ! ( merge_type( USMain , Intraday , Day ) , Some ( MergeType :: QuoteDay ) ) ;
1240+ assert_eq ! ( merge_type( USMain , Overnight , Day ) , None ) ;
1241+ assert_eq ! (
1242+ merge_type( USMain , Intraday , OneMinute ) ,
1243+ Some ( MergeType :: Trade )
1244+ ) ;
1245+ assert_eq ! (
1246+ merge_type( USMain , Overnight , OneMinute ) ,
1247+ Some ( MergeType :: Trade )
1248+ ) ;
1249+ assert_eq ! ( merge_type( USMain , Intraday , Week ) , Some ( MergeType :: Trade ) ) ;
1250+ assert_eq ! ( merge_type( USMain , Overnight , Week ) , None ) ;
12331251 }
12341252}
0 commit comments