deepquant 0.4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- deepquant-0.4.3/MANIFEST.in +4 -0
- deepquant-0.4.3/PKG-INFO +65 -0
- deepquant-0.4.3/README.md +27 -0
- deepquant-0.4.3/deepquant/__init__.py +1 -0
- deepquant-0.4.3/deepquant/__main__.py +19 -0
- deepquant-0.4.3/deepquant/data/__init__.py +0 -0
- deepquant-0.4.3/deepquant/data/gqclient/__init__.py +8 -0
- deepquant-0.4.3/deepquant/data/gqclient/commons.py +300 -0
- deepquant-0.4.3/deepquant/data/gqclient/hclient.py +535 -0
- deepquant-0.4.3/deepquant/data/gqclient/wsclient.py +602 -0
- deepquant-0.4.3/deepquant/data/gqclient/wshandler.py +114 -0
- deepquant-0.4.3/deepquant/data/interface/__init__.py +0 -0
- deepquant-0.4.3/deepquant/data/interface/dataApi.py +215 -0
- deepquant-0.4.3/deepquant/data/interface/enum.py +48 -0
- deepquant-0.4.3/deepquant/data/interface/gid.py +2240 -0
- deepquant-0.4.3/deepquant/data/proto/__init__.py +8 -0
- deepquant-0.4.3/deepquant/data/proto/base_pb2.py +200 -0
- deepquant-0.4.3/deepquant/data/proto/common_pb2.py +390 -0
- deepquant-0.4.3/deepquant/data/proto/data_type_pb2.py +324 -0
- deepquant-0.4.3/deepquant/data/proto/financial_fun_pb2.py +314 -0
- deepquant-0.4.3/deepquant/data/proto/market_data_pb2.py +1209 -0
- deepquant-0.4.3/deepquant/data/proto/news_pb2.py +13436 -0
- deepquant-0.4.3/deepquant/data/proto/pb_json_format.py +1049 -0
- deepquant-0.4.3/deepquant/data/proto/proto_utils.py +178 -0
- deepquant-0.4.3/deepquant/data/proto/real_time_md_pb2.py +325 -0
- deepquant-0.4.3/deepquant/data/proto/realtime_factor_data_pb2.py +100 -0
- deepquant-0.4.3/deepquant/data/proto/realtime_factor_server_pb2.py +232 -0
- deepquant-0.4.3/deepquant/data/proto/replay_pb2.py +241 -0
- deepquant-0.4.3/deepquant/data/proto/sdk_message_pb2.py +417 -0
- deepquant-0.4.3/deepquant/data/utils/__init__.py +8 -0
- deepquant-0.4.3/deepquant/data/utils/encrypt_util.py +27 -0
- deepquant-0.4.3/deepquant/data/utils/gqconfig.py +198 -0
- deepquant-0.4.3/deepquant/data/utils/gqconfig_dev.py +30 -0
- deepquant-0.4.3/deepquant/data/utils/gqconfig_hub.py +55 -0
- deepquant-0.4.3/deepquant/data/utils/gqconfig_inner.py +30 -0
- deepquant-0.4.3/deepquant/data/utils/gqconfig_prod.py +30 -0
- deepquant-0.4.3/deepquant/data/utils/gqconfig_test.py +30 -0
- deepquant-0.4.3/deepquant/data/utils/gqconfig_uat.py +30 -0
- deepquant-0.4.3/deepquant/data/utils/log_writer.py +55 -0
- deepquant-0.4.3/deepquant/docs//351/223/266/346/262/263/347/255/226/347/225/245/344/270/255/345/277/203_/345/233/240/345/255/220/345/210/206/346/236/220SDK/344/275/277/347/224/250/350/257/264/346/230/216.pdf +0 -0
- deepquant-0.4.3/deepquant/docs//351/223/266/346/262/263/347/255/226/347/225/245/344/270/255/345/277/203_/346/225/260/346/215/256SDK/344/275/277/347/224/250/350/257/264/346/230/216.pdf +0 -0
- deepquant-0.4.3/deepquant/docs//351/223/266/346/262/263/347/255/226/347/225/245/344/270/255/345/277/203/344/275/277/347/224/250/346/211/213/345/206/214(/346/225/260/346/215/256/345/222/214/345/233/240/345/255/220).pdf +0 -0
- deepquant-0.4.3/deepquant/examples/get_factors.py +19 -0
- deepquant-0.4.3/deepquant/examples/get_kline.py +14 -0
- deepquant-0.4.3/deepquant/factor/__init__.py +0 -0
- deepquant-0.4.3/deepquant/factor/analysor.py +302 -0
- deepquant-0.4.3/deepquant/factor/calc.py +46 -0
- deepquant-0.4.3/deepquant/factor/data_desp_default.yaml +1347 -0
- deepquant-0.4.3/deepquant/factor/factor_analyzer.py +1733 -0
- deepquant-0.4.3/deepquant/factor/factor_cal.py +235 -0
- deepquant-0.4.3/deepquant/factor/factor_parser.py +325 -0
- deepquant-0.4.3/deepquant/factor/financial_data_clean.py +426 -0
- deepquant-0.4.3/deepquant/factor/globals.py +378 -0
- deepquant-0.4.3/deepquant/factor/mgr.py +63 -0
- deepquant-0.4.3/deepquant/factor/op.py +990 -0
- deepquant-0.4.3/deepquant/factor/op_udf.py +549 -0
- deepquant-0.4.3/deepquant/factor/oq_data.py +466 -0
- deepquant-0.4.3/deepquant/factor/perf.py +768 -0
- deepquant-0.4.3/deepquant/factor/plotting.py +725 -0
- deepquant-0.4.3/deepquant/factor/summary.py +140 -0
- deepquant-0.4.3/deepquant/factor/utils.py +68 -0
- deepquant-0.4.3/deepquant/oplib/__init__.py +42 -0
- deepquant-0.4.3/deepquant/oplib/_connection.py +20 -0
- deepquant-0.4.3/deepquant/oplib/_core.py +17 -0
- deepquant-0.4.3/deepquant/oplib/_enums.py +82 -0
- deepquant-0.4.3/deepquant/oplib/_helper.py +14 -0
- deepquant-0.4.3/deepquant/oplib/_runtime.py +56 -0
- deepquant-0.4.3/deepquant/oplib/_swordfishcpp/__init__.pyi +580 -0
- deepquant-0.4.3/deepquant/oplib/_swordfishcpp/_enums/__init__.pyi +70 -0
- deepquant-0.4.3/deepquant/oplib/_swordfishcpp/_exception/__init__.pyi +10 -0
- deepquant-0.4.3/deepquant/oplib/_swordfishcpp/_function/__init__.pyi +0 -0
- deepquant-0.4.3/deepquant/oplib/_swordfishcpp/_io/__init__.pyi +52 -0
- deepquant-0.4.3/deepquant/oplib/_swordfishcpp/_tools/__init__.pyi +13 -0
- deepquant-0.4.3/deepquant/oplib/_swordfishcpp.cpython-311-x86_64-linux-gnu.so +0 -0
- deepquant-0.4.3/deepquant/oplib/_translator.py +502 -0
- deepquant-0.4.3/deepquant/oplib/config.py +92 -0
- deepquant-0.4.3/deepquant/oplib/connection.py +6 -0
- deepquant-0.4.3/deepquant/oplib/data.py +354 -0
- deepquant-0.4.3/deepquant/oplib/dolphindb.cfg +20 -0
- deepquant-0.4.3/deepquant/oplib/dolphindb.dos +71 -0
- deepquant-0.4.3/deepquant/oplib/enums.py +30 -0
- deepquant-0.4.3/deepquant/oplib/exception.py +8 -0
- deepquant-0.4.3/deepquant/oplib/function.py +4074 -0
- deepquant-0.4.3/deepquant/oplib/io.py +9 -0
- deepquant-0.4.3/deepquant/oplib/tools.py +10 -0
- deepquant-0.4.3/deepquant/oplib/types.py +30 -0
- deepquant-0.4.3/deepquant/oplib/utils.py +24 -0
- deepquant-0.4.3/deepquant/quest/__init__.py +221 -0
- deepquant-0.4.3/deepquant/quest/__main__.py +27 -0
- deepquant-0.4.3/deepquant/quest/_version.py +658 -0
- deepquant-0.4.3/deepquant/quest/alpha/__init__.py +28 -0
- deepquant-0.4.3/deepquant/quest/alpha/__main__.py +25 -0
- deepquant-0.4.3/deepquant/quest/alpha/_version.py +542 -0
- deepquant-0.4.3/deepquant/quest/alpha/apis.py +23 -0
- deepquant-0.4.3/deepquant/quest/alpha/bundle.py +599 -0
- deepquant-0.4.3/deepquant/quest/alpha/cmds.py +176 -0
- deepquant-0.4.3/deepquant/quest/alpha/config.yml +70 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/IF_macd.py +46 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/buy_and_hold.py +35 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/convertible_buy_and_sell.py +80 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/future_tick.py +54 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/goldcross.py +51 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/optimize.py +48 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/option_buy_and_hold.py +57 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/pair_trading.py +124 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples/read_from_holding_weights.py +190 -0
- deepquant-0.4.3/deepquant/quest/alpha/examples//350/260/203/344/273/223/346/235/203/351/207/215/346/240/267/344/276/213.xlsx +0 -0
- deepquant-0.4.3/deepquant/quest/alpha/mod_config.yml +35 -0
- deepquant-0.4.3/deepquant/quest/alpha/utils/__init__.py +17 -0
- deepquant-0.4.3/deepquant/quest/alpha/utils/scripts.py +27 -0
- deepquant-0.4.3/deepquant/quest/api.py +90 -0
- deepquant-0.4.3/deepquant/quest/apis/__init__.py +17 -0
- deepquant-0.4.3/deepquant/quest/apis/api_abstract.py +494 -0
- deepquant-0.4.3/deepquant/quest/apis/api_base.py +965 -0
- deepquant-0.4.3/deepquant/quest/apis/api_yhdatac.py +1416 -0
- deepquant-0.4.3/deepquant/quest/apis/names.py +143 -0
- deepquant-0.4.3/deepquant/quest/cmds/__init__.py +21 -0
- deepquant-0.4.3/deepquant/quest/cmds/bundle.py +204 -0
- deepquant-0.4.3/deepquant/quest/cmds/entry.py +22 -0
- deepquant-0.4.3/deepquant/quest/cmds/misc.py +54 -0
- deepquant-0.4.3/deepquant/quest/cmds/mod.py +108 -0
- deepquant-0.4.3/deepquant/quest/cmds/run.py +85 -0
- deepquant-0.4.3/deepquant/quest/config.yml +63 -0
- deepquant-0.4.3/deepquant/quest/const.py +209 -0
- deepquant-0.4.3/deepquant/quest/core/__init__.py +13 -0
- deepquant-0.4.3/deepquant/quest/core/events.py +178 -0
- deepquant-0.4.3/deepquant/quest/core/execution_context.py +119 -0
- deepquant-0.4.3/deepquant/quest/core/executor.py +99 -0
- deepquant-0.4.3/deepquant/quest/core/global_var.py +36 -0
- deepquant-0.4.3/deepquant/quest/core/strategy.py +120 -0
- deepquant-0.4.3/deepquant/quest/core/strategy_context.py +238 -0
- deepquant-0.4.3/deepquant/quest/core/strategy_loader.py +49 -0
- deepquant-0.4.3/deepquant/quest/core/strategy_universe.py +56 -0
- deepquant-0.4.3/deepquant/quest/data/__init__.py +16 -0
- deepquant-0.4.3/deepquant/quest/data/bar_dict_price_board.py +45 -0
- deepquant-0.4.3/deepquant/quest/data/base_data_source/__init__.py +17 -0
- deepquant-0.4.3/deepquant/quest/data/base_data_source/adjust.py +74 -0
- deepquant-0.4.3/deepquant/quest/data/base_data_source/data_source.py +393 -0
- deepquant-0.4.3/deepquant/quest/data/base_data_source/storage_interface.py +83 -0
- deepquant-0.4.3/deepquant/quest/data/base_data_source/storages.py +329 -0
- deepquant-0.4.3/deepquant/quest/data/bundle.py +598 -0
- deepquant-0.4.3/deepquant/quest/data/data_proxy.py +328 -0
- deepquant-0.4.3/deepquant/quest/data/trading_dates_mixin.py +125 -0
- deepquant-0.4.3/deepquant/quest/datac/__init__.py +32 -0
- deepquant-0.4.3/deepquant/quest/datac/__init__.pyi +199 -0
- deepquant-0.4.3/deepquant/quest/datac/client.py +300 -0
- deepquant-0.4.3/deepquant/quest/datac/connection_pool.py +66 -0
- deepquant-0.4.3/deepquant/quest/datac/decorators.py +180 -0
- deepquant-0.4.3/deepquant/quest/datac/errors.py +84 -0
- deepquant-0.4.3/deepquant/quest/datac/services/__init__.py +0 -0
- deepquant-0.4.3/deepquant/quest/datac/services/basic.py +107 -0
- deepquant-0.4.3/deepquant/quest/datac/services/calendar.py +91 -0
- deepquant-0.4.3/deepquant/quest/datac/services/factor.py +167 -0
- deepquant-0.4.3/deepquant/quest/datac/services/financial.py +322 -0
- deepquant-0.4.3/deepquant/quest/datac/services/future.py +367 -0
- deepquant-0.4.3/deepquant/quest/datac/services/get_price.py +251 -0
- deepquant-0.4.3/deepquant/quest/datac/services/index.py +0 -0
- deepquant-0.4.3/deepquant/quest/datac/services/market_data.py +288 -0
- deepquant-0.4.3/deepquant/quest/datac/services/orm/__init__.py +0 -0
- deepquant-0.4.3/deepquant/quest/datac/services/orm/pit_financials_ex.py +406 -0
- deepquant-0.4.3/deepquant/quest/datac/services/shenwan.py +61 -0
- deepquant-0.4.3/deepquant/quest/datac/services/stock_status.py +445 -0
- deepquant-0.4.3/deepquant/quest/datac/share/__init__.py +0 -0
- deepquant-0.4.3/deepquant/quest/datac/share/codec.py +176 -0
- deepquant-0.4.3/deepquant/quest/datac/share/errors.py +84 -0
- deepquant-0.4.3/deepquant/quest/datac/share/protocol.py +76 -0
- deepquant-0.4.3/deepquant/quest/datac/thread_local.py +58 -0
- deepquant-0.4.3/deepquant/quest/datac/utils.py +356 -0
- deepquant-0.4.3/deepquant/quest/datac/validators.py +254 -0
- deepquant-0.4.3/deepquant/quest/datac/yhclient.py +39 -0
- deepquant-0.4.3/deepquant/quest/datac/yhdatah_helper.py +105 -0
- deepquant-0.4.3/deepquant/quest/environment.py +218 -0
- deepquant-0.4.3/deepquant/quest/examples/IF1706_20161108.csv +241 -0
- deepquant-0.4.3/deepquant/quest/examples/IF_macd.py +46 -0
- deepquant-0.4.3/deepquant/quest/examples/__init__.py +0 -0
- deepquant-0.4.3/deepquant/quest/examples/backtest/portfolio.csv +261 -0
- deepquant-0.4.3/deepquant/quest/examples/backtest/positions_weight.csv +261 -0
- deepquant-0.4.3/deepquant/quest/examples/backtest/stock_account.csv +261 -0
- deepquant-0.4.3/deepquant/quest/examples/backtest/stock_positions.csv +261 -0
- deepquant-0.4.3/deepquant/quest/examples/backtest/summary.xlsx +0 -0
- deepquant-0.4.3/deepquant/quest/examples/backtest/trades.csv +6 -0
- deepquant-0.4.3/deepquant/quest/examples/buy_and_hold.py +30 -0
- deepquant-0.4.3/deepquant/quest/examples/data_source/get_csv_module.py +26 -0
- deepquant-0.4.3/deepquant/quest/examples/data_source/import_get_csv_module.py +48 -0
- deepquant-0.4.3/deepquant/quest/examples/data_source/read_csv_as_df.py +50 -0
- deepquant-0.4.3/deepquant/quest/examples/daybar_strategy.py +224 -0
- deepquant-0.4.3/deepquant/quest/examples/extend_api/rqalpha_mod_extend_api_demo.py +54 -0
- deepquant-0.4.3/deepquant/quest/examples/extend_api/test_extend_api.py +50 -0
- deepquant-0.4.3/deepquant/quest/examples/golden_cross.py +48 -0
- deepquant-0.4.3/deepquant/quest/examples/macd.py +52 -0
- deepquant-0.4.3/deepquant/quest/examples/macd_strategy.py +178 -0
- deepquant-0.4.3/deepquant/quest/examples/minbar_strategy.py +77 -0
- deepquant-0.4.3/deepquant/quest/examples/pair_trading.py +125 -0
- deepquant-0.4.3/deepquant/quest/examples/rsi.py +52 -0
- deepquant-0.4.3/deepquant/quest/examples/run_code_demo.py +47 -0
- deepquant-0.4.3/deepquant/quest/examples/run_file_demo.py +27 -0
- deepquant-0.4.3/deepquant/quest/examples/run_func_demo.py +49 -0
- deepquant-0.4.3/deepquant/quest/examples/single_bar.py +34 -0
- deepquant-0.4.3/deepquant/quest/examples/subscribe_event.py +50 -0
- deepquant-0.4.3/deepquant/quest/examples/test_cli.py +164 -0
- deepquant-0.4.3/deepquant/quest/examples/test_pt.py +41 -0
- deepquant-0.4.3/deepquant/quest/examples/tick_strategy.py +82 -0
- deepquant-0.4.3/deepquant/quest/examples/turtle.py +115 -0
- deepquant-0.4.3/deepquant/quest/interface.py +711 -0
- deepquant-0.4.3/deepquant/quest/main.py +317 -0
- deepquant-0.4.3/deepquant/quest/mod/__init__.py +106 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/__init__.py +19 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/_version.py +544 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/api.py +64 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/data.py +167 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/dummy.py +43 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/matcher.py +66 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/mod.py +129 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/position.py +151 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/transaction.py +31 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_convertible/validator.py +77 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/__init__.py +107 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/_version.py +545 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/api.py +292 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/const.py +16 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/data/__init__.py +9 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/data/fund_Instrument.py +70 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/data/fund_day_bar_store.py +143 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/data/fund_dividend_store.py +52 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/data/fund_split_store.py +28 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/dummy.py +51 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/matcher.py +53 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/mod.py +107 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/position.py +288 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/transaction.py +17 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_fund/validator.py +35 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_incremental/__init__.py +86 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_incremental/_version.py +544 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_incremental/mod.py +159 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_incremental/persist_providers.py +55 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_incremental/recorders.py +190 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_optimizer2/__init__.py +9 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_optimizer2/_version.py +544 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_optimizer2/api.py +130 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_optimizer2/mod.py +36 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/__init__.py +28 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/_version.py +520 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/api.py +36 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/data.py +176 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/dummy.py +29 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/frontend_validator.py +34 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/matcher.py +102 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/mod.py +146 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/position.py +287 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_option/transaction_cost_decider.py +99 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/__init__.py +110 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/_version.py +544 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/api_fund.py +148 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/__init__.py +9 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/bundle_data_source.py +678 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/data_store.py +531 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/lazy_tick.py +41 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/pt_data_source.py +304 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/resample_helper.py +129 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/setup.py +20 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/tight_loops.c +11135 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/tight_loops.cpython-310-x86_64-linux-gnu.so +0 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/tight_loops.cpython-311-x86_64-linux-gnu.so +0 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/tight_loops.pyx +66 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/utils.py +36 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/data_sources/yhdata_data_source.py +348 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/minute_price_board.py +53 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/mod.py +85 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/pt_event_source.py +142 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/redis_store.py +90 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/snapshot_price_board.py +41 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/tick_price_board.py +88 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/tick_pt_event_source.py +215 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_quant_data/tick_pt_trading_validator.py +34 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/__init__.py +16 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/_version.py +544 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/data.py +100 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/dummy.py +38 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/mod.py +73 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/position.py +13 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/transaction_cost.py +46 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_spot/validator.py +34 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/README.rst +46 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/__init__.py +91 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/api/__init__.py +13 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/api/api_future.py +232 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/api/api_stock.py +749 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/component_validator.py +30 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/mod.py +87 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/position_model.py +591 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/position_validator.py +57 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_accounts/validator.py +20 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/README.rst +93 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/__init__.py +123 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/mod.py +576 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/plot/__init__.py +24 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/plot/consts.py +194 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/plot/plot.py +255 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/plot/utils.py +85 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/plot_store.py +62 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/report/__init__.py +1 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/report/excel_template.py +95 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/report/report.py +210 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser/report/templates/summary.xlsx +0 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/README.rst +93 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/__init__.py +123 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/mod.py +677 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/plot/__init__.py +24 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/plot/consts.py +194 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/plot/plot.py +255 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/plot/utils.py +85 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/plot_store.py +63 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/report/__init__.py +1 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/report/excel_template.py +95 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/report/report.py +210 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_analyser_web/report/templates/summary.xlsx +0 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_progress/README.rst +67 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_progress/__init__.py +42 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_progress/mod.py +70 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_progress/progress_client.py +51 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/README.rst +37 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/__init__.py +52 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/mod.py +36 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/validators/__init__.py +28 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/validators/cash_validator.py +52 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/validators/is_trading_validator.py +49 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/validators/price_validator.py +60 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_risk/validators/self_trade_validator.py +47 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_scheduler/README.rst +0 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_scheduler/__init__.py +19 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_scheduler/mod.py +43 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_scheduler/scheduler.py +317 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/README.rst +96 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/__init__.py +111 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/matcher.py +663 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/mod.py +120 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/signal_broker.py +128 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/simulation_broker.py +186 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/simulation_event_source.py +202 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/slippage.py +117 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/testing.py +27 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_simulation/validator.py +20 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_transaction_cost/README.rst +37 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_transaction_cost/__init__.py +99 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_transaction_cost/deciders.py +152 -0
- deepquant-0.4.3/deepquant/quest/mod/mod_sys_transaction_cost/mod.py +58 -0
- deepquant-0.4.3/deepquant/quest/mod/utils.py +56 -0
- deepquant-0.4.3/deepquant/quest/mod_config.yml +20 -0
- deepquant-0.4.3/deepquant/quest/model/__init__.py +19 -0
- deepquant-0.4.3/deepquant/quest/model/bar.py +389 -0
- deepquant-0.4.3/deepquant/quest/model/instrument.py +622 -0
- deepquant-0.4.3/deepquant/quest/model/order.py +402 -0
- deepquant-0.4.3/deepquant/quest/model/tick.py +215 -0
- deepquant-0.4.3/deepquant/quest/model/trade.py +110 -0
- deepquant-0.4.3/deepquant/quest/portfolio/__init__.py +323 -0
- deepquant-0.4.3/deepquant/quest/portfolio/account.py +539 -0
- deepquant-0.4.3/deepquant/quest/portfolio/position.py +425 -0
- deepquant-0.4.3/deepquant/quest/resource/ricequant-logo.png +0 -0
- deepquant-0.4.3/deepquant/quest/risk/__init__.py +15 -0
- deepquant-0.4.3/deepquant/quest/risk/_version.py +544 -0
- deepquant-0.4.3/deepquant/quest/risk/risk.py +276 -0
- deepquant-0.4.3/deepquant/quest/risk/utils.py +92 -0
- deepquant-0.4.3/deepquant/quest/sdk/__init__.py +26 -0
- deepquant-0.4.3/deepquant/quest/sdk/__main__.py +19 -0
- deepquant-0.4.3/deepquant/quest/sdk/_version.py +544 -0
- deepquant-0.4.3/deepquant/quest/sdk/cmds.py +366 -0
- deepquant-0.4.3/deepquant/quest/sdk/const.py +40 -0
- deepquant-0.4.3/deepquant/quest/sdk/license_helper.py +181 -0
- deepquant-0.4.3/deepquant/quest/sdk/proxy_helper.py +9 -0
- deepquant-0.4.3/deepquant/quest/sdk/script_update.py +66 -0
- deepquant-0.4.3/deepquant/quest/sdk/testing.py +22 -0
- deepquant-0.4.3/deepquant/quest/user_module.py +14 -0
- deepquant-0.4.3/deepquant/quest/utils/__init__.py +250 -0
- deepquant-0.4.3/deepquant/quest/utils/arg_checker.py +455 -0
- deepquant-0.4.3/deepquant/quest/utils/class_helper.py +43 -0
- deepquant-0.4.3/deepquant/quest/utils/click_helper.py +29 -0
- deepquant-0.4.3/deepquant/quest/utils/concurrent.py +111 -0
- deepquant-0.4.3/deepquant/quest/utils/config.py +278 -0
- deepquant-0.4.3/deepquant/quest/utils/converttools.py +10 -0
- deepquant-0.4.3/deepquant/quest/utils/datetime_func.py +109 -0
- deepquant-0.4.3/deepquant/quest/utils/dict_func.py +26 -0
- deepquant-0.4.3/deepquant/quest/utils/exception.py +137 -0
- deepquant-0.4.3/deepquant/quest/utils/functools.py +110 -0
- deepquant-0.4.3/deepquant/quest/utils/httpclient.py +80 -0
- deepquant-0.4.3/deepquant/quest/utils/i18n.py +72 -0
- deepquant-0.4.3/deepquant/quest/utils/log_capture.py +45 -0
- deepquant-0.4.3/deepquant/quest/utils/logger.py +85 -0
- deepquant-0.4.3/deepquant/quest/utils/package_helper.py +29 -0
- deepquant-0.4.3/deepquant/quest/utils/persisit_helper.py +79 -0
- deepquant-0.4.3/deepquant/quest/utils/repr.py +95 -0
- deepquant-0.4.3/deepquant/quest/utils/risk_free_helper.py +55 -0
- deepquant-0.4.3/deepquant/quest/utils/rq_json.py +53 -0
- deepquant-0.4.3/deepquant/quest/utils/strategy_loader_help.py +52 -0
- deepquant-0.4.3/deepquant/quest/utils/testing/__init__.py +44 -0
- deepquant-0.4.3/deepquant/quest/utils/testing/fixtures.py +158 -0
- deepquant-0.4.3/deepquant/quest/utils/testing/mocking.py +21 -0
- deepquant-0.4.3/deepquant/quest/utils/translations/__init__.py +14 -0
- deepquant-0.4.3/deepquant/quest/utils/translations/zh_Hans_CN/LC_MESSAGES/__init__.py +14 -0
- deepquant-0.4.3/deepquant/quest/utils/translations/zh_Hans_CN/LC_MESSAGES/messages.mo +0 -0
- deepquant-0.4.3/deepquant/quest/utils/translations/zh_Hans_CN/LC_MESSAGES/messages.po +1586 -0
- deepquant-0.4.3/deepquant/quest/utils/translations/zh_Hans_CN/__init__.py +14 -0
- deepquant-0.4.3/deepquant/quest/utils/typing.py +28 -0
- deepquant-0.4.3/deepquant/samples/__init__.py +8 -0
- deepquant-0.4.3/deepquant/samples/md_client_demo.py +102 -0
- deepquant-0.4.3/deepquant/samples/md_handler_demo.py +128 -0
- deepquant-0.4.3/deepquant/samples/replay_client_demo.py +93 -0
- deepquant-0.4.3/deepquant/swordfish.libs/libSwordfish-f548b0e8.so +0 -0
- deepquant-0.4.3/deepquant/swordfish.libs/libgfortran-64450b10.so.3 +0 -0
- deepquant-0.4.3/deepquant/swordfish.libs/libopenblas-74fe0e6f.so.0 +0 -0
- deepquant-0.4.3/deepquant/swordfish.libs/libquadmath-96973f99.so.0.0.0 +0 -0
- deepquant-0.4.3/deepquant/swordfish.libs/libtcmalloc_minimal-e7f3dc4b.so.4 +0 -0
- deepquant-0.4.3/deepquant/swordfish.libs/libuuid-f64cda11.so.1 +0 -0
- deepquant-0.4.3/deepquant.egg-info/PKG-INFO +65 -0
- deepquant-0.4.3/deepquant.egg-info/SOURCES.txt +418 -0
- deepquant-0.4.3/deepquant.egg-info/dependency_links.txt +1 -0
- deepquant-0.4.3/deepquant.egg-info/requires.txt +28 -0
- deepquant-0.4.3/deepquant.egg-info/top_level.txt +1 -0
- deepquant-0.4.3/setup.cfg +4 -0
- deepquant-0.4.3/setup.py +148 -0
- deepquant-0.4.3/test/test_pkg.py +19 -0
deepquant-0.4.3/PKG-INFO
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: deepquant
|
|
3
|
+
Version: 0.4.3
|
|
4
|
+
Summary: quant data and factor tools by cgs
|
|
5
|
+
Author: cgs
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Requires-Python: >=3.8
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: requests>=2.25.1
|
|
12
|
+
Requires-Dist: numpy<=1.26.4,>=1.19.5
|
|
13
|
+
Requires-Dist: pandas>=1.2.0
|
|
14
|
+
Requires-Dist: websocket-client
|
|
15
|
+
Requires-Dist: protobuf<=3.20.3
|
|
16
|
+
Requires-Dist: PyJWT
|
|
17
|
+
Requires-Dist: statsmodels
|
|
18
|
+
Requires-Dist: scipy
|
|
19
|
+
Requires-Dist: pyecharts
|
|
20
|
+
Requires-Dist: empyrical-reloaded
|
|
21
|
+
Requires-Dist: astor
|
|
22
|
+
Requires-Dist: RestrictedPython
|
|
23
|
+
Requires-Dist: pyyaml
|
|
24
|
+
Requires-Dist: hdf5plugin==5.0.0
|
|
25
|
+
Requires-Dist: tqdm==4.67.1
|
|
26
|
+
Requires-Dist: lru-dict==1.3.0
|
|
27
|
+
Requires-Dist: logbook
|
|
28
|
+
Requires-Dist: jsonpickle
|
|
29
|
+
Requires-Dist: methodtools
|
|
30
|
+
Requires-Dist: tabulate
|
|
31
|
+
Requires-Dist: tqdm
|
|
32
|
+
Requires-Dist: hdf5plugin
|
|
33
|
+
Requires-Dist: lru-dict
|
|
34
|
+
Requires-Dist: matplotlib
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: pytest>=6.2.2; extra == "dev"
|
|
37
|
+
Requires-Dist: sphinx>=3.4.3; extra == "dev"
|
|
38
|
+
|
|
39
|
+
# deepquantSDK
|
|
40
|
+
|
|
41
|
+
投资决策平台因子数据SDK
|
|
42
|
+
|
|
43
|
+
## Getting started
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## 文档说明
|
|
48
|
+
|
|
49
|
+
## deepquant包结构
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
deepquant
|
|
53
|
+
├── data # 数据接口
|
|
54
|
+
│ ├── gqclient # 基础框架
|
|
55
|
+
│ ├── __init__.py
|
|
56
|
+
│ ├── interface # 数据接口
|
|
57
|
+
│ ├── proto # pb协议
|
|
58
|
+
│ └── utils
|
|
59
|
+
├── factor # 因子分析
|
|
60
|
+
├── oplib # 金融函数库
|
|
61
|
+
├── swordfish.libs # 金融函数库相关so
|
|
62
|
+
├── __init__.py
|
|
63
|
+
├── samples # 示例代码
|
|
64
|
+
└── setup.py
|
|
65
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# deepquantSDK
|
|
2
|
+
|
|
3
|
+
投资决策平台因子数据SDK
|
|
4
|
+
|
|
5
|
+
## Getting started
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## 文档说明
|
|
10
|
+
|
|
11
|
+
## deepquant包结构
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
deepquant
|
|
15
|
+
├── data # 数据接口
|
|
16
|
+
│ ├── gqclient # 基础框架
|
|
17
|
+
│ ├── __init__.py
|
|
18
|
+
│ ├── interface # 数据接口
|
|
19
|
+
│ ├── proto # pb协议
|
|
20
|
+
│ └── utils
|
|
21
|
+
├── factor # 因子分析
|
|
22
|
+
├── oplib # 金融函数库
|
|
23
|
+
├── swordfish.libs # 金融函数库相关so
|
|
24
|
+
├── __init__.py
|
|
25
|
+
├── samples # 示例代码
|
|
26
|
+
└── setup.py
|
|
27
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .data.interface import gid
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Copyright 2016 Ricequant, Inc
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
from deepquant.quest.sdk import entry_point
|
|
17
|
+
|
|
18
|
+
if __name__ == '__main__':
|
|
19
|
+
entry_point()
|
|
File without changes
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
import time
|
|
5
|
+
from enum import Enum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DataType(Enum):
|
|
9
|
+
"""
|
|
10
|
+
返回数据类型
|
|
11
|
+
"""
|
|
12
|
+
DATAFRAME = 0 #: 返回dataframe
|
|
13
|
+
JSON = 10 #: 返回json,如[{'symbol':'SH600000','price':10.0},{'symbol':'SZ000001','price':10.0}]
|
|
14
|
+
PROTO_BUF = 11 #: 返回数据为protocol buffer
|
|
15
|
+
|
|
16
|
+
@staticmethod
|
|
17
|
+
def get(name='', code=''):
|
|
18
|
+
for item in DataType:
|
|
19
|
+
if name is not None and item.name == name:
|
|
20
|
+
return item
|
|
21
|
+
elif code is not None and item.value == code:
|
|
22
|
+
return code
|
|
23
|
+
return DataType.JSON
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ApiReqMethod(Enum):
|
|
27
|
+
"""
|
|
28
|
+
API请求类型:POST、GET
|
|
29
|
+
"""
|
|
30
|
+
POST = 0
|
|
31
|
+
GET = 1
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def get(name='', code=''):
|
|
35
|
+
for item in ApiReqMethod:
|
|
36
|
+
if name is not None and item.name == name:
|
|
37
|
+
return item
|
|
38
|
+
elif code is not None and item.value == code:
|
|
39
|
+
return item
|
|
40
|
+
return ApiReqMethod.POST
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ApiEncrypt(Enum):
|
|
44
|
+
"""
|
|
45
|
+
API是否加密:不加密/请求相应加密/...
|
|
46
|
+
"""
|
|
47
|
+
NO = 0
|
|
48
|
+
# TODO 加解密功能待实现
|
|
49
|
+
ENCRY_REQ_RSP = 10
|
|
50
|
+
|
|
51
|
+
@staticmethod
|
|
52
|
+
def get(name='', code=''):
|
|
53
|
+
for item in ApiEncrypt:
|
|
54
|
+
if name is not None and item.name == name:
|
|
55
|
+
return item
|
|
56
|
+
elif code is not None and item.value == code:
|
|
57
|
+
return item
|
|
58
|
+
return ApiEncrypt.NO
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ApiRspCode(Enum):
|
|
62
|
+
SUCCESS = '00000'
|
|
63
|
+
HTTP_ERROR = 'H0001'
|
|
64
|
+
HTTP_TIMEOUT = 'H0002'
|
|
65
|
+
# HTTP返回码如果是非200,则错误码为HC404之类
|
|
66
|
+
HTTP_ERRCODE_PRE = 'HC{}'
|
|
67
|
+
|
|
68
|
+
NOT_AUTH = 'U0404'
|
|
69
|
+
|
|
70
|
+
PARAM_ERROR = 'P0001'
|
|
71
|
+
|
|
72
|
+
RSP_ERROR = 'RT999'
|
|
73
|
+
|
|
74
|
+
SDK_ERROR = 'SDK99'
|
|
75
|
+
|
|
76
|
+
@staticmethod
|
|
77
|
+
def is_succ(code):
|
|
78
|
+
if ApiRspCode.SUCCESS == code or ApiRspCode.SUCCESS.value == code or 200 == code or 0 == code or '0' == code:
|
|
79
|
+
return True
|
|
80
|
+
else:
|
|
81
|
+
return False
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class ApiAggregateType(Enum):
|
|
85
|
+
# 不需要聚合
|
|
86
|
+
NO = 0
|
|
87
|
+
# 分批聚合
|
|
88
|
+
BATCH = 1
|
|
89
|
+
|
|
90
|
+
# 分页聚合,TODO,本期暂不实现
|
|
91
|
+
|
|
92
|
+
@staticmethod
|
|
93
|
+
def get(name='', code=''):
|
|
94
|
+
for item in ApiAggregateType:
|
|
95
|
+
if name is not None and item.name == name:
|
|
96
|
+
return item
|
|
97
|
+
elif code is not None and item.value == code:
|
|
98
|
+
return item
|
|
99
|
+
return ApiAggregateType.NO
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class ApiRspMode(Enum):
|
|
103
|
+
# 处理后返回,默认选项
|
|
104
|
+
PROCESSED = 0
|
|
105
|
+
# 透传
|
|
106
|
+
PASSED = 1
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class ApiResponse:
|
|
110
|
+
"""
|
|
111
|
+
Api响应返回对象
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
def __init__(self, code, msg, data, **kwargs):
|
|
115
|
+
"""
|
|
116
|
+
:param code: 返回码,0-成功,其他相关错误码
|
|
117
|
+
:param msg: 返回提示
|
|
118
|
+
:param data: 返回数据
|
|
119
|
+
"""
|
|
120
|
+
self.code = code
|
|
121
|
+
self.msg = msg
|
|
122
|
+
self.data = data
|
|
123
|
+
self.extra = kwargs
|
|
124
|
+
|
|
125
|
+
@staticmethod
|
|
126
|
+
def assemble_succ_resp(data, **kwargs):
|
|
127
|
+
response = ApiResponse(code=ApiRspCode.SUCCESS, msg='success', data=data, **kwargs)
|
|
128
|
+
return response
|
|
129
|
+
|
|
130
|
+
@staticmethod
|
|
131
|
+
def assemble_err_resp(code, msg):
|
|
132
|
+
response = ApiResponse(code=code, msg=msg, data=None)
|
|
133
|
+
return response
|
|
134
|
+
|
|
135
|
+
def is_success(self):
|
|
136
|
+
return ApiRspCode.is_succ(self.code)
|
|
137
|
+
|
|
138
|
+
def __str__(self):
|
|
139
|
+
_str = self.__class__.__name__ + '(' + \
|
|
140
|
+
','.join([key + '=' + str(value) for key, value in self.__dict__.items() if value is not None]) \
|
|
141
|
+
+ ')'
|
|
142
|
+
return _str
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class ApiInfo:
|
|
146
|
+
def __init__(self, mod_type, func_name, api_uri,
|
|
147
|
+
req_method=ApiReqMethod.POST.name,
|
|
148
|
+
req_data_type=DataType.JSON.name,
|
|
149
|
+
rsp_data_type=DataType.JSON.name,
|
|
150
|
+
ret_data_node=None,
|
|
151
|
+
aggregate_type=ApiAggregateType.NO.name,
|
|
152
|
+
encrypt_type=ApiEncrypt.NO.name,
|
|
153
|
+
extras=None, comment=None):
|
|
154
|
+
"""
|
|
155
|
+
HTTP API信息
|
|
156
|
+
:param mod_type: API所属模块类型,比如数据-Data、因子-Factor
|
|
157
|
+
:param func_name: API的唯一名称,模块内唯一,比如getBars
|
|
158
|
+
:param api_uri: API对应网关的URI
|
|
159
|
+
:param req_method: 请求方式
|
|
160
|
+
:param req_data_type: 请求数据格式
|
|
161
|
+
:param rsp_data_type: 响应数据格式
|
|
162
|
+
:param ret_data_node: 返回数据的节点,比如返回json或pb根目录下的datas
|
|
163
|
+
|
|
164
|
+
:param aggregate_type: 是否需要批量聚合,0-不需要,1-分批聚合,2-分页聚合
|
|
165
|
+
:param encrypt_type: 加解密类型
|
|
166
|
+
:param extras: 扩展字段,作为预留
|
|
167
|
+
"""
|
|
168
|
+
# API类型,比如data/factor...
|
|
169
|
+
self.mod_type = mod_type
|
|
170
|
+
self.func_name = func_name
|
|
171
|
+
self.api_uri = api_uri
|
|
172
|
+
self.req_method = ApiReqMethod.get(req_method)
|
|
173
|
+
self.req_data_type = DataType.get(req_data_type)
|
|
174
|
+
self.rsp_data_type = DataType.get(rsp_data_type)
|
|
175
|
+
self.ret_data_node = ret_data_node
|
|
176
|
+
|
|
177
|
+
# 分批聚合功能已支持
|
|
178
|
+
self.aggregate_type = ApiAggregateType.get(aggregate_type)
|
|
179
|
+
self.encrypt_type = ApiEncrypt.get(encrypt_type)
|
|
180
|
+
self.extras = extras
|
|
181
|
+
self.comment = comment
|
|
182
|
+
|
|
183
|
+
@staticmethod
|
|
184
|
+
def gen_from_json_item(_json_config):
|
|
185
|
+
mod_type = _json_config.get('modType')
|
|
186
|
+
if mod_type is None:
|
|
187
|
+
mod_type = _json_config.get('mod_type')
|
|
188
|
+
|
|
189
|
+
func_name = _json_config.get('funcName')
|
|
190
|
+
if func_name is None:
|
|
191
|
+
func_name = _json_config.get('func_name')
|
|
192
|
+
|
|
193
|
+
api_uri = _json_config.get('apiUri')
|
|
194
|
+
if api_uri is None:
|
|
195
|
+
api_uri = _json_config.get('api_uri')
|
|
196
|
+
|
|
197
|
+
req_method = _json_config.get('reqMethod')
|
|
198
|
+
if req_method is None:
|
|
199
|
+
req_method = _json_config.get('req_method')
|
|
200
|
+
|
|
201
|
+
req_data_type = _json_config.get('reqDataType')
|
|
202
|
+
if req_data_type is None:
|
|
203
|
+
req_data_type = _json_config.get('req_data_type')
|
|
204
|
+
|
|
205
|
+
rsp_data_type = _json_config.get('rspDataType')
|
|
206
|
+
if rsp_data_type is None:
|
|
207
|
+
rsp_data_type = _json_config.get('rsp_data_type')
|
|
208
|
+
|
|
209
|
+
ret_data_node = _json_config.get('retDataNode')
|
|
210
|
+
if ret_data_node is None:
|
|
211
|
+
ret_data_node = _json_config.get('ret_data_node')
|
|
212
|
+
|
|
213
|
+
encrypt_type = _json_config.get('encryptType')
|
|
214
|
+
if encrypt_type is None:
|
|
215
|
+
encrypt_type = _json_config.get('encrypt_type')
|
|
216
|
+
|
|
217
|
+
comment = _json_config.get('remark')
|
|
218
|
+
if comment is None:
|
|
219
|
+
comment = _json_config.get('comment')
|
|
220
|
+
|
|
221
|
+
return ApiInfo(mod_type=mod_type, func_name=func_name, api_uri=api_uri, req_method=req_method,
|
|
222
|
+
req_data_type=req_data_type, rsp_data_type=rsp_data_type, ret_data_node=ret_data_node,
|
|
223
|
+
encrypt_type=encrypt_type,
|
|
224
|
+
comment=comment)
|
|
225
|
+
|
|
226
|
+
@staticmethod
|
|
227
|
+
def default(mod_type, func_name, api_uri, method="POST"):
|
|
228
|
+
return ApiInfo(mod_type=mod_type, func_name=func_name, api_uri=api_uri, req_method=method)
|
|
229
|
+
|
|
230
|
+
def set_req_method(self, req_method):
|
|
231
|
+
self.req_method = req_method
|
|
232
|
+
return self
|
|
233
|
+
|
|
234
|
+
def set_data_type(self, data_type):
|
|
235
|
+
self.req_data_type = data_type
|
|
236
|
+
self.rsp_data_type = data_type
|
|
237
|
+
return self
|
|
238
|
+
|
|
239
|
+
def set_ret_data_node(self, ret_data_node):
|
|
240
|
+
self.ret_data_node = ret_data_node
|
|
241
|
+
return self
|
|
242
|
+
|
|
243
|
+
def has_data_node(self):
|
|
244
|
+
if self.ret_data_node is not None and len(self.ret_data_node) > 0:
|
|
245
|
+
return True
|
|
246
|
+
else:
|
|
247
|
+
return False
|
|
248
|
+
|
|
249
|
+
def __str__(self):
|
|
250
|
+
_str = self.__class__.__name__ + '(' + \
|
|
251
|
+
','.join([key + '=' + str(value) for key, value in self.__dict__.items() if value is not None]) \
|
|
252
|
+
+ ')'
|
|
253
|
+
return _str
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
class TTLCache(object):
|
|
257
|
+
"""
|
|
258
|
+
TTL缓存,用于token缓存等
|
|
259
|
+
"""
|
|
260
|
+
NOT_FOUND = None
|
|
261
|
+
|
|
262
|
+
def __init__(self):
|
|
263
|
+
# 记录key-value数据
|
|
264
|
+
self.datas = dict()
|
|
265
|
+
# 记录key-expire失效时间
|
|
266
|
+
self.expires = dict()
|
|
267
|
+
|
|
268
|
+
def check_and_remove_key_expires(self, key):
|
|
269
|
+
if key in self.datas:
|
|
270
|
+
if key in self.expires:
|
|
271
|
+
now = time.time()
|
|
272
|
+
expire_time = self.expires[key]
|
|
273
|
+
if expire_time > now:
|
|
274
|
+
# 超时时间>当前时间,则返回数据
|
|
275
|
+
return self.datas[key]
|
|
276
|
+
else:
|
|
277
|
+
print('[check_key_expires]key-expired:' + key + ', ' + self.datas[key])
|
|
278
|
+
del self.datas[key]
|
|
279
|
+
del self.expires[key]
|
|
280
|
+
return TTLCache.NOT_FOUND
|
|
281
|
+
else:
|
|
282
|
+
del self.datas[key]
|
|
283
|
+
return TTLCache.NOT_FOUND
|
|
284
|
+
else:
|
|
285
|
+
return TTLCache.NOT_FOUND
|
|
286
|
+
|
|
287
|
+
def get(self, key):
|
|
288
|
+
return self.check_and_remove_key_expires(key)
|
|
289
|
+
|
|
290
|
+
def set(self, key, value, ttl=86400):
|
|
291
|
+
now = time.time()
|
|
292
|
+
self.datas[key] = value
|
|
293
|
+
self.expires[key] = now + ttl
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
class FunctionMode(Enum):
|
|
297
|
+
# 无上传参数模式
|
|
298
|
+
SIMPLE = 1
|
|
299
|
+
# 无上传参数模式
|
|
300
|
+
COMPLEX = 2
|