FX Option - The query for a Fx barrier does not work due to a JSON Serialization error

Hello,

I'm trying to execute a IPA query and it does not work.

I got this error: ""

Here is the code


import refinitiv.data as rd
import refinitiv.data.content.ipa.financial_contracts as rdf
from refinitiv.data.content.ipa.financial_contracts import option

rd.open_session()

response = option.Definition(
instrument_tag = "EURGBP_1M",
underlying_type = option.UnderlyingType.FX,
underlying_definition = option.FxUnderlyingDefinition("EURGBP"),
barrier_definition = option.FxBarrierDefinition(barrier_mode = "American",
in_or_out = "Out",
up_or_down = "Down",
level = 0.85449),
tenor = "1M",
call_put = "Call",
exercise_style = "EURO",
strike = 0.8597,
notional_amount = 1000000,
notional_ccy = "EUR",
pricing_parameters = option.PricingParameters(valuation_date = "2023-09-15T00:00:00Z")
).get_data()

response.data.df


here is the error got :

1694808977978.png


Can someone has a look ?

Thanks:


Note: The same error occurs when trying to use a FxBinaryDefinition

Welcome!

It looks like you're new here. Sign in or register to get started.

Best Answer

  • wasin.w
    wasin.w admin
    Answer ✓

    Hello @yaokoffi.kouassi

    I can replicate the issue on Codebook (Refinitiv Data Library for Python version 1.2.0) and a standalone Jupyter Notebook using Refinitiv Data Library for Python version 1.3.1.

    However, the latest version of the library is 1.4.0 (https://pypi.org/project/refinitiv-data/1.4.0/). I have tried it on a standalone Jupyter notebook with your code. It works fine.

    result.png

    It seems the issue has been fixed in version 1.4.0. If you (or the client) use a standalone Jupyter notebook, I highly recommend upgrading the library.

    pip install refinitiv-data==1.4.0


Answers

  • Hello Wasin and thank you for your reply.

    Unfortunately, the customer palns to use the script within Codebook.

    Do we know whne Codebook will use the version 1.4.0?

    Thanks

  • Jirapongse
    Jirapongse ✭✭✭✭✭

    @yaokoffi.kouassi

    The workaround is using the following code.

    import refinitiv.data as rd
    import refinitiv.data.content.ipa.financial_contracts as rdf
    from refinitiv.data.content.ipa.financial_contracts import option
     
    rd.open_session()
     
    response = option.Definition(
        instrument_tag = "EURGBP_1M",
        underlying_type = option.UnderlyingType.FX,
        underlying_definition = option.FxUnderlyingDefinition("EURGBP"),
        barrier_definition = {'barrierMode': 'American', 'inOrOut': 'Out', 'upOrDown': 'Down', 'level': 0.85449},
        tenor = "1M",
        call_put = "Call",
        exercise_style = "EURO",
        strike = 0.8597,
        notional_amount = 1000000,
        notional_ccy = "EUR",
        pricing_parameters = option.PricingParameters(valuation_date = "2023-09-15T00:00:00Z")
    ).get_data()
     
    response.data.df

    1695023376486.png

  • Hello @yaokoffi.kouassi

    I suggest you contact the Codebook team about when will the app upgrade its libraries.

  • Hi @yaokoffi.kouassi

    Customer can also use a direct request to an endpoint:

    import refinitiv.data as rd
    import pandas as pd
    rd.open_session()

    request = rd.delivery.endpoint_request.Definition(
    method=rd.delivery.endpoint_request.RequestMethod.POST,
    url='https://api.refinitiv.com/data/quantitative-analytics/v1/financial-contracts',
    body_parameters={"universe": [
    {
    "instrumentType": "Option",
    "instrumentDefinition": {
    "instrumentTag": "EURGBP_1M",
    "underlyingType": "FX",
    "underlyingDefinition": {
    "fxCrossCode": "EURGBP"
    },
    "barrierDefinition": {
    "level": 0.85449,
    "barrierMode": "American",
    "inOrOut": "Out",
    "upOrDown": "Down"
    },
    "tenor": "1M",
    "callPut": "Call",
    "exerciseStyle": "EURO",
    "strike": 0.8597,
    "notionalAmount": 1000000,
    "notionalCcy": "EUR"
    },
    "pricingParameters": {
    "valuationDate": "2023-09-15"
    }
    }
    ]
    })
    response = request.get_data()
    names = [i["name"] for i in response.data.raw["headers"]]
    pd.DataFrame(response.data.raw["data"], columns=names)
  • Thanks guys for your reply.

    The customer will use the script in Codebook.

    I've contacted Codebook team to have a date for the release and I will inform the client.


Welcome!

It looks like you're new here. Sign in or register to get started.

Welcome!

It looks like you're new here. Sign in or register to get started.