Are there any plans to support maintenance margin, margin calls / automatic closing of positions in Backtrader?
I see from the docs, the margin is set as a fixed monetary value. I.e it is a deposit required to open the position. However, in some markets, we have the initial margin required to enter the position (usually a percentage of the value - set by the amount of leverage you are using), followed by a maintenance margin that is needed to keep the position open.
If not I plan to implement it by making a check for the account balance and open position(s) PnL and then seeing if it would result in a margin close out. If so, I will close the position manually and mark it with an appropriate log. However, if there are plans to support it or I have missed something in the docs once again, it would be good to know!
I see there is an
automarginfeature that can be used to automatically calculate the initial margin required. However, I am a bit confused by this line:
Use param automargin * price if automargin > 0
I thought automargin was a boolean value so not sure how it is used in a calculation. Perhaps I am having a dumbo moment :).
Automargin is explained in the reference for
CommInfoBase, for example here Docs - Commissions: Stocks vs Futures
automargin (def: False): Used by the method get_margin to automatically calculate the margin/guarantees needed with the following policy - Use param margin if param automargin evaluates to False - Use param mult * price if automargin < 0 - Use param automargin * price if automargin > 0
At the moment there are no plans for the support of those. It requires some changes to the entire architecture.
Ok thanks for the info. I can implement a work around to support those for now.
My confusion for auto-margin was exactly in the place you have referenced. I thought it should be set as True or False since the default is False. Having re-read it, I guess this means I should set it as a float or int.
It tries to support many combinations:
- Evaluates to
False(it can be
Else it is assumed to be a numeric value
> 0then use it with
< 0then use
mult * price
- Evaluates to