Files
FX-ML-Trading-Engine/Q Research/scripts/__pycache__/paper_trade.cpython-313.pyc
T

78 lines
14 KiB
Plaintext
Raw Normal View History

2025-11-14 23:16:51 +00:00
ó
Ê i2%ã óÒSrSSKJr SSKrSSKrSSKrSSKJrJr SSK r
SSK J r SSK
r
SSKrSSKr\R R#\R R%\R R%\R R'\5555 SSKJr SSKJr SSKJrJr SS KJrJrJrJ r J!r! SS
K"J#r#J$r$ "S S 5r%SS
jr&SSjr'Sr(\)S:Xa\("5 gg)zN
Paper trading driver that wires live OANDA pricing into the strategy engine.
é)Ú annotationsN)ÚEmptyÚQueue)Úlogger)ÚOandaPricingStream)ÚOandaExecution)Ú TickEventÚ
OrderEvent)ÚStrategyEngineÚ StrategySpecÚparse_strategy_specsÚ_coerce_fx_ratesÚ_merge_fx_rates)ÚOANDA_ACCOUNT_IDÚ OANDA_TOKENcóT\rSrSrSrS SjrS SjrS
SjrSSjrSSjr SSjr
S r g
)Ú
BarAggregatoré!z5
Aggregate tick data into fixed timeframe OHLC bars.
cóŠURSS5R5Ul[U[5(aUR 5OUn[ R"U5UlUR[ R"S5::a[SU35eSUl S=Ul =Ul
=UlUlSUlg)rzInvalid timeframe: )ÚreplaceÚupperÚsymbolÚ
isinstanceÚstrÚlowerÚpdÚ to_timedeltaÚ timeframeÚ TimedeltaÚ
ValueErrorÚcurrent_bucketÚopenÚhighÚlowÚcloseÚlast_ts)Úselfrr Útfs ÚB/Users/chuan/Documents/Projects/FX_Backtest/scripts/paper_trade.pyÚ__init__ÚBarAggregator.__init__&s™Ø—nn S¨"Ó-×5ˆŒ Ü",¨Y¼×"<Ñ"<ˆY_‰_Ô
À)ˆÜŸš¨ÓŒØ >‰>œRŸ\š\¨! Ð2°9°+Ð ?Ø37ˆÔØ8<Ð<ˆŒ Ð<D”IÐ< ¤¨4¬:Ø,0ˆ ócóz[R"UR5nURUR5nUR
UR -S- nURcURX4U5 gX0R:wa$UR5nURX4U5 U$URXB5 g)@) rÚ TimestampÚtsÚfloorr ÚbidÚaskr#Ú
_start_barÚ
_build_barÚ _update_bar)r)Útickr2ÚbucketÚmidÚfinisheds r+ÚupdateÚBarAggregator.update0sÜ
\Š\˜$Ÿ'™'Ó
ؘ$Ÿ.™.ÓØx‰x˜$Ÿ(™(Ñ" )ˆØ × Ñ Ñ O‰O˜F¨Ô Ø × Ó(ˆHØ O‰O˜F¨Ô ˆOØ ×јÔr.có>URcgUR5$©N)r#r7)r)s r+ÚflushÚBarAggregator.flush>sØ × Ñ Ñ ØÓ Ð r.cóTXlU=Ul=Ul=UlUlX0lgr@)r#r$r%r&r'r()r)r:Úpricer2s r+r6ÚBarAggregator._start_barCs)ØØ8=ÐŒ Ð=D”IÐ= ¤¨4¬:Ø r.cóˆ[URU5Ul[URU5UlXlX lgr@)Úmaxr%Úminr&r'r()r)rDr2s r+r8ÚBarAggregator._update_barHs0ܘŸ ™  5ÓŒ Üt—xx Ó'ˆŒØŒ
Ø r.cóÚURUR[UR5[UR5[UR
5[UR 5SS.nU$)Nr)rr2r$r%r&r'Úvolume)rr(Úfloatr$r%r&r')r)Úbars r+r7ÚBarAggregator._build_barNsPà—k—,‘,ܘ$Ÿ)™)Ó˜$Ÿ)™)Ó˜Ÿ“?ܘ4Ÿ:™:Óñ
ˆðˆ
r.)r'r#r%r(r&r$rr N)rrr r)r9r Úreturnú dict | None)rOrP)r:ú pd.TimestamprDrLr2rQrOÚNone)rDrLr2rQrOrR)rOÚdict) Ú__name__Ú
__module__Ú __qualname__Ú__firstlineno__Ú__doc__r,r=rAr6r8r7Ú__static_attributes__©r.r+rr!s%ñô ô
ô
÷
r.rcóŒ[USSS9n[R"U5=(d 0sSSS5 $!,(df  g=f)rzutf-8)Úencoding)r$ÚyamlÚ safe_load)ÚpathÚfs r+Ú load_configrb[s-Ü
ˆdC 'Ò *¨aÜ~Š~˜ ×& 
+× *× *ús Œ5µ
Acó UR=(d URSS5nURSS5n[URSS55n[URSS55n[URS S
55n[URS S 55n[URS
S55n [URSS55n
[URSS55n URSS5n URS5n
URS5nURS5n[URSS55n[URSS55nURS5nUb [U5nURS5nUb [U5n[ URSS55n[URSS
55n[URSS 55n[ URS!S55n[URS"S#55n[URS$S#55n[ URS%S&55n[ URS'S55nURS(5nURS)5nURS*5n[ URS+55n[ UR 5n [UU 5n![URS,55n"[S60SU_S-U_S.U_S/U_S0U _S1U_S2U _S3U
_SU_SU_SU_SU_SU_SU_SU_SU_SU_S!U_S"U_S$U_SU
_SU_S+U!_S4U"_S%U_S'U_S(U_S)U_S*U_S5U_6n#U#RU 5 U#X;4$)7NrÚEURUSDÚ account_ccyÚUSDÚfasté2ÚslowéÈÚspreadçð?Úslipgš™™™™™É?Úcommr0Úqtyi'Úcashi †ÚslÚtpÚatr_slÚatr_tpÚ
atr_windowéÚ
rsi_periodÚrsi_long_threshÚrsi_short_threshÚenable_trailingFÚtrailing_enable_atr_multÚtrailing_atr_multgà?Úlong_only_above_slowÚslope_lookbackrÚcooldownÚ allow_shortTÚshort_only_below_slowÚrisk_per_trade_pctÚmax_drawdown_pctÚmax_position_unitsÚfx_ratesÚ
strategiesÚfast_winÚslow_winÚ spread_pipsÚcommission_per_millionÚ
slippage_pipsÚstop_loss_pipsÚtake_profit_pipsÚstrategy_specsÚexecution_handlerrZ) rÚgetÚintrLÚboolrÚfx_raterr
r Úset_initial_cash)$ÚcfgÚargsrrrer‡rˆrkrmrnroÚ initial_cashrŒrrsrtrurwrxryrzr{r|r}r~rr€rrr„Ú cfg_fx_ratesÚ cli_fx_ratesr…Úengines$ r+Ú build_enginer`Ø
[‰[×
7˜CŸG™G H¨hÓ7€FØ—''˜Ó/€KÜ3—77˜6 '€HÜ3—77˜6 (€HÜ
3—77˜8 
*€FÜ ˜ Ó &€DÜ ˜ Ó &€DÜ
˜˜
'€CܘŸ ¨Ó2€LØ—WW˜T &€NØ—ww˜t“}ÐØ
W‰W
€FØ
W‰W
€FÜS—W‘W˜\¨2Ó/€JÜS—W‘W˜\¨2Ó/€JØ—g0€OØÑ ÓØ—w‘wÐØÑ Ð!1Óܘ3Ÿ7™7Ð#4°eÓ=€OÜ$ S§W¡WÐ-GÈÓ%MÓܘcŸg™gÐ&9¸3ÓÜ §¡Ð(>ÀÓ FÓܘŸÐ!1°1Ó6€NÜ3—77˜: *€HÜs—w‘w˜}¨dÓ4€KÜ  §¡Ð)@À%Ó!HÓØŸÐ!5ÓØ—w‘wÐØŸÐ!5Óä# C§G¡G¨JÓ$7Ó8€LÜ# D§L¡LÓ1€Lܘ|¨\Ó:€Hä)¨#¯'©'°,Ó*?Ó@€Nä
òÙðáðñðñð ñ
ñ ð
ñññðñðñðñðññññ ":ð!ñ",ð#ñ$2ð%ñ&&ð'ñ(ð)ñ*
ð+ñ, ð-ñ.ð/ñ0&ð1ñ2 ð3ñ44ð5ñ6.ð7ñ8*ð9ñ:.ð;ñ<,ð=€Fð@ ×ј  'r.c ó²^[R"SS9nURSSSS9 URSSSS 9 URS
S S S 9 URS
SSS/SS9 URSSSSS9 URS[SSS9 URSSSS9 UR 5n[ UR 5n[n[nU(aU(d [S5e[5n[XTX1RS9n[X!UR5upxn [XR 5n
[5n [#U UU/UURUR$S9n S mU4S!jn
[&R&"[&R(U
5 [&R&"[&R*U
5 [,R."S"US#UR S$35 U R15 S%nT(d•U R3S&S'9n[7U[85(dM.U
R;U5nU(aMUR=U5 US(-
nUR>(a&XáR>a[,R."S)5 O T(dM•U RA5 U
RC5nU(aUR=U5 URE5 URG5nURI[UR3S*S+55[UR3S,S-55US.9 URK[UR3S*S+55[UR3S,S-55US.9nUS/bUS/O URLnUU - S&-
S0-n[,R."S1URNS2URP35 [,R."S3US4S#US4S535 /nURS5nURUU5 M$![4a GM f=f!U RA5 f=f![4a Of=fU(a#UHn[,R."S6U35 M gg)7NzOANDA paper trading driver)Ú descriptionz--configTuç­–ç•¥é…ç½® YAML)ÚrequiredÚhelpz--symbolu覆盖é…置中的交易å“ç§)ÚdefaultrŸz --timeframeÚ60suK线时间粒度,默认 60sz
--environmentÚpracticeÚliveu OANDA 环境)r ÚchoicesrŸz --fx-rateÚappendu!é¢å¤–汇率,示例 GBPUSD=1.27)Úactionr z
--max-barsu)最多生æˆå¤šå°‘æ ¹ bar åŽè‡ªåŠ¨åœæ­¢)Útyper z--log-heartbeatÚ
store_trueuæ‰“å° OANDA 心跳信æ¯)u<OANDA_TOKEN 或 OANDA_ACCOUNT_ID 未在环境å˜é‡ä¸­è®¾ç½®)Ú
account_idÚ access_tokenÚ environment)Ú instrumentsrªÚ
log_heartbeatFcó
>Smg)NTrZ)ÚsignumÚframeÚ stop_flags €r+Úhandle_sigtermÚmain.<locals>.handle_sigtermÎsø€à‰ r.z$[Paper] Starting pricing stream for z)rrl)Útimeoutéz([Paper] Reached max bar limit, stopping.rgrhrirj)r‡rˆÚsuffixÚ final_equitygY@z[Paper] Bars processed: z, Trades executed: z[Paper] Final equity: z.2fz%)z[Paper] Fill received: )+ÚargparseÚArgumentParserÚ add_argumentrÚ