code: def from_dict(data, ctx):
          
  
          data = data.copy()
  
          if data.get('pl') is not None:
              data['pl'] = ctx.convert_decimal_number(
                  data.get('pl')
              )
  
          if data.get('unrealizedPL') is not None:
              data['unrealizedPL'] = ctx.convert_decimal_number(
                  data.get('unrealizedPL')
              )
  
          if data.get('marginUsed') is not None:
              data['marginUsed'] = ctx.convert_decimal_number(
                  data.get('marginUsed')
              )
  
          if data.get('resettablePL') is not None:
              data['resettablePL'] = ctx.convert_decimal_number(
                  data.get('resettablePL')
              )
  
          if data.get('financing') is not None:
              data['financing'] = ctx.convert_decimal_number(
                  data.get('financing')
              )
  
          if data.get('commission') is not None:
              data['commission'] = ctx.convert_decimal_number(
                  data.get('commission')
              )
  
          if data.get('guaranteedExecutionFees') is not None:
              data['guaranteedExecutionFees'] = ctx.convert_decimal_number(
                  data.get('guaranteedExecutionFees')
              )
  
          if data.get('long') is not None:
              data['long'] = \
                  ctx.position.PositionSide.from_dict(
                      data['long'], ctx
                  )
  
          if data.get('short') is not None:
              data['short'] = \
                  ctx.position.PositionSide.from_dict(
                      data['short'], ctx
                  )
  
          return Position(**data)
docs: Instantiate a new Position from a dict (generally from loading a JSON
          response). The data used to instantiate the Position is a shallow copy
          of the dict passed in, with any complex child types instantiated
          appropriately.