Files
big-qmt/py-client/__pycache__/main.cpython-311.pyc

34 lines
8.1 KiB
Plaintext
Raw Normal View History

2026-08-28 18:52:27 +08:00
<EFBFBD>
2026-08-28 22:56:35 +08:00
<00><><EFBFBD>j<00><00>D<00>ddlZddlmZddlZddlZddlZddlZddlm Z ddl
Z
ddl Z ej <00> ej <00>e<0F><00><00><00>Zej <00>edd<05><00>Zeej vrej <00>de<10><00>ddlmZmZddlmZe dd<08> <09><00>Gd
<EFBFBD>d <0B><00><00><00>Zd ed e<18><00>iZdefd<0F>Zdedefd<11>Zddeddfd<14>Z deddfd<16>Z!dd<17>Z"de#fd<18>Z$e%dkrej&e$<24><00><00><00>dSdS)<1C>N)<01>TimedRotatingFileHandler)<01> dataclass<73>etcz _global.yaml)<02>APIError<6F>Client)<01>
StartTrendT)<02>frozen<65>slotsc<00>$<00>eZdZUeed<eed<dS)<04>StrategyDefinition<6F> mutex_scope<70>start_strategyN)<06>__name__<5F>
__module__<EFBFBD> __qualname__<5F>str<74>__annotations__<5F>object<63><00><00>py-client\main.pyr r s*<00><00><00><00><00><00><00><14><14><14><14><1A><1A><1A><1A><1A>rr <00>trend<6E>Trend<6E>returnc<00>"<00>tjdkS)N<>nt)<02>os<6F>namerrr<00>require_windowsr!s<00><00> <0A>7<EFBFBD>d<EFBFBD>?<3F>r<00> project_rootc<00>N<00> ddl}d}d}|<00>dd<06><00><00>dd<06><00>}d|<04><00>}|<01>d d
2026-08-28 18:52:27 +08:00
<EFBFBD> <0B><00>}|<06>dd
|<05><00>}|r||kr+t jd |<01><00><00><00><00><02><00>d S|<01><00><00>|kr+t jd<0E><00>|<06>|<07><00>d St jd|<05><00><02><00>d
S#t$r$}t jd|<08><00>d
<EFBFBD><11><00>Yd}~d Sd}~wwxYw)u0使用 Windows 命名互斥锁保证单实例。rN<><4E><00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>_<>\zGlobal\QMT_System_<6D>kernel32T)<01>use_last_erroru'无法创建互斥锁错误代码Fu0程序已在运行中无法启动多个实例u成功获取互斥锁u单实例检测失败:)<01>exc_info)
2026-08-28 22:56:35 +08:00
<EFBFBD>ctypes<65>replace<63>WinDLL<4C> CreateMutexW<78>log<6F>error<6F>get_last_error<6F> CloseHandle<6C>info<66> Exception) r r*<00>error_already_exists<74>invalid_handle_value<75> safe_path<74>
mutex_namer'<00>handle<6C>excs r<00>check_single_instancer:$sa<00><00><15><15> <0A> <0A> <0A>"<22><1C>!<21><1C> <20>(<28>(<28><13>c<EFBFBD>2<>2<>:<3A>:<3A>4<EFBFBD><13>E<>E<> <09>6<>9<EFBFBD>6<>6<>
2026-08-28 18:52:27 +08:00
<EFBFBD><19>=<3D>=<3D><1A>D<EFBFBD>=<3D>A<>A<><08><19>&<26>&<26>t<EFBFBD>T<EFBFBD>:<3A>><3E>><3E><06><15> <19><16>#7<>7<>7<> <0F>I<EFBFBD>Y<><06>@U<>@U<>@W<>@W<>Y<>Y<> Z<> Z<> Z<><18>5<EFBFBD> <11> <20> <20> "<22> "<22>&:<3A> :<3A> :<3A> <0F>I<EFBFBD>H<> I<> I<> I<> <14> <20> <20><16> (<28> (<28> (<28><18>5<EFBFBD> <0B><08>8<>J<EFBFBD>8<>8<>9<>9<>9<><13>t<EFBFBD><74> <14><15><15><15> <0B> <09>2<>S<EFBFBD>2<>2<>T<EFBFBD>B<>B<>B<>B<><14>u<EFBFBD>u<EFBFBD>u<EFBFBD>u<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD><15><><EFBFBD>s%<00>BC6<00>AC6<00>C6<00>6
2026-08-28 22:56:35 +08:00
D$<03>D<03>D$<03>@<40>retry_intervalc<00>l<00>ttjjtjjtj<00><00>}t d<01><00><00><00><00>}|<02><00><00>s<> |<01> <00><00>tj dtjj<00><00><02><00>|<01> <00><00>dS#ttjf$rE}tjdtjj||<03><00>|<02>|<00><00>Yd}~nd}~wwxYw|<02><00><00><00><>dSdS)u/循环检查 API 地址连通后才返回。<E59B9E> threadinguAPI 服务已连通Nu/API 服务未就绪:%s%g 秒后重试:%s)r<00>config<69> global_config<69> qmt_base_url<72> qmt_token<65> HTTP_TIMEOUT<55>
__import__<EFBFBD>Event<6E>is_set<65>assetsr.r2<00>closer<00>httpx<70> RequestError<6F>warning<6E>wait)r<<00>client<6E> retry_eventr9s r<00>wait_for_qmt_apirO=s/<00><00> <13>F<EFBFBD>(<28>5<>v<EFBFBD>7K<37>7U<37>W]<5D>Wj<57> k<> k<>F<EFBFBD><1C>[<5B>)<29>)<29>/<2F>/<2F>1<>1<>K<EFBFBD><19> <20> <20>"<22>"<22> -<2D> -<2D> <12>M<EFBFBD>M<EFBFBD>O<EFBFBD>O<EFBFBD>O<EFBFBD> <0F>H<EFBFBD>Q<>f<EFBFBD>.B<>.O<>Q<>Q<> R<> R<> R<> <12>L<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD>N<EFBFBD> <12>F<EFBFBD><46><18>%<25>,<2C>-<2D> -<2D> -<2D> -<2D> <0F>K<EFBFBD>A<><16>$<24>1<><1E><13>  <0E> <0E> <0E> <18> <1C> <1C>^<5E> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C><><EFBFBD><EFBFBD><EFBFBD> -<2D><><EFBFBD><EFBFBD> <1A> <20> <20>"<22>"<22> -<2D> -<2D> -<2D> -<2D> -s<00>0AC<00>D<03>;D<03>D<03>data_dirc<00>><00>tj<00>|d<01><00>}tj|d<02><03><00>t j<00><00>}|<02>tj<00><00>t jd<04><00>}|j s=t j
<00><00>}|<04> |<03><00>|<02> |<04><00>ttj<00>|d<05><00>dddd <09>
<EFBFBD><00>}|<05> |<03><00>|<02> |<05><00>d S) u<同时输出控制台日志和按天轮转的文本日志。<E5BF97>logsT)<01>exist_okz'%(asctime)s [%(levelname)s] %(message)sz py-client.log<6F>midnight<68><00>zutf-8)<04>when<65>interval<61> backupCount<6E>encodingN)r<00>path<74>join<69>makedirsr.<00> getLogger<65>setLevel<65>INFO<46> Formatter<65>handlers<72> StreamHandler<65> setFormatter<65>
addHandlerr)rP<00>log_dir<69>root<6F> formatter<65>console<6C> file_handlers r<00>configure_loggingrkRs<><00><00><10>g<EFBFBD>l<EFBFBD>l<EFBFBD>8<EFBFBD>V<EFBFBD>,<2C>,<2C>G<EFBFBD><06>K<EFBFBD><07>$<24>'<27>'<27>'<27>'<27> <0E>=<3D>?<3F>?<3F>D<EFBFBD><08>M<EFBFBD>M<EFBFBD>#<23>(<28><1B><1B><1B><13> <0A>G<>H<>H<>I<EFBFBD> <0F>=<3D>!<21><15>#<23>%<25>%<25><07><0F><1C><1C>Y<EFBFBD>'<27>'<27>'<27> <0C><0F><0F><07> <20> <20> <20>+<2B>
<EFBFBD><07> <0C> <0C>W<EFBFBD>o<EFBFBD>.<2E>.<2E> <17><12><16><18> <06><06><06>L<EFBFBD><11><1D><1D>i<EFBFBD>(<28>(<28>(<28><08>O<EFBFBD>O<EFBFBD>L<EFBFBD>!<21>!<21>!<21>!<21>!rc<00><><00>tdd<02><03><00>tjdkrddl}|<00><00><00>dSt
2026-08-28 18:52:27 +08:00
j<00><00><00>r!t
2026-08-28 22:56:35 +08:00
j<00>d<06><00>dSdS)Nu按任意键退出...T)<01>flushrrrU) <09>printrr<00>msvcrt<72>getch<63>sys<79>stdin<69>isatty<74>read)ros r<00>wait_for_any_keyrugsu<00><00> <09>
!<21><14>.<2E>.<2E>.<2E>.<2E> <09>w<EFBFBD>$<24><EFBFBD><EFBFBD><15> <0A> <0A> <0A><0E> <0C> <0C><0E><0E><0E><0E><0E> <0C><19> <19> <19> <1B> <1B><1A> <0B> <09><0E><0E>q<EFBFBD><19><19><19><19><19><1A>rc<00>j<00> t<00><00>stjd<01><00>dStt<00><00>sdSt j<00><00>t
j<00> t
j<00>td<03><00><00>tt
jj <00><00>t<00><00>tt
jj<00><00><00>dS#t t"jt&tt(f$r8}t+d|<00><00>t,jd<06><07><00>t1<00><00>Yd}~dSd}~wwxYw)Nu'本程序仅支持 Windows 环境运行rUu/配置尚未加载,请先调用 config.load()ru启动失败: T)<02>filerm)rr.r/r:<00> PROJECT_ROOTr?<00>loadr@<00>account_config<69> RuntimeErrorrk<00> qmt_data_dirrO<00>
STRATEGIES<EFBFBD>strategyr<00>OSError<6F>yaml<6D> YAMLError<6F>
ValueError<EFBFBD>KeyErrorrnrq<00>stderrru)r9s r<00>mainr<6E>qs<00><00><15><1E> <20> <20> <15> <0F>I<EFBFBD>?<3F> @<40> @<40> @<40><14>1<EFBFBD>$<24>\<5C>2<>2<> <15><14>1<EFBFBD><0E> <0B> <0A> <0A> <0A> <11> <1F> '<27>6<EFBFBD>+@<40>+H<><1E>P<>Q<>Q<> Q<><19>&<26>.<2E>;<3B><<3C><<3C><<3C><18><1A><1A><1A><12>6<EFBFBD>(<28>1<>2<>A<>A<>C<>C<>C<><10>q<EFBFBD><71> <13>T<EFBFBD>^<5E>Z<EFBFBD><1C>x<EFBFBD> H<><15><15><15> <11>(<28>3<EFBFBD>(<28>(<28>s<EFBFBD>z<EFBFBD><14> F<> F<> F<> F<> <1C> <1E> <1E> <1E><14>1<EFBFBD>1<EFBFBD>1<EFBFBD>1<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><15><><EFBFBD>s"<00>"C<00>C<00>BC<00>(D2<03>:-D-<03>-D2<03>__main__)r;)rN)'<27>loggingr.<00>logging.handlersrrrq<00>timer?<00> dataclassesrr<>rIr[<00>dirname<6D>abspath<74>__file__rxr\<00>GLOBAL_CONFIG_PATH<54>insert<72>sdkrr<00>strategy.trend.bootrr r}<00>boolrrr:<00>floatrOrkru<00>intr<74>r<00>exitrrr<00><module>r<>s;<00><01><16><15><15><15>5<>5<>5<>5<>5<>5<> <09> <09> <09> <09>
2026-08-28 18:52:27 +08:00
<EFBFBD>
<EFBFBD>
<EFBFBD>
2026-08-28 22:56:35 +08:00
<EFBFBD> <0B> <0B> <0B> <0B> <0A> <0A> <0A> <0A>!<21>!<21>!<21>!<21>!<21>!<21> <0B> <0B> <0B> <0B> <0C> <0C> <0C> <0C><11>w<EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>8<>8<>9<>9<> <0C><17>W<EFBFBD>\<5C>\<5C>,<2C><05>~<7E>F<>F<><12><0F>s<EFBFBD>x<EFBFBD><1F><1F><07>H<EFBFBD>O<EFBFBD>O<EFBFBD>A<EFBFBD>|<7C>$<24>$<24>$<24> <20> <20> <20> <20> <20> <20> <20> <20>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A> <0B><19>$<24>d<EFBFBD>#<23>#<23>#<23><1B><1B><1B><1B><1B><1B><1B>$<24>#<23><1B>  <0C> <1F> <1F><07><1A> 4<> 4<><02>
<EFBFBD><1B><14><1B><1B><1B><1B><15><03><15><04><15><15><15><15>2-<2D>-<2D>U<EFBFBD>-<2D>T<EFBFBD>-<2D>-<2D>-<2D>-<2D>*"<22><03>"<22><04>"<22>"<22>"<22>"<22>*<1A><1A><1A><1A><15>c<EFBFBD><15><15><15><15>, <0C>z<EFBFBD><19><19> <0C>C<EFBFBD>H<EFBFBD>T<EFBFBD>T<EFBFBD>V<EFBFBD>V<EFBFBD><14><14><14><14><14><1A>r