Esempio n. 1
0
    def generate_random_exits(self, prob=None, seed=None, wait=1):
        """Generate exit signals randomly.

        If `prob` is None, see `vectorbt.signals.nb.generate_rand_ex_nb`.
        Otherwise, see `vectorbt.signals.nb.generate_rand_ex_by_prob_nb`.

        ## Example

        After each entry in `sig`, generate exactly one exit:
        ```python-repl
        >>> sig.vbt.signals.generate_random_exits(seed=42)
                        a      b      c
        2020-01-01  False  False  False
        2020-01-02  False   True  False
        2020-01-03   True  False  False
        2020-01-04  False   True  False
        2020-01-05  False  False   True
        ```

        After each entry in `sig` and at each time step, generate exit with 50% probability:
        ```python-repl
        >>> sig.vbt.signals.generate_random_exits(prob=0.5, seed=42)
                        a      b      c
        2020-01-01  False  False  False
        2020-01-02   True  False  False
        2020-01-03  False  False  False
        2020-01-04  False  False  False
        2020-01-05  False  False   True
        ```
        """
        if prob is not None:
            obj, prob = reshape_fns.broadcast(self._obj, prob, keep_raw=[False, True])
            return obj.vbt.wrapper.wrap(nb.generate_rand_ex_by_prob_nb(
                obj.vbt.to_2d_array(), prob, wait, obj.ndim == 2, seed=seed))
        return self.wrapper.wrap(nb.generate_rand_ex_nb(self.to_2d_array(), wait, seed=seed))
Esempio n. 2
0
    def generate_random_exits(
            self,
            prob: tp.Optional[tp.ArrayLike] = None,
            seed: tp.Optional[int] = None,
            wait: int = 1,
            wrap_kwargs: tp.KwargsLike = None) -> tp.SeriesFrame:
        """Generate exit signals randomly.

        If `prob` is None, see `vectorbt.signals.nb.generate_rand_ex_nb`.
        Otherwise, see `vectorbt.signals.nb.generate_rand_ex_by_prob_nb`.

        ## Example

        After each entry in `sig`, generate exactly one exit:
        ```python-repl
        >>> sig.vbt.signals.generate_random_exits(seed=42)
                        a      b      c
        2020-01-01  False  False  False
        2020-01-02  False   True  False
        2020-01-03   True  False  False
        2020-01-04  False   True  False
        2020-01-05  False  False   True
        ```

        After each entry in `sig` and at each time step, generate exit with 50% probability:
        ```python-repl
        >>> sig.vbt.signals.generate_random_exits(prob=0.5, seed=42)
                        a      b      c
        2020-01-01  False  False  False
        2020-01-02   True  False  False
        2020-01-03  False  False  False
        2020-01-04  False  False  False
        2020-01-05  False  False   True
        ```
        """
        if prob is not None:
            obj, prob = reshape_fns.broadcast(self._obj,
                                              prob,
                                              keep_raw=[False, True])
            exits = nb.generate_rand_ex_by_prob_nb(obj.vbt.to_2d_array(),
                                                   prob,
                                                   wait,
                                                   obj.ndim == 2,
                                                   seed=seed)
            return obj.vbt.wrapper.wrap(exits, **merge_dicts({}, wrap_kwargs))
        exits = nb.generate_rand_ex_nb(self.to_2d_array(), wait, seed=seed)
        return self.wrapper.wrap(exits, **merge_dicts({}, wrap_kwargs))