Files
profitable-expert-advisor/polymarket/backtesting/__pycache__/engine.cpython-312.pyc
T

161 lines
21 KiB
Plaintext
Raw Normal View History

2026-02-13 08:03:25 +01:00
Ë
|~ijOãó°dZddlmZmZmZmZddlmZmZddlZ ddl
Z e jdd¬«ddl
mZmZmZdd lmZdd
lmZddlZGd d «Zy)
zQ
Backtesting Engine for Polymarket
Simulates trading on historical market data.
é)ÚDictÚListÚOptionalÚAny)ÚdatetimeÚ timedeltaNÚignore)ÚdivideÚinvalidé)Ú BaseStrategyÚ MarketSignalÚPosition)Ú GammaClient)Ú
ClobClientc
óÜeZdZdZ ddedededefdZddee d e
e fd
Z dd ed e d
ed e
efdZ
dede ded ee fdZddee
e d e eeffdZdded efdZddeed dfdZy)ÚBacktestEnginez„
Main backtesting engine for Polymarket strategies.
Simulates trading on historical data with realistic execution.
ÚstrategyÚ
start_dateÚend_dateÚinitial_balancecó¾||_||_||_||_t «|_t
«|_||_g|_ g|_
g|_ g|_ y)a
Initialize backtesting engine.
Args:
strategy: Strategy instance to backtest
start_date: Start date for backtesting
end_date: End date for backtesting
initial_balance: Starting USDC balance
N)
rrrrrÚ gamma_clientrÚ clob_clientÚ current_dateÚmarket_snapshotsÚtradesÚ equity_curveÚ
daily_returns)Úselfrrrrs ú=D:\profitable-expert-advisor\polymarket\backtesting\engine.pyÚ__init__zBacktestEngine.__init__sbð!ˆŒ
Ø$ˆŒØ ˆŒ
ØÔô(›MˆÔÜ%›<ˆÔð'ˆÔØ,.ˆÔØ"$ˆŒ ð)+ˆÔØ*,ˆÕótag_idÚreturncóÒ|jjddd|¬«}g}|D]@}|jdg«D])}|j||t j
«dœ«Œ+ŒB|S)aP
Fetch markets that were active during backtest period.
Note: Polymarket API may not provide full historical data.
This is a simplified implementation.
Args:
tag_id: Optional tag ID to filter markets
Returns:
List of market dictionaries
TFéd)ÚactiveÚclosedÚlimitr$Úmarkets©ÚeventÚmarketÚ timestamp)rÚ
get_eventsÚgetÚappendrÚnow)r r$Úeventsr+r-r.s r!Úfetch_historical_marketsz'BacktestEngine.fetch_historical_markets;sð×"×ØØØð 
ˆðˆØò ˆEØŸ)™) I¨rÓ
ØØ$Ü!)§¡£ñ õñ
ð ðˆr#Ú
initial_priceÚdaysÚ
volatilitycóÊ|g}t|«D]Q}tjjd|«}|d|z}t dt d|««}|j
|«ŒS|S)aS
Simulate price evolution for backtesting.
In production, use actual historical price data.
Args:
initial_price: Starting price
days: Number of days to simulate
volatility: Daily volatility
Returns:
List of prices over time
réÿÿÿÿç{®Gáz„?ç®Gáz®ï?)ÚrangeÚnpÚrandomÚnormalÚmaxÚminr2)r r6r7r8ÚpricesÚchangeÚ new_prices r!Úsimulate_price_evolutionz'BacktestEngine.simulate_price_evolution\shð" ˆÜt“ò %ˆAä—Y‘Y×% a¨Ó4ˆFؘr™
 +ˆ˜D¤# d¨IÓ"6Ó7ˆ M‰M˜ ˆ
r#ÚsignalÚ market_datar/c ó®|jdi«}|jr
|j}n|jdg«}|sy|d}d}ddl}|j|jdd««} |jdk(rt | d«}
nt | d«}
|
dks|
d k\ry|jd
k(r·||j jvry|j j|} | jdkDr>tj| j«r|
dkDr|
d krtj|
«sy| j|
z|jz} tj| «r| dkrîytj|j j«r|j jdkDsyt|j|j jz|j j|j jz«} tj| «r| dkDsy|j j| |«sy| |j jkDry|jdk(r
|
dkDr:|
d kr5tj|
«r | |
z }
tj|
«r|
dkDsyytj|j j«r|j j| k\sy|j xj| zc_ tj|j j«sd |j _ yt|||
|
||
d ¬ «}||j j|<n |jd
k(r||j jvrw|j j|} tj| j«r=| jdkDr.tj| j «r| j dkDsy| j|jz}tj|«r|dkDsy||
z}|| j z}tj|«rtj|«sy||z
}tj|«sd }tj|j j«sd |j _ |j xj|z
c_ tj|j j«sd |j _ y|j xj"d z
c_|dkDrV|j xj$d z
c_|j xj&tj|«r|nd z
c_n^|j xj(d z
c_|j xj*tj|«r t-|«nd z
c_|jd
k\r[tj|«r|nd | _|j j0j3| «|j j|=nœ| xj|zc_tj| j«r| jdk\sd | _| xj.tj|«r|nd z
c_tj| j.«sd | _||j|||
| |j4|j6dœ}|j8j3|«|S)a
Execute a trading signal.
Args:
signal: Trading signal from strategy
market_data: Current market data
timestamp: Current timestamp
Returns:
Trade dictionary or None if execution failed
r.Ú clobTokenIdsNrÚYesÚ
outcomePricesú
[0.5, 0.5]ÚBUYéÚSELLç)Útoken_idÚoutcomeÚsizeÚ entry_priceÚ
entry_timeÚ
current_priceÚunrealized_pnlgð?)r/ÚactionrSrTÚpricerUÚreasonÚ
confidence)r1rSÚjsonÚloadsrZÚfloatrÚ positionsrUr>ÚisfiniteÚcurrent_balancerBÚmax_position_sizeÚcan_open_positionrrVÚ total_tradesÚwinning_tradesÚ total_profitÚ
losing_tradesÚ
total_lossÚabsÚ realized_pnlÚclosed_positionsr2r\r]r)r rHrIr/r.rSÚ token_idsrTr^rCrXÚposÚ
position_sizeÚ
tokens_boughtÚpositionÚ
close_sizeÚ
exit_valueÚ
entry_costÚpnlÚtrades r!Úexecute_signalzBacktestEngine.execute_signalwð  ¨2Óð ?Š?؉HàŸ
 >°2Ó6ˆIÙØØ  ‘|ˆHàˆó ؘFŸJ™J ¸ ÓØ =‰=˜ ! ¡)Ó,‰Mä! ¡)Ó,ˆ ˜  °!Ò!3Øð =‰=˜ ˜tŸ}™}×à—-‘-×)¨(Ñ3ˆCà—H‘H˜q’L¤R§[¡[°·±Ô%:Ø! AÒ%¨-¸!Ò*;Ü—KK 
ÔØŸH™H }Ñ4°v·{±{ÑBˆMÜ—;‘;˜}ÔÀ!Ò1CØô—K‘K §
¡
× =Ñ =Ô>À4Ç=Á=×C`ÑC`ÐcdÒCdØäØ ˜dŸm™m×
×·
±
×0OÑ0Oш —K‘K 
Ô.°=À1Ò3DØð—=‘=×2°=À(Ôð˜tŸ}™}×ð =‰=˜ ˜qÒ  ]°QÒ%6¼2¿;¹;À}Ô;UØ -°
Ñ =
äŸ  MÔ2°}ÀqÒ7HØàô—K‘K §
¡
× =Ñ =Ô—M‘M×1°]Òà M‰M× )¨]Ñ —;;˜tŸ}™}×=Ø03
Ôô ØØˆ19ˆDM‰M× # 
]‰]˜
˜4Ÿ=™=×—m‘m×-¨hÑ7äŸ  C§H¡HÔ-°#·(±(¸Q²,ÜŸ  C§O¡OÔ¿¹È1Ò9LØð!ŸX™X¨¯ © Ñ3
ÜŸ  JÔ/°JÀ²NØà'¨-Ñ7
Ø'¨#¯/©/Ñ9
ôŸ  JÔ/´B·K±KÀ
Ô4KØà  -Ü—{{ —{{ 4§=¡=×#@Ñ#@ÔAØ47D—M
×Ñ—{{ 4§=¡=×#@Ñ#@ÔAØ47D—Mà
×*¨aј’7Ø—M‘M×0°AÑ—M‘M׿¹ÀSÔ9I±#ÈsÑ—M‘M×/°1Ñ—MM×,¼B¿K¹KÈÔ<L´°C´ÐRUÑ—;; %ä.0¯k©k¸#Ô.>¡sÀC—MM×2×9¸Ÿ
×Ñ—H’H 
Ñ*•HÜŸK™K¨¯©Ô1°c·h±hÀ!²mØ#&˜œØ×$¬r¯{©{¸3Ô/?©ÀSÑŸ;™; s×'7Ñ'7Ô8Ø+.˜Ô—m ØØ—m × 
ˆð
×ј5Ôˆ r#r+c
óNtd|jd|j«||j«}|s t d«tdt |«d«|j}d}||jkr—|j jj«D]d\}}tjjdd«}td td
|j|z««}|j j||«Œf|D}|d |d |d
œ} |d }
ddl} | j#|
j%dd««} | j#|