For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/

Sell all value in the end



  • Hey guys,

    I'm using a custom strategy and, when I execute cerebro.broker.setcash(), it adds me cash PLUS value (what is value, actually? amount of stocks I'm trading?).

    In the end, I would really like to get the pure amount in cash. If I get it right, I have to sell all the value right before Cerebro stops.

    How can I do this?

    Thanks!



  • For stocks in case if you don't use leverage:
    Broker Value = Cash + Open Positions
    Value at the end = Cash + Open Positions based on last close price


  • administrators

    It is unclear why and when you are using setcash. Trying to read between the lines it would seem you do it during the backtesting phase and not before starting it.

    During backtesting you control the cash reserves with add_cash. See Docs - Broker

    Selling all at the end is tricky. See why:

    • The framework doesn't know in advance that backtesting is going to end. It is unknown at which point a data feed will state that it has come to the end. This is so, because some data feeds are dynamic and some others hook up to live data

    • Once you have hit the end ... you cannot sell. Because when you see a bar, the bar has already happened and you cannot progress to the next bar for broker evaluation.

    Wit that in mind:

    • You need to issue a sell order during the last bar before the actual last one.

    You can use:

    • self.close (See Docs - Strategy and the right stake will be calculated automatically


  • @backtrader thank you for the reply.

    I'm executing "setcash" before backtest starts.

    So this is how it looks like:

    1. setcash(1000)

    2. bot says I have 1000 cash AND 1000 "value" (why? I did not add any value manually)

    3. in the end of the period, I see some cash AND value

    The thing is - to determine the profit rate, I have to calculate things in cash. Because, in the end of the backtest, I may have 100 in cash but 2000 in "value". And, if I change some params, I may have 1500 in cash and 500 in "value".

    How can I know what backtest was more profitable? The first one where cash was low but value was high? Or the second one where I had more cash and less value?

    Honestly, this is confusing. If I (as investor) had put some cash into business, I would like to know the profit in cash (that probably means, I have to sell all "value" at the end?). So there has to be a way to determine the pure cash value. I'm pretty sure there is, but I'm just missing something.


  • administrators

    @andreas-lapueros said in Sell all value in the end:

    1. bot says I have 1000 cash AND 1000 "value" (why? I did not add any value manually)

    The value of your portfolio is 1000 (all in cash)

    @andreas-lapueros said in Sell all value in the end:

    1. in the end of the period, I see some cash AND value

    Yes and as pointed out by @ab_trader, your total value will include the cash reserves you haven't invested in any asset.

    @andreas-lapueros said in Sell all value in the end:

    How can I know what backtest was more profitable?

    The one with a higher value. But it may still have open positions which may end up losing.

    @andreas-lapueros said in Sell all value in the end:

    Honestly, this is confusing. If I (as investor) had put some cash into business, I would like to know the profit in cash

    Apparently nobody else sees a problem when comparing the final value with the starting value to understand if a system is profitable (which doesn't preclude the use of the many other ways of seeing if a strategy is delivering profit as expected, including ratios like Sharpe, Calmar or Profit Factor)

    The value includes in both cases your cash and the monetary value of any position (which in practical terms is like cash)

    If you really want to do it with cash, sell everything and compare the starting cash amounts and ending cash amounts.

    @andreas-lapueros said in Sell all value in the end:

    So there has to be a way to determine the pure cash value

    If you really don't like value (which includes monetary value at a given point in time), then no, unless you sell everything and your liquidity is 100%.