From 9a43aaba23917a53045bc7ed1225972d74415e45 Mon Sep 17 00:00:00 2001 From: yanweidong Date: Sat, 29 Aug 2026 12:00:51 +0800 Subject: [PATCH] fix bug --- .../__pycache__/__init__.cpython-311.pyc | Bin 7740 -> 7816 bytes .../libs/__pycache__/__init__.cpython-311.pyc | Bin 522 -> 646 bytes .../libs/__pycache__/lockfile.cpython-311.pyc | Bin 0 -> 1206 bytes py-client/main.py | 49 +++++++----------- .../sdk/__pycache__/client.cpython-311.pyc | Bin 7011 -> 7033 bytes .../sdk/__pycache__/trade.cpython-311.pyc | Bin 10468 -> 10499 bytes py-client/sdk/client.py | 2 +- .../ipo/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 243 bytes .../ipo/__pycache__/boot.cpython-311.pyc | Bin 1033 -> 2608 bytes .../trend/__pycache__/boot.cpython-311.pyc | Bin 10007 -> 9281 bytes py-client/strategy/trend/boot.py | 6 --- 11 files changed, 19 insertions(+), 38 deletions(-) create mode 100644 py-client/libs/__pycache__/lockfile.cpython-311.pyc create mode 100644 py-client/strategy/ipo/__pycache__/__init__.cpython-311.pyc diff --git a/py-client/config/__pycache__/__init__.cpython-311.pyc b/py-client/config/__pycache__/__init__.cpython-311.pyc index 2238bba23061ca1b8fc4464280d8c3f1a62653ef..a2f2a65b76d30559ad8a4d85f36a0fba8b479da3 100644 GIT binary patch delta 619 zcmaLT&ubGw6bJA(`y<^(*Ce~$-Iyj4Ev2qfh^fS8YeyxCh&gR7naw{dZz=h` zZ(GSnf3&+AxhKl0_1Gm$UlvKjCRfCekt2RoGRow@ULS{(V$GZ&i_v$J6H*d4t&3z# zv@Pr88JxPvFfxivBSXjx0Jy#UEY|15wsj(Q4a=*7*g5q+08B*#_8mo=!<@|L#q-RO z_$`beucCLEV?=EArwbfk#8vn_&SJ=UWB|KHC+_*kuY^!e9o=@14dR!$)+?2k>kNeI$=km_c@YRs<%`n15L|+e2 z))&7USBgk^w@OSEKY3rxb91n?ppa|0FE65Jg6Lepj8lm?rmHy(Lqzl+$1C3vgTqlO zQAc$(C+^>@66F&7CwRxdUJMA6O}$`gL{trIuI=o~JQ2wbpp&=t*Gi4}RR7`?LJPX6 z@Tcfyb_9>_kWl5yhaHuOve^UK2)RH+d=O2FW$(nC7In{FIm-79Z^f$D7L!7}=g;wx z(Jmx1Sfp)jIBQZiL+A!_Ks(S0OaQGwk%)33*@L-{(^gw>65}{eS!r#Nh{n8aYd)aQ z!>7t6zDZ`nv#p0Uf5Q{&TfWr<(PS-wuC#fJAgrHFh)Bp&Er)S&$Z SYAPv-AHsT2;A-JW=HnANMtM2_ diff --git a/py-client/libs/__pycache__/__init__.cpython-311.pyc b/py-client/libs/__pycache__/__init__.cpython-311.pyc index 4cc46b6ca53760fa4c1f630a0e207a3cf93dafb9..d08283456a6a9e4002b5a8980e333549ecf09317 100644 GIT binary patch delta 296 zcmYMvF-yZx5C`!8)1+yWyo!jZ;BGTi1h?Yo>>?Base{`igS(4# z_EY#3@+B19oa7Zm4vymocijKkTH5@La~A-PKlJTN^8-K~!OmgK~o*yH09b8_P2S2BDCx#5?PUQAAAQgKXtd}dx|NqoFsLFF$F zo80`A(wtPgA|VC_21W)3hT=j728IvJlm9ZBPWEC_k!IlbX8OQ@ARE|0ut+CFAsSryf zwN$8}wzM8{&|2+>o~roq4|qzY&@!h&-9%3Ydh1DMV?tvQA8#LTXWq=b-|zQcH8zF- z08V{|8% zlO__*;#hz*^n=`Np8$Z;YQ}l=v^1A3KFfXowD$AK{bD}%WA&Z${-yKa{Z3~5r+89E zJe)8LlO>pD8kUTB;7WoG_i8CsMjVTr2ZuCWRYnqQc<+$KXk;u>ExBefdY${I%4}+I zJZPGF5>+7qfT!}I-EJ2Z+qX9c3kYDTwvw-9`)vULmTC+AAS1gS0Gx>z#b+zUshqPq zSDMQTY%a*+>|1Ag!C9Ggo-giX#$}0m0f758OA#1kM125YiKilaXS&bFZ<{m~zhx&3 z79Z4ZL~o^8d}K75)HT&$aa|j<;<}kkiL<9iM%{bFKWzknpt$K60A#=kH%|v2c1?9{ zhFiadTi3&F8{xJBZrc@|b9~t})H+&lm6pl>(sB=tp_?^o@_)vp-UuRSSz3?)mTLP5 z#!z0+f53=`;AQXM)x_5ivfn=Ik~{Bw`dH)i*XQ}t#9C>7)%o)D`-evra*H!-KXPxJ z$wkL4-pPy)$P)LDB&cdIiwD#@n#B||#c^-n#h$xfn+-+JiQ!U>q)9a6#$_2-wDDEW zaBn(AG|EG_sm4@=sdtzxxoUANCeIScA`#jk7;UN)Ri&Xv0ia39A;xT<9GUJd9LV-; z;+Ai?WtJ=s6mZKr?%2Q`1>CWP1G&EOzUfQ(tC_xa9NoatLe;6bO|&S+h5AJZh#)jS zxY{gMgWRtu#7rs*4=Ku!&1|YF3KbG?$+W1@ToA;Db#2gv?oN^0`)hC?biwTfE~HIj z>uM)G4gf-W%L0J12O+ct?FDGxhSoy8Z^Pk2y>G#hLcN!L5;|Fi`VhkCbQ%5;+@^j5 DB1uYB literal 0 HcmV?d00001 diff --git a/py-client/main.py b/py-client/main.py index b45f3f9..907aba0 100644 --- a/py-client/main.py +++ b/py-client/main.py @@ -1,11 +1,11 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import logging as log +import logging from logging.handlers import TimedRotatingFileHandler import os import sys -import time +import schedule import config from dataclasses import dataclass import yaml @@ -16,6 +16,12 @@ GLOBAL_CONFIG_PATH = os.path.join(PROJECT_ROOT, "etc", "_global.yaml") if PROJECT_ROOT not in sys.path: sys.path.insert(0, PROJECT_ROOT) +logging.basicConfig( + level=logging.INFO, + format='[%(levelname)s] %(asctime)s %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' +) + from sdk import APIError, Client from strategy.trend.boot import StartTrend from strategy.ipo import AutoBuyIpo @@ -45,16 +51,16 @@ def check_single_instance(project_root: str) -> bool: kernel32 = ctypes.WinDLL("kernel32", use_last_error=True) handle = kernel32.CreateMutexW(None, True, mutex_name) if not handle or handle == invalid_handle_value: - log.error(f"无法创建互斥锁,错误代码:{ctypes.get_last_error()}") + logging.error(f"无法创建互斥锁,错误代码:{ctypes.get_last_error()}") return False if ctypes.get_last_error() == error_already_exists: - log.error("程序已在运行中,无法启动多个实例") + logging.error("程序已在运行中,无法启动多个实例") kernel32.CloseHandle(handle) return False - log.info(f"成功获取互斥锁:{mutex_name}") + logging.info(f"成功获取互斥锁:{mutex_name}") return True except Exception as exc: - log.error(f"单实例检测失败:{exc}", exc_info=True) + logging.error(f"单实例检测失败:{exc}", exc_info=True) return False @@ -66,11 +72,11 @@ def wait_for_qmt_api(retry_interval: float = 5.0) -> None: while not retry_event.is_set(): try: client.assets() - log.info(f"API 服务已连通:{config.global_config.qmt_base_url}") + logging.info(f"API 服务已连通:{config.global_config.qmt_base_url}") client.close() return except (APIError, httpx.RequestError) as exc: - log.warning( + logging.warning( "API 服务未就绪:%s,%g 秒后重试:%s", config.global_config.qmt_base_url, retry_interval, @@ -78,27 +84,6 @@ def wait_for_qmt_api(retry_interval: float = 5.0) -> None: ) retry_event.wait(retry_interval) - -def configure_logging(data_dir: str) -> None: - """同时输出控制台日志和按天轮转的文本日志。""" - log_dir = os.path.join(data_dir, "logs") - os.makedirs(log_dir, exist_ok=True) - root = log.getLogger() - root.setLevel(log.INFO) - formatter = log.Formatter("%(asctime)s [%(levelname)s] %(message)s") - if not root.handlers: - console = log.StreamHandler() - console.setFormatter(formatter) - root.addHandler(console) - file_handler = TimedRotatingFileHandler( - os.path.join(log_dir, "py-client.log"), - when="midnight", - interval=1, - backupCount=30, - encoding="utf-8", - ) - file_handler.setFormatter(formatter) - root.addHandler(file_handler) def wait_for_any_key() -> None: print("按任意键退出...", flush=True) @@ -121,13 +106,15 @@ def main() -> int: config.load() if config.global_config is None or config.account_config is None: raise RuntimeError("配置尚未加载,请先调用 config.load()") - configure_logging(config.global_config.qmt_data_dir) wait_for_qmt_api() # 自动打新与主策略隔离;申购服务失败不能阻止趋势策略启动。 - AutoBuyIpo() + schedule.every().day.at("10:00").do(AutoBuyIpo) + schedule.run_pending() + logging.info("IPO 自动打新启动成功") STRATEGIES[config.account_config.strategy].start_strategy() + logging.info("%s 策略启动成功",config.account_config.strateg) return 0 except (OSError, yaml.YAMLError, ValueError, RuntimeError, KeyError) as exc: print(f"启动失败: {exc}", file=sys.stderr, flush=True) diff --git a/py-client/sdk/__pycache__/client.cpython-311.pyc b/py-client/sdk/__pycache__/client.cpython-311.pyc index dc358af03cad0409adbd3f00b38a2ac88f3b7881..34ba3db988574938e475e5553132a4760831b815 100644 GIT binary patch delta 60 zcmaEC_S1}eIWI340|NttK;)#2+$>Dux-M2R<@rU~F@>dxc_lGPnd!QPxg{~11(?K{ QS%X9ToxL~fu$qej02H(lL;wH) delta 38 ucmexq_SlSjIWI340|Ns?Wb4F@+$>Ct;+xf&#F<%(OY)PmH#@PKiva-1R|(Ak diff --git a/py-client/sdk/__pycache__/trade.cpython-311.pyc b/py-client/sdk/__pycache__/trade.cpython-311.pyc index e5211437d5062cbe723580f654b6b9787833f2df..3907e5a01d65342abc53bb9f87b22c1778e4a5a9 100644 GIT binary patch delta 2335 zcmZ{l+iz4=6vo$S=iZriI-Pqjb33#%lok*bZ2;Q^d8R*kH-Z7F#XlVBicpJ?UNa5*Iyn$0b#Wjr+Qxyj zQ8x$TrXCK&L)$r!cG|&#bWkq`;-#G&NGJ7iAU@i~fpk$n2jZsz4kSQ>97vFcIFJwx zb0A?F;XopUMmdlu?dCwbX%7d|Lwh-pUfRcj^wAgx5~FbrBu*0?NP;FgkR(lUAStSH zASzwMfvlnZ97sPM;6Mgw`gzE#71x!R?H6noZhfuzlz0aKuucG|xyp=cEN3iKw3@wQ zE|^#R(Xu_XZpTRWSeeack5=;~BRgFQ)rD7_}r~5lmsx3shr`l)41~ z;_-N#CB-SrD~c+9vYdaU9V_|}QrLwn?~)7V$5jB6*`=RnDGQ1Zts`S$0La)G)?ovP zMj6(Ja))WZKv@g`bbGzDtd8=25w;ywRPm~PQv6`+?g;_FVvEdIv&|mMvqQSxB7;~` zcX7TJmo zE)QQ(dU^PL*Wr5j&9>Cw|01_Pyzswm^YzH@-D?9F$wslU<=NeyQ+3Tf&u~;~cC66g zApPP`k6(T${+7Gr_U zwu7dH6M;)Zc-t60ikVjP0PdDo(#Y$xxdPQ&&EYY5vx?%W;IyKOY-loNo5`1EwBn+| ziVp_IDorEthn|+|y*?eQ7)>AVgm#*#qBf@K)j5r=BGSV{wt3U6H$E=@3J1I7bylQT zT|sv&DY_%0iYh#@i1<625SJroQ;oK2t%o$De*M|$CI@5DYlxyCbvnb=#)OXCmcMXL8iBg5P4 z8y;$|nS3c{j#tJmxkncd9;a&G2QvD2k93Dy$jXQdO|nm8MMV|fc%kzI{$8IL>Mn_M z@e%oLVxS|h>s6-ZX38alRneR3(j3i%P96S1Id8?qESH(oFp!Z#5Pw zjX3dbYFtr8P^|>z)_t_nytt-jdsP6~m9a8>-c7VMR&EhkGkP+Gf2R@sh)syc5coi| zZHO_%PQ){a=McLP_=mhyWiTPsKS?CJG>5m8A1#roQTg6rW64Facr3@(`r%M#=a0o J((@Ml@*hV|^AP|5 delta 2264 zcmZ{l-)|IE6vxkOcV~ZfyX|&=bldKa>GTInEk!`91*C#XRImlb!bQ3adj}}p?k;zB ztBnzey{JT^feRrd{vw)?K4@YZp3p>m^Tqh4*$1P+2Os7X4PNSx3(2hvG9Igl>e#esCwZVn_t6C6mACOME4O>rP;n&v<>s&ODaw1)%H zsm_7)(q0avkM?mO{j{G08K46%LM9`wE2*XLm7t=w003(hzc}JbQ2gcCr9_wZH#IAY zUu2zHssjM3PHUQ)%oYNGk_{2G-=;B}Jdz%87rwt*6A$$tT+=zBW7?Zh+ zjGF9O$|B-x*XWZm0LZu*)?xjKdKs2Lxkt*g)08E#w7XVXR!4cC7*S6vy7(;|7T>5Z zcSiwW(IN9y)tOffcEYk8GKgtn*gamCZWTYcwGhhLM$B9nDW1cME{=Gz<7lPovdZ&$ z({2UTHM3P`$ta(cZmZroBVRGIGv+)?W4=cb*n6X0;rAX{F1vHt z^w!2$*K(^&6F%Q@8Cl#Y3v9zCSB9=CyE3%Zf3jBeN54M!zsQ{rE}Cqft403Vygq`F zYzH>AGW%fQTusx|vccBuTCI7e{22Wz6AA0*nV9>!SQo;wm=%gpCxakfUrFWV2vY|nR>sWE?inpx$w zWW}((+YhYesu=DNMkkz(E8@sZmAiMyGlmIG8w}XR)gkF>}jc)h%?iw%&w`q)G?%1Y@@^J zJ)$ihZI_2vkv=U2oiR;}#>X&KA}*p`nz$K%N3XY3Z8~9=Yloe^*#w|NX2lua^%gL*?e&;+%@vG_-|0I&)d`jz< zPH`z&0r7rA*mtSCqKo15blV&FzBWD739*hS4B~CX z1$Yd11U`O%xQGyltB7leD~Rie&+ym*!=9M7G}!NQD7tuf-TDoK_~s$R5Wwn!^^^9lBaxUg={iC_K$M4;eM diff --git a/py-client/sdk/client.py b/py-client/sdk/client.py index c37bcd5..72188d9 100644 --- a/py-client/sdk/client.py +++ b/py-client/sdk/client.py @@ -19,7 +19,7 @@ class Client: self.base_url = base_url.rstrip("/") self.token = token self.timeout = timeout if timeout > 0 else 15.0 - self.account_type = "stock" + self.account_type = "STOCK" self.http = httpx.Client( base_url=self.base_url, headers={"X-Token": token, "Accept": "application/json"}, diff --git a/py-client/strategy/ipo/__pycache__/__init__.cpython-311.pyc b/py-client/strategy/ipo/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68642224ccab875dd817de315011e1b0f36c0482 GIT binary patch literal 243 zcmZ3^%ge>Uz`zi?Z(^1?0|Ucj5C;aBpp4HF3=9m@8B!Qh7;_kM8KW2(8B&)4rO5Nm~%+$P+nBtP6#FEtX%9zZ8{FwOo z%)HE!_;|g7%3mBdx%nxjIjMFY)nlZ{NK4=FOX#-<$o6Wvc)H8vpUp_z(l|lng4wlm+U=j{tBJ5O9DfM9Wl)=4gt@ z4%xvu?5~q^A__TWSIWh?QVhq~c9-l)70tYT?k}lfvm?Vps?H?TApisGn%Lynt~mYq9>@z zeEVW!bkPJm`YzM>w%_>n4QA?e_m0cBvmzsEi2_*Jo?*@IAo_=v?s&uT*f{B$4>TX)1LWuO%Ymh0IWF59srlAEVZ~R_Z>pcz4=|HvvePv z|IKBG{@RY$o;7xI+}=gjaSM>^HhswlurHodZ`z5I-M5-{DobY_I}0IZN51UZXLIke zF>3ocV?eG$`$Y5DOcil4Q_mMy>RQ3;`ChM>Zhb0zq zqY(h!?;jjE-?F=ciwpM(a}ShGe0ZSu?Mtq9ySl2R zOvVrgH7OzDKuY-aprIu$2pKVEq&DjTK&vKI=?jzii$8Qi@adyDler~?3UGJ zQc{xGDJf&BMi8kH*kU#*tD}NkndqNP>HMgW5qU$Cv6qZ=bwX6I|IG04AV1uHHahU` zF!o4kl}CauXynGqv&fJ~lBN-0V{cl>WK<1_nnu7Jc54TSnn~CX6L}LdhOBD@aF~|U z*h?bX+tdyLK!zZ>v!NTu^EJowHJz)*>HukLHN9(WU!Luo zrq_Kna~(6?v)v`|d5>5P&GW_ryC~-yI;Z=srellIh4bd?-T9`srel`B=3oB9|MVZW z8V*@?jaGfDEgZ3$-zc%bHhl+fHt;=RCBlBF2DWj&W6j^3_cxpV<{wLqm84#f;tNx; zu+zRbt(E|WfL|lW7;eCBo=0ke=W!L!j~Tk5i9D~7M+`g1GpeGs5?}H}Yc8U6rv?3j zERB}&!st_JNl9wtlC`76?#Q5tG9bOOG@5Bo2y((kDQ4|4DJt@tvcY8|3Ww|;*6>hd zIC}a$J{CC}#Xh1Mik^)Oy&cDX+a8U_`v+oiTt7S%>FbZ3=6fUWL}PuCAwK@z*`9%S zY-oHAS{F&B0{~un-b$&+kj0Z)kNpqK+bL! z95Y|lEodc)f8R&7;MRMeWb>f^1g5zKoX9YRBs2=M(oQ9(6tH`j-AS^0@o!ZnN#Q89bBo VTZdXrs4p>1)R7YWFJ>R(e*l=o($oL| literal 1033 zcmZ`%O>5Lp6g@AKWHMtj&~|7${m?2@4fwGVKahe}i$(eY9T7?;q?1^u%}nA;A`Z;J zATEjsA{6byMcq`S3W9F@7gYuf54sYx-A!p%UCE1`X%#&Qm-F7e_vGZg`$koh0I=}+ z`CLT+zVk%`!XDW^2H+)3n8ZebOcBDlU<*@%DVgG9aVlmClhEW%-k=dC57~LE=#Md( zT7E!_xrQP~0zeGFb~oXwKG{$DjV}V2Yw|f>9pOKD@t=9AvAYrjR+}0Xl(8%~atC3O z6#}d_{ZvSqT*IA<6`@SZLZ(@29^jSOU%A+RT}3QoIo@nL08=arWzm$%F;jjQUy*^; zrXzxGgOn zHXgnHx%hG8(|b*3amUsDl4~)^^PSv0lOH&CP_S6srF;8sB&vEoHGFHfq!*2Xr74u3 z7L#*M@os*Wsk62-W7zuMvgLlk*JljR(gSL<1Yh~iyj5f^H?r9YJv%abef(CIDS6k? zO~W@>!Zke4p{7MOiOIQWH27qAf$dZ7nk9H`WQ8gKJbrck9J`0z(&^tF(+!W)dDoeq zaUB1QTVly8f$v-mN+YgAdjarK@Kyj+v97kSE2)~&TT`?KIUbRot+<$ycOa(Z>TtaU zsq{1biN19Ei#kwK2dcwiYiAuvDH(+YDNJ`Som(7TK2=MfT}XtPBg@jOzO@tQYnclR zsZdFMQ@Xw?U17Q-Z0ii$k4B^?>^@mnk;rTzo=EQSP~Q*nhWIug3QeHg_LwHJm}kyM zhfiApM1S-aw2$*10K3ZNf@21@HAwpb@JaOs0n}rJkPsbff4(8qYV_2_Hj=F4KOxfp E1^X578UO$Q diff --git a/py-client/strategy/trend/__pycache__/boot.cpython-311.pyc b/py-client/strategy/trend/__pycache__/boot.cpython-311.pyc index 940009af601c2c66ce5bdd2f11f66225d3e114a3..61924304e354915282aa4cd1a330bd0d46d93efc 100644 GIT binary patch delta 889 zcmZWnT}V_x6h5>bM?%;w zRpJxLfdi7WIFlB9D%BD{u2=cIuT2{wz_$3$9~MQu4SSv8((^?IV7dxd{62i)w2&}v zIO{?k$7l7x`~>ui$IP@`T&rg6@dYIPKdIJ-CHL(Bi}n*o)kQzOr?>)8EvgkKTusD= zk6jV`>bi*!++k9SdH0rNoXVw=nRr@>r_K^^}$| zEV(qLSwonKFN7Sd9S=M~>jeN{*H+8=>|+3M1psm%ak%Vl&4DQGi-7_L_r>O)7Qt!# z1%lK1C~_!*!-GxUL44`m@$Q~=^>)E-mmHCWy&#Fm0vpYz%9m_p6Tby!8+ZgmO2jh> znpWsSHpQsQ+IiR;90oZI;Zm?^*f6IuQyQ~!Cd|FWcs8Zn(Q-O#~b;j#%SQ45_ zbB0x=X{uA!$vNwk#*$QL{2L5&E`E=)aXbq4T1UCw2=>ZRGLGwVfZW1&vM+R-=jsB0 znv>Se+PK5@BIx-)@+)D0MFAjWVs6g!UJIF7L0RI&F)JH3MNzecq8N5XnVQq*7*!M| z@LPpk`|)#qKk2~MhDbB7c_GpkFy0}B&`08>8BLu_)5~lL00@8QSbno1NXlDD%MUmS WlLS9CdhvUsjSmO(5Yk5qVt)b07}_!b delta 1616 zcmZuwZ){Ul6hHU%|G&4ju&rZjt&DDI97ASsLDq!?Sz84rSpvxtc+|eP((%@g+c!Yd zxk5@DP+`kuOi5;d#4?x;v??ki!%z6ZXi4^Aykv>db)6q{GeBbWi@B}cnDOPlbI(2Z z{Q2E;fA?GO$R75($)pDWxORG|tF3Z~wW1$}>L#2Oyp=a6R2@~kmA5369o2j#UzSjI z*!c1Ubl7=CJGj<;`b5woN4iIMi9yM<#`qLjgTOP_P>KNGp0mile#zLP~+Emm5x~xT=SH@6RWpO2KDQW;Q zMG66oqoQTio@Vu4N(nHoEP5i4P!my>G?}&*O#odsa=WZTrPG1rCVWYat7T~xlbuzU5W9Q;zaz1%-?k;gV`NhfP+|rKgcAXwM+!y4vMMSHLXWKI_MdPW@K)ls*woF`*-H*ty!s9R*Z~01 zzsYBo$;#1}r>iz)Uffd{581Y9wk__N)tkxrHM<*(iCr_=oikcCX`Iy>27G7OBuf>~ z8DrA;hfbwZKLM3Wy+p-RBYCtYz4k#_sizhm)Y`oo#dm7t)hO`(^p&-zH0UO&sXpqY zP-HgX4+jL16HfGmu)t&5d;A6!uT!y?d|h2<#Ji}jrs5UyTeWo~ZK$jYM0g=8t9d~b zBmujrP2Cy6K|#Wl2C_2hKPKRVq|w%@-cN(~k#}qz=pcDytF|7Z9y-4$a)mT1DHJ#o z#eQP4+x2bKn~LMJoS0M!et0K;emf)IlPralxyUCZUpFvsAQA%=#S zB-;)*z=dReG!zW`Med03mP>&-dis2SG=5Qx92ffeC_S{p5yzVW;4gi%7>Y`PNOw=m z+m7~pXlqE61l-UpMgo2@+S0J%ai3C*;`uWU8H2Ad29J%kPS?BdS7hqFnR@R)YhljR zdogW<3*k;WDeyjeP5q_<4xS79yM-w3rzs1Fw&xMa#%EFBQvh(6`ZN{F{$#K&0a96J zO3VYgS=Kzb@geJ&W*u?QOc7AV;JZ?hG58)DeA5PBM(NArzy~M_W(PLYmRRUQiStxq zsbR(XoUGwEJ`&(KSc1tRYzb?bd-8#%h((?}m)o?UsMxQ{OBsSC~3 wHg`w(UQuYl=Kz4-ZuD^a=k+#Jwi#_)g4N None: profit_tracker=GridTrailingTracker(config.account_config.grid_step_pct), ) - logging.info( - "趋势策略启动:总资产=%.2f,持仓=%d,信号=%d", - assets.total, - len(positions), - len(signals), - ) Overview(assets, positions, config.account_config) while True: