
    ^9j]                        d dl Zd dlmc mZ d dlZd dlZd dlZd dl	Z
d dlmZmZmZmZmZ ej"                  j%                  ej"                  j'                  ej"                  j)                  e      d            Zej"                  j'                  eddd      Zej"                  j'                  eddd	      Zd
 Zd Zd Zd Zd Zd Zd Zy)    N)apply_pine_time_gatecheck_tv_entry_markersrun_python_strategystrategy_stemtv_score_columnz..datamlpzCOINBASE_BTCUSD, 1D.csvresultswinnersz>optimization_winner_strategy_mlp_scores_COINBASE_BTCUSD_1D.csvc                     d} t        |       }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}}d	} t        |       }d
}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}x}}y )Nzstrategy_activation_scores.pyactivation_scores==z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   py0py2py4py7assert %(py9)spy9strategy_mlp_scores.py
mlp_scores)	r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)@py_assert1@py_assert3@py_assert6@py_assert5@py_format8@py_format10s         G/Users/jameslopez/projects/TradingBot25/tests/test_tv_parity_tooling.py4test_strategy_stem_supports_activation_and_mlp_filesr)      s   8P=89P=PP9=PPPPP9=PPPPPPP=PPP=PPP8PPP9PPP=PPPPPPPP1B=12BlB2lBBBB2lBBBBBB=BBB=BBB1BBB2BBBlBBBBBBB    c            
         t         j                  } ddgi} | |      }t        |      }d}||k(  }|s:t        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}x}x}x}}t         j                  } d
dgi} | |      }t        |      }d
}||k(  }|s:t        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}x}x}x}}t         j                  } ddgi} | |      }t        |      }d }||u }|s:t        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x} x}x}x}x}}y )Nactivation_score_poc      ?r   )zn%(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.DataFrame
}(%(py5)s)
})
} == %(py12)sr   pd)r   py1py3py5r   r   py12zassert %(py14)spy14	mlp_scoreclose)is)zn%(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.DataFrame
}(%(py5)s)
})
} is %(py12)s)r.   	DataFramer   r   r   r   r   r   r   r    r!   )@py_assert2@py_assert4r$   @py_assert8@py_assert11@py_assert10@py_format13@py_format15s           r(   3test_tv_score_column_prefers_available_export_scorer?      s   <<c)?#(Gc<(GHc?HIcMccIMcccccIMccccccc?ccc?cccccc2ccc2ccc<ccc(GcccHcccIcccMccccccccc<<Mse(<M<(<=M?=>M+M>+MMMM>+MMMMMM?MMM?MMMMMM2MMM2MMM<MMM(<MMM=MMM>MMM+MMMMMMMM<<B3%(8B<(89B?9:BdB:dBBBB:dBBBBBB?BBB?BBBBBB2BBB2BBB<BBB(8BBB9BBB:BBBdBBBBBBBBr*   c            	         t        j                  t        j                  g d      g dg dd      } dt        j                  d      ddg}t	        || d	t        j                  d
      t        j                  d            }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }t        |      }d}	||	k(  }
|
st        j                  d|
fd||	f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            d x}x}x}
}	|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }t        j                  d
      g}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )N)2020-01-01 00:00z2020-01-01 06:002020-01-01 12:00)r-           r-   )rC   rC   r-   )timezentry (standard)zmissed entry   rB   F)	trade_numentry_dt	is_margin6HrA   tv_with_markerr   r   )z%(py1)s == %(py4)s)r/   r   zassert %(py6)spy6tv_without_markerr   lenr   r   r   chart_exec_countchart_without_tv)r.   r7   to_datetime	Timestampr   r   r   r   r    r!   rM   r   r   r   )signals	tv_tradesresult@py_assert0r#   r8   @py_format5@py_format7r"   r$   r%   r&   r'   s                r(   2test_tv_entry_marker_check_detects_export_mismatchrX   %   s   ll  
 
 ,' G LL!34 I $
'(
'(F "#(q(#q((((#q(((#(((q((((((()*03*+0q0+q0000+q00000030003000*000+000q0000000$%**%****%***%**********$%K",,7I*J)KK%)KKKKK%)KKKK%KKK)KKKKKKKKr*   c            
         t        j                  t        j                  g d      g dg dg dd      } t        | ddddd	d
dt        j                  d            }|d   }|j
                  } |       }g d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}|d   }|j
                  } |       }g d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}y )N)z2017-11-29 00:00z2017-11-30 00:00z2017-12-01 00:00z2017-12-01 12:00z2017-12-02 00:00)      Y@     @orZ   r[   g     r)rZ   g     V@rZ   g     [@g      ^@)rD   activation_scorer5   highg      ig      I@g     lTFrC   )!i_long_entry_activation_threshold i_long_exit_activation_threshold-i_long_exit_activation_confirmation_thresholdi_use_long_exit_confirmationi_use_long_entry_confirmationi_trailing_stop_thresholdz
2017-12-01execute_entry)FFFTFr   zE%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.tolist
}()
} == %(py8)sr/   r0   r1   py8assert %(py10)spy10execute_exit)FFFFT)r.   r7   rP   r   rQ   tolistr   r   r   r    r!   	rR   replayedrU   r8   r9   @py_assert7r$   @py_format9@py_format11s	            r(   .test_pine_time_gate_starts_flat_at_score_startrq   C   sq   ll  
  C32 G $1704=C,0-2),	
 	\"H O$S$++S+-S1SS-1SSSSS-1SSSS$SSS+SSS-SSS1SSSSSSSSN#R#**R*,R0RR,0RRRRR,0RRRR#RRR*RRR,RRR0RRRRRRRRRr*   c                  f   t        j                  t        j                  g d      g dg dg dg dd      } d| j                  d<   t	        | dd	d
ddddddt        j
                  d            }|d   }|j                  } |       }g d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}y )N)rA   z2020-01-01 08:002020-01-01 16:00z2020-01-02 00:00)      i@rt   rC   rC   )rZ   g     @Y@g     Y@g     Y@)rC   rC   rC   rC   )rD   r\   r5   r]   stoch_peak_normr   r   rZ   g      @g      TF   rC   )r^   r_   r`   ra   rb   i_entry_score_windowi_exit_score_windowrc   rs   rd   )FFFTr   re   rf   rh   ri   )r.   r7   rP   attrsr   rQ   rk   r   r   r   r    r!   rl   s	            r(   1test_pine_time_gate_preserves_mlp_entry_smoothingrz   b   s   ll  
  5-,/ G &2GMM/"#1605=C,0-2$%#$),		
 	'(H O$L$++L+-L1LL-1LLLLL-1LLLL$LLL+LLL-LLL1LLLLLLLLLr*   c                     t        j                  t              j                  d   j	                         } t        t        | d      }d}|j                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}d}|j                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}d}|j                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|d   }|j                   } |       }d}||kD  }|st        j                  d|fd||f      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}}y )Nr   r   )strategy_filer\   in)z/%(py1)s in %(py5)s
{%(py5)s = %(py3)s.columns
}rR   r/   r0   r1   assert %(py7)sr   rd   rj   )>)zA%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.sum
}()
} > %(py8)srf   rh   ri   )r.   read_csvMLP_PARAMS_1Dilocto_dictr   DATA_1Dcolumnsr   r   r   r   r   r   r    r!   sum)paramsrR   rU   r9   r8   @py_format6r&   rn   r$   ro   rp   s              r(   +test_compare_tv_trades_can_run_mlp_strategyr      s   [[',,Q/779F!.G 0000000000000000000000000000-goo-?o----?o---?------g---g---o-------,W__,>_,,,,>_,,,>,,,,,,W,,,W,,,_,,,,,,,?#-#''-')-A-)A----)A---#---'---)---A--------r*   c            
         t        j                  t        j                  ddt        dddt
        gt        dddd	      } | j                  }d
}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }t        j                  | j                        dz   d|iz  }t!        t        j"                  |            d x}x}}d}| j$                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }t!        t        j"                  |            d x}x}}d}| j$                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }t!        t        j"                  |            d x}x}}d}| j$                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      dz  }dd|iz  }t!        t        j"                  |            d x}x}}y )Nzstrategies/validate_strategy.pyz--dataz--strategy_filer   z--params_fileTx   F)cwdcapture_outputtexttimeoutcheckr   r   )z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)srT   )r   r   r1   z
>assert %(py7)sr   zTrade-walk diagnosticsr}   )z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stdout
}r   r   zCanonical optimizer metricsz<Source: strategy.calculate_metrics(signals, score_start=...))
subprocessrunsys
executabler   r   REPO
returncoder   r   r   r   r   r   _format_assertmsgstderrr    r!   stdout)rT   r"   r9   r#   r   r&   rU   r8   s           r(   7test_validate_strategy_prints_canonical_metrics_sectionr      s   ^^NN-$		
 F$ 00!000000000600060000000006==0000000#4v}}4#}4444#}444#444444v444v444}4444444(9FMM9(M9999(M999(999999F999F999M9999999IZV]]ZI]ZZZZI]ZZZIZZZZZZVZZZVZZZ]ZZZZZZZr*   ) builtinsr   _pytest.assertion.rewrite	assertionrewriter   osr   r   pandasr.   tools.compare_tv_tradesr   r   r   r   r   pathabspathjoindirname__file__r   r   r   r)   r?   rX   rq   rz   r   r    r*   r(   <module>r      s      	  
   
wwrww||BGGOOH$=tDE
'',,tVU,E
FD	C
CL<S>MB.[r*   