
    i              	          d Z ddlZddlZ ej                  ej                  j                  ej                  j                  e                   ddlZ	ddl
ZddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z' dZ(	 	 dd	e)d
e)de*de"fdZ+d Z,d Z-e.dk(  r e-        yy)at  
Run Auto Hedge-Mart V4 backtest on BTCUSD tick data.

Resamples tick data (bid/ask CSV) into M5 candles, then runs
the hedge-mart recovery grid strategy.

Usage:
    python run_btc_backtest.py                     # full dataset, M5
    python run_btc_backtest.py --max-rows=1000000  # first 1M ticks
    python run_btc_backtest.py --tf=15min          # 15-minute candles
    N)datetime)SYMBOLINITIAL_BALANCECOMMISSION_PERCENTSLIPPAGE_PIPSENTRY_TP_PIPSENTRY_SL_PIPSRECOVERY_GRID_STEPSRECOVERY_TPSCRYPTO_PAIRSRECOVERY_PROFIT_TARGETTHREAD_PROFIT_TARGETMAX_INITIAL_ORDERSFIBO_BARS_BACKRECOVERY_FIBO_ZONEADAPTIVE_GRIDADAPTIVE_ATR_BARSREFERENCE_ATRADAPTIVE_MIN_SCALEADAPTIVE_MAX_SCALE)
DataLoaderOHLCV)BacktestEngine)setup_loggingz
BTCUSD.csvcsv_path	timeframemax_rowsreturnc                 8   t        d|  d       d| i}|r||d<   t        j                  d&i |}t        dt        |      dd       t        j                  |d   j
                  j                  d	d
d      d      |d<   |d   |d   z   dz  |d<   |j                  d      }|d   j                  |      j                         }g d|_
        |d   j                  |      j                         |d<   |j                         }t        dt        |      dd| d       t        d|j                  d    d|j                  d           t        d|d   j                         d d!|d"   j                         d        t!        t"              }g }|j%                         D ]o  \  }}	|j'                  t)        |j+                         t-        |	d#         t-        |	d"         t-        |	d         t-        |	d$         t-        |	d         %             q ||_        |S )'z,Load tick CSV and resample to OHLCV candles.zLoading tick data from z...filepath_or_buffernrowszLoaded ,z ticks	Timestampz	:(\d{3})$z.\1T)regexz%Y%m%d %H:%M:%S.%f)formatr   z	Bid pricez	Ask priceg       @mid)openhighlowclosez
Bid volumevolumezResampled to  z candleszDate range: r   z to zPrice range: $r)   ,.1fz to $r(   r'   r*   )	timestampr'   r(   r)   r*   r+    )printpdread_csvlento_datetimestrreplace	set_indexresampleohlccolumnssumdropnaindexminmaxr   r   iterrowsappendr   to_pydatetimefloatdata)
r   r   r   read_paramsdfohlcvloadercandlestsrows
             2/var/www/html/crpytotradingbot/run_btc_backtest.pyload_ticks_to_candlesrN   (   s    
#H:S
12'2K'G		#{	#B	GCGA;f
%& ^^
;##L&#E#BzN K2k?2c9BuI 
j	!BuIy)..0E4EM&//	:>>@E(OLLNE	M#e*Qq8
<=	LQ(U[[_,=
>?	N5<++-d35v9J9J9LT8R
ST FG>># Cu&&(s6{#s6{#c%j!G%X'
 	 FKM    c                      t        j                  t        i       } | j                  dd      }t        dd        t        dt                t        d        t        d| j                  dd      d	       t        d
|        t        dt        d	       t        dt
         d       t        dt                t        dt                t        dt                t                t        dt         dt        |z  d       t        dkD  rt         dt        |z  dnd}t        d|        t                t        dt        t               d       d}t        t        dd       D ]0  \  }}||z  }t        d|dz    d| d| d||z  dd||z  dd        2 t        t              dkD  rt        d!t        t              dz
   d"       t                t        d#t                t        d$t        d%       t        d&t         d%       t                t"        rXt        d'       t        d(t$         d)       t        d*t&        d%       t        d+t(        d%d,t*        d%d-       t        d.       t        d d       y)/z0Print the auto-normalized parameters for BTCUSD.pip_sizeg?
z<============================================================u   AUTO HEDGE-MART V4 — z  Ref price:       $	ref_pricer   ,.0fz  Pip size:        z  Balance:         $z  Commission:      %z  Max orders:      z  Fibo bars back:  z  Recovery Fibo:   z  Entry TP:        z pips  =  $r.   DISABLEDz  Entry SL:        z  Recovery grid (z	 levels):N   z    L   z: +z pips (cum z)  =  $z  (cum $)z	    ... (z more levels)z  Recovery TPs:    z  Recovery $:      $.1fz  Thread profit:   $z  ** ADAPTIVE GRID ENABLED **z  ATR lookback:    z barsz  Reference ATR:   $z  Scale range:     zx - xz,  (Grid/TP auto-scale to current volatility))r   getr   r1   r   r   r   r   r   r   r	   r4   r
   	enumerater   r   r   r   r   r   r   r   )pair_cfgpipsl_str
cumulativeisteps         rM   print_paramsrd   Y   s   +H
,,z3
'C	Bxj/	#F8
,-	XJ	 k1!=d C
DE	u
%&	  6
78	 231
56	 23
45	/
01	 23
45	#J	k-#:Md9S
TUHUXYHYk-#*=d)CD_iF	x
()	#J	c"567y
ABJ0!45 u4d
acU#dV;zl'$*TARRZ[ehk[klpZqqrstu !#	#12Q67}EF	#J	~
./	 !7 <
=>	 !5c :
;<	#J-/#$5#6e<=$]3$789#$6s#;4@RSV?WWXYZ<>	XJb/rO   c                     d } d}t         j                  dd  D ]l  }|j                  d      rt        |j	                  d      d         } 2|j                  d      r|j	                  d      d   }X|dv s]t        t                y  t        dd       t                t        t        || 	      }t        d
t        |       dt        dd       t        t        t        t        t               }t        |      }d }|j#                  ||      }t                |j%                          dd l}t)        dd      5 }	|j+                  |j-                         |	d       d d d        t        d       |S # 1 sw Y   xY w)N5minrX   z--max-rows==z--tf=)z-hz--helpT)consolefile)r   r   z
Running backtest: z candles, $rT   z	 balance
)symbolinitial_balancecommission_percentslippage_pipsc           	      J    | |z  dz  }t        d|dd| dd|dddd	
       y )Nd   zProgress: rZ   z% (r"   /rY    T)endflush)r1   )currenttotalpcts      rM   progresszmain.<locals>.progress   s7    o#SIS1U1IQ?RtTrO   )progress_callbackr   zbtc_backtest_result.jsonw   )indentz*
Results saved to btc_backtest_result.json)sysargv
startswithintsplitr1   __doc__r   rd   rN   CSV_PATHr4   r   r   r   r   r   runprint_summaryjsonr'   dumpto_dict)
r   r   argrE   engineru   rw   resultr   fs
             rM   mainr      sY   HI xx| >>-(399S>!,-H^^G$		#q)I$$'N $T* N !YRD	 T;t6LJ
WX '-#	F IEU ZZZ9F	G
 	(#	. 1!		&.."Aa	01	79M	1 1s   :#E22E;__main__)rf   N)/r   r|   oschdirpathdirnameabspath__file__pandasr2   numpynpr   settingsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   data_loaderr   r   backtestr   utilsr   r   r6   r   rN   rd   r   __name__r0   rO   rM   <module>r      s   
  	 	2	3 4         * #   ;A*..C .C .$'.3=.b&R0f zF rO   