Files
FX-ML-Trading-Engine/Q Research/scripts/__pycache__/simulate_execution.cpython-312.pyc
T

81 lines
13 KiB
Plaintext
Raw Normal View History

2025-11-14 23:16:51 +00:00
Ë
¡<i*ãó¸dZddlmZddlZddlZddlZddlmZddlm Z m
Z
m Z ddl Z
ddlZee«j!«j"dZej&ZeefD]9Zee«ej*vsŒej*j/dee««Œ;ddlmZmZddlmZmZdd lmZdd
Z dd Z!dd Z"dd
Z#ddZ$ddZ%ddZ&e'dk(re&«yy)zNReplay orders through ExecutionAdapter + RiskEngine with per-strategy configs.é)Ú annotationsN)ÚPath)ÚDictÚListÚOptionalé)Ú
RiskEngineÚ
RiskLimits)Ú MockAdapterÚ OrderParams)Ú PaperAdaptercóö|j}|jd«D]Y}djd|D««}|sŒ|j«dvrŒ1dt |«cxkrdksŒFnŒI|j «cSy)c3óBK|]}|j«sŒ|Œy­w)N)Úisalpha)Ú.0Úchs úW/Users/chuan/Documents/Projects/FX_Backtest/QuantResearch/scripts/simulate_execution.pyÚ <genexpr>z)infer_symbol_from_path.<locals>.<genexpr>sèø€Ð;¡U˜r¨b¯j©j­lœ¡Uùs˜>ÚtradeÚtradeséé
)ÚstemÚsplitÚjoinÚlowerÚlenÚupper)ÚpathrÚtokenÚcleans rÚinfer_symbol_from_pathr$skØ 9‰9€DؘC–ˆØÑ;¡UÓÙØ Ø ;‰;‹=Ð Ø E“
Ô ˜bÖ Ø—;‘;“=Ò ð ócótjd¬«}|jdd¬«|jdd¬«|jdd ¬«|jd
d ¬«|jd d
¬«|jdd¬«|jddd¬«|jddd¬«|jdddgdd¬«|jdtdd¬«|jdtd d!¬«|j «S)"Nz$Simulate execution with risk checks.)Ú descriptionz--orderszECSV with columns ts,symbol,side,qty,price,notional,strategy(optional))Úhelpz --trades-csvzLOptional trades.csv (ts_entry,symbol,direction,qty,price_entry,pnl,strategy)z--symbolz,Fallback symbol when trades CSV lacks columnz
--risk-configz JSON risk config (single engine)z--risk-limits-yamlz!YAML mapping strategies -> limitsz--run-idz&Run identifier (defaults to timestamp)z--outputz1Summary output path (auto from run-id if omitted))Údefaultr(z
--risk-logzresults/risk/events.jsonlzRisk event log pathz --adapterÚmockÚpaperzExecution adapter to use.)Úchoicesr)r(z--paper-latency-msgI@zPaper adapter latency (ms).)Útyper)r(z--paper-slippage-pipsgš™™™™™¹?zPaper adapter slippage (pips).)ÚargparseÚArgumentParserÚ add_argumentÚfloatÚ
parse_args)Úparsers rr2r2'sÜ
×
$Ð1WÔ
X€FØ
×ј
Ð)pÐÔ
×јÐ-{ÐÔ
×ј
Ð)WÐÔ
×јÐ.PÐÔ
×ÑÐ,Ð3VÐÔ
×ј
Ð)QÐÔ
×ј
¨DÐ7jÐÔ
×ј Ð.IÐPeÐÔ
×ј ¨f°gÐ->ÈÐUpÐÔ
×ÑÐ,´5À$ÐMjÐÔ
×ÑÐ/´eÀSÐOoÐÔ × Ñ Ó Ðr%có¢tj|jd¬««}t|d|d|d|d¬«}t ||d¬ «S)
utf-8©ÚencodingÚmax_position_notionalÚmax_gross_leverageÚmax_daily_lossÚ max_drawdown©r8r9r:r;Ústarting_equity©Úlimitsr=)ÚjsonÚloadsÚ read_textr
r )Ú config_pathÚcfgr?s rÚload_risk_enginerE7s`Ü
*‰*[×*°GÐ
=€CÜ
Ø!Ð"9ÑÐИрFô ˜V°SÐ9JÑ5KÔ Lr%cóvtj|jd¬««xsi}i}|jdi«}|jdi«}t t |jdd«|jdd«|jdd«|jd d«¬
«|jd d«¬ «}||d
<|jd«xsij
«D\}}|jdi«}t t |jd|jdd««|jd|jdd««|jd|jdd««|jd |jd d««¬
«|jd |jd d««¬ «||<ŒÖ|S)Nr5r6Úglobalr?r8rr9r:r;r<r=r>r)Ú
strategies)ÚyamlÚ safe_loadrBÚgetr r
Úitems) Ú yaml_pathÚdataÚenginesÚ
global_cfgÚ
global_limitsÚdefault_engineÚnamerDÚ
limits_cfgs rÚload_strategy_enginesrUBs Ü >‰>˜)×-°wÐ FÀB€DØ%'€Gؘ( '€JØ—NN 8¨RÓ0€MÜÜØ"/×"3Ñ"3Ð4KÈQÓ"OØ,×0Ð1EÀqÓ(×,Ð-=¸&×*¨>¸
ð Ð'8¸€Nð(€GˆIÑØ—h‘h˜|Ó×;‰ ˆˆcØ—W‘W˜X rÓ
ÜØ&0§n¡nÐ5LÈm×N_ÑN_Ð`wÐyzÓN{Ó&|Ø#-§>¡>Ð2FÈ
×HYÑHYÐZnÐpqÓHrÓ#sØ)Ÿ~™~Ð.>À
×@QÑ@QÐRbÐdeÓ@fÓ'Ÿ^™^¨N¸M×<MÑ<MÈnÐ^_Ó<`Óð  ŸG™GÐ$5°z·~±~ÐFWÐYZÓ7[Ó
ˆŠ
ð €Nr%cóÜ|jjdd¬«|jdd¬«5}|jt j
|«dz«ddd«y#1swYyxYw)NT©ÚparentsÚexist_okÚar5r6Ú
)ÚparentÚmkdirÚopenÚwriter@Údumps)r!ÚeventÚfhs rÚ append_eventrc_sQ؇Kјd¨TÐÔ
3 ˆÔ )¨RØ
˜EÓ" 
*× )Ñ )ús ±(A"Á"A+c óš|jrt|j«}tj|«}d|jvrd|jvr|d|d<d|jvr-d|jvr |d|d<nd|jvr|d|d<d|jvr.t |«}|j xs|}|r||d<n td«hd£}|t|j«z
}|rtd |«|djj«|d<|djt«|d<|d
jt«|d
<g}|j«D]w\}} t| d«j«}
| d}t| d
«} t| d«} | | z}
t| jd «t«r| jd «nd }tj | jd
««st| d
«nd}| jd«}| jd«}| jd«}tj"|«r#|
dk(rdnd}|j%|||| | |
d|dœ«tj"|«sŒ1|
dk(rdnd}|r tj |«s t|«n| }|j%|||| ||
||dœ«Œz|s td«tj&j)|«S|j*s td«tjt|j*««S)NÚ directionÚsideÚ price_entryÚ entry_priceÚentryÚsymbolz=trades_csv missing 'symbol' and no --symbol fallback provided>ÚqtyrjÚts_exitÚts_entryrergztrades_csv missing columns: rkÚstrategyr)ÚpnlçrmrlÚexitÚlongÚbuyÚsell)ÚtsrjrfrkÚpriceÚnotionalrornz#No usable rows found in trades CSV.z0Either --orders or --trades-csv must be provided)Ú
trades_csvrÚpdÚread_csvÚcolumnsr$rjÚ
ValueErrorÚsetÚstrrÚastyper1ÚiterrowsÚ
isinstancerKÚisnaÚnotnaÚappendÚ DataFrameÚ from_recordsÚorders)ÚargsÚ trades_pathrÚinferredrjÚrequiredÚmissingÚrecordsrÚrowrerkrgrwrnÚ pnl_valuermrlÚ
exit_pricerfÚ price_uses rÚ load_ordersres Ø ƒÜ˜4Ÿ?™?Ó Ü˜[Óà ˜fŸn™nÑ ¸6¿>¹>Ñ1IØ"(¨¡.ˆF Ø  §¡Ñ  §¡Ñ.Ø(.¨}Ñ(=˜FŸN™NÑ*Ø(.¨w© ˜6Ÿ>™>Ñ -¨kÓ:ˆ—[, HˆFÙØ#) ä Ð!`ÓØœS §¡ÓÙ ÜÐ;¸G¸9Ð $ =ˆˆØ & }Ñ 5× <Ñ <¼UÓ CˆˆØ˜u™
×,¬UÓ3ˆˆu‰
à ˆØ—o‘o×'‰FˆAˆsܘC  Ñ5ˆIؘ‘]ˆFܘ˜E™
Ó#ˆCÜ  MÑ 2Ó3ˆKؘ[Ñ(ˆHÜ.8¸¿¹ÀÓ9LÌcÔ.Rs—w‘w˜zÔ*ÐXaˆHÜ13·±¸¿¹À»Ô1Hœ˜c %™jÔ)ÈcˆIà—w‘w˜zÓ*ˆHØ—g‘g˜iÓ(ˆGØŸ ˆJäx‰x˜Ô!Ø )¨VÒ 3‘u¸Øà&Ø"(Ø $Ø"Ø!,Ø$,Ø"Ø$,ñ ô ôx‰x˜Ö Ø!*¨fÒ!4v¸%Ù1;ÄBÇGÁGÈJÔDWœE -Ð]h Øà%Ø"(Ø $Ø"Ø!*Ø$,Ø(Ø$,ñ ö ð?(ñXÜÐ |‰|×Ó ;Š;ÜÐ
;‰;”t˜DŸK™KÓ )r%c ót«}t|«}|jr0tt |j««}|j d«}n<|j r%tt |j ««}d|i}|}n td«|jdk(r"t|j|j¬«}n
t«}|jxs-tj j#«j%d«}t d|«}|j'dd¬«t |j(«}g} g}