From ce5856ae89f62fddd916853270cb23def3e01885 Mon Sep 17 00:00:00 2001 From: xlmessage <3240982126@qq.com> Date: Mon, 17 Feb 2025 10:20:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86new=5Fuser=5Fstategy?= =?UTF-8?q?=E7=9A=84model,=E9=87=8D=E6=9E=84=E4=BA=86=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=93=8D=E4=BD=9C=E4=BB=A3=E7=A0=81=EF=BC=8C=E8=BD=AC?= =?UTF-8?q?=E5=8C=96=E4=B8=BAtortoise=20ORM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/__pycache__/__init__.cpython-311.pyc | Bin 258 -> 265 bytes src/__pycache__/constants.cpython-311.pyc | Bin 2267 -> 2274 bytes src/__pycache__/exceptions.cpython-311.pyc | Bin 6682 -> 6689 bytes src/__pycache__/main.cpython-311.pyc | Bin 5532 -> 5539 bytes src/__pycache__/responses.cpython-311.pyc | Bin 3015 -> 3022 bytes src/__pycache__/tortoises.cpython-311.pyc | Bin 3697 -> 3734 bytes .../tortoises_orm_config.cpython-311.pyc | Bin 1663 -> 1670 bytes src/akshare_data/router.py | 761 ++++-------------- src/akshare_data/service.py | 9 +- .../bollinger_bands.cpython-311.pyc | Bin 12131 -> 12138 bytes .../dual_moving_average.cpython-311.pyc | Bin 11874 -> 11881 bytes .../reverse_dual_ma_strategy.cpython-311.pyc | Bin 11855 -> 11862 bytes .../__pycache__/router.cpython-311.pyc | Bin 1664 -> 1671 bytes .../__pycache__/rsi_strategy.cpython-311.pyc | Bin 13968 -> 13975 bytes .../__pycache__/service.cpython-311.pyc | Bin 4872 -> 4879 bytes src/klinedata/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 12294 -> 12301 bytes .../back_observed_data.cpython-311.pyc | Bin 1273 -> 1280 bytes .../back_observed_data_detail.cpython-311.pyc | Bin 1147 -> 1154 bytes .../__pycache__/back_position.cpython-311.pyc | Bin 1179 -> 1186 bytes .../back_result_indicator.cpython-311.pyc | Bin 1132 -> 1139 bytes .../back_trand_info.cpython-311.pyc | Bin 1109 -> 1116 bytes .../__pycache__/backtest.cpython-311.pyc | Bin 2147 -> 2154 bytes src/models/__pycache__/order.cpython-311.pyc | Bin 4685 -> 4692 bytes .../__pycache__/position.cpython-311.pyc | Bin 2698 -> 2705 bytes .../security_account.cpython-311.pyc | Bin 2018 -> 2025 bytes .../__pycache__/snowball.cpython-311.pyc | Bin 1280 -> 1287 bytes src/models/__pycache__/stock.cpython-311.pyc | Bin 1574 -> 1581 bytes .../stock_bt_history.cpython-311.pyc | Bin 1717 -> 1724 bytes .../stock_data_processing.cpython-311.pyc | Bin 1798 -> 1805 bytes .../__pycache__/stock_details.cpython-311.pyc | Bin 1797 -> 1804 bytes .../__pycache__/stock_history.cpython-311.pyc | Bin 1461 -> 1468 bytes .../__pycache__/strategy.cpython-311.pyc | Bin 1993 -> 2000 bytes .../__pycache__/test_table.cpython-311.pyc | Bin 2590 -> 2597 bytes .../tran_observer_data.cpython-311.pyc | Bin 1215 -> 1222 bytes .../__pycache__/tran_orders.cpython-311.pyc | Bin 1137 -> 1144 bytes .../__pycache__/tran_position.cpython-311.pyc | Bin 1179 -> 1186 bytes .../__pycache__/tran_return.cpython-311.pyc | Bin 1169 -> 1176 bytes .../tran_trade_info.cpython-311.pyc | Bin 1170 -> 1177 bytes .../__pycache__/trand_info.cpython-311.pyc | Bin 1210 -> 1217 bytes .../__pycache__/transaction.cpython-311.pyc | Bin 2660 -> 2667 bytes .../wance_data_stock.cpython-311.pyc | Bin 4438 -> 4445 bytes ...ance_data_storage_backtest.cpython-311.pyc | Bin 8104 -> 8111 bytes src/models/new_user_strategy.py | 12 + .../backtest_request.cpython-311.pyc | Bin 4330 -> 4337 bytes .../codelistrequest.cpython-311.pyc | Bin 561 -> 568 bytes .../factor_request.cpython-311.pyc | Bin 3499 -> 3506 bytes .../__pycache__/request_data.cpython-311.pyc | Bin 2645 -> 2652 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 180 -> 187 bytes .../__pycache__/config.cpython-311.pyc | Bin 2096 -> 2103 bytes src/tortoises.py | 3 +- .../__pycache__/__init__.cpython-311.pyc | Bin 2198 -> 2205 bytes src/utils/__pycache__/helpers.cpython-311.pyc | Bin 2236 -> 2243 bytes ...tory_data_processing_utils.cpython-311.pyc | Bin 11901 -> 11908 bytes src/utils/__pycache__/models.cpython-311.pyc | Bin 2534 -> 2541 bytes .../__pycache__/paginations.cpython-311.pyc | Bin 3508 -> 3515 bytes src/utils/__pycache__/redis.cpython-311.pyc | Bin 2480 -> 2487 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 178 -> 185 bytes src/xtdata/__pycache__/router.cpython-311.pyc | Bin 8991 -> 8998 bytes .../__pycache__/service.cpython-311.pyc | Bin 12906 -> 12913 bytes 60 files changed, 185 insertions(+), 600 deletions(-) delete mode 100644 src/klinedata/__init__.py create mode 100644 src/models/new_user_strategy.py diff --git a/src/__pycache__/__init__.cpython-311.pyc b/src/__pycache__/__init__.cpython-311.pyc index c71b727cf9310bcb39257b883c7ebeace0bdee10..105cb5fdc7f09bd7c9515a569ab5af96b5b599d3 100644 GIT binary patch delta 43 xcmZo->SW?w&dbZi00ffr)}=>GC)UfdndliB>6uPknE(KgIS9u9 diff --git a/src/__pycache__/constants.cpython-311.pyc b/src/__pycache__/constants.cpython-311.pyc index 74eb49e5bb5d3840170868ac77a7f9273773a608..81d18c6206167d7dde4eb300b45ba21648cf6ada 100644 GIT binary patch delta 45 zcmcaD_(+g^K?SX^X0wIrnNuWy)CA!I5|HhHO9!m X$W+fr&(I{Mpt2+*KX3ChRud5bGwK-V delta 62 zcmZ2zGRuT}IWI340}z~w3EIfLomIsa$ab-cc{-ux`SRXp)7qcx-WF3ueomZwIWI340}x2gTep#0nVHdfvOcpcuc@Aqo}o!hL1jrse%|IF=28v-06Gi5 delta 38 scmX>neq5Y;IWI340}wQF2X5q6W@faRtj{dVW};_kq-VN0lDU)v0Hz%XG5`Po diff --git a/src/__pycache__/tortoises.cpython-311.pyc b/src/__pycache__/tortoises.cpython-311.pyc index 2bc094d9a33a5dcafe71bed2ba01c20e95853e12..9a28fb6077200c2ad123800708ff060cd99d6688 100644 GIT binary patch delta 106 zcmew;GfkFnIWI340}xawtWReX*~k~j!st9Xfkl?rRL@Ay&?KgyvLquvZ*w!tDn>@7 z&3bH8m<42ti<0$n^HWlDiuLkR%i}k1;S6SEEZEG!y_`uE1B_^3``|bE0PjWs D3CJFS delta 82 zcmbOx`%#8(IWI340}wQF2c|z1-pCio!e}!&fkl?hM9= 0: + if price_list[i] >= 0: flag = True else: flag = False @@ -530,9 +274,9 @@ async def ganggudata(): 'code': codes_list[i], 'name': names_list[i], 'market': '港股', - 'newprice': cleaned_price_list[i], + 'newprice': price_list[i], 'amplitudetype': flag, - 'amplitude': cleaned_amplitudes_list[i], + 'amplitude': amplitudes_list[i], 'type': 'ganggu' }) @@ -549,64 +293,24 @@ async def ganggudataK( try: stock_hk_hist_df = ak.stock_hk_hist(symbol=symbol, period="daily", start_date=start_date, end_date=end_date, adjust="") - - # 获取所有的code - all_dates = stock_hk_hist_df['日期'] - # 如果你想要一个列表而不是Pandas Series - dates_list = all_dates.tolist() - - all_opens = stock_hk_hist_df['开盘'] - opens_list = all_opens.tolist() - cleaned_opens_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in opens_list - ] - - all_closes = stock_hk_hist_df['收盘'] - close_list = all_closes.tolist() - cleaned_close_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in close_list - ] - - all_highs = stock_hk_hist_df['最高'] - high_list = all_highs.tolist() - cleaned_high_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in high_list - ] - - all_lows = stock_hk_hist_df['最低'] - low_list = all_lows.tolist() - cleaned_low_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in low_list - ] - - all_volumes = stock_hk_hist_df['成交量'] - volume_list = all_volumes.tolist() - cleaned_volume_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in volume_list - ] - - all_amounts = stock_hk_hist_df['成交额'] - amount_list = all_amounts.tolist() - cleaned_amount_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in amount_list - ] + dates_list = stock_hk_hist_df['日期'].tolist() + opens_list = clean_data(stock_hk_hist_df['开盘'].tolist()) + close_list = clean_data(stock_hk_hist_df['收盘'].tolist()) + high_list = clean_data(stock_hk_hist_df['最高'].tolist()) + low_list = clean_data(stock_hk_hist_df['最低'].tolist()) + volume_list = clean_data(stock_hk_hist_df['成交量'].tolist()) + amount_list = clean_data(stock_hk_hist_df['成交额'].tolist()) global stock_data stock_data = { - "amount": cleaned_amount_list, - "close": cleaned_close_list, + "amount": amount_list, + "close": close_list, "date": dates_list, - "high": cleaned_high_list, - "low": cleaned_low_list, - "open": cleaned_opens_list, + "high": high_list, + "low": low_list, + "open": opens_list, "outstanding_share": [], "turnover": [], - "volume": cleaned_volume_list + "volume": volume_list } except Exception as e: print(e) @@ -624,55 +328,38 @@ async def ganggudataK( finally: return {"message": stock_data} - - # --------------------------------------------------------------------- # 美股代码数据 @router.get("/meigudata") async def meigudata(): stock_us_spot_em_df = ak.stock_us_spot_em() - # print(stock_us_spot_em_df) - all_codes = stock_us_spot_em_df['代码'] - # 如果你想要一个列表而不是Pandas Series - codes_list = all_codes.tolist() + codes_list = stock_us_spot_em_df['代码'].tolist() + names_list = stock_us_spot_em_df['名称'].tolist() + price_list = clean_data(stock_us_spot_em_df['最新价'].tolist()) + amplitudes_list = clean_data(stock_us_spot_em_df['涨跌幅'].tolist()) - all_names = stock_us_spot_em_df['名称'] - names_list = all_names.tolist() - - all_prices = stock_us_spot_em_df['最新价'] - price_list = all_prices.tolist() - # 清理非法浮点数值(NaN, Infinity, -Infinity) - cleaned_price_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in price_list - ] - - all_amplitudes = stock_us_spot_em_df['涨跌幅'] - amplitudes_list = all_amplitudes.tolist() - # 清理非法浮点数值(NaN, Infinity, -Infinity) - cleaned_amplitudes_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in amplitudes_list - ] # 返回的数据 mgstocking = [] for i in range(9): - if cleaned_price_list[i] >= 0: + if price_list[i] >= 0: flag = True else: flag = False mgstocking.append({ 'code': codes_list[i], 'name': names_list[i], - 'market': '港股', - 'newprice': cleaned_price_list[i], + 'market': '美股', + 'newprice': price_list[i], 'amplitudetype': flag, - 'amplitude': cleaned_amplitudes_list[i], + 'amplitude': amplitudes_list[i], 'type': 'meigu' }) # 返回清理后的列表 return mgstocking + + + # 美股K线图历史数据 @router.get("/meigudataK") async def meigudataK( @@ -683,64 +370,25 @@ async def meigudataK( try: stock_us_hist_df = ak.stock_us_hist(symbol=symbol, period="daily", start_date=start_date, end_date=end_date, adjust="qfq") + dates_list = stock_us_hist_df['日期'].tolist() + opens_list = stock_us_hist_df['开盘'].tolist() + close_list = clean_data(stock_us_hist_df['收盘'].tolist()) + high_list = clean_data(stock_us_hist_df['最高'].tolist()) + low_list = clean_data(stock_us_hist_df['最低'].tolist()) + volume_list = clean_data(stock_us_hist_df['成交量'].tolist()) + amount_list = clean_data(stock_us_hist_df['成交额'].tolist()) - # 获取所有的code - all_dates = stock_us_hist_df['日期'] - # 如果你想要一个列表而不是Pandas Series - dates_list = all_dates.tolist() - - all_opens = stock_us_hist_df['开盘'] - opens_list = all_opens.tolist() - cleaned_opens_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in opens_list - ] - - all_closes = stock_us_hist_df['收盘'] - close_list = all_closes.tolist() - cleaned_close_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in close_list - ] - - all_highs = stock_us_hist_df['最高'] - high_list = all_highs.tolist() - cleaned_high_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in high_list - ] - - all_lows = stock_us_hist_df['最低'] - low_list = all_lows.tolist() - cleaned_low_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in low_list - ] - - all_volumes = stock_us_hist_df['成交量'] - volume_list = all_volumes.tolist() - cleaned_volume_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in volume_list - ] - - all_amounts = stock_us_hist_df['成交额'] - amount_list = all_amounts.tolist() - cleaned_amount_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in amount_list - ] global stock_data stock_data = { - "amount": cleaned_amount_list, - "close": cleaned_close_list, + "amount": amount_list, + "close": close_list, "date": dates_list, - "high": cleaned_high_list, - "low": cleaned_low_list, - "open": cleaned_opens_list, + "high": high_list, + "low": low_list, + "open": opens_list, "outstanding_share": [], "turnover": [], - "volume": cleaned_volume_list + "volume": volume_list } except Exception as e: print(e) @@ -766,59 +414,26 @@ async def hushendata(): stock_zh_a_spot_df = ak.stock_kc_a_spot_em() except Exception as e: print(e) - # print(stock_zh_a_spot_df) - all_codes = stock_zh_a_spot_df['代码'] - # 如果你想要一个列表而不是Pandas Series - codes_list = all_codes.tolist() + codes_list = stock_zh_a_spot_df['代码'].tolist() + names_list = stock_zh_a_spot_df['名称'].tolist() + price_list = clean_data(stock_zh_a_spot_df['最新价'].tolist()) + amplitudes_list = clean_data(stock_zh_a_spot_df['涨跌幅'].tolist()) - all_names = stock_zh_a_spot_df['名称'] - names_list = all_names.tolist() - - all_prices = stock_zh_a_spot_df['最新价'] - price_list = all_prices.tolist() - # 清理非法浮点数值(NaN, Infinity, -Infinity) - cleaned_price_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in price_list - ] - - all_amplitudes = stock_zh_a_spot_df['涨跌幅'] - amplitudes_list = all_amplitudes.tolist() - # 清理非法浮点数值(NaN, Infinity, -Infinity) - cleaned_amplitudes_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in amplitudes_list - ] # 返回的数据 hsstocking = [] - # for i in range(len(codes_list)): - # if cleaned_price_list[i] >= 0: - # flag = True - # else: - # flag = False - # hsstocking.append({ - # 'code': codes_list[i], - # 'name': names_list[i], - # 'market': '港股', - # 'newprice': cleaned_price_list[i], - # 'amplitudetype': flag, - # 'amplitude': cleaned_amplitudes_list[i], - # }) - - for i in range(9): - if cleaned_price_list[i] >= 0: + if price_list[i] >= 0: flag = True else: flag = False hsstocking.append({ 'code': codes_list[i], 'name': names_list[i], - 'market': '港股', - 'newprice': cleaned_price_list[i], + 'market': '沪深', + 'newprice': price_list[i], 'amplitudetype': flag, - 'amplitude': cleaned_amplitudes_list[i], + 'amplitude': amplitudes_list[i], 'type': 'hushen' }) @@ -834,63 +449,26 @@ async def hushendataK( stock_zh_a_daily_qfq_df = ak.stock_zh_a_daily(symbol='sh' + symbol, start_date=start_date, end_date=end_date, adjust="qfq") - # 获取所有的code - all_dates = stock_zh_a_daily_qfq_df['date'] # 如果你想要一个列表而不是Pandas Series - dates_list = all_dates.tolist() + dates_list = stock_zh_a_daily_qfq_df['date'].tolist() + opens_list = clean_data(stock_zh_a_daily_qfq_df['open'].tolist()) + close_list = clean_data(stock_zh_a_daily_qfq_df['close'].tolist()) + high_list = clean_data(stock_zh_a_daily_qfq_df['high'].tolist()) + low_list = clean_data(stock_zh_a_daily_qfq_df['low'].tolist()) + volume_list = clean_data(stock_zh_a_daily_qfq_df['volume'].tolist()) + amount_list = clean_data(stock_zh_a_daily_qfq_df['amount'].tolist()) - all_opens = stock_zh_a_daily_qfq_df['open'] - opens_list = all_opens.tolist() - cleaned_opens_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in opens_list - ] - - all_closes = stock_zh_a_daily_qfq_df['close'] - close_list = all_closes.tolist() - cleaned_close_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in close_list - ] - - all_highs = stock_zh_a_daily_qfq_df['high'] - high_list = all_highs.tolist() - cleaned_high_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in high_list - ] - - all_lows = stock_zh_a_daily_qfq_df['low'] - low_list = all_lows.tolist() - cleaned_low_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in low_list - ] - - all_volumes = stock_zh_a_daily_qfq_df['volume'] - volume_list = all_volumes.tolist() - cleaned_volume_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in volume_list - ] - - all_amounts = stock_zh_a_daily_qfq_df['amount'] - amount_lists = all_amounts.tolist() - cleaned_amount_list = [ - value if not (math.isnan(value) or math.isinf(value)) else 0.00 - for value in amount_lists - ] global stock_data stock_data = { - "amount": cleaned_amount_list, - "close": cleaned_close_list, + "amount": amount_list, + "close": close_list, "date": dates_list, - "high": cleaned_high_list, - "low": cleaned_low_list, - "open": cleaned_opens_list, + "high": high_list, + "low": low_list, + "open": opens_list, "outstanding_share": [], "turnover": [], - "volume": cleaned_volume_list + "volume": volume_list } except Exception as e: print(e) @@ -908,8 +486,3 @@ async def hushendataK( finally: return {"message": stock_data} - - - - - diff --git a/src/akshare_data/service.py b/src/akshare_data/service.py index a1e8c38..87b9bd2 100644 --- a/src/akshare_data/service.py +++ b/src/akshare_data/service.py @@ -1,6 +1,5 @@ -from fastapi import FastAPI,Query -from starlette.middleware.cors import CORSMiddleware -import akshare as ak -async def get_day_k_data(): - pass +from typing import Dict, List +import math +def clean_data(data: List[float]) -> List[float]: + return [value if not (math.isnan(value) or math.isinf(value)) else 0.00 for value in data] diff --git a/src/backtest/__pycache__/bollinger_bands.cpython-311.pyc b/src/backtest/__pycache__/bollinger_bands.cpython-311.pyc index c79f5d18f51e58edf42198d0207c4e49554f034f..51523c9a95995edf8d46f49b9ba67ae69af4ae49 100644 GIT binary patch delta 48 zcmaDH_bQHWIWI340}x2gTbI5_e5SIWI340}x2gTbCZDw~^16g)wY$42vwUsh*LZp-D_ZWl2VU-sXCi$C?0G CY7UtI delta 41 vcmaDE^C*UIIWI340}wQF2d2mAZ{+i3Vf3FI!y?OOqGxENXS%tK<*_CJ?!gNc diff --git a/src/backtest/__pycache__/reverse_dual_ma_strategy.cpython-311.pyc b/src/backtest/__pycache__/reverse_dual_ma_strategy.cpython-311.pyc index 8e0868bed131777b2d2bbc3e4a3373c82ca8b0eb..349638102f89d73ce39c0d549357e0ba9f1e9902 100644 GIT binary patch delta 48 zcmX>fb1jB%IWI340}x2gTbJ&qzmYG3g)w?^I*Tl?sh*LZp-D_ZWl2VU-sUcrqnZFy C84h#+ delta 41 vcmcZ>b3TS|IWI340}wQF2c`!bY~+hzVGNm^&LYcZqGxENXS#VJ%TY}L>81+p diff --git a/src/backtest/__pycache__/router.cpython-311.pyc b/src/backtest/__pycache__/router.cpython-311.pyc index 2438ddabe00a1b720588c30d8406f739d5e702c7..41bdcaecd8f91a8b5f64434ffd31b47848e927c3 100644 GIT binary patch delta 45 zcmZqRZRh1)&dbZi00ffr)@|fwW@hx9%+D;#YpQ3YXJ`^rP+5|ZpSRhF*^e0j-UJGl delta 38 scmZqYZQ$iz&dbZi00fQPfg8D*nHilX^E1n`ndliB>6vb}WcFhQ0Ezks3IG5A diff --git a/src/backtest/__pycache__/rsi_strategy.cpython-311.pyc b/src/backtest/__pycache__/rsi_strategy.cpython-311.pyc index 551a16fbb5f0ac48a149a2574533f01e30ca9b92..8ef60cc9af4db7f9150788ae383a01603b7c4341 100644 GIT binary patch delta 72 zcmbP`J3W_gIWI340}x2gTbEvGvXSpNi?%tYr2bVAGX<-O0QwLjUtEvBqEIX@*e a#>l|PRL@Ay&?KgyvLquvZ}U%<>4pHDNE-|Q delta 64 zcmbQ9J0X{EIWI340}wQF2d2+6-N<*GMa2Wib+L+hI-%wH^4@3D+Mn#+7E@N7oS%{! SV`N}tqGxENXS#`Xx*-6&C>Esv diff --git a/src/backtest/__pycache__/service.cpython-311.pyc b/src/backtest/__pycache__/service.cpython-311.pyc index ef785be29c0fe6814246aadeeecbb2d37f16152c..cc4e3a0cf1a1364e9d0450107ca5d84de3ccdbe9 100644 GIT binary patch delta 47 zcmeBB>sRAl&dbZi00ffr)}`}rrmre&dbZi00fQPf$2>fc^9xUI!|85D$8b~XK18ny7>mHIWGXmjtUL{ diff --git a/src/klinedata/__init__.py b/src/klinedata/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/models/__pycache__/__init__.cpython-311.pyc b/src/models/__pycache__/__init__.cpython-311.pyc index f6aee2d4c1d2b16edce146c1c6f20457645a143a..c87364298a32cd50e6968ef5eac0322c0c06421c 100644 GIT binary patch delta 48 zcmZom=uO~T&dbZi00ffr)}?z(ZsfCPVf38r$0EyXs%NBUXcALUS(1^Tx4DpIsx|;G Cj}1lu delta 41 vcmeB8XiMN*&dbZi00fQPf$8~D8~N;67@a2jvB> B4T=B& delta 40 ucmZqR`pL<=oR^o20SFqo1Jh4zvmcW#695%g B3-hCIAcA B3+Dg; delta 40 ucmZ3)Ih&JrIWI340}wQF2d0;7JC1lPs^Po{^rRNlZayNk)F&W^X1%CIBS3 B3_Ab- delta 40 ucmey&@rHwUIWI340}wQF2d0N?I{?UYv5I**q2>AV-e=R=pX}ZiQ&yaupOPA5 ZWME{fXQXFn5>rrFl98Xc*^)_y2>?SE7%Bh& delta 64 zcmcb^ag~F2IWI340}wQF2d2AjAV-e=R=pX}ZiQ&yaupOPA5 ZWME{fXQXFn5>rrFl98Xcc^S)IW&mwr8SVf8 delta 64 zcmaDQ@K}I%IWI340}wQF2c{Qpml*)5a29$1 diff --git a/src/models/__pycache__/order.cpython-311.pyc b/src/models/__pycache__/order.cpython-311.pyc index 89407ed8397265127debc17d21e43f6a1fb8f877..fa14a9cd3769ee0e5cc7659927c46fad370ff288 100644 GIT binary patch delta 47 zcmX@Baz%xAIWI340}x2gTbEw6k++Y9(QWb^7Fk|XJtI9slbC|al8pSk&HGvUcmY6R B4l4iv delta 40 ucmcbja#n?RIWI340}wQF2c~b^$lJ%lXg_%li!7Uoo}rPR>E>fBeY^nPFbd)T diff --git a/src/models/__pycache__/position.cpython-311.pyc b/src/models/__pycache__/position.cpython-311.pyc index e982f1b8ce6fee98357f7cc6e874985f60b56c6b..6f729f2bb9c58953a48c3630540912a2b8a6c3eb 100644 GIT binary patch delta 47 zcmeAYohZt?oR^o20SF}LtxMm#k=KBk(Q~pLvn;Qvo{^rRNlZayNk)F&=0s*qb^sTl B3{3z4 delta 40 ucmbOz+9k@noR^o20SFqo1JfUDAV-e=R=pX}ZiQ&yaupOPA5 ZWME{fXQXFn5>rrFl98Xc*^OlmGXP2N7|H+u delta 64 zcmaFK|A?P=IWI340}wQF2c{cr^IWE6CIBHw B4KDxy delta 40 ucmZqYYT)8s&dbZi00fQPf$2Xs^5!rxI!&%(l4Uc|Gc?jO-MoY;nF#>DObNFD diff --git a/src/models/__pycache__/stock.cpython-311.pyc b/src/models/__pycache__/stock.cpython-311.pyc index 6ae88b99d054e7a38381776bcac474ae2cdd625d..288314e249ae8701e60cf838292c0fdb572f3fa3 100644 GIT binary patch delta 47 zcmZ3+vzCWvy6v#IWI340}wQF2d1Cj$ScLnXg^tlS(eR2&(KKEbaN2%Z6*M`ED2x$ diff --git a/src/models/__pycache__/stock_bt_history.cpython-311.pyc b/src/models/__pycache__/stock_bt_history.cpython-311.pyc index f7a85fdb0a460b71d65cc342b210d290386bff8e..f1b4c2bbaa6394b2a6d65ff55ee43ef0ac9cc491 100644 GIT binary patch delta 47 zcmdnWyN8!|IWI340}x2gTbEwCk++_iF>rD(vn;Qvo{^rRNlZayNk)F&<_*lO%m6H; B4Hy6b delta 40 ucmdnPyOo!BIWI340}wQF2d1}fDGd*9n^d diff --git a/src/models/__pycache__/stock_data_processing.cpython-311.pyc b/src/models/__pycache__/stock_data_processing.cpython-311.pyc index 9b8738a81d706d353a544d3bd98f3322875199b7..51d2160c93db17cbae6c00aa81749f04309f6ec3 100644 GIT binary patch delta 71 zcmZqU>*eEJ&dbZi00ffr)}=RXYvbcx&dbZi00fQPf$38>@=jq^@dxr;tYV%{XnDT8_t~`eC%d=BlocoEr=-Rh S85o)985-%CZa%~8$P5684Hc~b diff --git a/src/models/__pycache__/stock_details.cpython-311.pyc b/src/models/__pycache__/stock_details.cpython-311.pyc index 1f1c3a90563c581c7bee8552e575572ed5c3ab4a..5d33eaeef03520ce19b96d1dd9f5c4b027680375 100644 GIT binary patch delta 71 zcmZqW>*3>F&dbZi00ffr)}^Ox1IXd*-QY_6belM diff --git a/src/models/__pycache__/strategy.cpython-311.pyc b/src/models/__pycache__/strategy.cpython-311.pyc index 4bcb607e9e9983ef94b9411ea2c32f64176e494f..3bcee844ea3ff044accefdd591b773c2789ed12c 100644 GIT binary patch delta 71 zcmX@fe}SKOIWI340}x2gTbItWk=KMp+Y`uhv5I**q2>AV-e=R=pX}ZiQ&yaupOPA5 ZWME{fXQXFn5>rrFl98XcIh7@a82~@-7?A(~ delta 64 zcmcb>f0CbfIWI340}wQF2d2w!^9j~4763qR82|tP delta 64 zcmZ1~GEaneIWI340}wQF2d3+8AV-e=R=pX}ZiQ&yaupOPA5 ZWME{fXQXFn5>rrFl98Xcxsu6^2>@2-82kVL delta 64 zcmX@cxu27FIWI340}wQF2c}Qm$m_wR;sfNlSj9Y@(DHnF@3U#`Pj+vMDJxFSPf3k2 SGB7gHGc?jO-Q2+B#smP8&lP+C diff --git a/src/models/__pycache__/tran_orders.cpython-311.pyc b/src/models/__pycache__/tran_orders.cpython-311.pyc index 6c402d96bd3edfe3f7121f5a33da2b1f7cc832f6..5325a6cf121492b043211ccfeaefdcb274cf8e33 100644 GIT binary patch delta 71 zcmey!@q>eRIWI340}x2gTbG`^k@p6pwhxf!ViogrLd)~zz0an#KiR!4rmQ$QKP5HB Z$iT={&q&YEB&MLUBqKj>Gbd99699vm8FK&t delta 64 zcmeyt@sWdfIWI340}wQF2c{QnhCIAcA B3+Dg; delta 40 ucmZ3)Ih&JrIWI340}wQF2d0;7AV-e=R=pX}ZiQ&yaupOPA5 ZWME{fXQXFn5>rrFl98Xc*`3LY2>>az7!v>h delta 64 zcmbQiIgyihIWI340}wQF2d3w5u`IWI340}wQF2d3}d$ZN;M=rY-dNtVq-&(KKEbaNS#HxmHFAqh+X diff --git a/src/models/__pycache__/transaction.cpython-311.pyc b/src/models/__pycache__/transaction.cpython-311.pyc index f2f37c8dbbe3c6c1ffe07510d62a124a62ce0ef6..d79cae0360ed1d226f1c3c7a1ff9195f06ee4c8e 100644 GIT binary patch delta 47 zcmaDN@>+y}qtE0stg^hOdPaJNCNTw-B^mj7o8PmRvH$== C01i$7 delta 40 ucmaDY@0=sNift1O#|o}rPR>E>^&r7Qs3*$UqP diff --git a/src/models/__pycache__/wance_data_stock.cpython-311.pyc b/src/models/__pycache__/wance_data_stock.cpython-311.pyc index 817bea4439fd696733b1e85eff2cde36516aabc8..7e8dfef10e96ada4e603667e934bc334b9fbce3f 100644 GIT binary patch delta 47 zcmcbnbXSRYIWI340}x2gTbJ&&k++zWF>rDtr!23jo{^rRNlZayNk)F&<|Uk)*a14` B4fp^6 delta 40 ucmcbsbWMqOIWI340}wQF2d0;7tYr2bVAGX<-O0QwLjUtEvBqEIX@*e a#>l|PRL@Ay&?KgyvLquvZ*#hcBR2qrlNq%D delta 65 zcmZ2)zrvnxIWI340}wQF2d2wOZR9f*Q3(ZdU94iBPH1_)y!Y9(_9wfy#gr8%=clB` T7#SFu=ouR6nQqP#apVR7mMj%( diff --git a/src/models/new_user_strategy.py b/src/models/new_user_strategy.py new file mode 100644 index 0000000..3c5ab4b --- /dev/null +++ b/src/models/new_user_strategy.py @@ -0,0 +1,12 @@ +from tortoise import fields +from tortoise.models import Model + +class NewUserStrategy(Model): + id = fields.IntField(pk=True) + strategy_name = fields.CharField(max_length=25, null=False) + message = fields.JSONField(null=True) + info = fields.JSONField(null=True) + + class Meta: + table = "new_user_strategy" + default_connection = "default" \ No newline at end of file diff --git a/src/pydantic/__pycache__/backtest_request.cpython-311.pyc b/src/pydantic/__pycache__/backtest_request.cpython-311.pyc index f02a94a3567876fd03c01fab2a6dd0b1244ed262..8ba401b8b9294d5938e60d434dbe709e8b20b063 100644 GIT binary patch delta 71 zcmaE*_)(E}IWI340}x2gTbFLKk@pL?b}*3VViogrLd)~zz0an#KiR!4rmQ$QKP5HB Z$iT={&q&YEB&MLUBqKj>vntO~766TR8X5oq delta 64 zcmeyU_)3v?IWI340}wQF2d0N?AV-e=R=pX}ZiQ&yaupOPA5 YWME{fXQXFn5>rrFl98V`*^==G039nBw*UYD delta 63 zcmdnNvXO;%IWI340}wQF2c{=% diff --git a/src/pydantic/__pycache__/request_data.cpython-311.pyc b/src/pydantic/__pycache__/request_data.cpython-311.pyc index e88bc122696cd3b0738b8bb8d0896ea422b7521a..7b575b75bb9a5e249b04138dbaa4e5192cad8028 100644 GIT binary patch delta 47 zcmcaAaz})BIWI340}x2gTbC}kk=KBo(SNcXyDYD%o{^rRNlZayNk)F&=0x@{OaLN+ B4H^Id delta 40 ucmca3a#e(PIWI340}wQF2c{cuIWI340}wQF2TtTRWptV7D9dJ|XK18nIx#x{0D*D`qyPW_ diff --git a/src/settings/__pycache__/config.cpython-311.pyc b/src/settings/__pycache__/config.cpython-311.pyc index b4563f2263dad820152c2022c33dc7ae077c53df..8444efdb5e713587b2be287a348bc24f9d95885f 100644 GIT binary patch delta 45 zcmdlWuw8(AIWI340}!AV-e=R=pX}ZiQ&yaupOPA5 ZWME{fXQXFn5>rrFl98Xcc_#B;763u`8GZl& delta 64 zcmbO$I8BguIWI340}wQF2c|b}sxJQt0IWI340}wQF2d1;JP2_vT=rHl4ESrg*p^={HW@*M1>;S=R3D^Jt diff --git a/src/utils/__pycache__/history_data_processing_utils.cpython-311.pyc b/src/utils/__pycache__/history_data_processing_utils.cpython-311.pyc index 14cac16c45cfbf36540ce7c93858a3342f0e98e9..d57bfb1c9eb6e68edefe5d8b8962e9dff8639e06 100644 GIT binary patch delta 72 zcmewx(-O%+sGHnq8$t5x>&_LozU`pdGE7n?N4@ZizzEk&QD2= aF)}bR)icsFG>IvwEXl~v+uY9bO%ni$3>t?3 delta 65 zcmZpP{Tsu#oR^o20SFqo1Jf<_H}ZwDsDuHzE>^HWk| Tj0}uS^bC#kOgHzjeA5H~ylxis diff --git a/src/utils/__pycache__/models.cpython-311.pyc b/src/utils/__pycache__/models.cpython-311.pyc index 2faa775d8f6c1f514deaa4530ea093ec0cd2d186..8376b0620ff271777fa79a63a1e7cfab65ea1042 100644 GIT binary patch delta 47 zcmaDR{8pHEIWI340}x2gTbC}rk@q7bqub>FjIz9@dPaJNCNTw-B^mj7o0XW3umb=| C3l1>= delta 40 ucmaDW{7jg4IWI340}wQF2d3L>1Iu)BkTa+-U`V8 diff --git a/src/utils/__pycache__/paginations.cpython-311.pyc b/src/utils/__pycache__/paginations.cpython-311.pyc index f4376f5e78e8a70759eccc05ef7bd64264828ae4..398d93fe097b2df0b83663b0a0f4901feb5c8ab8 100644 GIT binary patch delta 69 zcmdlYy<3`lIWI340}x2gTep!rjal0p$ab-cc{-ux`SRXp)7qcx-WF3vx5bndC+DZ6#uynG QndliB>6vbx!z|AQ0AwZ1Ji7DeM5y@(M2i diff --git a/src/xtdata/__pycache__/__init__.cpython-311.pyc b/src/xtdata/__pycache__/__init__.cpython-311.pyc index bbe43c37413b560a6b9491ef251de57dea673521..9153b04a5bd0526ee255302eb2a360a1b01df4fe 100644 GIT binary patch delta 41 vcmdnQxRa54IWI340}x2gTQ`y0l+kmdqb#qfo{^rRNlZayNk)FuaO&|wQH delta 34 ocmdnVxQUT_IWI340}wQF2TtTRWptY8D9dJ|XK18nIx*W10D#a3oB#j- diff --git a/src/xtdata/__pycache__/router.cpython-311.pyc b/src/xtdata/__pycache__/router.cpython-311.pyc index 0d8068fec6fce70fb0e63622e602aacbe5ee9337..e8297963e2a9f4df229d98342b72621148f55094 100644 GIT binary patch delta 72 zcmbR5w#4cW&%X^