@@ -25,7 +25,7 @@ def __init__(self) -> None:
2525 self .total_signals = 0
2626 self .false_entry_signals = 0
2727 self .false_exit_signals = 0
28- self .false_indicators : list [str ] = []
28+ self .false_indicators : set [str ] = set ()
2929 self .has_bias = False
3030
3131
@@ -70,34 +70,29 @@ def analyze_indicators(self, full_vars: VarHolder, cut_vars: VarHolder, current_
7070 cut_df : DataFrame = cut_vars .indicators [current_pair ]
7171 full_df : DataFrame = full_vars .indicators [current_pair ]
7272
73- # cut longer dataframe to length of the shorter
74- full_df_cut = full_df [(full_df .date == cut_vars .compared_dt )].reset_index (drop = True )
75- cut_df_cut = cut_df [(cut_df .date == cut_vars .compared_dt )].reset_index (drop = True )
76-
77- # check if dataframes are not empty
78- if full_df_cut .shape [0 ] != 0 and cut_df_cut .shape [0 ] != 0 :
79- # compare dataframes
80- compare_df = full_df_cut .compare (cut_df_cut )
81-
82- if compare_df .shape [0 ] > 0 :
83- for col_name , values in compare_df .items ():
84- col_idx = compare_df .columns .get_loc (col_name )
85- compare_df_row = compare_df .iloc [0 ]
86- # compare_df now comprises tuples with [1] having either 'self' or 'other'
87- if "other" in col_name [1 ]:
88- continue
89- self_value = compare_df_row .iloc [col_idx ]
90- other_value = compare_df_row .iloc [col_idx + 1 ]
91-
92- # output differences
93- if self_value != other_value :
94- if not self .current_analysis .false_indicators .__contains__ (col_name [0 ]):
95- self .current_analysis .false_indicators .append (col_name [0 ])
96- logger .info (
97- f"=> found look ahead bias in indicator "
98- f"{ col_name [0 ]} . "
99- f"{ str (self_value )} != { str (other_value )} "
100- )
73+ # trim full_df to the same index and length as cut_df
74+ cut_full_df = full_df .loc [cut_df .index ]
75+ compare_df = cut_full_df .compare (cut_df )
76+
77+ if compare_df .shape [0 ] > 0 :
78+ for col_name in compare_df :
79+ col_idx = compare_df .columns .get_loc (col_name )
80+ compare_df_row = compare_df .iloc [0 ]
81+ # compare_df now comprises tuples with [1] having either 'self' or 'other'
82+ if "other" in col_name [1 ]:
83+ continue
84+ self_value = compare_df_row .iloc [col_idx ]
85+ other_value = compare_df_row .iloc [col_idx + 1 ]
86+
87+ # output differences
88+ if self_value != other_value :
89+ if not self .current_analysis .false_indicators .__contains__ (col_name [0 ]):
90+ self .current_analysis .false_indicators .add (col_name [0 ])
91+ logger .info (
92+ f"=> found look ahead bias in column "
93+ f"{ col_name [0 ]} . "
94+ f"{ str (self_value )} != { str (other_value )} "
95+ )
10196
10297 def prepare_data (self , varholder : VarHolder , pairs_to_load : list [DataFrame ]):
10398 if "freqai" in self .local_config and "identifier" in self .local_config ["freqai" ]:
@@ -132,7 +127,13 @@ def prepare_data(self, varholder: VarHolder, pairs_to_load: list[DataFrame]):
132127 varholder .data , varholder .timerange = backtesting .load_bt_data ()
133128 varholder .timeframe = backtesting .timeframe
134129
135- varholder .indicators = backtesting .strategy .advise_all_indicators (varholder .data )
130+ temp_indicators = backtesting .strategy .advise_all_indicators (varholder .data )
131+ filled_indicators = dict ()
132+ for pair , dataframe in temp_indicators .items ():
133+ filled_indicators [pair ] = backtesting .strategy .ft_advise_signals (
134+ dataframe , {"pair" : pair }
135+ )
136+ varholder .indicators = filled_indicators
136137 varholder .result = self .get_result (backtesting , varholder .indicators )
137138
138139 def fill_entry_and_exit_varHolders (self , result_row ):
0 commit comments