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

117 lines
13 KiB
Plaintext
Raw Normal View History

2026-09-07 14:04:26 +08:00
<EFBFBD>
ѓ<>j<EFBFBD><00><01><><00>dZddlmZddlZddlZddlmZddlmZddl m Z ddl
m Z ddl m Z d ZGd
<EFBFBD>d <0B><00>ZdS) uYSQLite 状态簿:每个账户/策略使用独立数据库单个策略串行读写。<E58699>)<01> annotationsN)<01>closing)<01>asdict)<01>datetime)<01>Path)<01>DealItema
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
code TEXT NOT NULL,
base_order_id TEXT NOT NULL DEFAULT '',
base_qty INTEGER NOT NULL DEFAULT 0 CHECK (base_qty >= 0),
base_cost REAL NOT NULL DEFAULT 0.0 CHECK (base_cost >= 0),
added_order_id TEXT NOT NULL DEFAULT '',
added_num INTEGER NOT NULL DEFAULT 0 CHECK (added_num >= 0),
added_qty INTEGER NOT NULL DEFAULT 0 CHECK (added_qty >= 0),
added_cost REAL NOT NULL DEFAULT 0.0 CHECK (added_cost >= 0),
status TEXT NOT NULL
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_positions_code ON positions (code);
CREATE INDEX IF NOT EXISTS idx_positions_base_order_id ON positions (base_order_id);
CREATE INDEX IF NOT EXISTS idx_positions_added_order_id ON positions (added_order_id);
CREATE TABLE IF NOT EXISTS deals (
id INTEGER PRIMARY KEY,
sys_order_id TEXT NOT NULL UNIQUE CHECK (sys_order_id <> ''),
local_order_id TEXT NOT NULL,
code TEXT NOT NULL,
instrument_id TEXT NOT NULL,
exchange_id TEXT NOT NULL,
name TEXT NOT NULL,
offset_flag TEXT NOT NULL,
side TEXT NOT NULL CHECK (side IN ('BUY', 'SELL')),
status TEXT NOT NULL,
remaining_volume INTEGER NOT NULL CHECK (remaining_volume >= 0),
traded_volume INTEGER NOT NULL CHECK (traded_volume > 0),
order_time INTEGER NOT NULL,
insert_date TEXT NOT NULL,
insert_time TEXT NOT NULL,
remark TEXT NOT NULL,
price REAL NOT NULL,
trade_price REAL NOT NULL CHECK (trade_price >= 0),
trade_amount REAL NOT NULL CHECK (trade_amount > 0)
);
CREATE INDEX IF NOT EXISTS idx_deals_local_order_id ON deals (local_order_id);
CREATE INDEX IF NOT EXISTS idx_deals_code_date ON deals (code, insert_date);
CREATE INDEX IF NOT EXISTS idx_deals_date_time ON deals (insert_date, insert_time);
c<01>j<00>eZdZdZdd<06>Zdd<08>Zdd <09>Zedd <0A><04><00>Zedd<11><04><00>Z dd<13>Z
dd<15>Z dS)<1E> OrderBookzOPersist position snapshots and append-only executions; one writer per database.<2E>path<74>
str | Path<74>return<72>Nonec<01><><00>t|<01><00>|_i|_i|_t <00><00>|_|jj<00>dd<01><02><00>t|<00> <00><00><00><00>5}|<02>
t<00><00>ddd<00><00>n #1swxYwY|<00> <00><00>dS)NT)<02>parents<74>exist_ok) rr <00> positions<6E>deals<6C>set<65> deals_sys_ids<64>parent<6E>mkdirr<00>_connect<63> executescript<70>SCHEMA<4D>load)<03>selfr <00>dbs <20>1D:\work\quant\big-qmt\py-client\libs\orderbook.py<70>__init__zOrderBook.__init__=s<><00><00><18><14>J<EFBFBD>J<EFBFBD><04> <09>*,<2C><04><0E>&(<28><04>
<EFBFBD>'*<2A>u<EFBFBD>u<EFBFBD><04><1A> <0C> <09><18><1E><1E>t<EFBFBD>d<EFBFBD><1E>;<3B>;<3B>;<3B> <14>T<EFBFBD>]<5D>]<5D>_<EFBFBD>_<EFBFBD> %<25> %<25> %<25><12> <0E> <1C> <1C>V<EFBFBD> $<24> $<24> $<24> %<25> %<25> %<25> %<25> %<25> %<25> %<25> %<25> %<25> %<25> %<25><><EFBFBD><EFBFBD> %<25> %<25> %<25> %<25> <0C> <09> <09> <0B> <0B> <0B> <0B> s<00>8B<03>B#<07>&B#<07>sqlite3.Connectionc<01>^<00>tj|jd<01><02><00>}tj|_|S)N<>)<01>timeout)<05>sqlite3<65>connectr <00>Row<6F> row_factory)rrs rrzOrderBook._connectGs&<00><00> <14>_<EFBFBD>T<EFBFBD>Y<EFBFBD><02> 3<> 3<> 3<><02> <20><1B><02><0E><11> <09>c<01><><00>t|<00><00><00><00><00>5}|5|<01>d<01><00>d<02>|<01>d<03><00>D<00><00>}d<04>|<01>d<05><00>D<00><00>}ddd<00><00>n #1swxYwYddd<00><00>n #1swxYwY||_||_t |<03><00>|_t|<03><00>|_dS)N<>BEGINc<01>:<00>i|]}|dt|<01><00><00><02>S)<01>code<64><01>dict<63><02>.0<EFBFBD>rows r<00>
<dictcomp>z"OrderBook.load.<locals>.<dictcomp>Os$<00><00>a<>a<>a<>C<EFBFBD><13>V<EFBFBD><1B>d<EFBFBD>3<EFBFBD>i<EFBFBD>i<EFBFBD>a<>a<>ar(zSELECT * FROM positionsc<01>:<00>i|]}|dt|<01><00><00><02>S)<01> sys_order_idr-r/s rr2z"OrderBook.load.<locals>.<dictcomp>Ps%<00><00>m<>m<>m<><03>S<EFBFBD><1E>(<28>$<24>s<EFBFBD>)<29>)<29>m<>m<>mr(zSELECT * FROM deals ORDER BY id) rr<00>executerrrr<00>len<65> _deal_count)rrrrs rrzOrderBook.loadLsi<00><00> <14>T<EFBFBD>]<5D>]<5D>_<EFBFBD>_<EFBFBD> %<25> %<25> n<01><12>R<EFBFBD> n<01> n<01> <0E>J<EFBFBD>J<EFBFBD>w<EFBFBD> <1F> <1F> <1F>a<>a<>2<EFBFBD>:<3A>:<3A>F_<46>;`<60>;`<60>a<>a<>a<>I<EFBFBD>m<>m<>r<EFBFBD>z<EFBFBD>z<EFBFBD>Jk<4A>?l<>?l<>m<>m<>m<>E<EFBFBD> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01><><EFBFBD><EFBFBD> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01> n<01><><EFBFBD><EFBFBD> n<01> n<01> n<01> n<01>#<23><04><0E><1A><04>
<EFBFBD> <20><15>Z<EFBFBD>Z<EFBFBD><04><1A><1E>u<EFBFBD>:<3A>:<3A><04><18><18>s5<00>B<03>AB<05>9 B<03>B <09> B<03> B <09> B<03>B <07>#B rr<00>
list[dict]c<01>2<00>|<00>d|<01><00>dS)Na*INSERT INTO deals
(sys_order_id, local_order_id, code, instrument_id, exchange_id, name,
offset_flag, side, status, remaining_volume, traded_volume, order_time,
insert_date, insert_time, remark, price, trade_price, trade_amount)
VALUES (:sys_order_id, :local_order_id, :code, :instrument_id, :exchange_id, :name,
:offset_flag, :side, :status, :remaining_volume, :traded_volume, :order_time,
:insert_date, :insert_time, :remark, :price, :trade_price, :trade_amount))<01> executemany)rrs r<00> _insert_dealszOrderBook._insert_dealsVs-<00><00>
<EFBFBD><0E><0E> a<01> <12>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
r(<00>dealrr.c<01><><00>|jr |jdkrtd<02><00><00>t|<00><00>}t d<03>|<01><00><00>D<00><00><00><00>rtd<04><00><00>|jdkr|jn|j|jz}tj |<02><00>r|dkrtd<05><00><00>||d<|j
p6tj <00><00><00> <00><00><00><00><00>}t|<03><00>dkr6|<03><00><00>r"|dd <09><00>d
|d d <0B><00>d
|d d<08><00><00>}||d <|S) uFAPI 字段转入库记录委托价格不用于推算成交金额。rz7System order ID and positive traded volume are requiredc3<01>jK<00>|].}t|t<00><00>otj|<01><00> V<00><00>/dS<00>N<><04>
isinstance<EFBFBD>float<61>math<74>isfinite<74>r0<00>values r<00> <genexpr>z(OrderBook.deal_record.<locals>.<genexpr>is><00><00><00><00>_<>_<><15>z<EFBFBD>%<25><15>'<27>'<27>D<><04> <0A>e<EFBFBD>0D<30>0D<30>,D<>_<>_<>_<>_<>_<>_r(z!Prices and amounts must be finitez,Execution amount must be positive and finite<74> trade_amount<6E>N<><00>-<2D><00> insert_date)r4<00> traded_volume<6D>
ValueErrorr<00>any<6E>valuesrH<00> trade_pricerCrDrMr<00>now<6F>date<74> isoformatr6<00>isdigit)r<r1<00>amountrTs r<00> deal_recordzOrderBook.deal_recordcsU<00><00><14> <20> X<01>D<EFBFBD>$6<>!<21>$;<3B>$;<3B><1C>V<>W<>W<> W<><14>T<EFBFBD>l<EFBFBD>l<EFBFBD><03> <0E>_<>_<>RU<52>R\<5C>R\<5C>R^<5E>R^<5E>_<>_<>_<> _<> _<> B<01><1C>@<40>A<>A<> A<>&*<2A>&7<>!<21>&;<3B>&;<3B><14>"<22>"<22><14>AQ<41>TX<54>Tf<54>Af<41><06><13>}<7D>V<EFBFBD>$<24>$<24> M<01><06>!<21> <0B> <0B><1C>K<>L<>L<> L<>$<24><03>N<EFBFBD><1B><13><1F>D<>8<EFBFBD><<3C>><3E>><3E>#6<>#6<>#8<>#8<>#B<>#B<>#D<>#D<><04> <0E>t<EFBFBD>9<EFBFBD>9<EFBFBD><01>><3E>><3E>d<EFBFBD>l<EFBFBD>l<EFBFBD>n<EFBFBD>n<EFBFBD>><3E><1A>2<EFBFBD>A<EFBFBD>2<EFBFBD>h<EFBFBD>7<>7<><14>a<EFBFBD><01>c<EFBFBD><19>7<>7<>T<EFBFBD>!<21>"<22>"<22>X<EFBFBD>7<>7<>D<EFBFBD>!<21><03>M<EFBFBD><1A><12>
r(<00>list[DealItem]c<01><><00>g}|j<00><00><00>}|D]N}|j|vr<01> |<02>|<00>|<04><00><00><00>|<03>|j<00><00><00>O|sdSt |<00><00><00><00><00>5}|5|<00>||<02><00>ddd<01><00>n #1swxYwYddd<01><00>n #1swxYwY|<00> <00><00>dS)uT按系统订单号去重批量写入已成交数据失败时不更新缓存。N)
r<00>copyr4<00>appendrX<00>addrrr;r)rr<00> new_deals<6C>seenr<rs r<00>
sync_dealszOrderBook.sync_dealsusk<00><00><16> <09><13>!<21>&<26>&<26>(<28>(<28><04><19> (<28> (<28>D<EFBFBD><13> <20>D<EFBFBD>(<28>(<28><18> <15> <1C> <1C>T<EFBFBD>-<2D>-<2D>d<EFBFBD>3<>3<> 4<> 4<> 4<> <10>H<EFBFBD>H<EFBFBD>T<EFBFBD>&<26> '<27> '<27> '<27> '<27><18> <13> <12>F<EFBFBD> <14>T<EFBFBD>]<5D>]<5D>_<EFBFBD>_<EFBFBD> %<25> %<25> .<2E><12>R<EFBFBD> .<2E> .<2E> <10> <1E> <1E>r<EFBFBD>9<EFBFBD> -<2D> -<2D> -<2D> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E><><EFBFBD><EFBFBD> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E><><EFBFBD><EFBFBD> .<2E> .<2E> .<2E> .<2E> <0C> <09> <09> <0B> <0B> <0B> <0B> s6<00>C<03>B8<05>, C<03>8B< <09><C<03>?B< <09>C<03>C<07>C<07>itemsc<01> <00>t|<02><00>|jkrtd<01><00><00>||jd<00>}d<02>|<01><00><00>D<00><00>}g|<01><00><00><00>|<03>D]<}t d<03>|<05><00><00>D<00><00><00><00>rtd<04><00><00><01>=t |<00><00><00><00><00>5}|5|<06>d<05><00><00><00><00>D])}|d|vr|<06>d|df<01><00><00>*|<06> d|<04><00>|<00>
||<03><00>ddd<00><00>n #1swxYwYddd<00><00>n #1swxYwY|<00> <00><00>dS) Nz Execution history is append-onlyc
<01>&<00>g|]}dddddddd<03>|<01><01><02>S)<04>rg)<07> base_order_id<69>base_qty<74> base_cost<73>added_order_id<69> added_num<75> added_qty<74>
added_cost<EFBFBD>)r0<00>items r<00>
<listcomp>z"OrderBook.save.<locals>.<listcomp><3E>sL<00><00>
<EFBFBD>
<EFBFBD>
<EFBFBD> <15> "$<24><11><13>"$<24>1<EFBFBD>1<EFBFBD>TW<54> <0E> <0E><17> <0E>
<EFBFBD>
<EFBFBD>
r(c3<01>jK<00>|].}t|t<00><00>otj|<01><00> V<00><00>/dSr?r@rEs rrGz!OrderBook.save.<locals>.<genexpr><3E>s><00><00><00><00>c<>c<>U<EFBFBD>:<3A>e<EFBFBD>U<EFBFBD>+<2B>+<2B>H<>D<EFBFBD>M<EFBFBD>%<25>4H<34>4H<34>0H<30>c<>c<>c<>c<>c<>cr(z-Quantities, prices and amounts must be finitezSELECT code FROM positionsr,z$DELETE FROM positions WHERE code = ?aINSERT INTO positions
(code, base_order_id, base_qty, base_cost,
added_order_id, added_num, added_qty, added_cost, status)
VALUES (:code, :base_order_id, :base_qty, :base_cost,
:added_order_id, :added_num, :added_qty, :added_cost, :status)
ON CONFLICT(code) DO UPDATE SET
base_order_id = excluded.base_order_id,
base_qty = excluded.base_qty,
base_cost = excluded.base_cost,
added_order_id = excluded.added_order_id,
added_num = excluded.added_num,
added_qty = excluded.added_qty,
added_cost = excluded.added_cost,
status = excluded.status) r6r7rOrQrPrrr5<00>fetchallr:r;r)rrarr^rr1rs r<00>savezOrderBook.save<76>s)<00><00> <0E>u<EFBFBD>:<3A>:<3A><04>(<28> (<28> (<28><1C>?<3F>@<40>@<40> @<40><19>$<24>*<2A>+<2B>+<2B>,<2C> <09>
<EFBFBD>
<EFBFBD> <1E> <0C> <0C><0E><0E> 
<EFBFBD>
<EFBFBD>
<EFBFBD> <09>1<>U<EFBFBD>\<5C>\<5C>^<5E>^<5E>0<>i<EFBFBD>0<> R<01> R<01>C<EFBFBD><12>c<>c<>VY<56>V`<60>V`<60>Vb<56>Vb<56>c<>c<>c<>c<>c<> R<01> <20>!P<>Q<>Q<>Q<> R<01> <14>T<EFBFBD>]<5D>]<5D>_<EFBFBD>_<EFBFBD> %<25> %<25> .<2E><12>R<EFBFBD> .<2E> .<2E><19>z<EFBFBD>z<EFBFBD>"><3E>?<3F>?<3F>H<>H<>J<>J<> W<01> W<01><03><16>v<EFBFBD>;<3B>e<EFBFBD>+<2B>+<2B><16>J<EFBFBD>J<EFBFBD>E<><03>F<EFBFBD> <0B>~<7E>V<>V<>V<><56> <0E>N<EFBFBD>N<EFBFBD> 0<><1A> <0E> <0E> <0E>" <11> <1E> <1E>r<EFBFBD>9<EFBFBD> -<2D> -<2D> -<2D>- .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E><><EFBFBD><EFBFBD> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E><><EFBFBD><EFBFBD> .<2E> .<2E> .<2E> .<2E>. <0A> <09> <09> <0B> <0B> <0B> <0B> s7<00> E/<03>A>E<05> E/<03>E <09>E/<03>E <09> E/<03>/E3<07>6E3N)r r r r)r r )r r)rr rr8r r)r<rr r.)rrYr r)rar.rr8r r) <0C>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rrr<00> staticmethodr;rXr`rqrlr(rr
r
:s<><00><00><00><00><00><00>Y<>Y<><14><14><14><14><12><12><12><12>
&<26>&<26>&<26>&<26><12>

<EFBFBD>

<EFBFBD>

<EFBFBD><12>\<5C>

<EFBFBD><12><13><13><13><12>\<5C><13>" <14> <14> <14> <14>&<14>&<14>&<14>&<14>&<14>&r(r
)ru<00>
__future__rrCr$<00>
contextlibr<00> dataclassesrr<00>pathlibr<00>sdkrrr
rlr(r<00><module>r|s<><00><01>_<>_<>"<22>"<22>"<22>"<22>"<22>"<22> <0B> <0B> <0B> <0B><0E><0E><0E><0E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1E><1D><1D><1D><1D><1D><1D><18><18><18><18><18><18><18><18><18><18><18><18>)
<04><06>Xp<14>p<14>p<14>p<14>p<14>p<14>p<14>p<14>p<14>pr(