
self = <test_wyckoff_stop_and_profit_lock.TestWyckoffTighterHardStop object at 0x1203a2a50>

    def test_wyckoff_stops_at_minus_1_5pct_fixed_no_atr(self):
>       job, check = _job_and_checker(source="wyckoff_spring", entry_price=10.0)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/services/test_wyckoff_stop_and_profit_lock.py:34: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/services/test_wyckoff_stop_and_profit_lock.py:19: in _job_and_checker
    from rtrader.services.channel_scalp_service import (
rtrader/services/channel_scalp_service.py:3253: in <module>
    _ensure_ray_task()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    def _ensure_ray_task():
        global _ray_evaluate_symbol
        if _ray_evaluate_symbol is not None:
            return
        import ray
    
>       @ray.remote(num_cpus=1, max_retries=2, retry_exceptions=True)
         ^^^^^^^^^^
E       AttributeError: module 'ray' has no attribute 'remote'

rtrader/services/channel_scalp_service.py:3223: AttributeError
