Skip to content

dataframe ¤

signal_condiction ¤

signal_condiction(
    dataframe: DataFrame,
    *condictions: list[list[Series | Any]],
    name: str,
    value: int | float = np.nan,
    inplace: bool = False,
    plot: bool | list[str] = False,
    plot_type: Literal["line", "mark"] = "line",
    plot_kwargs: dict | None = None,
    **kwargs
) -> Series | DataFrame

Define a signal with multiple condiction

Parameters:

  • dataframe (DataFrame) –

    description

  • *condictions (list[list[Series | Any]], default: () ) –

    Pairs of condiction [<pandas.Series condiction>, <value>]

  • name (str) –

    Name of signal, column name when add to DataFrame with inplace=True.

  • value (int, default: nan ) –

    Default value when condiction is not matched. Defaults to 0.

  • inplace (bool, default: False ) –

    description. Defaults to False.

  • plot (bool | list, default: False ) –

    description. Defaults to False.

  • plot_type (Literal[&quot;line&quot;, &quot;mark&quot;], default: 'line' ) –

    description. Defaults to "line".

  • plot_kwargs (dict | None, default: None ) –

    description. Defaults to None.

Usage
df.i.signal_condiction(
    [df["close"] > df["open"], 100],
    [df["close"] < df["open"], -100],
    name="cdl_direction",
    inplace=True,
    plot=True,
    plot_kwargs=dict(color="green", width=5),
)

Raises:

Returns:

  • Series | DataFrame

    pd.Series | pd.DataFrame: description

Source code in lettrade/indicator/dataframe.py
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
def signal_condiction(
    dataframe: pd.DataFrame,
    *condictions: list[list[pd.Series | Any]],
    name: str,
    value: int | float = np.nan,
    inplace: bool = False,
    plot: bool | list[str] = False,
    plot_type: Literal["line", "mark"] = "line",
    plot_kwargs: dict | None = None,
    **kwargs,
) -> pd.Series | pd.DataFrame:
    """Define a signal with multiple condiction

    Args:
        dataframe (pd.DataFrame): _description_
        *condictions (list[list[pd.Series | Any]]): Pairs of condiction [`<pandas.Series condiction>`, `<value>`]
        name (str): Name of signal, column name when add to DataFrame with inplace=True.
        value (int, optional): Default value when condiction is not matched. Defaults to 0.
        inplace (bool, optional): _description_. Defaults to False.
        plot (bool | list, optional): _description_. Defaults to False.
        plot_type (Literal[&quot;line&quot;, &quot;mark&quot;], optional): _description_. Defaults to "line".
        plot_kwargs (dict | None, optional): _description_. Defaults to None.

    Usage:
        ```python
        df.i.signal_condiction(
            [df["close"] > df["open"], 100],
            [df["close"] < df["open"], -100],
            name="cdl_direction",
            inplace=True,
            plot=True,
            plot_kwargs=dict(color="green", width=5),
        )
        ```

    Raises:
        RuntimeError: _description_

    Returns:
        pd.Series | pd.DataFrame: _description_
    """
    if __debug__:
        if not isinstance(dataframe, pd.DataFrame):
            raise RuntimeError(
                f"dataframe type '{type(dataframe)}' "
                "is not instance of pandas.DataFrame"
            )
        if plot and not inplace:
            raise RuntimeError("Cannot plot when inplace=False")

    s = pd.Series(value, index=dataframe.index, name=name, **kwargs)
    for condiction in condictions:
        s.loc[condiction[0]] = condiction[1]

    if inplace:
        dataframe[name] = s

        # Plot
        if plot:
            if plot_kwargs is None:
                plot_kwargs = dict()

            plot_kwargs.update(series=name, name=name)

            from lettrade.indicator.plot import IndicatorPlotter
            from lettrade.plot.plotly import plot_line, plot_mark

            plotter = plot_mark if plot_type == "mark" else plot_line
            IndicatorPlotter(dataframe=dataframe, plotter=plotter, **plot_kwargs)

        return dataframe

    return s

signal_direction ¤

signal_direction(
    dataframe: DataFrame,
    up: Series,
    down: Series,
    name: str,
    value: int = 0,
    value_up: int = 100,
    value_down: int = -100,
    inplace: bool = False,
    plot: bool | list[str] = False,
    plot_type: Literal["line", "mark"] = "line",
    plot_kwargs: dict | None = None,
    **kwargs
) -> Series | DataFrame

Define a signal with 2 direction Up and Down with fixed value

Parameters:

  • dataframe (DataFrame) –

    description

  • up (Series) –

    description

  • down (Series) –

    description

  • name (str) –

    Name of signal, column name when add to DataFrame with inplace=True.

  • value (int, default: 0 ) –

    Default value when condiction is not matched. Defaults to 0.

  • value_up (int, default: 100 ) –

    description. Defaults to 100.

  • value_down (int, default: -100 ) –

    description. Defaults to -100.

  • inplace (bool, default: False ) –

    Whether to add to the DataFrame and return DataFrame rather than return result. Defaults to False.

  • plot (bool | list, default: False ) –

    description. Defaults to False.

  • plot_type (Literal[&quot;line&quot;, &quot;mark&quot;], default: 'line' ) –

    description. Defaults to "line".

  • plot_kwargs (dict | None, default: None ) –

    description. Defaults to None.

Returns:

  • Series | DataFrame

    pd.Series | pd.DataFrame: description

Source code in lettrade/indicator/dataframe.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def signal_direction(
    dataframe: pd.DataFrame,
    up: pd.Series,
    down: pd.Series,
    name: str,
    value: int = 0,
    value_up: int = 100,
    value_down: int = -100,
    inplace: bool = False,
    plot: bool | list[str] = False,
    plot_type: Literal["line", "mark"] = "line",
    plot_kwargs: dict | None = None,
    **kwargs,
) -> pd.Series | pd.DataFrame:
    """Define a signal with 2 direction Up and Down with fixed value

    Args:
        dataframe (pd.DataFrame): _description_
        up (pd.Series): _description_
        down (pd.Series): _description_
        name (str): Name of signal, column name when add to DataFrame with inplace=True.
        value (int, optional): Default value when condiction is not matched. Defaults to 0.
        value_up (int, optional): _description_. Defaults to 100.
        value_down (int, optional): _description_. Defaults to -100.
        inplace (bool, optional): Whether to add to the DataFrame and return DataFrame rather than return result. Defaults to False.
        plot (bool | list, optional): _description_. Defaults to False.
        plot_type (Literal[&quot;line&quot;, &quot;mark&quot;], optional): _description_. Defaults to "line".
        plot_kwargs (dict | None, optional): _description_. Defaults to None.

    Returns:
        pd.Series | pd.DataFrame: _description_
    """
    return signal_condiction(
        dataframe,
        [up, value_up],
        [down, value_down],
        name=name,
        value=value,
        inplace=inplace,
        plot=plot,
        plot_type=plot_type,
        plot_kwargs=plot_kwargs,
        **kwargs,
    )