code: def from_dict(data, ctx):
          
  
          data = data.copy()
  
          if data.get('clientExtensions') is not None:
              data['clientExtensions'] = \
                  ctx.transaction.ClientExtensions.from_dict(
                      data['clientExtensions'], ctx
                  )
  
          if data.get('units') is not None:
              data['units'] = ctx.convert_decimal_number(
                  data.get('units')
              )
  
          if data.get('price') is not None:
              data['price'] = ctx.convert_decimal_number(
                  data.get('price')
              )
  
          if data.get('takeProfitOnFill') is not None:
              data['takeProfitOnFill'] = \
                  ctx.transaction.TakeProfitDetails.from_dict(
                      data['takeProfitOnFill'], ctx
                  )
  
          if data.get('stopLossOnFill') is not None:
              data['stopLossOnFill'] = \
                  ctx.transaction.StopLossDetails.from_dict(
                      data['stopLossOnFill'], ctx
                  )
  
          if data.get('trailingStopLossOnFill') is not None:
              data['trailingStopLossOnFill'] = \
                  ctx.transaction.TrailingStopLossDetails.from_dict(
                      data['trailingStopLossOnFill'], ctx
                  )
  
          if data.get('tradeClientExtensions') is not None:
              data['tradeClientExtensions'] = \
                  ctx.transaction.ClientExtensions.from_dict(
                      data['tradeClientExtensions'], ctx
                  )
  
  
          return LimitOrder(**data)
docs: Instantiate a new LimitOrder from a dict (generally from loading a JSON
          response). The data used to instantiate the LimitOrder is a shallow
          copy of the dict passed in, with any complex child types instantiated
          appropriately.