We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
I have the weird behavior that if I add an exponential moving average in init() the return changes, although the strategy in next() is still the same.
import pandas_ta as ta class SmaCross(Strategy): macd_max, macd_min = get_min_max_macd(df.Close) macd_long_entry = 0.9 # At what % from mac_min should entry long macd_short_entry = 0.1 # At what % from mac_max should entry short def init(self): close = self.data.df["Close"] self.macd = self.I(macd, close, ) self.ema = self.I(ta.ema, close, 200) # Adding or removing this line changes the return def next(self): current_price = self.data.Close[-1] macd_line = self.macd[0] signal_line = self.macd[2] if crossover(macd_line, signal_line): self.buy(sl=0.95 * current_price) elif crossover(signal_line, macd_line): self.sell(sl=1.05 * current_price) if macd_line[-1] >= 0: if self.position.is_long: self.position.close() elif macd_line[-1] <= 0: if self.position.is_short: self.position.close() bt = Backtest(df, SmaCross, cash=1000000000, commission=.002, exclusive_orders=False, trade_on_close=True) stats = bt.run() print(stats)
Stats if ema is defined in next():
Start 2022-06-24 14:00:00 End 2022-06-27 16:45:00 Duration 3 days 02:45:00 Exposure Time [%] 10.666667 Equity Final [$] 1016926767.83 Equity Peak [$] 1019500544.81 Return [%] 1.692677 Buy & Hold Return [%] -2.658726 Return (Ann.) [%] 362.57613 Volatility (Ann.) [%] 54.306491 Sharpe Ratio 6.676479 Sortino Ratio inf Calmar Ratio 980.045829 Max. Drawdown [%] -0.369958 Avg. Drawdown [%] -0.188506 Max. Drawdown Duration 0 days 01:45:00 Avg. Drawdown Duration 0 days 00:54:00 # Trades 4 Win Rate [%] 100.0 Best Trade [%] 0.87461 Worst Trade [%] 0.136878 Avg. Trade [%] 0.483997 Max. Trade Duration 0 days 02:45:00 Avg. Trade Duration 0 days 01:45:00 Profit Factor NaN Expectancy [%] 0.484381 SQN 3.001196 _strategy SmaCross _equity_curve ... _trades Size EntryB... dtype: object
Stats if ema is removed in next():
Start 2022-06-24 14:00:00 End 2022-06-27 16:45:00 Duration 3 days 02:45:00 Exposure Time [%] 44.666667 Equity Final [$] 1042026904.548 Equity Peak [$] 1044664202.388 Return [%] 4.20269 Buy & Hold Return [%] -2.658726 Return (Ann.) [%] 3705.710087 Volatility (Ann.) [%] 433.024325 Sharpe Ratio 8.557741 Sortino Ratio inf Calmar Ratio 4219.069447 Max. Drawdown [%] -0.878324 Avg. Drawdown [%] -0.376627 Max. Drawdown Duration 0 days 16:45:00 Avg. Drawdown Duration 0 days 02:52:00 # Trades 11 Win Rate [%] 90.909091 Best Trade [%] 1.142592 Worst Trade [%] -0.294099 Avg. Trade [%] 0.398027 Max. Trade Duration 0 days 10:15:00 Avg. Trade Duration 0 days 02:48:00 Profit Factor 15.915333 Expectancy [%] 0.39878 SQN 3.238633 _strategy SmaCross _equity_curve ... _trades Size Entry... dtype: object
The text was updated successfully, but these errors were encountered:
backtesting.py/backtesting/backtesting.py
Lines 1147 to 1150 in 65f54f6
Your "ema" has length 200, so the line-enabled backtest skips the first 199 candles where the indicator is undefined.
Maybe that should be indicated somehow. 🤔
Sorry, something went wrong.
d7eaa45
DOC: Mention that different lengths of indicators affect results
b794e7a
Closes kernc/backtesting.py#674
No branches or pull requests
I have the weird behavior that if I add an exponential moving average in init() the return changes, although the strategy in next() is still the same.
Stats if ema is defined in next():
Stats if ema is removed in next():
The text was updated successfully, but these errors were encountered: