Giter Site home page Giter Site logo

Comments (10)

edtechre avatar edtechre commented on May 26, 2024 1

You need to cancel all stops after calling sell_all_shares:

def rotate(ctx: ExecContext):
    if ctx.long_pos():
        if ctx.symbol not in pyb.param('top_symbols'):
            ctx.sell_all_shares()
            ctx.cancel_stops(ctx.symbol)
    else:
        target_size = pyb.param('target_size')
        ctx.buy_shares = ctx.calc_target_shares(target_size)
        ctx.score = ctx.indicator('roc_20')[-1]
        ctx.stop_trailing_pct = 5

from pybroker.

edtechre avatar edtechre commented on May 26, 2024

This is likely due to using both a trailing stop and selling all shares in the same strategy. You should only use either sell_all_shares or a stop if your intention is to exit a position, not both at the same time.

However, I will look into this more to see if it makes sense to add logic for the long stop to trigger only if there is a long position.

from pybroker.

none2003 avatar none2003 commented on May 26, 2024

I was intended to try if it's possible to sell all share either not in "top symbols" list or a daily drop greater than trailing stop threshold.

Yes, please investigate further. Much appreciate.

from pybroker.

edtechre avatar edtechre commented on May 26, 2024

Added a check for an existing long/short position before triggering a long/short stop. Fix is in dev and will be merged into v1.1.30.

from pybroker.

none2003 avatar none2003 commented on May 26, 2024

Hi @edtechre,

I saw 1.1.30 added "Checks for existing long/short positions before triggering long/short stops". So I upgraded pybroker to 1.1.30 and re-run "10. Rotational Trading.ipynb" with ctx.stop_trailing_pct = 5, the result seems no difference with using 1.1.29.
image

If the trailing stop sold all long position at trade id#4, and in function "rotate" using "if ctx.long_pos()" prevents over sell, how these short trades happened?

from pybroker.

none2003 avatar none2003 commented on May 26, 2024

You need to cancel all stops after calling sell_all_shares:

def rotate(ctx: ExecContext):
    if ctx.long_pos():
        if ctx.symbol not in pyb.param('top_symbols'):
            ctx.sell_all_shares()
            ctx.cancel_stops(ctx.symbol)
    else:
        target_size = pyb.param('target_size')
        ctx.buy_shares = ctx.calc_target_shares(target_size)
        ctx.score = ctx.indicator('roc_20')[-1]
        ctx.stop_trailing_pct = 5

Thank, this helps a lot! 👍

from pybroker.

none2003 avatar none2003 commented on May 26, 2024

Hi @edtechre,

I noticed the change log of release 1.1.34:

Removes all stops when ctx.sell_all_shares is called.

Does this mean there is no need to manually call "ctx.cancel_stops(ctx.symbol)" after "ctx.sell_all_shares()"?

from pybroker.

edtechre avatar edtechre commented on May 26, 2024

Hi @none2003,

It is equivalent. The only difference is that ctx.cancel_stops(symbol) also cancels stops for any short positions for symbol.

from pybroker.

none2003 avatar none2003 commented on May 26, 2024

Hi @none2003,

It is equivalent. The only difference is that ctx.cancel_stops(symbol) also cancels stops for any short positions for symbol.

Can I understand that while sell_all_shares closes all long positions, it also cancels stops for any long positions? So does it also mean cover_all_shares close all short positions and also cancel stops for any short positions?

from pybroker.

edtechre avatar edtechre commented on May 26, 2024

Thanks for catching, I have also made the change to cover_all_shares.

from pybroker.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.