docstr: A note about cost-basis in zipline: all positions are considered
  to share a cost basis, even if they were executed in different
  transactions with different commission costs, different prices, etc.
  
  Due to limitations about how zipline handles positions, zipline will
  currently spread an externally-delivered commission charge across
  all shares in a position.
docstr_tok: ["A","note","about","cost-basis","in","zipline",":","all","positions","are","considered","to","share","a","cost","basis",",","even","if","they","were","executed","in","different","transactions","with","different","commission","costs",",","different","prices",",","etc",".","Due","to","limitations","about","how","zipline","handles","positions",",","zipline","will","currently","spread","an","externally-delivered","commission","charge","across","all","shares","in","a","position","."]
code: def adjust_commission_cost_basis(self, asset, cost):
      """
      A note about cost-basis in zipline: all positions are considered
      to share a cost basis, even if they were executed in different
      transactions with different commission costs, different prices, etc.
  
      Due to limitations about how zipline handles positions, zipline will
      currently spread an externally-delivered commission charge across
      all shares in a position.
      """
  
      if asset != self.asset:
          raise Exception(
              "Updating a commission for a different asset?"
          )
      if cost == 0.0:
          return
  
      # If we no longer hold this position, there is no cost basis to
      # adjust.
      if self.amount == 0:
          return
  
      # We treat cost basis as the share price where we have broken even.
      # For longs, commissions cause a relatively straight forward increase
      # in the cost basis.
      #
      # For shorts, you actually want to decrease the cost basis because you
      # break even and earn a profit when the share price decreases.
      #
      # Shorts are represented as having a negative `amount`.
      #
      # The multiplication and division by `amount` cancel out leaving the
      # cost_basis positive, while subtracting the commission.
  
      prev_cost = self.cost_basis * self.amount
      if isinstance(asset, Future):
          cost_to_use = cost / asset.price_multiplier
      else:
          cost_to_use = cost
      new_cost = prev_cost + cost_to_use
      self.cost_basis = new_cost / self.amount
  
file_path: zipline/zipline/finance/position.py
imports: from __future__ import division
  from math import copysign
  import numpy
  import logbook
  from zipline.assets import Future
  import zipline.protocol
label_desc: Use image node_id 8 for calling the Position obj's underlying member method code with example usage: obj.adjust_commission_cost_basis(asset, cost) without return types