isrising,isfalling

This commit is contained in:
David Brazda
2024-10-17 12:20:57 +02:00
parent 59d526b3e5
commit dab81f0ac1
4 changed files with 41 additions and 3 deletions

View File

@ -39,4 +39,6 @@ forced_exits_window = create_mask_from_window(exits, forced_exit_start, forced_e
exits = exits | forced_exits_window
exits.tail(20)
```
```
`isrising(series,n)`,`isfalling(series, n)` - returns mask where the condition is satisfied of consecutive rising or falling elements

View File

@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name='ttools',
version='0.1.8',
version='0.1.9',
packages=find_packages(),
install_requires=[
'vectorbtpro',

View File

@ -1 +1 @@
from .vbtutils import AnchoredIndicator, create_mask_from_window
from .vbtutils import AnchoredIndicator, create_mask_from_window, isrising, isfalling

View File

@ -4,6 +4,42 @@ import pandas_market_calendars as mcal
from typing import Any
import datetime
def isrising(series: pd.Series, n: int) -> pd.Series:
"""
Checks if a series is rising over a given window size.
Parameters
----------
series : pd.Series
Input series
n : int
Window size
Returns
-------
pd.Series
Boolean mask indicating when the series is falling
"""
return series.rolling(n).apply(lambda x: (x == sorted(x, reverse=True)).all(), raw=False).fillna(False).astype(bool)
def isfalling(series: pd.Series, n: int) -> pd.Series:
"""
Checks if a series is falling over a given window size.
Parameters
----------
series : pd.Series
Input series
n : int
Window size
Returns
-------
pd.Series
Boolean mask indicating when the series is falling
"""
return series.rolling(n).apply(lambda x: (x == sorted(x, reverse=True)).all(), raw=False).fillna(False).astype(bool)
def create_mask_from_window(series: Any, entry_window_opens:int, entry_window_closes:int, use_cal: bool = True):
"""
Accepts series and window range (number of minutes from market start) and returns boolean mask denoting