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

100 lines
15 KiB
Plaintext
Raw Normal View History

2025-11-14 23:16:51 +00:00
Ë
þi%ãóÜdZddlmZddlZddlZddlZddlmZmZddlm Z ddl
m Z m Z m
Z
ddlZddlZddZddZdd „Zddd
Zddd Zdd Zddd
ZddZddZddZedk(re«yy)
Train an XGBoost classifier on USDJPY H1 and export model artifacts.
Artifacts are written to: QuantResearch/artifacts/models/usdjpy_h1_xgb/<ts>/
- model.json (xgboost Booster)
- feature_list.json (ordered feature names)
- thresholds.json (p_long, p_exit, val/test metrics)
- meta.json (dataset/costs/params/seed/etc.)
Also updates: QuantResearch/artifacts/models/usdjpy_h1_xgb_latest.json
{"model_dir": "QuantResearch/artifacts/models/usdjpy_h1_xgb/<ts>"}
é)Ú annotationsN)ÚdatetimeÚtimezone)ÚPath)ÚDictÚListÚTuplecótjd¬«}|jdd¬«|jdd¬«|jdtd ¬
«|jd td ¬
«|jd
td¬
«|jdtd¬
«|jdtd¬
«|jdtd¬
«|jdtd¬
«|jdtd¬
«|jdtd¬
«|jdtd¬
«|jdtd¬
«|jdtd¬
«|jdd ¬«|j «S)!Nz"Train XGB (long-only) on USDJPY H1)Ú descriptionz--csvz$QuantResearch/data/raw/USDJPY_H1.csv)Údefaultz--symbolÚUSDJPYz --horizoné)Útyper z
--train-ratioç333333ã?z --val-ratiogš™™™™™É?z--seedé*z
--spread-pipsgø?z --slip-pipsz--comm-per-millionçz --max-depthéz--n-estimatorsi,z--learning-rategš™™™™™©?z--min-child-weightçð?z --reg-lambdaz--outz,QuantResearch/artifacts/models/usdjpy_h1_xgb)ÚargparseÚArgumentParserÚ add_argumentÚintÚfloatÚ
parse_args)Úps ú)QuantResearch/scripts/train_xgb_usdjpy.pyrrs-Ü×ÑÐ,PÔQ€A؇NN7Ð$J€NÔ‡NN: x€NÔ‡NN;¤S°!€NÔ‡NN¸€NÔ‡NN=¤u°c€NÔ‡NN8¤#¨r€NÔ‡NN¸€NÔ‡NN=¤u°c€NÔ‡N'¬e¸S€NÔ‡NN=¤s°A€NÔ‡N#¬#°s€NÔ‡N$¬5¸$€NÔ‡N'¬e¸S€NÔ‡NN°s€NÔ‡NN7Ð$R€NÔ <‰<ócóH|j«jd«rdSdS)JPYg{®Gáz„?g-Cëâ6?)ÚupperÚendswith)Úsymbols rÚ
_pip_valuer#3s Ø—<<“>×*¨5Ô1ˆ=°vÐ=rcóHt|«}|d|zz|z|z }|dz }||zS)Ng@g€„.A)r#)r"ÚpriceÚ spread_pipsÚ slip_pipsÚcomm_per_millionÚpipÚfrac_pxÚ frac_comms rÚcompute_cost_returnr,7s9Ü

€Cà˜S 9™_ÑÑ3°eÑ;€GØ! KÑ/€IØ  Ðrcó|j«}|jd¬«}|jd¬« }|j|«j«}|j|«j«}||z }ddd|zz z
S)Nr)Úlower)r édé)ÚdiffÚclipÚrollingÚmean)ÚseriesÚperiodÚdeltaÚupÚdownÚroll_upÚ roll_downÚrss rÚrsir=?s{Ø K‰K‹M€EØ ˜!ˆÓ €BØ J‰J˜QˆJÓ Ð €DØj‰j˜Ó ×'€GØ ˜$×+€IØ €BØ #˜˜R™ !rcó|jd«}tj||z
j«||z
j«||z
j«gd¬«j d¬«}|j |«j
«S)Nr0)Úaxis)ÚshiftÚpdÚconcatÚabsÚmaxr3r4)ÚhighÚlowÚcloser6Ú
prev_closeÚtrs rÚatrrJIswؘQ“€JÜ T˜CZ×°
Ñ):×(?Ñ(?Ó(AÀCÈ*ÑDT×CYÑCYÓC[Ð\ÐcdÔ e× iÑ iÐopÐ iÓ q€BØ
:‰: × $rcóZtj|dd¬«}|jjj t
«}|jj j t
«}tjdtjz|zdz «tjdtjz|zdz «c|d<|d<tjdtjz|zdz «tjdtjz|zdz «c|d <|d
<|S) timeT)Úutcég8@Úhour_sinÚhour_cosgdow_sinÚdow_cos) rAÚ to_datetimeÚdtÚhourÚastyperÚ dayofweekÚnpÚsinÚpiÚcos)ÚdfÚtsrUÚdows rÚadd_time_featuresr_OÜ ˜˜6™
¨Ô -€BØ
5‰5:‰:× Ñ œUÓ #€DØ
%‰%/‰/×
Ñ
¤Ó
'€CÜ%'§V¡V¨A´·±©I¸Ñ,<¸tÑ,CÓ%DÄbÇfÁfÈQÔQS×QVÑQVÉYÐY]ÑM]Ð`dÑMdÓFeÐ"€B€zNBzNÜ#%§6¡6¨!¬b¯e©e©)°c©/¸CÑ*?Ó#@Ä"Ç&Á&ÈÌRÏUÉUÉÐUXÉÐ[^ÑI^ÓB_Ð €B€yM2i
€IrcóB|j«}t|«}|djd«|d<|djd«|d<|djd«|d<|djd«jd«j «|d <|dj|«j «}|dj|«j «}||z
|dz |d
<t
|d|«|d <t|d |d
|d|«|dz |d<gd¢}||fS)NrGr0Úret_1éÚret_3rÚret_6éÚvol_24Úsma_diffr=rErFÚatr_norm) rarcrdrfrgr=rhrOrPrQrR)Úcopyr_Ú
pct_changer3Ústdr4r=rJ) r\ÚfastÚslowÚrsi_pÚatr_pÚoutÚsma_fÚsma_sÚfeatss rÚbuild_featuresrtXs+Ø
'‰')€CÜ
˜
€CØw<×*¨1Ó-€Cˆw<×*¨1Ó-€Cˆw<×*¨1Ó-€Cˆ˜‘L×+¨AÓ.×6°rÓ:×@€Cˆ ‰L× Ñ  Ó -€EØ ‰L× Ñ  Ó -€Eؘu¨G© Ñ4€Cˆ
‘\ 5Ó)€Cˆ˜#˜f™+ s¨5¡z°3°w±<ÀÓGÈ#ÈgÉ,ÑV€Cˆ

€Eð
ˆrcó2|j| «|z dz
S)Nr)r@)rGÚhorizons rÚforward_returnrwlsØ ;‰;˜   (¨3Ñ .rcóPddtj ddœ}tjddd«D}tjddd «D}||k\}tj|«sŒ||z
|}|jd
krŒ6t tj |««}t tj|d ¬ ««} | dkDr|| z tjd
«zntj }
|
|dkDsŒ®t |«t |«|
t|j«dœ}ŒÛŒ÷|S)Nrgà?r)Úthr_longÚthr_exitÚsharpeÚtradesgš™™™™™á?gš™™™™™é?é gÍÌÌÌÌÌÜ?éé2r0©Úddofé r{) rXÚinfÚlinspaceÚanyÚsizerÚnanmeanÚnanstdÚmathÚsqrtr) Úp_valÚfwd_valÚcost_valÚbestÚthrrzÚchosenÚnetÚmuÚsdr{s rÚpick_thresholdsr”pب¼¿¹¸È1Ñ M€DÜ{‰{˜4  bÖÜŸ  D¨#¨rÖ2ˆHؘc\ˆ—66˜&”>ØØ˜% .ˆx‰x˜"Š}ØÜ”r—zz #“Ó'ˆ”r—yy ¨1Ô.ˆBØ8:¸Qºb˜2‘g¤§¡¨8Ó!4Ò4ÄRÇVÁVÀGˆFؘ˜X™Ó&Ü$)¨#£J¼EÀ(»OÐW]ÔilÐmp×muÑmuÓivÑwñ €Krcó
ddl}t«}tj
j
|j «tj|j«}d|jvr td«|gd¢j«}t|«\}}t|d|j«}t|j |d|j"|j$|j&«}tj(t j*||kDdt j*|| kdtj,««|j.¬«}|j1||¬ «j3|d
gz¬ «j5d ¬
«} | |j7«}
| d
j9t:«j7«} |j<| j.j7«} | dj7«}
t?| «}t;||j@z«}t;||j@|jBzz«}||k\r|tEd|dz«z
}|
d|| d|}}|
||| ||}}|
|d| |d}}| |||
||}}| |d|
|d}}|jG|||¬«}|jG|||¬«}|jG|||¬«}dd|jH|jJ|jL|jNdd|j dœ }|df|dfg}|jQ|||jR|dd¬«} | jU|«}!tW|!||«}"| jU|«}#|#|"dk\}$||z
|$}%t;|%jX«}&|%jXrt[t j\|%««nd}'|%jXdkDr t[t j^|%d¬««nd}(|(dkDr|'|(z tajbd«znd})tejfthjj«jmd«}*to|jp«jsd«|*z }+|+jud d ¬ «| jwty|+d!z ««|+d"z j{t}j~|d#¬$«d%¬&«t[|"d«t[|"d'«t[|"d(«t;|"d)«t[|)«t;|&«d*œ},|+d+z j{t}j~|,d#¬$«d%¬&«tejfthjj«j«|j |j|jt;|«t;||z
«t;||z
«d,œt;|j «||t;| d-d«xsd«|,|j"|j$|j&d.œdd/œ }-|+d0z j{t}j~|-d#¬$«d%¬&«to|jp«jsd«j„d1z }.|.j„jud d ¬ «|.j{t}j~d2ty|+«id#¬$«d%¬&«t‡d3|+«y#t$r}td«|d}~wwxYw)4Nrz3xgboost is required. Please install xgboost==1.7.6.rLzCSV must include 'time' column)rLÚopenrErFrGÚvolumerGr0)Úindex)Úcostr™)ÚsubsetT)Údropršé
)ÚlabelÚ
feature_nameszbinary:logisticÚloglossgÍÌÌÌÌÌì?) Ú objectiveÚ eval_metricÚ max_depthÚetaÚlambdaÚmin_child_weightÚ subsampleÚcolsample_bytreeÚseedÚtrainÚvalrF)Únum_boost_roundÚevalsÚearly_stopping_roundsÚ verbose_evalryrr€rz
%Y%m%d_%H%M%SÚ)ÚparentsÚexist_okz
model.jsonzfeature_list.jsonrN)Úindentzutf-8)Úencodingrzr{r|)Úp_longÚp_exitÚ
val_sharpeÚ
val_tradesÚ test_sharpeÚ test_tradeszthresholds.json)ÚtestÚbest_iteration)r&r'r() Ú generated_atr"ÚcsvrvÚsplitsr©ÚfeaturesÚ
xgb_paramsr¼Ú
thresholdsÚcostsÚ
git_commitz meta.jsonzusdjpy_h1_xgb_latest.jsonÚ model_dirzSaved model artifacts to )DÚxgboostÚ ExceptionÚ