Skip to content

Commit

Permalink
Closes #35 adding getpositionbyname, getpositionsbyname, getpositions…
Browse files Browse the repository at this point in the history
… and the associated properties without "get"
  • Loading branch information
mementum committed Nov 17, 2015
1 parent ef4ccad commit 1845762
Showing 1 changed file with 50 additions and 2 deletions.
52 changes: 50 additions & 2 deletions backtrader/strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
import itertools
import operator

from .utils.py3 import filter, map, with_metaclass, string_types, keys
from .utils.py3 import (filter, map, with_metaclass, string_types, keys,
iteritems)

from .broker import BrokerBack
from .lineiterator import LineIterator, StrategyBase
Expand Down Expand Up @@ -494,10 +495,57 @@ def getposition(self, data=None, broker=None):
A property ``position`` is also available
'''
data = data or self.datas[0]
return self.broker.getposition(data)
broker = broker or self.broker
return broker.getposition(data)

position = property(getposition)

def getpositionbyname(self, name=None, broker=None):
'''
Returns the current position for a given name in a given broker.
If both are None, the main data and the default broker will be used
A property ``positionbyname`` is also available
'''
data = self.datas[0] if not name else self.getdatabyname(name)
broker = broker or self.broker
return broker.getposition(data)

positionbyname = property(getpositionbyname)

def getpositions(self, broker=None):
'''
Returns the current by data positions directly from the broker
If the given ``broker`` is None, the default broker will be used
A property ``positions`` is also available
'''
broker = broker or self.broker
return broker.positions

positions = property(getpositions)

def getpositionsbyname(self, broker=None):
'''
Returns the current by name positions directly from the broker
If the given ``broker`` is None, the default broker will be used
A property ``positionsbyname`` is also available
'''
broker = broker or self.broker
positions = broker.positions

posbyname = collections.OrderedDict()
for name, data in iteritems(self.env.datasbyname):
posbyname[name] = positions[data]

return posbyname

positionsbyname = property(getpositionsbyname)

def setsizer(self, sizer):
'''
Replace the default (fixed stake) sizer
Expand Down

0 comments on commit 1845762

Please sign in to comment.