From 353a76033088421922f6c8b264c647bfe51b1443 Mon Sep 17 00:00:00 2001 From: Graeme Holliday Date: Sat, 29 Jun 2024 23:20:39 -0500 Subject: [PATCH 1/4] migrate to tastytrade==7.7 --- .github/FUNDING.yml | 3 + .github/workflows/python-app.yml | 12 +- .readthedocs.yaml | 6 - Makefile | 18 +- PULL_REQUEST_TEMPLATE.md | 12 -- README.md | 31 +-- docs/Makefile | 20 -- docs/conf.py | 28 --- docs/index.rst | 20 -- docs/make.bat | 35 ---- etc/{twcli.cfg => ttcli.cfg} | 0 requirements.txt | 20 +- setup.py | 33 +-- tests/data/transactions.json | 1 - tests/test_pairs.py | 32 --- tests/test_plot.py | 60 ------ tests/test_quant.py | 22 -- {twcli => ttcli}/__init__.py | 0 {twcli => ttcli}/app.py | 11 +- ttcli/option.py | 332 ++++++++++++++++++++++++++++++ ttcli/utils.py | 119 +++++++++++ twcli/future/__init__.py | 0 twcli/future/commands.py | 36 ---- twcli/option/__init__.py | 0 twcli/option/commands.py | 338 ------------------------------- twcli/option/option.py | 31 --- twcli/pairs/__init__.py | 0 twcli/pairs/commands.py | 69 ------- twcli/pairs/sizing.py | 113 ----------- twcli/plot/__init__.py | 0 twcli/plot/commands.py | 57 ------ twcli/plot/plot.py | 306 ---------------------------- twcli/quant/__init__.py | 0 twcli/quant/models.py | 146 ------------- twcli/utils.py | 139 ------------- 35 files changed, 499 insertions(+), 1551 deletions(-) create mode 100644 .github/FUNDING.yml delete mode 100644 .readthedocs.yaml delete mode 100644 PULL_REQUEST_TEMPLATE.md delete mode 100644 docs/Makefile delete mode 100644 docs/conf.py delete mode 100644 docs/index.rst delete mode 100644 docs/make.bat rename etc/{twcli.cfg => ttcli.cfg} (100%) delete mode 100644 tests/data/transactions.json delete mode 100644 tests/test_pairs.py delete mode 100644 tests/test_plot.py delete mode 100644 tests/test_quant.py rename {twcli => ttcli}/__init__.py (100%) rename {twcli => ttcli}/app.py (61%) create mode 100644 ttcli/option.py create mode 100644 ttcli/utils.py delete mode 100644 twcli/future/__init__.py delete mode 100644 twcli/future/commands.py delete mode 100644 twcli/option/__init__.py delete mode 100644 twcli/option/commands.py delete mode 100644 twcli/option/option.py delete mode 100644 twcli/pairs/__init__.py delete mode 100644 twcli/pairs/commands.py delete mode 100644 twcli/pairs/sizing.py delete mode 100644 twcli/plot/__init__.py delete mode 100644 twcli/plot/commands.py delete mode 100644 twcli/plot/plot.py delete mode 100644 twcli/quant/__init__.py delete mode 100644 twcli/quant/models.py delete mode 100644 twcli/utils.py diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..fc81012 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# If you want to support this project, you can just sign up using my referral code! +github: tastyware +custom: ['https://start.tastytrade.com/#/login?referralCode=YYGKBEQ2EX'] diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index dc59586..45d873a 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -13,17 +13,17 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up Python 3.9 + - name: Set up Python 3.12 uses: actions/setup-python@v2 with: - python-version: 3.9 + python-version: 3.12 - name: Install dependencies run: | python -m pip install --upgrade pip if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Sorting... - run: isort --check --diff twcli/ tests/ + run: isort --check --diff ttcli/ - name: Linting... - run: flake8 --count --show-source --statistics --ignore=E501 twcli/ tests/ - - name: Testing... - run: python -m pytest --cov=src --cov-report=term-missing tests/ + run: flake8 --count --show-source --statistics ttcli/ + - name: Type checking... + run: mypy -p ttcli/ diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index 17abe24..0000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,6 +0,0 @@ -version: 2 - -build: - os: "ubuntu-20.04" - tools: - python: "3.8" diff --git a/Makefile b/Makefile index 6cee18d..e516897 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,11 @@ -.PHONY: clean venv test - -clean: - find . -name '*.py[co]' -delete +.PHONY: venv lint venv: - python -m venv --prompt 'twcli' env - env/bin/pip install -r requirements.txt + python -m venv .venv + .venv/bin/pip install -r requirements.txt + .venv/bin/pip install -e . -test: - isort --check --diff twcli/ tests/ - flake8 --count --show-source --statistics --ignore=E501 twcli/ tests/ - python -m pytest --cov=twcli --cov-report=term-missing tests/ +lint: + isort --check --diff ttcli/ + flake8 --count --show-source --statistics ttcli/ + mypy -p ttcli/ diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 6e5cba6..0000000 --- a/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,12 +0,0 @@ -# Problem addressed - - - -# Solution - - - -# Checklist - -- PR commits have been squashed -- All tests pass diff --git a/README.md b/README.md index 1da502e..9b4da1a 100644 --- a/README.md +++ b/README.md @@ -7,28 +7,25 @@ An easy-to-use command line interface for Tastyworks! ## Installation ``` -$ pip install tastyworks-cli +$ pip install tastytrade-cli ``` ## Usage Available commands: ``` -twcli option buy, sell, and analyze options -twcli plot chart your portfolio's net liquidity or profit/loss over time +tt option buy, sell, and analyze options ``` Unavailable commands pending development: ``` -twcli crypto buy, sell, and analyze cryptocurrencies -twcli future buy, sell, and analyze futures -twcli order view, replace, and cancel orders -twcli pairs analyze and size pairs trades -twcli portfolio view statistics and risk metrics for your portfolio -twcli quant mathematical and statistical analysis -twcli stock buy, sell, and analyze stock -twcli watchlist view current prices and other data for symbols in your watchlists +tt crypto buy, sell, and analyze cryptocurrencies +tt future buy, sell, and analyze futures +tt stock buy, sell, and analyze stock +tt order view, replace, and cancel orders +tt pf (portfolio) view statistics and risk metrics for your portfolio +tt wl (watchlist) view current prices and other data for symbols in your watchlists ``` -For more options, run `twcli --help` or `twcli --help`. +For more options, run `tt --help` or `tt --help`. ## Development/Contributing @@ -37,18 +34,12 @@ This project includes a number of helpers in the `Makefile` to streamline common Creating a virtualenv for development: ``` $ make venv -$ source env/bin/activate -``` - -Install the package: - -``` -$ pip install -e . +$ source .venv/bin/activate ``` It's usually a good idea to make sure you're passing tests locally before submitting a PR: ``` -$ make test +$ make lint ``` If you have a feature suggestion, find a bug, or would like to contribute, feel free to open an issue or create a pull request. diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index d4bb2cb..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 085033f..0000000 --- a/docs/conf.py +++ /dev/null @@ -1,28 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information - -project = 'tastyworks-cli' -copyright = '2022, Graeme Holliday' -author = 'Graeme Holliday' -release = '1.0.4' - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -extensions = [] - -templates_path = ['_templates'] -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - - - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -html_theme = 'alabaster' -html_static_path = ['_static'] diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index d69065b..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. tastyworks-cli documentation master file, created by - sphinx-quickstart on Tue Sep 13 23:05:49 2022. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to tastyworks-cli's documentation! -========================================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 32bb245..0000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "" goto help - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/etc/twcli.cfg b/etc/ttcli.cfg similarity index 100% rename from etc/twcli.cfg rename to etc/ttcli.cfg diff --git a/requirements.txt b/requirements.txt index 6197a4e..012be0f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,14 +1,6 @@ -git+https://github.com/Graeme22/aiocometd@0.4.5.3#egg=aiocometd -anyio==3.5.0 -asyncclick==8.0.3.2 -flake8==4.0.1 -isort==5.10.1 -matplotlib==3.5.1 -pandas==1.4.0 -petl==1.7.7 -pytest==7.0.0 -pytest-cov==3.0.0 -python-dateutil==2.8.2 -QuantLib==1.25 -rich==11.1.0 -tastyworks-api==4.2.2 +asyncclick==8.1.7.2 +flake8==7.1.0 +isort==5.13.2 +mypy==1.10.1 +tastytrade==7.7 +rich==13.7.1 \ No newline at end of file diff --git a/setup.py b/setup.py index 7312a73..56ec36f 100644 --- a/setup.py +++ b/setup.py @@ -1,40 +1,29 @@ -import os - from setuptools import find_packages, setup -from twcli.utils import VERSION - - f = open('README.md', 'r') LONG_DESCRIPTION = f.read() f.close() setup( - name='tastyworks-cli', - version=VERSION, - description='An easy-to-use command line interface for Tastyworks!', + name='tastytrade-cli', + version='2.0', + description='An easy-to-use command line interface for Tastytrade!', long_description=LONG_DESCRIPTION, long_description_content_type='text/markdown', author='Graeme Holliday', author_email='graeme.holliday@pm.me', - url='https://github.com/Graeme22/tastyworks-cli/', + url='https://github.com/tastyware/tastytrade-cli', license='MIT', install_requires=[ - 'anyio>=3.5.0', - 'asyncclick>=8.0.3.2', - 'matplotlib>=3.5.1', - 'pandas>=1.4.0', - 'petl>=1.7.7', - 'python-dateutil>=2.8.2', - 'rich>=11.1.0', - 'QuantLib>=1.25', - 'tastyworks-api>=4.2.2', + 'asyncclick>=8.1.7.2', + 'rich>=13.7.1', + 'tastytrade>=7.7', ], - data_files = [('etc', ['etc/twcli.cfg'])], - packages=find_packages(exclude=['ez_setup', 'tests*']), + data_files = [('etc', ['etc/ttcli.cfg'])], + packages=find_packages(exclude=['ez_setup']), include_package_data=True, entry_points=""" [console_scripts] - twcli = twcli.app:main - """, + tt = ttcli.app:main + """ ) diff --git a/tests/data/transactions.json b/tests/data/transactions.json deleted file mode 100644 index e28795a..0000000 --- a/tests/data/transactions.json +++ /dev/null @@ -1 +0,0 @@ -[{"executed-at": "2020-01-30T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "2222.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-01-31T15:07:42.096+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 200320P00009000", "value": "13.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-01T14:27:09.685+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-02-03T18:41:02.157+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "USO 200320P00009500", "value": "21.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-04T16:48:07.837+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FCX 200320P00009000", "value": "4.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-02-04T18:21:31.592+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 200320P00011000", "value": "27.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-05T17:18:31.669+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "F 200320P00008000", "value": "19.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-05T19:22:04.530+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AA 200320P00014000", "value": "33.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-06T18:56:08.927+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 200320P00008000", "value": "18.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-08T14:03:49.818+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-02-12T16:49:31.781+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "USO 200320P00009500", "value": "9.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-02-12T18:52:03.501+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "TEVA 200320P00012000", "value": "31.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-12T19:54:17.074+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "F 200320P00008000", "value": "17.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-02-14T18:32:45.602+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200320P00025000", "value": "24.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-15T14:37:04.792+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-02-19T18:29:40.989+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AA 200320P00014000", "value": "12.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-02-19T18:58:45.460+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "AMD 200320P00050000", "value": "61.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-02-19T18:58:45.584+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AMD 200320P00052500", "value": "103.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-20T16:06:26.582+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FCX 200320P00011000", "value": "12.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-02-22T14:56:02.972+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-02-24T18:29:50.720+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 200417P00010000", "value": "34.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-02-27T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "1000.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-03-02T19:38:04.296+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200417P00013000", "value": "60.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-06T18:38:33.668+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "TEVA 200320P00012000", "value": "221.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-06T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "1000.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-03-07T15:08:04.254+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-03-10T16:57:43.614+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DAL 200417C00052500", "value": "139.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-10T16:57:43.710+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "DAL 200417C00055000", "value": "89.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-11T16:14:41.038+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DIA 200417C00269000", "value": "345.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-11T16:14:41.120+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "DIA 200417C00271000", "value": "300.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-11T18:09:10.701+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SBUX 200417C00077500", "value": "178.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-11T18:09:10.789+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SBUX 200417C00080000", "value": "117.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-12T14:29:47.690+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DIA 200417C00269000", "value": "149.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-12T14:29:47.818+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "DIA 200417C00271000", "value": "128.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-12T15:08:18.784+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SBUX 200417C00077500", "value": "82.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-12T15:08:18.985+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SBUX 200417C00080000", "value": "53.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-12T16:43:19.703+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DAL 200417C00052500", "value": "54.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-12T16:43:19.921+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "DAL 200417C00055000", "value": "34.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-12T16:50:33.804+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 200417C00294000", "value": "233.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-12T16:50:33.926+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 200417C00292000", "value": "276.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-12T17:05:07.594+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SBUX 200417C00077500", "value": "129.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-12T17:05:07.679+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SBUX 200417C00075000", "value": "191.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-12T17:21:40.522+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200417C00020000", "value": "284.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-12T17:21:40.649+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "AAL 200417C00022000", "value": "242.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-16T14:45:46.520+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SBUX 200417C00075000", "value": "123.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-16T14:45:46.647+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SBUX 200417C00077500", "value": "77.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-16T17:29:46.214+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 200417C00292000", "value": "266.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-16T17:29:46.326+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 200417C00294000", "value": "226.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-17T19:44:20.722+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "BAC 200515P00013000", "value": "78.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-17T19:54:52.122+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AMD 200320P00052500", "value": "1074.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-17T19:54:52.331+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "AMD 200320P00050000", "value": "829.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": true}, {"executed-at": "2020-03-18T17:50:59.433+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200417C00020000", "value": "82.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-18T17:50:59.532+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "AAL 200417C00022000", "value": "56.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-18T18:57:41.867+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200417P00025000", "value": "1419.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.082", "is-closing": false}, {"executed-at": "2020-03-18T18:57:41.951+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200320P00025000", "value": "1389.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-20T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": null, "symbol": "X 200320P00008000", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-03-20T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": "Buy to Open", "symbol": "X", "value": "800.0", "value-effect": "Debit", "quantity": "100.0", "commission": null, "clearing-fees": "5.0", "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-03-23T14:32:37.045+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 200515C00007000", "value": "48.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-23T17:00:52.048+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "USO 200515P00004000", "value": "73.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-23T17:20:45.744+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515P00013000", "value": "470.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-03-23T17:20:45.813+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200417P00013000", "value": "410.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-24T14:45:30.556+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200417P00025000", "value": "1220.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-24T17:24:15.679+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 200515C00272000", "value": "418.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-24T17:24:15.757+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 200515C00270000", "value": "461.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-03-25T17:59:11.859+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 200515C00132000", "value": "195.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-25T17:59:11.925+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 200515C00130000", "value": "237.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-25T19:01:35.039+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "MU 200417P00034000", "value": "96.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-25T19:01:35.108+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "MU 200417C00052500", "value": "118.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-25T19:01:35.175+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "MU 200417P00036500", "value": "140.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-25T19:01:35.249+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "MU 200417C00050000", "value": "177.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-25T19:14:45.262+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SHY", "value": "173.19", "value-effect": "Debit", "quantity": "2.0", "commission": "0.0", "clearing-fees": "0.002", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-03-26T15:49:16.456+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SHY", "value": "259.92", "value-effect": "Debit", "quantity": "3.0", "commission": "0.0", "clearing-fees": "0.003", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-03-26T16:03:59.996+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "BAC 200515P00013000", "value": "39.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-26T16:12:57.004+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "MU 200417P00036500", "value": "84.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-26T16:12:57.072+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "MU 200417C00050000", "value": "135.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-26T16:12:57.140+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "MU 200417P00034000", "value": "52.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-26T16:12:57.221+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "MU 200417C00052500", "value": "80.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-03-26T16:48:39.061+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515C00022000", "value": "152.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-26T16:52:07.286+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SHY", "value": "433.3", "value-effect": "Debit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-03-26T16:58:03.681+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "BAC 200515C00029000", "value": "28.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-26T16:58:03.746+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "BAC 200515P00015000", "value": "58.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-27T15:52:11.695+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515C00019000", "value": "155.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-27T15:52:11.788+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515C00022000", "value": "90.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-03-27T17:59:54.034+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SHY", "value": "173.18", "value-effect": "Debit", "quantity": "2.0", "commission": "0.0", "clearing-fees": "0.002", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-03-30T19:15:43.325+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SHY", "value": "173.343", "value-effect": "Credit", "quantity": "2.0", "commission": "0.0", "clearing-fees": "0.002", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.01", "is-closing": true}, {"executed-at": "2020-03-30T19:16:51.297+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "USO 200515P00003000", "value": "33.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-03-31T15:39:33.532+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SHY", "value": "433.602", "value-effect": "Credit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.011", "is-closing": true}, {"executed-at": "2020-03-31T15:40:52.875+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "HYG", "value": "388.0", "value-effect": "Debit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-03-31T16:05:20.277+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 200515C00283000", "value": "524.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-03-31T16:05:20.346+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 200515C00285000", "value": "455.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-03-31T16:06:17.259+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "HYG", "value": "77.6", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.01", "is-closing": true}, {"executed-at": "2020-03-31T16:06:17.347+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "HYG", "value": "310.4", "value-effect": "Credit", "quantity": "4.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.01", "is-closing": true}, {"executed-at": "2020-03-31T16:07:20.677+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SHY", "value": "433.65", "value-effect": "Debit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-04-01T15:26:57.219+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515C00015000", "value": "79.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-01T15:26:57.298+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515C00019000", "value": "27.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-01T17:41:24.057+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 200515C00130000", "value": "78.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-01T17:41:24.129+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 200515C00132000", "value": "58.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-04-01T17:52:01.966+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 200515P00087000", "value": "284.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-01T17:52:02.055+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 200515C00128000", "value": "106.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-01T17:52:02.127+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 200515P00090000", "value": "341.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-01T17:52:02.220+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 200515C00125000", "value": "157.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-01T19:36:58.867+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 200515C00283000", "value": "195.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-01T19:36:58.958+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 200515C00285000", "value": "161.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-04-01T19:48:14.407+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "QQQ 200515C00198000", "value": "466.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-04-01T19:48:14.500+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "QQQ 200515C00200000", "value": "398.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-02T14:52:24.859+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "USO 200515P00003000", "value": "15.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-02T14:54:56.148+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "USO 200515P00004000", "value": "37.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-02T15:14:07.937+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200515P00016000", "value": "187.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-02T15:14:08.023+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200515C00045000", "value": "66.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-02T17:00:07.530+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XLF 200515P00016000", "value": "56.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-02T17:00:07.595+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XLF 200515C00024000", "value": "26.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-02T19:11:39.516+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SHY", "value": "866.401", "value-effect": "Credit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.021", "is-closing": true}, {"executed-at": "2020-04-03T16:04:02.966+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515C00013000", "value": "73.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-03T16:04:03.058+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515C00015000", "value": "42.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-03T17:37:35.189+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200515C00045000", "value": "25.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-03T17:37:35.269+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200515C00037000", "value": "65.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-03T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": null, "symbol": "FCX 200417P00010000", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-04-03T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": "Buy to Open", "symbol": "FCX", "value": "1000.0", "value-effect": "Debit", "quantity": "100.0", "commission": null, "clearing-fees": "5.0", "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-04-06T16:03:15.320+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 200515C00009000", "value": "22.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-06T16:08:29.628+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "BAC 200515C00029000", "value": "6.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-06T16:08:29.699+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "BAC 200515P00015000", "value": "29.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-07T17:04:17.512+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515P00013000", "value": "310.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-07T17:10:03.531+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515P00007000", "value": "61.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-07T17:29:18.946+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XLE 200515C00035210", "value": "179.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-07T17:29:19.052+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XLE 200515P00025000", "value": "67.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-07T17:29:19.117+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XLE 200515C00036210", "value": "139.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-07T17:31:10.616+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515C00013000", "value": "133.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-07T17:41:05.629+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515P00007000", "value": "66.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-07T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "SHY", "value": "1.06", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-04-08T16:57:50.635+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XLF 200515C00024000", "value": "47.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-08T16:57:50.711+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XLF 200515P00016000", "value": "22.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-08T17:02:35.199+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "USO 200515P00004500", "value": "54.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-08T19:47:54.722+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "M 200417P00005500", "value": "28.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-08T19:47:54.805+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "M", "value": "601.0", "value-effect": "Credit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.032", "is-closing": false}, {"executed-at": "2020-04-09T15:39:18.183+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "M 200417P00005500", "value": "14.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-09T16:23:03.978+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "M", "value": "147.0", "value-effect": "Debit", "quantity": "21.0", "commission": "0.0", "clearing-fees": "0.017", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": true}, {"executed-at": "2020-04-09T16:23:03.978+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "M", "value": "553.0", "value-effect": "Debit", "quantity": "79.0", "commission": "0.0", "clearing-fees": "0.064", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": true}, {"executed-at": "2020-04-09T16:31:36.513+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "USO 200515P00004500", "value": "40.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-09T17:46:02.074+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "GE", "value": "729.0", "value-effect": "Debit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-04-09T17:46:10.661+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GE 200515C00008000", "value": "38.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-09T18:41:00.839+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200515P00022000", "value": "177.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-09T18:41:00.839+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200515P00016000", "value": "69.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-09T19:42:02.712+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 200515C00294000", "value": "519.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-04-09T19:42:02.713+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 200515C00297000", "value": "413.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-10T12:24:28.313+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.26", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-04-13T16:27:27.253+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200515P00022000", "value": "188.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-13T16:27:27.253+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200515C00037000", "value": "202.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-13T17:39:00.348+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 200515C00297000", "value": "251.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-04-13T17:39:00.348+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 200515C00294000", "value": "331.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-13T17:44:44.520+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515P00008000", "value": "78.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-13T17:44:44.520+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200515C00019000", "value": "37.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-14T15:48:04.177+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 200515P00108000", "value": "266.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-14T15:48:04.177+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 200515P00105000", "value": "209.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-14T15:48:04.177+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 200515P00087000", "value": "31.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-04-14T15:48:04.177+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 200515P00090000", "value": "45.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-14T17:23:30.314+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "GE", "value": "693.13", "value-effect": "Credit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.032", "is-closing": true}, {"executed-at": "2020-04-14T17:26:52.477+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GE 200515C00008000", "value": "22.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-14T17:31:17.341+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XLE 200515P00025000", "value": "40.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-14T17:31:17.341+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XLE 200515C00035210", "value": "161.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-14T17:31:17.342+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XLE 200515C00036210", "value": "118.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-04-14T17:42:33.345+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 200515P00021000", "value": "54.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-14T17:42:33.345+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 200515C00030000", "value": "46.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-14T18:02:49.764+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "BIL", "value": "1373.249", "value-effect": "Debit", "quantity": "15.0", "commission": "0.0", "clearing-fees": "0.012", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-04-14T18:48:35.198+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 200515C00290000", "value": "754.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-14T18:48:35.198+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 200515C00288000", "value": "855.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-04-17T17:41:35.360+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 200515C00290000", "value": "752.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": true}, {"executed-at": "2020-04-17T17:41:35.360+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 200515C00288000", "value": "861.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-17T18:09:37.187+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515C00019000", "value": "16.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-17T18:09:37.187+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200515P00008000", "value": "44.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-17T18:35:23.785+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "BAC 200619C00028000", "value": "40.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-17T18:35:23.785+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "BAC 200619P00018000", "value": "73.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-17T19:11:00.636+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 200515C00030000", "value": "22.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-17T19:11:00.636+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 200515P00021000", "value": "59.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-17T19:12:15.228+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 200619P00020000", "value": "99.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-18T13:04:09.614+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.04", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-04-20T17:57:23.712+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "BIL", "value": "457.751", "value-effect": "Credit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.021", "is-closing": true}, {"executed-at": "2020-04-20T18:04:02.363+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "X", "value": "665.0", "value-effect": "Credit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.032", "is-closing": true}, {"executed-at": "2020-04-20T18:04:02.363+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "X 200515C00007000", "value": "51.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-20T18:38:11.571+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SLV", "value": "711.94", "value-effect": "Debit", "quantity": "50.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-04-20T18:38:38.919+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GDX 200619C00035000", "value": "145.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-21T19:58:26.415+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SLV", "value": "693.5", "value-effect": "Credit", "quantity": "50.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.026", "is-closing": true}, {"executed-at": "2020-04-22T18:32:50.706+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GDX 200619P00026000", "value": "79.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-22T18:41:17.112+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 200619C00030000", "value": "51.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-24T17:34:20.146+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 200619C00027000", "value": "38.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-24T17:34:20.146+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 200619C00030000", "value": "11.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-25T13:25:31.249+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.04", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-04-27T19:17:09.177+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 200619P00013000", "value": "38.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-27T19:18:34.263+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "QQQ 200515C00200000", "value": "1734.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.082", "is-closing": true}, {"executed-at": "2020-04-27T19:18:34.263+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "QQQ 200515C00198000", "value": "1907.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-28T16:02:19.399+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 200515C00272000", "value": "1811.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.092", "is-closing": true}, {"executed-at": "2020-04-28T16:02:19.399+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 200515C00270000", "value": "1979.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-28T19:56:57.109+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "BAC 200619P00018000", "value": "32.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-28T19:56:57.109+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "BAC 200619C00028000", "value": "28.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-28T19:59:24.400+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DAL 200619C00030000", "value": "89.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-29T17:33:24.197+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 200515P00125000", "value": "128.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-29T17:33:24.197+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 200515P00122000", "value": "87.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-29T17:33:24.197+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 200515P00105000", "value": "8.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-04-29T17:33:24.197+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 200515P00108000", "value": "12.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-29T17:44:12.176+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "FCX", "value": "930.17", "value-effect": "Credit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2020-04-29T17:46:52.999+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 200619C00009000", "value": "101.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-29T17:46:52.999+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FCX 200515C00009000", "value": "65.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-29T18:13:22.098+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DAL 200619P00020000", "value": "73.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-29T18:19:15.809+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GDX 200619P00026000", "value": "41.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-29T18:19:15.809+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GDX 200619C00035000", "value": "185.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-04-29T18:35:25.666+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "GLD 200619C00165000", "value": "312.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-04-29T18:35:25.666+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GLD 200619C00162000", "value": "412.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-04-29T18:56:34.017+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "BIL", "value": "915.574", "value-effect": "Debit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-05-01T17:47:15.324+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 200515P00122000", "value": "421.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-05-01T17:47:15.324+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 200515P00125000", "value": "551.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-02T13:15:56.456+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.07", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-05-04T15:38:07.737+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 200619C00126000", "value": "642.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-05-04T15:38:07.737+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 200619C00129000", "value": "492.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-04T15:38:07.737+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 200515C00128000", "value": "249.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-05-04T15:38:07.737+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 200515C00125000", "value": "394.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-04T16:51:12.539+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200619P00008000", "value": "124.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-06T18:12:01.218+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "GLD 200619C00165000", "value": "266.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-05-06T18:12:01.218+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GLD 200619C00162000", "value": "356.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-06T18:13:00.869+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200619P00012500", "value": "129.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-06T19:52:13.356+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200619C00020000", "value": "26.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-07T17:05:47.484+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY 200619C00020000", "value": "31.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-07T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "BIL", "value": "0.29", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-05-08T18:05:39.898+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 200619C00129000", "value": "816.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": true}, {"executed-at": "2020-05-08T18:05:39.898+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 200619C00126000", "value": "1011.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-08T18:06:53.385+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "RUT 200619C01325000", "value": "6528.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.18", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-08T18:06:53.385+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "RUT 200619C01320000", "value": "6801.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.18", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2020-05-09T14:23:10.699+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.04", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-05-11T17:12:37.869+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 200619P00013000", "value": "19.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-11T17:25:16.506+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "M 200619P00006000", "value": "115.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-11T17:25:16.506+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "M 200619C00006000", "value": "49.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-12T16:19:54.859+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "BIL", "value": "1830.61", "value-effect": "Credit", "quantity": "20.0", "commission": "0.0", "clearing-fees": "0.016", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-05-12T16:35:15.940+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY 200619P00012500", "value": "65.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-13T15:40:45.715+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FCX 200619C00009000", "value": "45.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-13T16:56:16.358+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "RUT 200619C01325000", "value": "2760.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.18", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2020-05-13T16:56:16.358+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "RUT 200619C01320000", "value": "2927.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.18", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-13T16:56:38.598+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200619P00008000", "value": "122.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-13T17:09:45.125+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "DAL 200619P00018000", "value": "157.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-13T17:09:45.125+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DAL 200619P00016000", "value": "182.0", "value-effect": "Credit", "quantity": "2.0", "commission": "2.0", "clearing-fees": "0.2", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.094", "is-closing": false}, {"executed-at": "2020-05-13T17:12:50.898+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 200619C00298000", "value": "294.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-13T17:12:50.898+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 200619C00295000", "value": "399.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-13T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "500.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-05-14T15:38:18.123+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 200619C00025000", "value": "33.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-14T15:38:18.123+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 200619C00027000", "value": "9.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-14T15:53:22.982+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DAL 200619C00026000", "value": "55.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-14T15:53:22.982+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DAL 200619C00030000", "value": "25.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-14T16:04:23.518+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 200619C00128000", "value": "333.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-14T16:04:23.519+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 200619C00131000", "value": "231.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-15T19:57:14.029+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "TLT 200619C00167000", "value": "317.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-15T19:57:14.029+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "TLT 200619C00170000", "value": "209.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-16T15:35:46.060+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-05-18T16:02:36.841+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DAL 200619P00016000", "value": "100.0", "value-effect": "Debit", "quantity": "2.0", "commission": "0.0", "clearing-fees": "0.2", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.08", "is-closing": true}, {"executed-at": "2020-05-18T16:02:36.841+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "DAL 200619P00018000", "value": "88.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-05-19T16:54:47.375+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00007000", "value": "85.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-19T19:37:27.902+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00007000", "value": "71.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-19T19:39:16.881+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200619P00019000", "value": "120.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-20T17:12:15.313+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DAL 200619C00026000", "value": "85.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-20T17:12:15.313+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DAL 200619P00020000", "value": "99.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-20T17:16:38.373+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 200619C00025000", "value": "69.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-20T17:16:38.373+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 200619P00020000", "value": "41.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-20T17:19:25.004+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200619P00019000", "value": "84.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-20T17:20:39.597+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200717P00012500", "value": "97.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-20T17:25:45.765+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717P00020000", "value": "210.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-21T15:54:28.595+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "LK", "value": "2.01", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-05-21T15:54:30.034+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "LK", "value": "198.99", "value-effect": "Debit", "quantity": "99.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-05-21T16:08:55.940+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717C00040000", "value": "74.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-21T16:17:46.631+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "LK", "value": "203.1", "value-effect": "Credit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.022", "is-closing": true}, {"executed-at": "2020-05-21T16:41:07.922+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00007000", "value": "67.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-21T17:08:19.221+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SMH 200717C00150000", "value": "342.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-21T17:08:19.221+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SMH 200717C00147000", "value": "444.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-21T18:06:46.723+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "ACB 200717P00010000", "value": "142.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-23T13:42:44.493+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.05", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-05-26T16:41:51.372+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "M 200619C00006000", "value": "53.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-26T16:41:51.372+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "M 200619P00006000", "value": "58.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-26T16:45:17.293+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "TLT 200619C00170000", "value": "62.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-05-26T16:45:17.293+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "TLT 200619C00167000", "value": "116.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-26T17:02:46.331+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717P00020000", "value": "120.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-26T17:02:46.332+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717C00040000", "value": "110.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-26T17:06:04.263+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717P00022000", "value": "166.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-26T17:06:15.821+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00008000", "value": "65.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-26T17:06:15.821+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00007000", "value": "43.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-26T17:56:18.506+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "QQQ 200717C00241000", "value": "377.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-26T17:56:18.506+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "QQQ 200717C00244000", "value": "275.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-27T17:38:16.828+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717P00024000", "value": "167.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-27T17:38:16.828+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717P00022000", "value": "113.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-27T18:35:46.300+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "TLT 200717C00165000", "value": "298.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-27T18:35:46.300+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "TLT 200717C00168000", "value": "196.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-05-28T16:51:36.286+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/MESM0", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.85", "clearing-fees": "0.3", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.22", "is-closing": false}, {"executed-at": "2020-05-28T16:52:25.026+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/MESM0", "value": "1.25", "value-effect": "Credit", "quantity": "1.0", "commission": "0.85", "clearing-fees": "0.3", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.22", "is-closing": false}, {"executed-at": "2020-05-29T15:43:10.511+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "QQQ 200717C00244000", "value": "239.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-05-29T15:43:10.511+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "QQQ 200717C00241000", "value": "335.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-05-29T15:45:15.831+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717C00040000", "value": "77.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-29T15:54:15.618+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717C00015000", "value": "38.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-29T15:54:36.331+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200717C00019000", "value": "30.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-05-30T14:09:20.388+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.07", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-01T15:06:15.155+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/SPREM20", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-01T15:13:49.410+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/SPREM20", "value": "10.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-01T16:26:27.952+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/SPREM20", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-01T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/SPREM20", "value": "200.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-02T13:58:33.284+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/SPREM20", "value": "2.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-02T16:24:52.486+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/SPREM20", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-02T16:56:45.893+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/SPREM20", "value": "11.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-02T17:37:46.389+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 200619C00131000", "value": "1189.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.072", "is-closing": true}, {"executed-at": "2020-06-02T17:37:46.389+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 200619C00128000", "value": "1444.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-02T19:41:27.079+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/SPREM20", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-02T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/SPREM20", "value": "27.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-03T15:43:26.449+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717P00027000", "value": "168.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-03T15:43:26.449+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717P00024000", "value": "93.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-03T18:58:52.397+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/SPREM20", "value": "71.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.145", "is-closing": false}, {"executed-at": "2020-06-04T13:36:36.844+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "TLT 200717C00168000", "value": "86.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-04T13:36:36.844+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "TLT 200717C00165000", "value": "137.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-04T13:53:28.490+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717P00030000", "value": "218.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-04T13:53:28.490+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717P00027000", "value": "128.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-04T13:58:28.440+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00010000", "value": "63.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-04T13:58:28.440+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00008000", "value": "27.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-04T15:02:22.414+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717C00040000", "value": "465.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-04T17:01:17.027+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SMH 200717C00150000", "value": "577.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": true}, {"executed-at": "2020-06-04T17:01:17.027+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SMH 200717C00147000", "value": "741.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-04T17:23:06.325+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 200717P00010000", "value": "65.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-04T17:49:49.627+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00013000", "value": "109.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-04T17:49:49.627+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00010000", "value": "31.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-04T19:40:39.655+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00015000", "value": "258.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-04T19:40:39.655+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00013000", "value": "167.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-05T16:59:30.704+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200717P00019000", "value": "186.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-05T16:59:30.704+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY 200717P00012500", "value": "26.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-05T17:03:41.594+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00018000", "value": "327.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-05T17:03:41.594+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00015000", "value": "192.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-05T17:05:03.005+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FCX 200717P00010000", "value": "41.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-05T17:09:17.983+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "ACB 200717P00010000", "value": "90.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-05T17:13:25.041+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200717P00033000", "value": "215.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-05T17:13:25.041+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717P00030000", "value": "142.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-05T17:23:57.493+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 200619C00295000", "value": "2605.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-05T17:23:57.494+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 200619C00298000", "value": "2315.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.102", "is-closing": true}, {"executed-at": "2020-06-06T13:58:00.829+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.33", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-08T14:20:17.728+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY 200717P00019000", "value": "141.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-08T14:20:17.729+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200717P00021000", "value": "222.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-08T17:52:39.739+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY 200717P00021000", "value": "212.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-08T17:52:39.740+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200717P00022500", "value": "283.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-09T16:19:53.026+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200717P00033000", "value": "191.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-09T16:28:44.552+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 200717P00013000", "value": "115.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-10T14:58:11.141+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00013000", "value": "131.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-10T18:54:02.712+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XOP 200717P00059000", "value": "368.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-10T18:54:02.713+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XOP 200717P00056000", "value": "266.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T15:55:49.918+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "./NGQ0 LNEQ0 200728P1.72", "value": "810.0", "value-effect": "Debit", "quantity": "1.0", "commission": "2.5", "clearing-fees": "0.3", "proprietary-index-option-fees": "0.0", "regulatory-fees": "1.52", "is-closing": false}, {"executed-at": "2020-06-11T15:55:49.918+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "./NGQ0 LNEQ0 200728P1.75", "value": "920.0", "value-effect": "Credit", "quantity": "1.0", "commission": "2.5", "clearing-fees": "0.3", "proprietary-index-option-fees": "0.0", "regulatory-fees": "1.52", "is-closing": false}, {"executed-at": "2020-06-11T16:07:52.155+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717P00075000", "value": "4064.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T16:07:52.155+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717P00060000", "value": "5540.0", "value-effect": "Credit", "quantity": "2.0", "commission": "2.0", "clearing-fees": "0.2", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.214", "is-closing": false}, {"executed-at": "2020-06-11T16:07:52.156+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717P00040000", "value": "1196.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T17:07:10.774+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717P00060000", "value": "5450.0", "value-effect": "Debit", "quantity": "2.0", "commission": "0.0", "clearing-fees": "0.2", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.08", "is-closing": true}, {"executed-at": "2020-06-11T17:07:10.774+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717P00075000", "value": "4013.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.132", "is-closing": true}, {"executed-at": "2020-06-11T17:07:10.774+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717P00040000", "value": "1172.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.072", "is-closing": true}, {"executed-at": "2020-06-11T17:09:33.122+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717C00090000", "value": "390.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T17:09:33.122+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717P00060000", "value": "2749.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.112", "is-closing": false}, {"executed-at": "2020-06-11T17:09:33.122+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717C00060000", "value": "982.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.072", "is-closing": false}, {"executed-at": "2020-06-11T17:09:33.123+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717P00030000", "value": "545.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T17:27:58.408+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717P00065000", "value": "3150.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.112", "is-closing": false}, {"executed-at": "2020-06-11T17:27:58.408+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717C00065000", "value": "861.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-06-11T17:27:58.409+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717P00045000", "value": "1529.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T17:27:58.409+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717C00085000", "value": "471.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T17:52:32.733+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717C00090000", "value": "381.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-11T17:52:32.733+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717P00060000", "value": "2784.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-11T17:52:32.733+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717C00060000", "value": "931.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-11T17:52:32.734+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717P00030000", "value": "544.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": true}, {"executed-at": "2020-06-11T17:55:01.437+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717P00065000", "value": "3222.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.122", "is-closing": false}, {"executed-at": "2020-06-11T17:55:01.437+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717C00065000", "value": "782.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-06-11T17:55:01.438+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717C00085000", "value": "439.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T17:55:01.439+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717P00045000", "value": "1545.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T18:06:39.875+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717C00065000", "value": "794.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-06-11T18:06:39.875+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717P00065000", "value": "3227.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.122", "is-closing": false}, {"executed-at": "2020-06-11T18:06:39.875+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717C00085000", "value": "446.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T18:06:39.875+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717P00045000", "value": "1576.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T19:14:42.154+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717C00085000", "value": "365.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-11T19:14:42.154+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717P00045000", "value": "1562.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.082", "is-closing": true}, {"executed-at": "2020-06-11T19:14:42.154+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717C00065000", "value": "685.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-11T19:14:42.154+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717P00065000", "value": "3237.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-11T19:18:41.252+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717C00065000", "value": "712.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-06-11T19:18:41.252+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NKLA 200717P00065000", "value": "3223.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.122", "is-closing": false}, {"executed-at": "2020-06-11T19:18:41.252+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717C00085000", "value": "368.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-11T19:18:41.252+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NKLA 200717P00045000", "value": "1568.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-13T14:12:21.452+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.07", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-15T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "278.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-17T19:35:17.752+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717C00085000", "value": "365.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-17T19:35:17.752+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717P00065000", "value": "3214.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-17T19:35:17.752+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717C00065000", "value": "673.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-17T19:35:17.753+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717P00045000", "value": "1502.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.082", "is-closing": true}, {"executed-at": "2020-06-17T19:41:03.725+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717C00085000", "value": "365.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-17T19:41:03.725+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717P00045000", "value": "1515.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.082", "is-closing": true}, {"executed-at": "2020-06-17T19:41:03.725+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717C00065000", "value": "665.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-17T19:41:03.725+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717P00065000", "value": "3225.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-18T14:52:29.113+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 200717C00009000", "value": "59.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-18T14:52:29.113+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "X 210115C00006000", "value": "313.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-20T13:47:17.586+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-22T14:11:52.604+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "X 200717C00009000", "value": "29.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-22T14:14:37.948+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 200821C00009000", "value": "63.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-22T16:24:33.764+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 200821C00330000", "value": "421.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-22T16:24:33.764+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 200821C00327000", "value": "523.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2020-06-23T14:43:42.682+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717P00018000", "value": "461.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-23T14:43:42.682+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 200717C00015000", "value": "109.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-23T15:28:52.596+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "TEVA 200717P00012000", "value": "29.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-23T15:28:52.596+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "TEVA 200821P00012000", "value": "73.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-06-23T16:52:01.785+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717C00085000", "value": "257.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-23T16:52:01.785+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NKLA 200717P00045000", "value": "616.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": true}, {"executed-at": "2020-06-23T16:52:01.785+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717C00065000", "value": "724.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-23T16:52:01.785+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NKLA 200717P00065000", "value": "2094.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-23T19:41:47.033+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GME 200821P00004000", "value": "43.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-24T16:47:36.487+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200821C00022500", "value": "126.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-24T16:47:36.487+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "OXY 200821P00015000", "value": "124.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-24T16:47:36.487+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY 200717P00022500", "value": "463.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-24T16:47:36.487+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY 200717C00019000", "value": "137.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-26T16:19:54.661+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 200821C00327000", "value": "247.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-26T16:19:54.662+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 200821C00330000", "value": "189.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-26T17:07:33.447+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 200821P00024000", "value": "101.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-26T17:40:39.935+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "TEVA 200717P00012000", "value": "53.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-26T17:40:39.935+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "TEVA 200821P00012000", "value": "104.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-06-27T13:29:21.388+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.07", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-06-29T15:26:36.855+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DKNG 200821P00025000", "value": "193.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-29T15:26:36.855+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DKNG 200821C00055000", "value": "77.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-30T14:07:58.126+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "X 200821C00009000", "value": "31.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-30T14:15:06.226+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 200821C00008000", "value": "53.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-06-30T19:57:14.592+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DKNG 200821P00025000", "value": "162.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-06-30T19:57:14.592+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DKNG 200821C00055000", "value": "68.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-01T15:58:35.841+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "WORK 200821P00025000", "value": "71.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-02T10:40:40.897+00:00", "transaction-type": "Receive Deliver", "action": "Buy to Close", "symbol": "OXY 200821P00015000", "value": "124.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": true}, {"executed-at": "2020-07-02T10:40:40.922+00:00", "transaction-type": "Receive Deliver", "action": "Sell to Open", "symbol": "OXY2 200821P00015000", "value": "124.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-07-02T10:40:40.958+00:00", "transaction-type": "Receive Deliver", "action": "Buy to Close", "symbol": "OXY 200821C00022500", "value": "126.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": true}, {"executed-at": "2020-07-02T10:40:40.987+00:00", "transaction-type": "Receive Deliver", "action": "Sell to Open", "symbol": "OXY2 200821C00022500", "value": "126.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-07-02T13:35:06.976+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 200821P00024000", "value": "50.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-02T15:53:26.815+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY2 200821P00015000", "value": "135.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-02T15:53:26.815+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "OXY2 200821C00022500", "value": "38.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-02T16:50:30.270+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "INO 200702P00018000", "value": "2.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-02T16:50:30.270+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "INO 200702P00021000", "value": "34.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-02T20:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": null, "symbol": "INO 200702P00021000", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-07-02T20:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": null, "symbol": "INO 200702P00018000", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-07-06T19:51:08.790+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "JETS 200710P00015500", "value": "14.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-06T19:51:08.793+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "JETS 200710P00015500", "value": "14.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-07T09:19:18.761+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "./NGQ0 LNEQ0 200728P1.72", "value": "550.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.3", "proprietary-index-option-fees": "0.0", "regulatory-fees": "1.52", "is-closing": true}, {"executed-at": "2020-07-07T09:19:18.761+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "./NGQ0 LNEQ0 200728P1.75", "value": "650.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.3", "proprietary-index-option-fees": "0.0", "regulatory-fees": "1.52", "is-closing": true}, {"executed-at": "2020-07-07T15:40:56.965+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "WORK 200821P00025000", "value": "44.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-07T16:14:36.585+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "WORK 200821C00035000", "value": "116.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-08T15:27:26.854+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XOP 200717P00056000", "value": "652.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": true}, {"executed-at": "2020-07-08T15:27:26.854+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XOP 200717P00059000", "value": "937.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-08T18:18:58.879+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "WORK 200821P00028000", "value": "60.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-09T15:00:35.836+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NIO 200821P00010000", "value": "152.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-09T15:00:35.836+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NIO 200821P00007000", "value": "48.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-09T15:04:43.372+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "JETS 200710P00015500", "value": "25.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-07-09T15:04:43.374+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "JETS 200710P00015500", "value": "25.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-07-09T15:26:04.840+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "BBBY 200821C00010000", "value": "41.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-11T13:23:19.796+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.07", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-07-13T18:34:30.687+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "WORK", "value": "34.5", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-07-13T18:34:30.690+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "WORK", "value": "310.5", "value-effect": "Debit", "quantity": "9.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-07-14T14:41:48.261+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GME 200821P00004000", "value": "41.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-14T14:45:20.336+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DAL 200821C00035000", "value": "57.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-14T14:45:20.336+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DAL 200821P00021000", "value": "70.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-15T14:26:40.323+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "WORK", "value": "32.14", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.01", "is-closing": true}, {"executed-at": "2020-07-15T14:26:40.326+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "WORK", "value": "289.26", "value-effect": "Credit", "quantity": "9.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.011", "is-closing": true}, {"executed-at": "2020-07-15T14:30:51.968+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "WORK", "value": "321.2", "value-effect": "Debit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-07-15T15:24:37.369+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "WORK", "value": "31.55", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.01", "is-closing": true}, {"executed-at": "2020-07-15T15:24:37.371+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "WORK", "value": "283.95", "value-effect": "Credit", "quantity": "9.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.011", "is-closing": true}, {"executed-at": "2020-07-18T16:23:35.765+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-07-20T19:11:57.713+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "WORK 200821P00028000", "value": "48.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-20T19:11:57.713+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "WORK 200821C00035000", "value": "162.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-20T19:16:04.560+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DKNG 200821C00055000", "value": "50.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-20T19:16:04.560+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DKNG 200821P00025000", "value": "62.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-21T19:58:20.089+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DAL 200821C00035000", "value": "28.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-21T19:58:20.089+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DAL 200821P00021000", "value": "37.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-23T15:19:22.677+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DKNG 200821P00025000", "value": "45.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-23T15:19:22.677+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DKNG 200821C00055000", "value": "65.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-23T15:38:06.549+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "BBBY 200821C00010000", "value": "117.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-23T15:39:15.883+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200821C00045000", "value": "40.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-23T15:39:15.884+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200821P00025000", "value": "53.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-25T13:24:33.342+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.04", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-07-27T14:16:22.417+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 200918P00020000", "value": "56.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-27T14:16:22.417+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 200918C00029000", "value": "48.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-28T15:20:22.416+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NIO 200821P00007000", "value": "18.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-07-28T15:20:22.416+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NIO 200821P00010000", "value": "70.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-28T19:34:17.435+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NIO 200918C00012000", "value": "241.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-28T19:34:17.436+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NIO 200918P00006000", "value": "18.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-28T19:34:17.436+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NIO 200918C00018000", "value": "83.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-28T19:34:17.436+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NIO 200918P00012000", "value": "214.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-29T15:40:06.238+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UNG 200918C00011000", "value": "81.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-29T15:40:06.238+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UNG 200918P00010000", "value": "55.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-29T15:40:06.238+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "UNG 200918C00014000", "value": "13.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-29T15:40:06.238+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "UNG 200918P00007000", "value": "6.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-07-31T16:09:37.408+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "X 200821C00008000", "value": "14.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-31T16:46:12.382+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200821P00025000", "value": "45.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-31T16:46:12.382+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200821C00045000", "value": "12.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-07-31T17:00:20.166+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200918C00047000", "value": "40.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-07-31T17:00:20.166+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200918P00022000", "value": "62.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-01T13:58:05.527+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.05", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-08-03T14:13:00.351+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 200918C00007000", "value": "62.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-03T16:33:02.599+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 200918P00020000", "value": "50.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-03T16:33:02.599+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 200918C00029000", "value": "43.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-03T17:09:32.840+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UNG 200918P00011000", "value": "55.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-03T17:09:32.840+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "UNG 200918P00008000", "value": "6.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-08-03T17:09:32.840+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "UNG 200918P00007000", "value": "2.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-03T17:09:32.840+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UNG 200918P00010000", "value": "28.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-03T18:52:05.754+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "PINS 200918P00030000", "value": "79.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-03T18:52:05.754+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "PINS 200918C00045000", "value": "68.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-04T14:13:55.308+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NIO 200918C00018000", "value": "129.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-04T14:13:55.308+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NIO 200918P00006000", "value": "9.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-04T14:13:55.308+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NIO 200918C00012000", "value": "336.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-04T14:13:55.308+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NIO 200918P00012000", "value": "140.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-05T14:46:16.422+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CCL 200918C00017500", "value": "55.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-05T14:46:16.422+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CCL 200918P00012500", "value": "117.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-05T15:50:40.666+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "X 200918C00007000", "value": "91.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-05T16:39:48.282+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "X 210115C00006000", "value": "204.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-05T18:55:10.876+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 200918P00023000", "value": "104.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-05T18:55:10.876+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SLV 200918P00020000", "value": "22.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-08-08T13:08:57.432+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.09", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-08-10T14:35:08.864+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 200918P00026000", "value": "57.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-10T14:35:08.864+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200918P00022000", "value": "24.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-17T14:17:06.293+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "PINS 200918P00030000", "value": "55.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-17T14:17:06.293+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "PINS 200918C00045000", "value": "18.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-17T19:04:10.650+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DKNG 200918P00035000", "value": "321.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-17T19:04:10.650+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "DKNG 201002P00035000", "value": "399.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-08-17T19:48:39.503+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "VXX 200918P00020000", "value": "35.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-08-17T19:48:39.503+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "VXX 200918P00023000", "value": "150.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-19T14:14:10.480+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SLV 200918P00020000", "value": "10.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-19T14:14:10.480+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 200918P00023000", "value": "50.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-19T19:51:13.547+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CCL 200918C00017500", "value": "47.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-19T19:51:13.547+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CCL 200918P00012500", "value": "50.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-20T16:59:36.064+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "RCL 201016P00040000", "value": "117.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-20T17:29:13.800+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "RCL 201016P00040000", "value": "114.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-20T17:31:32.023+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NCLH 201016P00012500", "value": "93.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-20T17:47:16.807+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UBER 201016P00024000", "value": "57.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-20T17:47:16.807+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UBER 201016C00037000", "value": "45.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-20T18:13:18.511+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "UNG 200918C00014000", "value": "53.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-20T18:13:18.511+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UNG 200918P00011000", "value": "6.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-20T18:13:18.511+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UNG 200918C00011000", "value": "251.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-20T18:22:36.643+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "GLD 201016P00174000", "value": "293.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-08-20T18:22:36.643+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GLD 201016P00177000", "value": "395.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-21T16:52:42.698+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200918C00047000", "value": "29.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-21T16:52:42.698+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 200918P00026000", "value": "39.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-21T18:02:55.466+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 201016P00027000", "value": "108.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-21T18:15:53.677+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "UNG 200918P00008000", "value": "1.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-21T19:35:12.011+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DKNG 200918P00035000", "value": "285.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-21T19:35:12.011+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "DKNG 201002P00035000", "value": "366.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-22T13:20:30.910+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.06", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-08-24T19:58:23.505+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "VXX 200918P00020000", "value": "20.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-08-24T19:58:23.505+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "VXX 200918P00023000", "value": "127.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-08-25T19:11:12.519+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 201016P00011000", "value": "80.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-25T19:11:12.519+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AAL 201016C00017000", "value": "61.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-28T18:33:07.193+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UBER 201016P00028000", "value": "55.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-08-28T18:33:07.193+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UBER 201016P00024000", "value": "16.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-05T14:01:05.148+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-09-08T19:24:55.673+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NCLH 201016P00012500", "value": "46.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-09T13:35:24.901+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 201016P00027000", "value": "54.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-09T19:28:41.540+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NCLH 201016P00015000", "value": "99.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-11T15:21:16.286+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UBER 201016P00032000", "value": "59.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-11T15:21:16.286+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UBER 201016P00028000", "value": "18.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-12T13:38:27.579+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-09-15T13:30:04.662+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GLD 201016P00177000", "value": "124.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-15T13:30:04.662+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "GLD 201016P00174000", "value": "75.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-09-15T19:39:10.897+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 201016C00017000", "value": "30.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-15T19:39:10.897+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AAL 201016P00011000", "value": "39.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-17T16:45:48.268+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UBER 201016P00032000", "value": "58.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-17T16:45:48.268+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UBER 201016C00037000", "value": "164.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-17T17:07:37.021+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UNG 201016C00012000", "value": "59.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-17T17:07:37.022+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "UNG 201016P00007000", "value": "2.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-09-17T17:07:37.022+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "UNG 201016C00016000", "value": "6.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-09-17T17:07:37.022+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UNG 201016P00011000", "value": "54.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-18T18:03:07.025+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GLD 201030P00179000", "value": "233.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-18T18:03:07.025+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "GLD 201030P00175000", "value": "131.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-09-18T18:13:59.514+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 201030C00163000", "value": "129.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-09-18T18:13:59.514+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 201030C00159000", "value": "237.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-19T14:22:54.352+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-09-21T17:09:57.574+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IWM 201030C00163000", "value": "65.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-09-21T17:09:57.574+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "IWM 201030C00159000", "value": "126.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-21T17:37:29.720+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 201120P00020000", "value": "61.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-21T17:37:29.720+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 201120C00028000", "value": "52.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-22T16:47:28.258+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 201120P00026000", "value": "104.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-24T17:37:34.865+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "UNG 201016P00008000", "value": "4.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-09-24T17:37:34.865+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UNG 201016P00012000", "value": "43.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-09-24T17:37:34.865+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UNG 201016P00011000", "value": "19.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-24T17:37:34.865+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "UNG 201016P00007000", "value": "2.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-09-25T17:47:21.773+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NCLH 201016P00015000", "value": "88.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-26T13:59:53.133+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-09-28T17:59:47.000+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "UNG 201016C00016000", "value": "3.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-09-28T17:59:47.000+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "UNG 201016P00008000", "value": "1.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-09-28T17:59:47.000+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UNG 201016C00012000", "value": "87.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-28T17:59:47.000+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UNG 201016P00012000", "value": "44.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-09-28T19:58:44.397+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CCL 201120P00012500", "value": "81.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-10-03T13:23:17.531+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-10-09T17:32:03.834+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XBI 201120C00135000", "value": "127.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2020-10-09T17:32:03.840+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XBI 201120C00130000", "value": "229.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-10-09T19:45:45.297+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "GLD 201030P00175000", "value": "91.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-10-09T19:45:45.297+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GLD 201030P00179000", "value": "200.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-10-10T14:21:36.570+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-10-12T17:45:14.663+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 201120P00026000", "value": "53.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-10-16T14:07:20.981+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 201120C00028000", "value": "26.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-10-16T14:07:20.981+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 201120P00020000", "value": "33.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-10-21T13:34:01.555+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XBI 201120C00135000", "value": "38.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": true}, {"executed-at": "2020-10-21T13:34:01.555+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XBI 201120C00130000", "value": "88.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-10-21T17:45:49.067+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CCL 201120P00012500", "value": "49.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-11-10T18:40:42.011+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NCLH 201218P00017500", "value": "112.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-11-10T18:56:35.607+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 201218P00033000", "value": "89.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-11-10T18:56:35.608+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UAL 201218C00050000", "value": "75.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-11-14T13:23:08.170+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-11-16T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-11-17T15:08:22.083+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NCLH 201218P00017500", "value": "56.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-11-23T14:30:01.144+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 201218C00050000", "value": "37.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-11-23T14:30:01.144+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UAL 201218P00033000", "value": "45.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-11-24T16:52:05.942+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SNAP 210115P00036000", "value": "69.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-11-24T16:52:05.942+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SNAP 210115C00060000", "value": "60.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-11-24T16:53:07.110+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "NCLH 210115C00027500", "value": "98.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-11-24T19:55:39.837+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UNG 210115P00010000", "value": "74.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-11-28T13:55:43.858+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-09T20:57:03.378+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/S10YZ20", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.075", "is-closing": false}, {"executed-at": "2020-12-09T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YZ20", "value": "25.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-10T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YZ20", "value": "16.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-11T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YZ20", "value": "25.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-12T14:31:26.745+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-14T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YZ20", "value": "1.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-15T18:27:37.158+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "NCLH 210115C00027500", "value": "138.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-12-15T18:40:05.024+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "KSS 210115C00042500", "value": "141.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-12-15T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YZ20", "value": "13.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-16T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-16T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YZ20", "value": "10.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-17T20:46:46.623+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/S10YZ20", "value": "17.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.075", "is-closing": false}, {"executed-at": "2020-12-24T16:47:17.470+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SNAP 210115C00060000", "value": "40.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-12-24T16:47:17.470+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SNAP 210115P00036000", "value": "13.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-12-24T16:48:06.703+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "KSS 210115C00042500", "value": "104.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-12-24T16:49:11.946+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UNG 210115P00010000", "value": "91.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-12-24T17:25:00.504+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IAU", "value": "1792.0", "value-effect": "Debit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2020-12-24T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "1800.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2020-12-28T16:25:15.088+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GME 210219C00035000", "value": "161.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-12-29T15:50:08.683+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GME 210219C00035000", "value": "97.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2020-12-29T19:48:31.742+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "KSS 210219C00047500", "value": "121.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2020-12-31T17:02:26.490+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DASH", "value": "700.4", "value-effect": "Credit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.021", "is-closing": false}, {"executed-at": "2020-12-31T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-01-01T14:47:33.017+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-01-06T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "DASH", "value": "0.07", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-01-14T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "DASH", "value": "0.05", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-01-15T19:56:49.718+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "GME 210219C00060000", "value": "315.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-01-15T19:59:27.930+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DASH", "value": "966.9", "value-effect": "Debit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": true}, {"executed-at": "2021-01-15T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "DASH", "value": "0.05", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-01-19T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-01-22T17:11:39.249+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "KSS 210219C00047500", "value": "144.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2021-01-22T18:14:38.891+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "GME 210219C00060000", "value": "1315.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2021-01-27T19:09:44.630+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NOK", "value": "73.8", "value-effect": "Debit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-01-27T19:18:18.380+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NOK", "value": "74.5", "value-effect": "Credit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.011", "is-closing": true}, {"executed-at": "2021-01-29T17:16:19.227+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 210319C00035000", "value": "89.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-01-29T17:16:19.228+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 210319P00022000", "value": "63.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-01-29T17:32:31.603+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 210319C00035000", "value": "83.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2021-01-29T17:32:31.603+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 210319P00022000", "value": "66.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2021-01-29T17:33:49.528+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPLG", "value": "2178.945", "value-effect": "Debit", "quantity": "50.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-01-30T23:12:22.304+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-02-01T16:08:00.108+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPLG", "value": "2194.5", "value-effect": "Debit", "quantity": "50.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-02-01T16:36:38.145+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPLG", "value": "2203.01", "value-effect": "Credit", "quantity": "50.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.056", "is-closing": true}, {"executed-at": "2021-02-01T16:41:04.917+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 210319P00023000", "value": "77.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-02-01T16:41:04.917+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SLV 210319C00037000", "value": "95.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-02-03T17:13:40.526+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 210319P00023000", "value": "66.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2021-02-03T17:13:40.526+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SLV 210319C00037000", "value": "20.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2021-02-05T16:24:16.668+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPCE 210319P00043000", "value": "558.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.062", "is-closing": false}, {"executed-at": "2021-02-05T16:24:16.669+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPCE 210319P00042000", "value": "515.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2021-02-05T20:07:52.564+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CCL 210319P00017500", "value": "62.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-02-08T17:14:26.832+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "ETH/USD", "value": "50.0", "value-effect": "Debit", "quantity": "0.02913159", "commission": "0.5", "clearing-fees": "0.0", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-02-12T22:52:01.758+00:00", "transaction-type": "Receive Deliver", "action": "Buy to Open", "symbol": "ETH/USD", "value": "0.0", "value-effect": "None", "quantity": "0.02703492", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-02-13T15:48:48.138+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-02-16T22:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.02", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-02-17T17:53:07.542+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CCL 210319P00017500", "value": "31.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": true}, {"executed-at": "2021-03-19T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": null, "symbol": "SPCE 210319P00042000", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-03-19T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": null, "symbol": "SPCE 210319P00043000", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-03-19T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": "Buy to Open", "symbol": "SPCE", "value": "4300.0", "value-effect": "Debit", "quantity": "100.0", "commission": null, "clearing-fees": "5.0", "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-03-19T21:00:00.000+00:00", "transaction-type": "Receive Deliver", "action": "Sell to Close", "symbol": "SPCE", "value": "4200.0", "value-effect": "Credit", "quantity": "100.0", "commission": null, "clearing-fees": "5.0", "proprietary-index-option-fees": null, "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-03-23T15:10:18.026+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IAU", "value": "1646.11", "value-effect": "Credit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.022", "is-closing": true}, {"executed-at": "2021-03-23T15:13:42.129+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "VTV", "value": "130.19", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-03-23T15:13:42.132+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "VTV", "value": "1171.71", "value-effect": "Debit", "quantity": "9.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-03-23T15:26:43.656+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "NLY", "value": "445.36", "value-effect": "Debit", "quantity": "50.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-03-24T18:19:46.017+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XBI 210521C00162000", "value": "104.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2021-03-24T18:19:46.017+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XBI 210521C00157000", "value": "155.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-03-24T18:19:46.018+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XBI 210521P00115000", "value": "222.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.052", "is-closing": false}, {"executed-at": "2021-03-24T18:19:46.020+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XBI 210521P00110000", "value": "149.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.04", "is-closing": false}, {"executed-at": "2021-03-25T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "SPLG", "value": "8.66", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-03-27T14:21:23.449+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-03-30T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "VTV", "value": "7.06", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-04-14T13:31:32.084+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XBI 210521C00162000", "value": "24.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-04-14T13:31:32.084+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XBI 210521P00110000", "value": "65.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-04-14T13:31:32.084+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XBI 210521C00157000", "value": "34.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-04-14T13:31:32.084+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XBI 210521P00115000", "value": "115.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-04-17T15:30:22.362+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-04-21T18:27:36.506+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPLG", "value": "2439.56", "value-effect": "Credit", "quantity": "50.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.026", "is-closing": true}, {"executed-at": "2021-04-21T18:29:55.068+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "T", "value": "603.952", "value-effect": "Debit", "quantity": "20.0", "commission": "0.0", "clearing-fees": "0.016", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-04-21T18:41:00.619+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IAU", "value": "1707.0", "value-effect": "Debit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-04-21T18:43:14.348+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "MSFT", "value": "259.078", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-04-28T16:02:02.453+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "ETH/USD", "value": "50.0", "value-effect": "Debit", "quantity": "0.01854355", "commission": "0.5", "clearing-fees": "0.0", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-04-30T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "NLY", "value": "11.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-05-03T15:35:31.285+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IAU", "value": "1706.26", "value-effect": "Credit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.022", "is-closing": true}, {"executed-at": "2021-05-03T15:37:58.881+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "MSFT", "value": "1010.16", "value-effect": "Debit", "quantity": "4.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-05-03T15:38:39.539+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "MO", "value": "483.599", "value-effect": "Debit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-05-06T15:18:53.159+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "T", "value": "641.868", "value-effect": "Credit", "quantity": "20.0", "commission": "0.0", "clearing-fees": "0.016", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.012", "is-closing": true}, {"executed-at": "2021-05-06T15:19:40.917+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "MO", "value": "488.1", "value-effect": "Credit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.011", "is-closing": true}, {"executed-at": "2021-05-06T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "2000.0", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-05-07T15:51:34.445+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "VTV", "value": "1401.402", "value-effect": "Credit", "quantity": "10.0", "commission": "0.0", "clearing-fees": "0.008", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.011", "is-closing": true}, {"executed-at": "2021-05-07T15:52:44.496+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IAU", "value": "1749.0", "value-effect": "Debit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-05-07T15:52:46.014+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IAU", "value": "1749.0", "value-effect": "Debit", "quantity": "100.0", "commission": "0.0", "clearing-fees": "0.08", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-05-08T13:29:35.041+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-05-11T16:35:58.162+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 210618C00038000", "value": "56.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-11T16:35:58.163+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "X 210618P00023000", "value": "61.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-11T16:37:12.221+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NLY", "value": "9.06", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.001", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.01", "is-closing": true}, {"executed-at": "2021-05-11T16:37:12.226+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "NLY", "value": "443.94", "value-effect": "Credit", "quantity": "49.0", "commission": "0.0", "clearing-fees": "0.04", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.016", "is-closing": true}, {"executed-at": "2021-05-11T16:41:04.284+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "IAU", "value": "3494.66", "value-effect": "Credit", "quantity": "200.0", "commission": "0.0", "clearing-fees": "0.16", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.044", "is-closing": true}, {"executed-at": "2021-05-11T16:55:05.594+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UBER 210618C00055000", "value": "42.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-11T16:55:05.594+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "UBER 210618P00040000", "value": "73.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-12T18:31:30.604+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 210618C00420000", "value": "407.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-12T18:31:30.604+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 210618C00425000", "value": "243.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-05-12T18:33:08.137+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XOP 210618C00105000", "value": "75.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-05-12T18:33:08.137+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XOP 210618C00100000", "value": "110.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-12T18:33:08.137+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XOP 210618P00072000", "value": "150.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-12T18:33:08.137+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XOP 210618P00067000", "value": "81.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-05-15T13:42:50.370+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.06", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-05-19T17:01:50.247+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "ETH/USD", "value": "216.96", "value-effect": "Credit", "quantity": "0.07471006", "commission": "2.17", "clearing-fees": "0.0", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": true}, {"executed-at": "2021-05-24T13:34:11.291+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XOP 210618P00067000", "value": "34.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-05-24T13:34:11.291+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XOP 210618P00072000", "value": "60.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-05-24T13:34:11.291+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XOP 210618C00105000", "value": "31.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-05-24T13:34:11.291+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XOP 210618C00100000", "value": "55.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-05-24T14:58:00.367+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "MSFT", "value": "1252.251", "value-effect": "Credit", "quantity": "5.0", "commission": "0.0", "clearing-fees": "0.004", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.011", "is-closing": true}, {"executed-at": "2021-05-25T18:54:17.094+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XOP 210716P00080000", "value": "305.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-25T18:54:17.094+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XOP 210716P00075000", "value": "169.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-05-28T16:06:51.515+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UBER 210618C00055000", "value": "78.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-05-28T16:06:51.515+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "UBER 210618P00040000", "value": "12.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-05-28T16:07:13.231+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 210618C00425000", "value": "257.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-05-28T16:07:13.231+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 210618C00420000", "value": "527.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-05-28T16:11:55.101+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "X 210618C00038000", "value": "12.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-05-28T16:11:55.105+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "X 210618P00023000", "value": "59.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-05-28T16:20:44.702+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "MSFT 210716P00250000", "value": "636.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-05-28T16:20:44.702+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "MSFT 210618P00250000", "value": "348.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-05-28T16:21:38.910+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "RBLX 210716P00080000", "value": "832.0", "value-effect": "Credit", "quantity": "2.0", "commission": "2.0", "clearing-fees": "0.2", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.084", "is-closing": false}, {"executed-at": "2021-05-28T16:21:38.910+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "RBLX 210716P00085000", "value": "607.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-05-28T16:21:38.910+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "RBLX 210716P00070000", "value": "166.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-05-29T12:52:21.373+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.05", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-01T16:12:05.562+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XOP 210716P00080000", "value": "108.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-01T16:12:05.565+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XOP 210716P00075000", "value": "59.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-06-01T19:24:48.471+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "MSFT 210716P00250000", "value": "773.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-06-01T19:24:48.471+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "MSFT 210618P00250000", "value": "496.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-01T19:25:13.974+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "RBLX 210716P00080000", "value": "606.0", "value-effect": "Debit", "quantity": "2.0", "commission": "0.0", "clearing-fees": "0.2", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.07", "is-closing": true}, {"executed-at": "2021-06-01T19:25:13.974+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "RBLX 210716P00085000", "value": "464.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-06-01T19:25:13.974+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "RBLX 210716P00070000", "value": "106.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-06-02T15:43:59.515+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AMC 210604C00055000", "value": "429.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-02T15:43:59.515+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "AMC 210604C00050000", "value": "559.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-06-04T19:59:27.523+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AMC 210604C00055000", "value": "1.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-04T19:59:27.523+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "AMC 210604C00050000", "value": "5.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-06-05T12:10:38.349+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.04", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-09T16:52:18.486+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "WKHS 210716P00009000", "value": "44.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-06-09T16:52:18.486+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "WKHS 210716P00014000", "value": "226.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-10T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "MSFT", "value": "2.8", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-12T14:01:50.577+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-15T18:34:36.900+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "DKNG 210716P00040000", "value": "91.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-15T18:47:42.395+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AA 210716P00031000", "value": "51.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-15T18:47:42.395+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AA 210716C00043000", "value": "51.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-15T18:50:21.283+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CLF 210716C00028000", "value": "82.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-16T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.06", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-17T16:22:18.543+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AA 210716C00039000", "value": "47.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-17T16:22:18.546+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AA 210716C00043000", "value": "21.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-17T16:23:09.097+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CLF 210716C00028000", "value": "48.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-17T16:26:06.897+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "DKNG 210716P00040000", "value": "53.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-17T16:40:21.042+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/S10YN21", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.11", "is-closing": false}, {"executed-at": "2021-06-17T16:46:15.705+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CLF 210716C00025000", "value": "76.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-17T16:52:18.575+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SNAP 210716C00065000", "value": "181.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-17T16:52:18.575+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SNAP 210716C00070000", "value": "75.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-06-17T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "36.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-18T15:50:21.395+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "ETH/USD", "value": "200.0", "value-effect": "Debit", "quantity": "0.0898952", "commission": "2.0", "clearing-fees": "0.0", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": false}, {"executed-at": "2021-06-18T16:09:11.592+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 210716P00031000", "value": "55.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-18T16:09:11.592+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FCX 210716C00040000", "value": "45.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-18T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "62.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-19T14:45:31.902+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.06", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-21T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "40.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-22T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "26.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-23T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "33.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-24T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "6.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-25T16:30:43.824+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/S10YN21", "value": "20.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.11", "is-closing": false}, {"executed-at": "2021-06-25T16:36:18.186+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "WKHS 210716P00009000", "value": "6.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-06-25T16:36:18.186+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "WKHS 210716P00014000", "value": "98.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-25T16:37:35.553+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AA 210716C00039000", "value": "127.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-25T16:37:35.554+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AA 210716P00031000", "value": "24.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-25T16:40:10.795+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FCX 210716C00040000", "value": "87.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-25T16:40:10.798+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FCX 210716P00031000", "value": "7.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-25T16:44:42.985+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CLF 210716C00025000", "value": "53.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-06-25T16:52:37.175+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "SPY 210716P00426000", "value": "396.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-25T16:52:37.175+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "SPY 210820P00426000", "value": "799.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-06-26T15:00:44.856+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-06-28T18:31:32.157+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 210820C00046000", "value": "26.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-06-28T18:31:32.160+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 210820P00036000", "value": "51.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-06T15:21:46.594+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 210820C00042000", "value": "48.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-06T15:21:46.594+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 210820C00046000", "value": "7.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-07T14:08:54.828+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/S10YN21", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.11", "is-closing": false}, {"executed-at": "2021-07-07T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "2.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-08T15:41:15.565+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SPY 210820P00426000", "value": "678.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-07-08T15:41:15.566+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SPY 210716P00426000", "value": "211.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-08T15:41:23.360+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "SNAP 210716C00065000", "value": "130.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-08T15:41:23.363+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "SNAP 210716C00070000", "value": "33.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-07-08T15:44:30.340+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XOP 210820C00105000", "value": "170.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-07-08T15:44:30.341+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XOP 210820C00100000", "value": "276.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-08T15:57:33.213+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FXI 210820P00041000", "value": "60.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-08T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "25.0", "value-effect": "Debit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-09T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "67.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-10T13:20:25.457+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.03", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-12T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YN21", "value": "5.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-13T12:13:02.794+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/S10YN21", "value": "14.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.11", "is-closing": false}, {"executed-at": "2021-07-13T13:32:48.015+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "FXI 210820P00041000", "value": "30.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-15T13:30:00.993+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "XOP 210820C00105000", "value": "45.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": true}, {"executed-at": "2021-07-15T13:30:00.993+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "XOP 210820C00100000", "value": "97.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-16T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.06", "value-effect": "Credit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-17T13:34:17.964+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-19T18:52:36.694+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AA 210820C00038000", "value": "39.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-19T18:52:36.696+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AA 210820P00028000", "value": "68.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-19T18:53:59.791+00:00", "transaction-type": "Trade", "action": "Buy", "symbol": "/S10YQ21", "value": "0.0", "value-effect": "None", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.11", "is-closing": false}, {"executed-at": "2021-07-19T19:00:37.276+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CCL 210820P00017500", "value": "56.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-19T19:04:15.000+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "IWM 210820C00222000", "value": "202.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-19T19:04:15.000+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "IWM 210820C00227000", "value": "99.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-07-19T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YQ21", "value": "11.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-20T17:17:13.536+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CCL 210820P00017500", "value": "24.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-20T21:00:00.000+00:00", "transaction-type": "Money Movement", "action": null, "symbol": "/S10YQ21", "value": "32.0", "value-effect": "Credit", "quantity": "1.0", "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}, {"executed-at": "2021-07-21T15:21:57.037+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "AA 210820P00032000", "value": "60.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-21T15:21:57.042+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AA 210820P00028000", "value": "14.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-21T15:23:07.567+00:00", "transaction-type": "Trade", "action": "Sell", "symbol": "/S10YQ21", "value": "57.0", "value-effect": "Credit", "quantity": "1.0", "commission": "0.25", "clearing-fees": "0.05", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.11", "is-closing": false}, {"executed-at": "2021-07-22T16:55:41.646+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CLF 210917C00030000", "value": "55.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-22T16:55:41.647+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CLF 210917P00017000", "value": "57.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-22T16:58:16.392+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XOP 210917C00100000", "value": "104.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-07-22T16:58:16.392+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XOP 210917P00067000", "value": "109.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-22T16:58:16.392+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "XOP 210917C00093000", "value": "219.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-22T16:58:16.393+00:00", "transaction-type": "Trade", "action": "Buy to Open", "symbol": "XOP 210917P00060000", "value": "57.0", "value-effect": "Debit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": false}, {"executed-at": "2021-07-23T18:46:25.643+00:00", "transaction-type": "Trade", "action": "Sell to Close", "symbol": "ETH/USD", "value": "181.4", "value-effect": "Credit", "quantity": "0.0898952", "commission": "1.81", "clearing-fees": "0.0", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.0", "is-closing": true}, {"executed-at": "2021-07-28T19:48:15.299+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 210820C00042000", "value": "27.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-28T19:48:15.302+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "EWZ 210820P00036000", "value": "28.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-29T13:51:26.413+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "FXI 210917P00038000", "value": "71.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-30T14:15:03.731+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AA 210820C00038000", "value": "345.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-30T14:15:03.735+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "AA 210820P00032000", "value": "10.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-30T14:23:44.588+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "EWZ 210917P00035000", "value": "61.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-30T14:34:10.082+00:00", "transaction-type": "Trade", "action": "Sell to Open", "symbol": "CLF 210917P00020000", "value": "54.0", "value-effect": "Credit", "quantity": "1.0", "commission": "1.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.042", "is-closing": false}, {"executed-at": "2021-07-30T14:34:10.083+00:00", "transaction-type": "Trade", "action": "Buy to Close", "symbol": "CLF 210917P00017000", "value": "19.0", "value-effect": "Debit", "quantity": "1.0", "commission": "0.0", "clearing-fees": "0.1", "proprietary-index-option-fees": "0.0", "regulatory-fees": "0.03", "is-closing": true}, {"executed-at": "2021-07-31T13:57:28.125+00:00", "transaction-type": "Money Movement", "action": null, "symbol": null, "value": "0.01", "value-effect": "Debit", "quantity": null, "commission": null, "clearing-fees": null, "proprietary-index-option-fees": null, "regulatory-fees": null, "is-closing": false}] \ No newline at end of file diff --git a/tests/test_pairs.py b/tests/test_pairs.py deleted file mode 100644 index 01987d8..0000000 --- a/tests/test_pairs.py +++ /dev/null @@ -1,32 +0,0 @@ -from math import floor - -from twcli.pairs import sizing - - -def test_sizing(): - """Apply test cases for pairs sizing""" - - args = dict(price_left=100, price_right=25, vol_left=2, vol_right=7, - unit_size_left=100, multiplier_left=1, multiplier_right=1) - - def msg(): - return f"Expected {exp:.2f} units, but calculated {act:.2f}." - - pair_specs = sizing.size(**args) - exp = 114 - act = floor(pair_specs['unit_size_right']) - assert act == exp, msg() - - args['multiplier_left'] = 100 - args['multiplier_right'] = 10 - pair_specs = sizing.size(**args) - exp = 1142 - act = floor(pair_specs['unit_size_right']) - assert act == exp, msg() - - args['multiplier_left'] = 1 - args['multiplier_right'] = 100 - pair_specs = sizing.size(**args) - exp = 1.14 - act = round(pair_specs['unit_size_right'], 2) - assert act == exp, msg() diff --git a/tests/test_plot.py b/tests/test_plot.py deleted file mode 100644 index c4a6c47..0000000 --- a/tests/test_plot.py +++ /dev/null @@ -1,60 +0,0 @@ -from decimal import Decimal as D - -import petl - -from twcli.plot.plot import _DURATIONS, Portfolio - -_DATABASE_PATH = 'tests/data/transactions.json' -_NET_LIQUIDITY = D(7018.60) -_NET_LIQUIDITY_PERCENT = D(215.87) -_REALIZED_PANDL = D(-1816.92) -_REALIZED_PANDL_PERCENT = D(-81.77) -_PRECISION = D('1.00') - - -def gen_portfolio(net_liq=False): - table = petl.fromjson(_DATABASE_PATH) - - return Portfolio(petl.data(table), net_liq=net_liq) - - -def test_plot_pandl(): - pf = gen_portfolio() - val = pf.plot('all', gen_img=False) - - print(val, type(val)) - assert val.quantize(_PRECISION) == _REALIZED_PANDL.quantize(_PRECISION) - - -def test_twcli_plot_netliq(): - # the value shouldn't change - for duration in _DURATIONS: - pf = gen_portfolio(True) - val = pf.plot('all', gen_img=False) - - assert val.quantize(_PRECISION) == _NET_LIQUIDITY.quantize(_PRECISION) - - -def test_plot_pandl_percent(): - pf = gen_portfolio() - pf_tmp = gen_portfolio(True) - nl = pf_tmp._get_starting_net_liq('all') - val = pf.plot('all', starting_net_liq=nl, gen_img=False) - - assert val.quantize(_PRECISION) == _REALIZED_PANDL_PERCENT.quantize(_PRECISION) - - -def test_plot_netliq_percent(): - pf = gen_portfolio(True) - pf_tmp = gen_portfolio(True) - nl = pf_tmp._get_starting_net_liq('all') - val = pf.plot('all', starting_net_liq=nl, gen_img=False) - - assert val.quantize(_PRECISION) == _NET_LIQUIDITY_PERCENT.quantize(_PRECISION) - - -def test_plot_positions(): - pf = gen_portfolio() - _ = pf.plot('all', gen_img=False) - - assert len(pf.positions) == 10 diff --git a/tests/test_quant.py b/tests/test_quant.py deleted file mode 100644 index 6010034..0000000 --- a/tests/test_quant.py +++ /dev/null @@ -1,22 +0,0 @@ -from twcli.quant import models as sc - - -def test_quant(): - # this is the simple test from the cookbook - # for european with bsm - m = sc.Model(price_underlying=100.0, price_strike=100, volatility=0.2, - rate_risk_free=0.01, date_expiration='2014-06-07', - date_evaluation='2014-03-07', option_type='call', - exercise_type='european',) - hyp = 4.155543462156206 - msg = 'Known model output should match calculated value.' - assert abs(m.option.NPV() - hyp) / hyp < 0.01, msg - - # for american with binomial - m = sc.Model(price_underlying=100.0, price_strike=100, volatility=0.2, - rate_risk_free=0.01, date_expiration='2014-06-07', - date_evaluation='2014-03-07', option_type='call', - exercise_type='american',) - hyp = 4.155543462156206 - msg = 'Known model output should match calculated value.' - assert abs(m.option.NPV() - hyp) / hyp < 0.01, msg diff --git a/twcli/__init__.py b/ttcli/__init__.py similarity index 100% rename from twcli/__init__.py rename to ttcli/__init__.py diff --git a/twcli/app.py b/ttcli/app.py similarity index 61% rename from twcli/app.py rename to ttcli/app.py index 12d520c..d6f59aa 100644 --- a/twcli/app.py +++ b/ttcli/app.py @@ -1,14 +1,10 @@ import asyncio -import logging import sys import asyncclick as click -from .option.commands import option -from .plot.commands import plot -from .utils import VERSION - -LOGGER = logging.getLogger(__name__) +from ttcli.option import option +from ttcli.utils import VERSION, logger @click.group() @@ -20,9 +16,8 @@ async def app(): def main(): if sys.version_info[0] == 3 and sys.version_info[1] >= 8 and sys.platform.startswith('win'): asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - LOGGER.debug('Using Windows-specific event loop policy') + logger.debug('Using Windows-specific event loop policy') app.add_command(option) - app.add_command(plot) app(_anyio_backend='asyncio') diff --git a/ttcli/option.py b/ttcli/option.py new file mode 100644 index 0000000..f4f2c57 --- /dev/null +++ b/ttcli/option.py @@ -0,0 +1,332 @@ +from datetime import date +from decimal import Decimal +from typing import Optional + +import asyncclick as click +from rich.console import Console +from rich.table import Table +from tastytrade import DXLinkStreamer +from tastytrade.dxfeed import EventType, Greeks, Quote +from tastytrade.instruments import NestedOptionChain, Option, OptionType +from tastytrade.order import NewOrder, PriceEffect, OrderType, OrderTimeInForce, OrderAction +from tastytrade.utils import get_tasty_monthly + +from ttcli.utils import RenewableSession, is_monthly, get_confirmation, print_error, print_warning + + +def choose_expiration( + chain: NestedOptionChain, + include_weeklies: bool = False +) -> date: + exps = [e.expiration_date for e in chain.expirations] + if not include_weeklies: + exps = [e for e in exps if is_monthly(e)] + default = exps.index(get_tasty_monthly()) + for i, exp in enumerate(exps): + if i == default: + print(f'{i + 1}) {exp} (default)') + else: + print(f'{i + 1}) {exp}') + choice = 0 + while choice not in range(1, len(exps) + 1): + try: + raw = input('Please choose an expiration: ') + choice = int(raw) + except ValueError: + if not raw: + return exps[default] + + return exps[choice - 1] + + +async def listen_quotes( + n_quotes: int, + streamer: DXLinkStreamer, + skip: str | None = None +) -> dict[str, Quote]: + quote_dict = {} + async for quote in streamer.listen(EventType.QUOTE): + if quote.eventSymbol != skip: + quote_dict[quote.eventSymbol] = quote + if len(quote_dict) == n_quotes: + return quote_dict + + +async def listen_greeks( + n_greeks: int, + streamer: DXLinkStreamer +) -> dict[str, Greeks]: + greeks_dict = {} + async for greeks in streamer.listen(EventType.GREEKS): + greeks_dict[greeks.eventSymbol] = greeks + if len(greeks_dict) == n_greeks: + return greeks_dict + + +@click.group(chain=True, help='Buy, sell, and analyze options.') +async def option(): + pass + + +@option.command(help='Buy or sell calls with the given parameters.') +@click.option('-s', '--strike', type=int, help='The chosen strike for the option.') +@click.option('-d', '--delta', type=int, help='The chosen delta for the option.') +@click.option('--gtc', is_flag=True, help='Place a GTC order instead of a day order.') +@click.option('--weeklies', is_flag=True, help='Show all expirations, not just monthlies.') +@click.argument('symbol', type=str) +@click.argument('quantity', type=int) +async def call(symbol: str, quantity: int, strike: Optional[int] = None, + gtc: bool = False, weeklies: bool = False, delta: Optional[int] = None): + if strike is not None and delta is not None: + print_error('Must specify either delta or strike, but not both.') + return + elif not strike and not delta: + print_error('Please specify either delta or strike for the option.') + return + elif abs(delta) > 99: + print_error('Delta value is too high, -99 <= delta <= 99') + return + + sesh = RenewableSession() + chain = NestedOptionChain.get_chain(sesh, symbol) + expiration = choose_expiration(chain, weeklies) + subchain = next(e for e in chain.expirations if e.expiration_date == expiration) + + async with DXLinkStreamer(sesh) as streamer: + if not strike: + dxfeeds = [s.call_streamer_symbol for s in subchain.strikes] + await streamer.subscribe(EventType.GREEKS, dxfeeds) + greeks_dict = await listen_greeks(len(dxfeeds), streamer) + greeks = list(greeks_dict.values()) + + lowest = 100 + selected = None + for g in greeks: + diff = abs(g.delta * Decimal(100) - delta) + if diff < lowest: + selected = g + lowest = diff + # set strike with the closest delta + strike = next(s.strike_price for s in subchain.strikes + if s.call_streamer_symbol == selected.eventSymbol) + + await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol]) + quote = await streamer.get_event(EventType.QUOTE) + mid = (quote.bidPrice + quote.askPrice) / Decimal(2) + + console = Console() + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} {strike}C {expiration}') + table.add_column('Bid', style='green', width=8, justify='center') + table.add_column('Mid', width=8, justify='center') + table.add_column('Ask', style='red', width=8, justify='center') + table.add_row(f'{quote.bidPrice:.2f}', f'{mid:.2f}', f'{quote.askPrice:.2f}') + console.print(table) + + price = input('Please enter a limit price per quantity (default mid): ') + if not price: + price = round(mid, 2) + price = Decimal(price) + + call = Option.get_option(sesh, next(s.call for s in subchain.strikes if s.strike_price == strike)) + order = NewOrder( + time_in_force=OrderTimeInForce.GTC if gtc else OrderTimeInForce.DAY, + order_type=OrderType.LIMIT, + legs=[call.build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN)], + price=price, + price_effect=PriceEffect.CREDIT if quantity < 0 else PriceEffect.DEBIT + ) + acc = sesh.get_account() + nl = acc.get_balances(sesh).net_liquidating_value + + data = acc.place_order(sesh, order, dry_run=True) + bp = data.buying_power_effect.change_in_buying_power + percent = bp / nl * Decimal(100) + fees = data.fee_calculation.total_fees + + table = Table(show_header=True, header_style='bold', title_style='bold', title='Order Review') + table.add_column('Quantity', width=8, justify='center') + table.add_column('Symbol', width=8, justify='center') + table.add_column('Strike', width=8, justify='center') + table.add_column('Type', width=8, justify='center') + table.add_column('Expiration', width=10, justify='center') + table.add_column('Price', width=8, justify='center') + table.add_column('BP', width=8, justify='center') + table.add_column('% of NL', width=8, justify='center') + table.add_column('Fees', width=8, justify='center') + table.add_row(f'{quantity}', symbol, f'${strike:.2f}', 'CALL', f'{expiration}', f'${price:.2f}', + f'${bp:.2f}', f'{percent:.2f}%', f'${fees:.2f}') + console.print(table) + + if data.warnings: + for warning in data.warnings: + print_warning(warning.message) + if get_confirmation('Send order? Y/n '): + acc.place_order(sesh, order, dry_run=False) + + +@option.command(help='Buy or sell puts with the given parameters.') +@click.option('-s', '--strike', type=int, help='The chosen strike for the option.') +@click.option('-d', '--delta', type=int, help='The chosen delta for the option.') +@click.option('--gtc', is_flag=True, help='Place a GTC order instead of a day order.') +@click.option('--weeklies', is_flag=True, help='Show all expirations, not just monthlies.') +@click.argument('symbol', type=str) +@click.argument('quantity', type=int) +async def put(symbol: str, quantity: int, strike: Optional[int] = None, + gtc: bool = False, weeklies: bool = False, delta: Optional[int] = None): + if strike is not None and delta is not None: + print_error('Must specify either delta or strike, but not both.') + return + elif not strike and not delta: + print_error('Please specify either delta or strike for the option.') + return + elif abs(delta) > 99: + print_error('Delta value is too high, -99 <= delta <= 99') + return + + sesh = RenewableSession() + chain = NestedOptionChain.get_chain(sesh, symbol) + expiration = choose_expiration(chain, weeklies) + subchain = next(e for e in chain.expirations if e.expiration_date == expiration) + + async with DXLinkStreamer(sesh) as streamer: + if not strike: + dxfeeds = [s.put_streamer_symbol for s in subchain.strikes] + await streamer.subscribe(EventType.GREEKS, dxfeeds) + greeks_dict = await listen_greeks(len(dxfeeds), streamer) + greeks = list(greeks_dict.values()) + + lowest = 100 + selected = None + for g in greeks: + diff = abs(g.delta * Decimal(100) - delta) + if diff < lowest: + selected = g + lowest = diff + # set strike with the closest delta + strike = next(s.strike_price for s in subchain.strikes + if s.put_streamer_symbol == selected.eventSymbol) + + await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol]) + quote = await streamer.get_event(EventType.QUOTE) + mid = (quote.bidPrice + quote.askPrice) / Decimal(2) + + console = Console() + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} {strike}P {expiration}') + table.add_column('Bid', style='green', width=8, justify='center') + table.add_column('Mid', width=8, justify='center') + table.add_column('Ask', style='red', width=8, justify='center') + table.add_row(f'{quote.bidPrice:.2f}', f'{mid:.2f}', f'{quote.askPrice:.2f}') + console.print(table) + + price = input('Please enter a limit price per quantity (default mid): ') + if not price: + price = round(mid, 2) + price = Decimal(price) + + put = Option.get_option(sesh, next(s.put for s in subchain.strikes if s.strike_price == strike)) + order = NewOrder( + time_in_force=OrderTimeInForce.GTC if gtc else OrderTimeInForce.DAY, + order_type=OrderType.LIMIT, + legs=[put.build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN)], + price=price, + price_effect=PriceEffect.CREDIT if quantity < 0 else PriceEffect.DEBIT + ) + acc = sesh.get_account() + nl = acc.get_balances(sesh).net_liquidating_value + + data = acc.place_order(sesh, order, dry_run=True) + bp = data.buying_power_effect.change_in_buying_power + percent = bp / nl * Decimal(100) + fees = data.fee_calculation.total_fees + + table = Table(show_header=True, header_style='bold', title_style='bold', title='Order Review') + table.add_column('Quantity', width=8, justify='center') + table.add_column('Symbol', width=8, justify='center') + table.add_column('Strike', width=8, justify='center') + table.add_column('Type', width=8, justify='center') + table.add_column('Expiration', width=10, justify='center') + table.add_column('Price', width=8, justify='center') + table.add_column('BP', width=8, justify='center') + table.add_column('% of NL', width=8, justify='center') + table.add_column('Fees', width=8, justify='center') + table.add_row(f'{quantity}', symbol, f'${strike:.2f}', 'PUT', f'{expiration}', f'${price:.2f}', + f'${bp:.2f}', f'{percent:.2f}%', f'${fees:.2f}') + console.print(table) + + if data.warnings: + for warning in data.warnings: + print_warning(warning.message) + if get_confirmation('Send order? Y/n '): + acc.place_order(sesh, order, dry_run=False) + + +@option.command(help='Fetch and display an options chain.') +@click.option('-w', '--weeklies', is_flag=True, + help='Show all expirations, not just monthlies.') +@click.option('-s', '--strikes', type=int, default=8, + help='The number of strikes to fetch above and below the spot price.') +@click.argument('symbol', type=str) +async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): + sesh = RenewableSession() + strike_price = None + async with DXLinkStreamer(sesh) as streamer: + await streamer.subscribe(EventType.QUOTE, [symbol]) + quote = await streamer.get_event(EventType.QUOTE) + strike_price = (quote.bidPrice + quote.askPrice) / 2 + + chain = NestedOptionChain.get_chain(sesh, symbol) + expiration = choose_expiration(chain, weeklies) + subchain = next(e for e in chain.expirations if e.expiration_date == expiration) + + console = Console() + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Options chain for {symbol} on {expiration}') + table.add_column('Delta', width=8, justify='center') + table.add_column('Bid', style='red', width=8, justify='center') + table.add_column('Ask', style='red', width=8, justify='center') + table.add_column('Strike', width=8, justify='center') + table.add_column('Bid', style='green', width=8, justify='center') + table.add_column('Ask', style='green', width=8, justify='center') + table.add_column('Delta', width=8, justify='center') + + if strikes * 2 < len(subchain.strikes): + mid_index = 0 + while subchain.strikes[mid_index].strike_price < strike_price: + mid_index += 1 + all_strikes = subchain.strikes[mid_index - strikes:mid_index + strikes] + else: + all_strikes = subchain.strikes + + dxfeeds = ([s.call_streamer_symbol for s in all_strikes] + + [s.put_streamer_symbol for s in all_strikes]) + await streamer.subscribe(EventType.QUOTE, dxfeeds) + await streamer.subscribe(EventType.GREEKS, dxfeeds) + + greeks_dict = await listen_greeks(len(dxfeeds), streamer) + # take into account the symbol we subscribed to + quote_dict = await listen_quotes(len(dxfeeds), streamer, skip=symbol) + + for i, strike in enumerate(all_strikes): + put_bid = quote_dict[strike.put_streamer_symbol].bidPrice + put_ask = quote_dict[strike.put_streamer_symbol].askPrice + put_delta = int(greeks_dict[strike.put_streamer_symbol].delta * 100) + call_bid = quote_dict[strike.call_streamer_symbol].bidPrice + call_ask = quote_dict[strike.call_streamer_symbol].askPrice + call_delta = int(greeks_dict[strike.call_streamer_symbol].delta * 100) + + table.add_row( + f'{put_delta:g}', + f'{put_bid:.2f}', + f'{put_ask:.2f}', + f'{strike.strike_price:.2f}', + f'{call_bid:.2f}', + f'{call_ask:.2f}', + f'{call_delta:g}' + ) + if i == strikes - 1: + table.add_row('=======', 'ITM v', '=======', '=======', + '=======', 'ITM ^', '=======', style='white') + + console.print(table) diff --git a/ttcli/utils.py b/ttcli/utils.py new file mode 100644 index 0000000..bee2e04 --- /dev/null +++ b/ttcli/utils.py @@ -0,0 +1,119 @@ +import getpass +import logging +import os +import pickle +import shutil +import sys +from configparser import ConfigParser +from datetime import date +from decimal import Decimal + +from rich import print +from tastytrade import Account, ProductionSession + +logger = logging.getLogger(__name__) +VERSION = '2.0' +ZERO = Decimal(0) + +CUSTOM_CONFIG_PATH = '.config/ttcli/ttcli.cfg' +DEFAULT_CONFIG_PATH = 'etc/ttcli.cfg' +TOKEN_PATH = '.config/ttcli/.session' + + +def print_error(msg: str): + print(f'[bold red]Error: {msg}[/bold red]') + + +def print_warning(msg: str): + print(f'[light_coral]Warning: {msg}[/light_coral]') + + +class RenewableSession(ProductionSession): + def __init__(self): + custom_path = os.path.join(os.path.expanduser('~'), CUSTOM_CONFIG_PATH) + default_path = os.path.join(sys.prefix, DEFAULT_CONFIG_PATH) + token_path = os.path.join(os.path.expanduser('~'), TOKEN_PATH) + + # load config + self.config = ConfigParser() + if not os.path.exists(custom_path): + # copy default config to user home dir + os.makedirs(os.path.dirname(custom_path), exist_ok=True) + shutil.copyfile(default_path, custom_path) + self.config.read(default_path) + self.config.read(custom_path) + + logged_in = False + # try to load token + if os.path.exists(token_path): + with open(token_path, 'rb') as f: + self.__dict__ = pickle.load(f) + + # make sure token hasn't expired + logged_in = self.validate() + + if not logged_in: + # either the token expired or doesn't exist + username, password = self._get_credentials() + ProductionSession.__init__(self, username, password) + + accounts = Account.get_accounts(self) + self.accounts = [acc for acc in accounts if not acc.is_closed] + # write session token to cache + os.makedirs(os.path.dirname(token_path), exist_ok=True) + with open(token_path, 'wb') as f: + pickle.dump(self.__dict__, f) + logger.debug('Logged in with new session, cached for next login.') + else: + logger.debug('Logged in with cached session.') + + def _get_credentials(self): + username = (self.config['general'].get('username') or + os.getenv('TTCLI_USERNAME')) + if not username: + username = getpass.getpass('Username: ') + password = (self.config['general'].get('password') or + os.getenv('TTCLI_PASSWORD')) + if not password: + password = getpass.getpass('Password: ') + + return username, password + + def get_account(self) -> Account: + account = self.config['general'].get('default-account', None) + if account: + try: + return next(a for a in self.accounts if a.account_number == account) + except StopIteration: + print_warning('Default account is set, but the account doesn\'t appear to exist!') + + for i in range(len(self.accounts)): + if i == 0: + print(f'{i + 1}) {self.accounts[i].account_number} ' + f'{self.accounts[i].nickname} (default)') + else: + print(f'{i + 1}) {self.accounts[i].account_number} {self.accounts[i].nickname}') + choice = 0 + while choice not in range(1, len(self.accounts) + 1): + try: + raw = input('Please choose an account: ') + choice = int(raw) + except ValueError: + if not raw: + return self.accounts[0] + return self.accounts[choice - 1] + + +def is_monthly(day: date) -> bool: + return day.weekday() == 4 and 15 <= day.day <= 21 + + +def get_confirmation(prompt: str) -> bool: + while True: + answer = input(prompt).lower() + if not answer: + return True + if answer[0] == 'y': + return True + if answer[0] == 'n': + return False diff --git a/twcli/future/__init__.py b/twcli/future/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/twcli/future/commands.py b/twcli/future/commands.py deleted file mode 100644 index 24eb08c..0000000 --- a/twcli/future/commands.py +++ /dev/null @@ -1,36 +0,0 @@ -import asyncclick as click - - -@click.group(chain=True, help='Buy, sell, and analyze futures.') -async def future(): - pass - - -@future.command() -@click.argument('quantity') -@click.argument('symbol') -@click.argument('price') -async def buy(quantity, symbol, price): - """Buy QUANTITY contracts of SYMBOL. - PRICE is the limit price per contract. - """ - print(f'Buying {quantity}x {symbol} @ ${price}') - - -@future.command() -@click.argument('quantity') -@click.argument('symbol') -@click.argument('price') -async def sell(quantity, symbol, price): - """Sell QUANTITY contracts of SYMBOL. - PRICE is the limit price per contract. - """ - print(f'Selling {quantity}x {symbol} @ ${price}') - - -@future.command() -@click.argument('symbol') -async def spot(symbol): - """Look up the current bid/ask for SYMBOL. - """ - print('Current price: Who the heck knows?') diff --git a/twcli/option/__init__.py b/twcli/option/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/twcli/option/commands.py b/twcli/option/commands.py deleted file mode 100644 index 4846269..0000000 --- a/twcli/option/commands.py +++ /dev/null @@ -1,338 +0,0 @@ -from decimal import Decimal -from typing import Optional - -import asyncclick as click -from rich.console import Console -from rich.table import Table -from tastyworks.models.option import Option, OptionType -from tastyworks.models.option_chain import get_option_chain -from tastyworks.models.order import (Order, OrderDetails, OrderPriceEffect, - OrderType) -from tastyworks.models.underlying import Underlying, UnderlyingType -from tastyworks.streamer import DataStreamer - -from ..utils import (RenewableTastyAPISession, TastyworksCLIError, get_account, - get_confirmation) -from .option import choose_expiration - - -@click.group(chain=True, help='Buy, sell, and analyze options.') -async def option(): - pass - - -@option.command(help='Buy or sell calls with the given parameters.') -@click.option('-s', '--strike', type=int, help='The chosen strike for the option.') -@click.option('-d', '--delta', type=int, help='The chosen delta for the option.') -@click.option('--all-expirations', is_flag=True, help='Show all expirations, not just monthlies.') -@click.argument('underlying', type=str) -@click.argument('quantity', type=int) -async def call(underlying: str, quantity: int, strike: Optional[int] = None, - all_expirations: Optional[bool] = False, delta: Optional[int] = None): - if strike is not None and delta is not None: - raise TastyworksCLIError('Must specify either delta or strike, but not both.') - elif not strike and not delta: - raise TastyworksCLIError('Please specify either delta or strike for the option.') - elif abs(delta) > 100: - raise TastyworksCLIError('Delta value is too high, -100 <= delta <= 100') - - sesh = await RenewableTastyAPISession.create() - undl = Underlying(underlying) - expiration = await choose_expiration(sesh, undl, all_expirations) - streamer = await DataStreamer.create(sesh) - - if not strike: - chain = await get_option_chain(sesh, undl, expiration) - dxfeeds = [option.symbol_dxf for option in chain.options if option.option_type == OptionType.CALL] - greeks = await streamer.stream('Greeks', dxfeeds) - - lowest = abs(greeks[0]['delta'] * 100.0 - delta) - index = 0 - for i in range(1, len(greeks)): - diff = abs(greeks[i]['delta'] * 100.0 - delta) - if diff < lowest: - index = i - lowest = diff - for option in chain.options: - if option.symbol_dxf == greeks[index]['eventSymbol']: - strike = option.strike - break - - option = Option( - ticker=underlying, - quantity=abs(quantity), - expiry=expiration, - strike=strike, - option_type=OptionType.CALL, - underlying_type=UnderlyingType.EQUITY - ) - quote = await streamer.stream('Quote', [option.symbol_dxf]) - bid = quote[0]['bidPrice'] - ask = quote[0]['askPrice'] - mid = (bid + ask) / 2 - - await streamer.close() - - console = Console() - table = Table(show_header=True, header_style='bold', title_style='bold', - title=f'Quote for {underlying} {strike}C {expiration}') - table.add_column('Bid', style='green', width=8, justify='center') - table.add_column('Mid', width=8, justify='center') - table.add_column('Ask', style='red', width=8, justify='center') - table.add_row(f'{bid:.2f}', f'{mid:.2f}', f'{ask:.2f}') - console.print(table) - - price = input('Please enter a limit price for the entire order (default mid): ') - if not price: - price = round(mid * abs(quantity), 2) - price = Decimal(price) - - details = OrderDetails( - type=OrderType.LIMIT, - price=price, - price_effect=OrderPriceEffect.CREDIT if quantity < 0 else OrderPriceEffect.DEBIT - ) - order = Order(details) - order.add_leg(option) - - acct = await get_account(sesh) - details = await acct.get_balance(sesh) - nl = Decimal(details['net-liquidating-value']) - - data = await acct.execute_order(order, sesh, dry_run=True) - bp = Decimal(data['buying-power-effect']['change-in-buying-power']) - percent = bp / nl * Decimal(100) - # bp_effect = data['buying-power-effect']['change-in-buying-power-effect'] - fees = Decimal(data['fee-calculation']['total-fees']) - - table = Table(show_header=True, header_style='bold', title_style='bold', title='Order Review') - table.add_column('Quantity', width=8, justify='center') - table.add_column('Symbol', width=8, justify='center') - table.add_column('Strike', width=8, justify='center') - table.add_column('Type', width=8, justify='center') - table.add_column('Expiration', width=10, justify='center') - table.add_column('Price', width=8, justify='center') - table.add_column('BP', width=8, justify='center') - table.add_column('% of NL', width=8, justify='center') - table.add_column('Fees', width=8, justify='center') - table.add_row(f'{quantity}', underlying, f'{strike:.2f}', 'CALL', f'{expiration}', f'${price:.2f}', - f'${bp:.2f}', f'{percent:.2f}%', f'${fees}') - console.print(table) - - if data['warnings']: - console.print('[bold orange]Warnings:[/bold orange]') - for warning in data['warnings']: - console.print(f'[i gray]{warning}[/i gray]') - if get_confirmation('Send order? Y/n '): - await acct.execute_order(order, sesh, dry_run=False) - - -@option.command(help='Buy or sell puts with the given parameters.') -@click.option('-s', '--strike', type=int, help='The chosen strike for the option.') -@click.option('-d', '--delta', type=int, help='The chosen delta for the option.') -@click.option('--all-expirations', is_flag=True, help='Show all expirations, not just monthlies.') -@click.argument('underlying', type=str) -@click.argument('quantity', type=int) -async def put(underlying: str, quantity: int, strike: Optional[int] = None, - all_expirations: Optional[bool] = False, delta: Optional[int] = None): - if strike is not None and delta is not None: - raise TastyworksCLIError('Must specify either delta or strike, but not both.') - elif not strike and not delta: - raise TastyworksCLIError('Please specify either delta or strike for the option.') - elif abs(delta) > 100: - raise TastyworksCLIError('Delta value is too high, -100 <= delta <= 100') - - sesh = await RenewableTastyAPISession.create() - undl = Underlying(underlying) - expiration = await choose_expiration(sesh, undl, all_expirations) - streamer = await DataStreamer.create(sesh) - - if not strike: - chain = await get_option_chain(sesh, undl, expiration) - dxfeeds = [option.symbol_dxf for option in chain.options if option.option_type == OptionType.PUT] - greeks = await streamer.stream('Greeks', dxfeeds) - - lowest = abs(greeks[0]['delta'] * 100.0 + delta) - index = 0 - for i in range(1, len(greeks)): - diff = abs(greeks[i]['delta'] * 100.0 + delta) - if diff < lowest: - index = i - lowest = diff - for option in chain.options: - if option.symbol_dxf == greeks[index]['eventSymbol']: - strike = option.strike - break - - option = Option( - ticker=underlying, - quantity=abs(quantity), - expiry=expiration, - strike=strike, - option_type=OptionType.PUT, - underlying_type=UnderlyingType.EQUITY - ) - quote = await streamer.stream('Quote', [option.symbol_dxf]) - bid = quote[0]['bidPrice'] - ask = quote[0]['askPrice'] - mid = (bid + ask) / 2 - - await streamer.close() - - console = Console() - table = Table(show_header=True, header_style='bold', title_style='bold', - title=f'Quote for {underlying} {strike}P {expiration}') - table.add_column('Bid', style='green', width=8, justify='center') - table.add_column('Mid', width=8, justify='center') - table.add_column('Ask', style='red', width=8, justify='center') - table.add_row(f'{bid:.2f}', f'{mid:.2f}', f'{ask:.2f}') - console.print(table) - - price = input('Please enter a limit price for the entire order (default mid): ') - if not price: - price = round(mid * abs(quantity), 2) - price = Decimal(price) - - details = OrderDetails( - type=OrderType.LIMIT, - price=price, - price_effect=OrderPriceEffect.CREDIT if quantity < 0 else OrderPriceEffect.DEBIT - ) - order = Order(details) - order.add_leg(option) - - acct = await get_account(sesh) - details = await acct.get_balance(sesh) - nl = Decimal(details['net-liquidating-value']) - - data = await acct.execute_order(order, sesh, dry_run=True) - bp = Decimal(data['buying-power-effect']['change-in-buying-power']) - percent = bp / nl * Decimal(100) - # bp_effect = data['buying-power-effect']['change-in-buying-power-effect'] - fees = Decimal(data['fee-calculation']['total-fees']) - - table = Table(show_header=True, header_style='bold', title_style='bold', title='Order Review') - table.add_column('Quantity', width=8, justify='center') - table.add_column('Symbol', width=8, justify='center') - table.add_column('Strike', width=8, justify='center') - table.add_column('Type', width=8, justify='center') - table.add_column('Expiration', width=10, justify='center') - table.add_column('Price', width=8, justify='center') - table.add_column('BP', width=8, justify='center') - table.add_column('% of NL', width=8, justify='center') - table.add_column('Fees', width=8, justify='center') - table.add_row(f'{quantity}', underlying, f'{strike:.2f}', 'PUT', f'{expiration}', f'${price:.2f}', - f'${bp:.2f}', f'{percent:.2f}%', f'${fees}') - console.print(table) - - if data['warnings']: - console.print('[bold orange]Warnings:[/bold orange]') - for warning in data['warnings']: - message = warning['message'] - console.print(f'[orange]{message}') - if get_confirmation('Send order? Y/n '): - await acct.execute_order(order, sesh, dry_run=False) - - -@option.command(help='Fetch and display an options chain.') -@click.option('--all-expirations', is_flag=True, help='Show all expirations, not just monthlies.') -@click.option('-s', '--strikes', type=int, default=8, - help='The number of strikes to fetch above and below the spot price.') -@click.argument('underlying', type=str) -async def chain(underlying: str, strikes: Optional[int] = None, all_expirations: Optional[bool] = False): - sesh = await RenewableTastyAPISession.create() - undl = Underlying(underlying) - - strike_price = 0 - streamer = await DataStreamer.create(sesh) - quote = await streamer.stream('Quote', [underlying]) - bid = quote[0]['bidPrice'] - ask = quote[0]['askPrice'] - strike_price = (bid + ask) / 2 - - expiration = await choose_expiration(sesh, undl, all_expirations) - - console = Console() - table = Table(show_header=True, header_style='bold', title_style='bold', - title=f'Options chain for {underlying} on {expiration}') - table.add_column('Delta', width=8, justify='center') - table.add_column('Bid', style='red', width=8, justify='center') - table.add_column('Ask', style='red', width=8, justify='center') - table.add_column('Strike', width=8, justify='center') - table.add_column('Bid', style='green', width=8, justify='center') - table.add_column('Ask', style='green', width=8, justify='center') - table.add_column('Delta', width=8, justify='center') - - chain = await get_option_chain(sesh, undl, expiration) - puts = [] - calls = [] - for option in chain.options: - if option.option_type == OptionType.CALL: - calls.append(option) - else: - puts.append(option) - - puts_to_fetch = [] - calls_to_fetch = [] - if strikes * 2 < len(calls): - mid_index = 0 - while calls[mid_index].strike < strike_price: - mid_index += 1 - # handle weird edge scenarios here - for call in calls[mid_index - strikes:mid_index + strikes]: - calls_to_fetch.append(call) - for put in puts[mid_index - strikes:mid_index + strikes]: - puts_to_fetch.append(put) - else: - for call in calls: - calls_to_fetch.append(call) - for put in puts: - puts_to_fetch.append(put) - - dxfeeds = [call.symbol_dxf for call in calls_to_fetch] + [put.symbol_dxf for put in puts_to_fetch] - quotes = await streamer.stream('Quote', dxfeeds) - greeks = await streamer.stream('Greeks', dxfeeds) - - for i in range(len(calls_to_fetch)): - call_dxf = calls_to_fetch[i].symbol_dxf - put_dxf = puts_to_fetch[i].symbol_dxf - strike = calls_to_fetch[i].strike - put_bid = 0 - put_ask = 0 - put_delta = 0 - call_bid = 0 - call_ask = 0 - call_delta = 0 - for item in quotes: - if item['eventSymbol'] == put_dxf: - put_bid = item['bidPrice'] - put_ask = item['askPrice'] - break - for item in greeks: - if item['eventSymbol'] == put_dxf: - put_delta = int(item['delta'] * 100) - break - for item in quotes: - if item['eventSymbol'] == call_dxf: - call_bid = item['bidPrice'] - call_ask = item['askPrice'] - break - for item in greeks: - if item['eventSymbol'] == call_dxf: - call_delta = int(item['delta'] * 100) - break - - table.add_row( - f'{put_delta:g}', - f'{put_bid:.2f}', - f'{put_ask:.2f}', - f'{strike:.2f}', - f'{call_bid:.2f}', - f'{call_ask:.2f}', - f'{call_delta:g}' - ) - if i == strikes - 1: - table.add_row('=======', 'ITM v', '=======', '=======', '=======', 'ITM ^', '=======', style='white') - - await streamer.close() - console.print(table) diff --git a/twcli/option/option.py b/twcli/option/option.py deleted file mode 100644 index 5044bd6..0000000 --- a/twcli/option/option.py +++ /dev/null @@ -1,31 +0,0 @@ -from datetime import date -from typing import Optional - -from tastyworks.models.option_chain import get_option_chain -from tastyworks.models.underlying import Underlying - -from ..utils import RenewableTastyAPISession, get_tasty_monthly, is_monthly - - -async def choose_expiration(sesh: RenewableTastyAPISession, undl: Underlying, - all_expirations: Optional[bool] = False) -> date: - chain = await get_option_chain(sesh, undl) - exps = chain.get_all_expirations() - if not all_expirations: - exps = [exp for exp in exps if is_monthly(exp)] - default = get_tasty_monthly() - for i in range(len(exps)): - if exps[i] == default: - print(f'{i + 1}) {exps[i]} (default)') - else: - print(f'{i + 1}) {exps[i]}') - choice = 0 - while choice not in range(1, len(exps) + 1): - try: - raw = input('Please choose an expiration: ') - choice = int(raw) - except ValueError: - if not raw: - return default - - return exps[choice - 1] diff --git a/twcli/pairs/__init__.py b/twcli/pairs/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/twcli/pairs/commands.py b/twcli/pairs/commands.py deleted file mode 100644 index 9ecca4e..0000000 --- a/twcli/pairs/commands.py +++ /dev/null @@ -1,69 +0,0 @@ -import asyncclick as click - -from .sizing import size as size_pair - - -def summarize(pair_specs): - """Summarize pairs calculation""" - print(f"\nFor {pair_specs['unit_size_right']:,.2f} units in the left " - f"leg, trade {pair_specs['unit_size_left']:,.2f} in the right " - f"leg. \n") - - -@click.group(chain=True, help='Evaluate and size pairs trades.') -async def pairs(): - pass - - -@pairs.command(help='Calculate volatility-weighted size for each leg. ') -@click.option('-i', '--interactive-mode', is_flag=True, - help='Query inputs from user.') -@click.option('-l', '--price-left', type=float, default=1, - help='Price of left leg.') -@click.option('-r', '--price-right', type=float, default=1, - help='Price of right leg.') -@click.option('-v', '--vol-left', type=float, default=1, - help='Volatility measure of left leg.') -@click.option('-o', '--vol-right', type=float, default=1, - help='Volatility measure of right leg.') -@click.option('-s', '--unit-size-left', type=float, default=1, - help='Number of units for left leg.') -@click.option('-m', '--multiplier-left', type=float, default=1, - help='Unit multplier for left leg.') -@click.option('-u', '--multiplier-right', type=float, default=1, - help='Unit multplier for right leg.') -async def size(interactive_mode, price_left, price_right, vol_left, vol_right, - unit_size_left, multiplier_left, multiplier_right): - if interactive_mode: - args = dict() - args['unit_size_left'] = 1 - args['multiplier_left'] = 1 - args['multiplier_right'] = 1 - c = ['unit_size_left', 'price_left', 'vol_left', 'multiplier_left', - 'price_right', 'vol_right', 'multiplier_right', ] - for k in c: - if k in args: - v = input(f"enter value for {k} (default={args[k]:.2f}) > ") - if v: - args[k] = float(v) - else: - args[k] = float(input(f"enter value for {k} > ")) - pair_specs = size_pair(**args) - summarize(pair_specs) - print('Below are the arguments to replicate: \n') - print( - f" tw pairs size " - f"-s {pair_specs['unit_size_left']:.2f} " - f"-l {pair_specs['price_left']:.2f} " - f"-v {pair_specs['vol_left']:.2f} " - f"-m {pair_specs['multiplier_left']:.2f} " - f"-r {pair_specs['price_right']:.2f} " - f"-o {pair_specs['vol_right']:.2f} " - f"-u {pair_specs['multiplier_right']:.2f} \n" - ) - - else: - pair_specs = size_pair(price_left, price_right, vol_left, vol_right, - unit_size_left, multiplier_left, - multiplier_right) - summarize(pair_specs) diff --git a/twcli/pairs/sizing.py b/twcli/pairs/sizing.py deleted file mode 100644 index f96b467..0000000 --- a/twcli/pairs/sizing.py +++ /dev/null @@ -1,113 +0,0 @@ -"""Funcs to calculate size of pair""" - - -def size(price_left=1, price_right=1, vol_left=1, vol_right=1, unit_size_left=1, - multiplier_left=1, multiplier_right=1): - """Calculate volatility weighted size for each leg of pairs trade - - Calculate the number of units for each leg of a pairs trade by - passing the price of both legs and optionally the share size of one - leg and multipliers in the case of futures. Returns a dict with the - given arguments and the number of units for each leg. - - It is often desirable to equate the level of risk for each leg of a - pairs trade. This risk depends on both the equity value and the - volatility of each leg. - - For example, suppose a pairs trade consists of two legs. The first - leg is long stock ABC, which trades for $100 per share and has a - 30-day historical standard deviation of 2%. The second leg is a - short position in stock XYZ, which trades for $25 per share and has - a standard deviation of 7%. How many shares of each stock should be - traded to create a neutral pairs trade? - - Clearly, if 100 shares of each leg were traded, the risk in one leg - would be much greater than the other. So, we want to equate the - equity of each leg: - - abc_shares * abc_price = xyz_shares * xyz_price - left_shares * left_price = right_shares * right_price - - ...where we have arbitrarily defined ABC as the "left" side of the - trade. - - However, the above equation fails to adequately equate the risk in - each leg; since the volatility of XYZ is 7% and the volatility of - ABC is 2%, sizing the trade based on the above equation would put - more risk in the XYZ leg than the ABC leg. - - So, to equate the risk in each leg, we add a measure of volatility - to the prior equation: - - left_shares * left_price * left_vol = right_shares * right_price * right_vol - - Compared to the prior equation, this equation reduces the number of - shares traded in XYZ, since the risk is larger in each unit of - equity for XYZ, because XYZ has higher volatility. - - Now, suppose that we're comfortable trading 100 shares of ABC and we - want to now calculate the quantity of XYZ shares to trade. We can do - a simple algebriac manipulation to calculate the number of shares: - - right_shares = (left_shares * left_price * left_vol) / (right_price * right_vol) - = (100 * 100 * 2) / (25 * 7) - = 114.28 - - ..and this can be plugged back into the original equation as a - check. - - In the case of a futures contract, the *notional value* must be - calculated in order to volatility-weight each leg: - - left_units * left_multiplier * left_price * left_vol = - right_units * right_multiplier * right_price * right_vol - - ...where the multiplier is a number used to convert the futures - price into the notional value of the futures contract. In the case - where both legs are a stock, the multipliers are simply 1. To - calculate the number of units for the right leg: - - left_units = - (right_units * right_multiplier * right_price * right_vol) / - (left_multiplier * left_price * left_vol) - - Parameters - ---------- - price_left, price_right : float - The entry prices for each leg of the pair, left and right. - - vol_left, vol_right : float - A measure of volatility for each leg of the pair, left and - right. - - unit_size_left : float - The number of units (e.g. shares) that compose the left leg of - the pair. Optional, default is 1 unit. - - multiplier_left, multiplier_right : float - Multiplier for each leg of the pair, left and right. The - multiplier is a number that translates the asset price into the - notional (equity) value of one unit of the asset. In the case of - a stock, the mulitplier is simply 1. The multiplier for futures - contracts depends on the specifications of the contract. - Optional, default is 1. - - Returns - ------- - pair_specs : dict - Dict with keys multiplier_left, multiplier_right, price_left, - price_right, unit_size_left, unit_size_right, vol_left, - and vol_right. - - """ - unit_size_right = \ - (vol_left * price_left * multiplier_left * unit_size_left) / \ - (vol_right * price_right * multiplier_right) - - pair_specs = dict(vol_left=vol_left, price_left=price_left, - multiplier_left=multiplier_left, - multiplier_right=multiplier_right, - unit_size_left=unit_size_left, vol_right=vol_right, - price_right=price_right, unit_size_right=unit_size_right) - - return pair_specs diff --git a/twcli/plot/__init__.py b/twcli/plot/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/twcli/plot/commands.py b/twcli/plot/commands.py deleted file mode 100644 index 2ac11e9..0000000 --- a/twcli/plot/commands.py +++ /dev/null @@ -1,57 +0,0 @@ -from typing import Optional - -import asyncclick as click -import petl - -from ..utils import RenewableTastyAPISession, get_account -from .plot import Portfolio - - -@click.command(help='Chart your net liquidity or realized profit/loss over time.') -@click.option('-n', '--netliq', is_flag=True, - help='Display net liquidity over time instead of realized profit/loss.') -@click.option('-p', '--percentage', is_flag=True, - help='Whether to display percentages instead of absolute values in the chart.') -@click.option('-d', '--duration', default='ytd', - help='Possible values: {all,10y,5y,1y,ytd,6m,3m,1m,5d}') -async def plot(netliq: Optional[bool] = False, percentage: Optional[bool] = False, duration: Optional[str] = None): - sesh = await RenewableTastyAPISession.create() - # choose an account - acc = await get_account(sesh) - history = await acc.get_history(sesh) - - table = petl.fromdicts(history).cut( - 'executed-at', - 'transaction-type', - 'action', - 'symbol', - 'value', - 'value-effect', - 'quantity', - 'commission', - 'clearing-fees', - 'proprietary-index-option-fees', - 'regulatory-fees' - ).addfield('is-closing', lambda row: 'Close' in row['action'] if row['action'] else False) \ - .sort(['executed-at', 'is-closing']) - - # create a portfolio with the given history - pf = Portfolio(petl.data(table), net_liq=netliq) - - # get initial net liq if we're using percentage - nl = None - if percentage: - pf_tmp = Portfolio(petl.data(table), net_liq=True) - nl = pf_tmp._get_starting_net_liq(duration) - - # get the P/L or net liq and save the graph - val = pf.plot(duration, starting_net_liq=nl) - - # print current positions - if nl is None: - print(('Current net liquidity' if netliq else 'Realized P/L') + f': ${val:.2f}') - else: - print(('Change in net liquidity' if netliq else 'Realized P/L') + f': {val:.2f}%') - print('Current positions:') - for p in pf.positions.values(): - print(p) diff --git a/twcli/plot/plot.py b/twcli/plot/plot.py deleted file mode 100644 index 1e03c9d..0000000 --- a/twcli/plot/plot.py +++ /dev/null @@ -1,306 +0,0 @@ -import os -import subprocess -import sys -from datetime import datetime -from decimal import Decimal - -import matplotlib.pyplot as plt -from dateutil.relativedelta import relativedelta -from matplotlib.dates import (DateFormatter, DayLocator, MonthLocator, - YearLocator) - -from ..utils import ZERO, TastyworksCLIError - -_month_fmt = DateFormatter('%b') -_year_fmt = DateFormatter('%Y') -_day_fmt = DateFormatter('%d') - -_DURATIONS = ['all', '10y', '5y', '1y', 'ytd', '6m', '3m', '1m', '5d'] - - -class Trade(): - ''' - Object to hold a specific trade and its notable properties. - Contains the important information of one row of the table. - ''' - def __init__(self, trade): - self.date = trade[0].split('T')[0] # we just want the date - self.type = trade[1] - self.action = trade[2] - self.symbol = trade[3] - self.value = Decimal(trade[4].replace(',', '')) * (-1 if trade[5] == 'Debit' else 1) - self.quantity = Decimal(trade[6].replace(',', '')) if trade[6] else ZERO - commission = -Decimal(trade[7]) if trade[7] else ZERO - clearing_fees = -Decimal(trade[8]) if trade[8] else ZERO - pio_fees = -Decimal(trade[9]) if trade[9] else ZERO - regulatory_fees = -Decimal(trade[10]) if trade[10] else ZERO - self.fees = commission + clearing_fees + pio_fees + regulatory_fees - - def __str__(self): - return f'{self.date}: {self.symbol} x{self.quantity} at ${self.value}' - - -class Portfolio(): - ''' - Starting with the given table, runs forwards through - time, tracking either realized P/L or net liquidity, - and saving those results. Contains methods to process - a petl table, handle date ranges, and draw a plot. - ''' - def __init__(self, json, net_liq=False): - # contains the P/L or net liquidity at a certain date - self.values = [] - # contains the dates at which closing trades were placed - self.dates = [] - # a dictionary of symbol -> Trade, used to close positions - self.positions = {} - self.last_value = ZERO - # the given petl table - self.json = json - # whether or not to use net liq instead of realized P/L - self.net_liq = net_liq - - self._calculate() - - def _process_dates(self, duration): - if duration not in _DURATIONS: - raise TastyworksCLIError('Not a valid duration!\t{all,10y,5y,1y,ytd,6m,3m,1m,5d}') - - # convert dates to datetimes - self.dates = [datetime.strptime(date, '%Y-%m-%d') for date in self.dates] - - # when multiple transactions occur in a day, use only the last one - final_dates = [] - final_price = [] - last_date = None - for i in range(len(self.dates)): - if last_date is None: - final_dates.append(self.dates[i]) - final_price.append(self.values[i]) - elif self.dates[i] != last_date: - final_dates.append(last_date) - final_price.append(self.values[i - 1]) - last_date = self.dates[i] - # method above omits the very last trade - final_dates.append(last_date) - final_price.append(self.values[-1]) - - # update these lists to the cleaned versions - self.dates = final_dates - self.values = final_price - - if duration == 'all': - start_date = self.dates[0] - elif duration == '10y': - start_date = datetime.now() - relativedelta(years=10) - elif duration == '5y': - start_date = datetime.now() - relativedelta(years=5) - elif duration == '1y': - start_date = datetime.now() - relativedelta(years=1) - elif duration == 'ytd': - # hack to get first day of current year in a datetime - start_date = datetime.combine( - datetime.now().date().replace(month=1, day=1), - datetime.min.time() - ) - elif duration == '6m': - start_date = datetime.now() - relativedelta(months=6) - elif duration == '3m': - start_date = datetime.now() - relativedelta(months=3) - elif duration == '1m': - start_date = datetime.now() - relativedelta(months=1) - else: - start_date = datetime.now() - relativedelta(days=7) - - # if given range is longer than our portfolio history - if start_date < self.dates[0]: - start_date = self.dates[0] - - # get index of first date in our range - start = -1 - for i in range(len(self.dates)): - if self.dates[i] >= start_date: - start = i - break - - if self.dates[start] == self.dates[-1]: - raise TastyworksCLIError('Not enough closing trades present! There must be at least two closing trades present in the given timeframe.') - - # change formatting based on scale - delta = datetime.now() - self.dates[0] - if delta.days <= 31: - fun = _d_fmt - loc = DayLocator() - elif delta.days <= 365: - fun = _m_fmt_long - loc = MonthLocator() - elif delta.days <= 1000: - fun = _m_fmt_short - loc = MonthLocator() - else: - fun = _y_fmt - loc = YearLocator() - - return start, fun, loc - - def _get_starting_net_liq(self, duration): - ''' - Calculates the net liquidity at the beginning of - the given time period for use with the percentage - argument. Modifies the state, so call this on a - throwaway Portfolio instance. - ''' - start, _, _ = self._process_dates(duration.lower()) - - return self.values[start] - - def plot(self, duration, starting_net_liq=None, gen_img=True): - start, fun, loc = self._process_dates(duration.lower()) - - # graph percentages - if starting_net_liq is not None: - initial_value = self.values[start] - for i in range(start, len(self.values)): - self.values[i] = (self.values[i] - initial_value) / starting_net_liq * Decimal(100) - # shift graph vertically so it starts at zero if doing P/L - elif not self.net_liq: - initial_value = self.values[start] - for i in range(start, len(self.values)): - self.values[i] -= initial_value - - if gen_img: - fig, ax = plt.subplots() - - # color based on net liq or profitability - if self.net_liq: - color = 'steelblue' - elif self.values[-1] < 0: - color = 'crimson' # :( - else: - color = 'mediumseagreen' - - plt.plot(self.dates[start:], self.values[start:], color=color) - plt.title('Net Liquidity' if self.net_liq else 'Realized P/L') - ax.xaxis.set_major_locator(loc) - ax.xaxis.set_major_formatter(fun) - - # save plot to current directory - fp = 'netliq.png' if self.net_liq else 'pandl.png' - fig.savefig(fp) - - # open plot in default image viewer - if sys.platform == 'win32': - os.startfile(fp) - else: - opener = 'open' if sys.platform == 'darwin' else 'xdg-open' - subprocess.call([opener, fp]) - - # return either the final net liq or the change in P/L - return (self.values[-1] if self.net_liq else self.values[-1] - self.values[start]) - - def _calculate(self): - for trade in self.json: - t = Trade(trade) - # we could allow the user to disable this adjustment - self.last_value += t.fees - - if t.type == 'Trade': - # futures are handled differently. instead of opening - # or closing trades, you just have a number of long - # or short contracts. we multiply short contract quantities - # by -1 and whenever a symbol's number of contracts hits - # 0, it's treated as realized. - if t.symbol[0] == '/': - # symbol already in positions dict - if t.symbol in self.positions: - self.positions[t.symbol].quantity += t.quantity * (-1 if 'sell' in t.action.lower() else 1) - self.positions[t.symbol].value += t.value - else: - self.positions[t.symbol] = t - self.positions[t.symbol].quantity *= (-1 if 'sell' in t.action.lower() else 1) - - # realize gain/loss here - if self.positions[t.symbol].quantity == 0: - self.dates.append(t.date) - self.last_value += self.positions[t.symbol].value - self.values.append(self.last_value) - del self.positions[t.symbol] - # non-futures opening trades - elif 'open' in t.action.lower(): - # symbol already in positions dict - if t.symbol in self.positions: - self.positions[t.symbol].quantity += t.quantity - self.positions[t.symbol].value += t.value - else: - self.positions[t.symbol] = t - # non-futures closing trades - else: - if t.symbol not in self.positions: - raise TastyworksCLIError(f'Closing trade present but opening trade missing for trade:\n{t}') - else: - self.positions[t.symbol].quantity -= t.quantity - self.positions[t.symbol].value += t.value - # realize if position is *completely* closed out - if self.positions[t.symbol].quantity == 0: - self.dates.append(t.date) - # this brings up an interesting question: - # is this a good way to determine realized/unrealized? - # example: you buy 50 shares at $10 and 50 shares at $11. - # then you sell 50 shares at $12. should that count as: - # unrealized until whole position is closed? (current) - # realized at the average cost basis? - # or realized at a specific basis? - self.last_value += self.positions[t.symbol].value # the line in question - self.values.append(self.last_value) - del self.positions[t.symbol] - - # TW uses this for several things. the ones we care - # about are expiration, assignment, exercise, and awards. - elif t.type == 'Receive Deliver': - # exercise/awards - if t.action == 'Buy to Open' or t.action == 'Sell to Open': - if t.symbol in self.positions: - self.positions[t.symbol].quantity += t.quantity - self.positions[t.symbol].value += t.value - else: - self.positions[t.symbol] = t - - # assignment/expiration/symbol change - elif t.symbol in self.positions: - self.positions[t.symbol].quantity -= t.quantity - self.positions[t.symbol].value += t.value - # realize if position is closed - if self.positions[t.symbol].quantity == 0: - self.dates.append(t.date) - self.last_value += self.positions[t.symbol].value - self.values.append(self.last_value) - del self.positions[t.symbol] - - # apply mark-to-market even when not tracking net liq; - # otherwise, this is only done if we're tracking net liq. - elif t.type == 'Money Movement' and (self.net_liq or (t.symbol[0] == '/' if t.symbol else False)): - self.dates.append(t.date) - self.last_value += t.value - self.values.append(self.last_value) - - -def _m_fmt_long(x, pos=None): - if _month_fmt(x) == 'Jan': - return _year_fmt(x) - return _month_fmt(x) - - -def _m_fmt_short(x, pos=None): - if _month_fmt(x) == 'Jan': - return _year_fmt(x)[-2:] - return _month_fmt(x)[0] - - -def _y_fmt(x, pos=None): - return _year_fmt(x) - - -def _d_fmt(x, pos=None): - if _day_fmt(x) == '01': - return _month_fmt(x) - return _day_fmt(x) diff --git a/twcli/quant/__init__.py b/twcli/quant/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/twcli/quant/models.py b/twcli/quant/models.py deleted file mode 100644 index 4431838..0000000 --- a/twcli/quant/models.py +++ /dev/null @@ -1,146 +0,0 @@ -"""Convenience functions, class for optons price modeling with QuantLib""" -import pandas as pd -import QuantLib as ql - - -def summarize_params(price_underlying, strike, interest, volatility, date_exp, - date_evl): - """Display values that are inputs to option price""" - msg = (f"* {price_underlying.value()} - underlying price\n" - f"* {strike} - strike\n" - f"* {interest} - interest\n" - f"* {volatility.value()} - volatility\n" - f"* {date_exp} - exp date\n" - f"* {date_evl} - eval date\n") - - print(msg) - - -def build_volatility_curve(volatility): - """Create volatility curve""" - volatility = ql.SimpleQuote(volatility) - volatility_curve = ql.BlackConstantVol(0, ql.TARGET(), - ql.QuoteHandle(volatility), - ql.Actual360()) - return volatility, volatility_curve - - -def build_interest_curve(rate_risk_free): - """Create interest curve""" - rate_risk_free = ql.SimpleQuote(rate_risk_free) - rate_risk_free_curve = ql.FlatForward(0, ql.TARGET(), - ql.QuoteHandle(rate_risk_free), - ql.Actual360()) - - return rate_risk_free_curve - - -def build_dates(date_expiration=None, date_evaluation=None, dte=None): - """Create date objects for model input""" - # setup dates - if not date_expiration and not date_evaluation: - date_evaluation = pd.Timestamp.utcnow().tz_convert('US/Central') - date_expiration = date_evaluation + dte - elif not dte and ((not date_expiration) or (not date_evaluation)): - raise Exception('Must have either both exp and eval dates or days to ' - 'expiration. ') - else: - if date_evaluation == 'today': - date_evaluation = pd.Timestamp.utcnow().tz_convert('US/Central') - date_expiration = pd.to_datetime(date_expiration) - date_evaluation = pd.to_datetime(date_evaluation) - - dte = (date_expiration - date_evaluation).days - date_evaluation = ql.Date(date_evaluation.day, date_evaluation.month, - date_evaluation.year) - date_expiration = ql.Date(date_expiration.day, date_expiration.month, - date_expiration.year) - - # set the global evaluation date - ql.Settings.instance().evaluationDate = date_evaluation - - return date_expiration, date_evaluation, dte - - -class Model(): - """Create a class used to model option prices - - For dates, must pass either 'dte' that is 'days to expiration', - where the current date will be used as eval date and a number of - days will be added to calculate an expiration date; alternatively - can pass an expiration date and optionally an evaluation date (else - current date is used). - - """ - def __init__(self, price_underlying, price_strike, volatility, - rate_risk_free, date_expiration=None, date_evaluation=None, - dte=None, option_type='call', verbose=False, dividend_rate=0, - exercise_type='european', n_steps=200): - self.price_underlying = ql.SimpleQuote(price_underlying) - self.price_strike = price_strike - volatility, volatility_curve = build_volatility_curve(volatility) - self.volatility = volatility - self.volatility_curve = volatility_curve - rate_risk_free_curve = build_interest_curve(rate_risk_free) - self.n_steps = n_steps - self.rate_risk_free = rate_risk_free - self.rate_risk_free_curve = rate_risk_free_curve - date_expiration, date_evaluation, dte = \ - build_dates(date_expiration, date_evaluation, dte) - self.date_expiration = date_expiration - self.date_evaluation = date_evaluation - self.dte = dte - self.verbose = verbose - self.dividend_rate = dividend_rate - self.day_count = ql.Actual365Fixed() - self.calendar = ql.UnitedStates() - self.exercise_type = exercise_type - - if option_type == 'call': - self.option_type = ql.Option.Call - elif option_type == 'C' or option_type == 'c': - self.option_type = ql.Option.Call - elif option_type == 'P' or option_type == 'p': - self.option_type = ql.Option.Put - else: - self.option_type = ql.Option.Put - self.create_process() - self.create_option() - - def calculate_imp_vol(self, price_option, minvol=0.001, maxvol=10): - """Use model to calculate volatility implied by price""" - volatility_implied = \ - self.option.impliedVolatility(price_option, self.process, - minVol=minvol, maxVol=10,) - - return volatility_implied - - def create_process(self): - """Create the process""" - # create process, engine and option - self.process = ql.BlackScholesProcess( - ql.QuoteHandle(self.price_underlying), - ql.YieldTermStructureHandle(self.rate_risk_free_curve), - ql.BlackVolTermStructureHandle(self.volatility_curve)) - - def create_engine(self): - if self.exercise_type == 'european': - self.exercise = ql.EuropeanExercise(self.date_expiration) - self.engine = ql.AnalyticEuropeanEngine(self.process) - elif self.exercise_type == 'american': - self.exercise = ql.AmericanExercise(self.date_evaluation, - self.date_expiration) - self.engine = ql.BinomialVanillaEngine(self.process, 'crr', - self.n_steps) - else: - raise Exception("Received unexpected exercise type " - f"'{self.exercise_type}'.") - - self.option = ql.VanillaOption(self.payoff, self.exercise) - self.option.setPricingEngine(self.engine) - - def create_option(self): - """Create the option""" - self.create_process() - self.payoff = ql.PlainVanillaPayoff(self.option_type, self.price_strike) - self.create_engine() diff --git a/twcli/utils.py b/twcli/utils.py deleted file mode 100644 index 5e407d6..0000000 --- a/twcli/utils.py +++ /dev/null @@ -1,139 +0,0 @@ -import getpass -import logging -import os -import shutil -import sys -from configparser import ConfigParser -from datetime import date, timedelta -from decimal import Decimal -from typing import Optional - -import requests -from dateutil.relativedelta import FR, relativedelta -from tastyworks.models.session import TastyAPISession -from tastyworks.models.trading_account import TradingAccount - -VERSION = '1.0.4' -ZERO = Decimal(0) -LOGGER = logging.getLogger(__name__) - -_DEFAULT_CONFIG_PATH = 'etc/twcli.cfg' -_CUSTOM_CONFIG_PATH = '.config/twcli/twcli.cfg' -_TOKEN_PATH = '.config/twcli/.session' - - -class TastyworksCLIError(Exception): - pass - - -class RenewableTastyAPISession(TastyAPISession): - def __init__(self, API_url=None): - self.logged_in = False - self.accounts = None - - token_path = os.path.join(os.path.expanduser('~'), _TOKEN_PATH) - custom_path = os.path.join(os.path.expanduser('~'), _CUSTOM_CONFIG_PATH) - default_path = os.path.join(sys.prefix, _DEFAULT_CONFIG_PATH) - - # load config - self.config = ConfigParser() - if not os.path.exists(custom_path): - # copy default config to user home dir - os.makedirs(os.path.dirname(custom_path), exist_ok=True) - shutil.copyfile(default_path, custom_path) - self.config.read(default_path) - self.config.read(custom_path) - - # try to load token - if os.path.exists(token_path): - with open(token_path) as f: - self.session_token = f.read().strip() - - self.API_url = API_url if API_url else 'https://api.tastyworks.com' - - # make sure token hasn't expired - response = requests.post(f'{self.API_url}/sessions/validate', headers=self.get_request_headers()) - self.logged_in = (response.status_code == 201) - - if not self.logged_in: - # either the token expired or doesn't exist - username, password = self._get_credentials() - TastyAPISession.__init__(self, username, password) - - # write session token to cache - os.makedirs(os.path.dirname(token_path), exist_ok=True) - with open(token_path, 'w') as f: - f.write(self.session_token) - else: - LOGGER.debug('Logged in with cached session token.') - - def _get_credentials(self): - username = self.config['general'].get('username', None) - if not username: - username = getpass.getpass('Username: ') - password = self.config['general'].get('password', None) - if not password: - password = getpass.getpass('Password: ') - - return username, password - - @classmethod - async def create(cls): - self = RenewableTastyAPISession() - accounts = await TradingAccount.get_remote_accounts(self) - self.accounts = [acc for acc in accounts if not acc.is_closed] - - return self - - -def get_tasty_monthly(day: Optional[date] = date.today()) -> date: - option1 = get_monthly(day + timedelta(weeks=4)) - option2 = get_monthly(day + timedelta(weeks=8)) - day45 = day + timedelta(days=45) - return option1 if day45 - option1 < option2 - day45 else option2 - - -def get_monthly(day: Optional[date] = date.today()) -> date: - day = day.replace(day=1) - day += relativedelta(weeks=2, weekday=FR) - return day - - -def is_monthly(day: date) -> bool: - return day.weekday() == 4 and 15 <= day.day <= 21 - - -def get_confirmation(prompt: str) -> bool: - while True: - answer = input(prompt).lower() - if not answer: - return True - if answer[0] == 'y': - return True - if answer[0] == 'n': - return False - - -async def get_account(sesh: RenewableTastyAPISession) -> TradingAccount: - account = sesh.config['general'].get('default-account', None) - if account: - for acc in sesh.accounts: - if acc.account_number == account: - return acc - LOGGER.warning('Default account is set, but the account doesn\'t appear to exist!') - - for i in range(len(sesh.accounts)): - if i == 0: - print(f'{i + 1}) {sesh.accounts[i].account_number} {sesh.accounts[i].nickname} (default)') - else: - print(f'{i + 1}) {sesh.accounts[i].account_number} {sesh.accounts[i].nickname}') - choice = 0 - while choice not in range(1, len(sesh.accounts) + 1): - try: - raw = input('Please choose an account: ') - choice = int(raw) - except ValueError: - if not raw: - return sesh.accounts[0] - - return sesh.accounts[choice - 1] From 3cf9f96369631309767fa905f65353ee373149bf Mon Sep 17 00:00:00 2001 From: Graeme Holliday Date: Mon, 1 Jul 2024 12:17:04 -0500 Subject: [PATCH 2/4] add put spreads --- ttcli/option.py | 91 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 28 deletions(-) diff --git a/ttcli/option.py b/ttcli/option.py index f4f2c57..2cf8e48 100644 --- a/ttcli/option.py +++ b/ttcli/option.py @@ -7,11 +7,13 @@ from rich.table import Table from tastytrade import DXLinkStreamer from tastytrade.dxfeed import EventType, Greeks, Quote -from tastytrade.instruments import NestedOptionChain, Option, OptionType -from tastytrade.order import NewOrder, PriceEffect, OrderType, OrderTimeInForce, OrderAction +from tastytrade.instruments import NestedOptionChain, Option +from tastytrade.order import (NewOrder, OrderAction, OrderTimeInForce, + OrderType, PriceEffect) from tastytrade.utils import get_tasty_monthly -from ttcli.utils import RenewableSession, is_monthly, get_confirmation, print_error, print_warning +from ttcli.utils import (RenewableSession, get_confirmation, is_monthly, + print_error, print_warning) def choose_expiration( @@ -166,13 +168,14 @@ async def call(symbol: str, quantity: int, strike: Optional[int] = None, @option.command(help='Buy or sell puts with the given parameters.') -@click.option('-s', '--strike', type=int, help='The chosen strike for the option.') +@click.option('-s', '--strike', type=Decimal, help='The chosen strike for the option.') @click.option('-d', '--delta', type=int, help='The chosen delta for the option.') +@click.option('-w', '--width', type=int, help='Turns the order into a spread with the given width.') @click.option('--gtc', is_flag=True, help='Place a GTC order instead of a day order.') @click.option('--weeklies', is_flag=True, help='Show all expirations, not just monthlies.') @click.argument('symbol', type=str) @click.argument('quantity', type=int) -async def put(symbol: str, quantity: int, strike: Optional[int] = None, +async def put(symbol: str, quantity: int, strike: Optional[int] = None, width: Optional[int] = None, gtc: bool = False, weeklies: bool = False, delta: Optional[int] = None): if strike is not None and delta is not None: print_error('Must specify either delta or strike, but not both.') @@ -199,7 +202,7 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, lowest = 100 selected = None for g in greeks: - diff = abs(g.delta * Decimal(100) - delta) + diff = abs(g.delta * Decimal(100) + delta) if diff < lowest: selected = g lowest = diff @@ -207,17 +210,31 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, strike = next(s.strike_price for s in subchain.strikes if s.put_streamer_symbol == selected.eventSymbol) - await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol]) - quote = await streamer.get_event(EventType.QUOTE) - mid = (quote.bidPrice + quote.askPrice) / Decimal(2) + if width: + spread_strike = next(s for s in subchain.strikes if s.strike_price == strike - width) + await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol, spread_strike.put_streamer_symbol]) + quote_dict = await listen_quotes(2, streamer) + bid = quote_dict[selected.eventSymbol].bidPrice - quote_dict[spread_strike.put_streamer_symbol].askPrice + ask = quote_dict[selected.eventSymbol].askPrice - quote_dict[spread_strike.put_streamer_symbol].bidPrice + mid = (bid + ask) / Decimal(2) + else: + await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol]) + quote = await streamer.get_event(EventType.QUOTE) + bid = quote.bidPrice + ask = quote.askPrice + mid = (bid + ask) / Decimal(2) console = Console() - table = Table(show_header=True, header_style='bold', title_style='bold', - title=f'Quote for {symbol} {strike}P {expiration}') + if width: + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} put spread {expiration}') + else: + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} {strike}P {expiration}') table.add_column('Bid', style='green', width=8, justify='center') table.add_column('Mid', width=8, justify='center') table.add_column('Ask', style='red', width=8, justify='center') - table.add_row(f'{quote.bidPrice:.2f}', f'{mid:.2f}', f'{quote.askPrice:.2f}') + table.add_row(f'{bid:.2f}', f'{mid:.2f}', f'{ask:.2f}') console.print(table) price = input('Please enter a limit price per quantity (default mid): ') @@ -225,18 +242,33 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, price = round(mid, 2) price = Decimal(price) - put = Option.get_option(sesh, next(s.put for s in subchain.strikes if s.strike_price == strike)) + short_symbol = next(s.put for s in subchain.strikes if s.strike_price == strike) + if width: + res = Option.get_options(sesh, [short_symbol, spread_strike.put]) + res.sort(key=lambda x: x.strike_price, reverse=True) + legs = [ + res[0].build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN), + res[1].build_leg(abs(quantity), OrderAction.BUY_TO_OPEN if quantity < 0 else OrderAction.SELL_TO_OPEN) + ] + else: + put = Option.get_option(sesh, short_symbol) + legs = [put.build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN)] order = NewOrder( time_in_force=OrderTimeInForce.GTC if gtc else OrderTimeInForce.DAY, order_type=OrderType.LIMIT, - legs=[put.build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN)], + legs=legs, price=price, price_effect=PriceEffect.CREDIT if quantity < 0 else PriceEffect.DEBIT ) acc = sesh.get_account() - nl = acc.get_balances(sesh).net_liquidating_value data = acc.place_order(sesh, order, dry_run=True) + if data.errors: + for error in data.errors: + print_error(error.message) + return + + nl = acc.get_balances(sesh).net_liquidating_value bp = data.buying_power_effect.change_in_buying_power percent = bp / nl * Decimal(100) fees = data.fee_calculation.total_fees @@ -251,8 +283,11 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, table.add_column('BP', width=8, justify='center') table.add_column('% of NL', width=8, justify='center') table.add_column('Fees', width=8, justify='center') - table.add_row(f'{quantity}', symbol, f'${strike:.2f}', 'PUT', f'{expiration}', f'${price:.2f}', + table.add_row(f'{quantity:+}', symbol, f'${strike:.2f}', 'PUT', f'{expiration}', f'${price:.2f}', f'${bp:.2f}', f'{percent:.2f}%', f'${fees:.2f}') + if width: + table.add_row(f'{-quantity:+}', symbol, f'${spread_strike.strike_price:.2f}', + 'PUT', f'{expiration}', '-', '-', '-', '-') console.print(table) if data.warnings: @@ -282,14 +317,14 @@ async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): console = Console() table = Table(show_header=True, header_style='bold', title_style='bold', - title=f'Options chain for {symbol} on {expiration}') - table.add_column('Delta', width=8, justify='center') - table.add_column('Bid', style='red', width=8, justify='center') + title=f'Options chain for {symbol} expiring {expiration}') + table.add_column(u'Call \u03B4', width=8, justify='center') + table.add_column('Bid', style='green', width=8, justify='center') table.add_column('Ask', style='red', width=8, justify='center') table.add_column('Strike', width=8, justify='center') table.add_column('Bid', style='green', width=8, justify='center') - table.add_column('Ask', style='green', width=8, justify='center') - table.add_column('Delta', width=8, justify='center') + table.add_column('Ask', style='red', width=8, justify='center') + table.add_column(u'Put \u03B4', width=8, justify='center') if strikes * 2 < len(subchain.strikes): mid_index = 0 @@ -317,16 +352,16 @@ async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): call_delta = int(greeks_dict[strike.call_streamer_symbol].delta * 100) table.add_row( - f'{put_delta:g}', - f'{put_bid:.2f}', - f'{put_ask:.2f}', - f'{strike.strike_price:.2f}', + f'{call_delta:g}', f'{call_bid:.2f}', f'{call_ask:.2f}', - f'{call_delta:g}' + f'{strike.strike_price:.2f}', + f'{put_bid:.2f}', + f'{put_ask:.2f}', + f'{put_delta:g}' ) if i == strikes - 1: - table.add_row('=======', 'ITM v', '=======', '=======', - '=======', 'ITM ^', '=======', style='white') + table.add_row('=======', 'ITM ^', '=======', '=======', + '=======', 'ITM v', '=======', style='white') console.print(table) From b8f656da073bb06d55277262727fe2cd6fd7052b Mon Sep 17 00:00:00 2001 From: Graeme Holliday Date: Mon, 1 Jul 2024 17:31:02 -0500 Subject: [PATCH 3/4] add strangles, condors, call spreads --- etc/ttcli.cfg | 12 +- ttcli/app.py | 4 +- ttcli/option.py | 286 +++++++++++++++++++++++++++++++++++++++++++----- ttcli/utils.py | 41 ++++++- 4 files changed, 307 insertions(+), 36 deletions(-) diff --git a/etc/ttcli.cfg b/etc/ttcli.cfg index 504caf3..d9279d3 100644 --- a/etc/ttcli.cfg +++ b/etc/ttcli.cfg @@ -1,7 +1,7 @@ [general] -username = foo -password = bar -default-account = example +# username = foo +# password = bar +# default-account = example [portfolio] bp-target-percent-vix-low = 15 @@ -12,3 +12,9 @@ portfolio-delta-variation = 5 [order] bp-warn-above-percent = 5 + +[options] +chain-show-delta = true +chain-show-iv = false +chain-show-oi = false +chain-show-theta = false diff --git a/ttcli/app.py b/ttcli/app.py index d6f59aa..f873c4a 100644 --- a/ttcli/app.py +++ b/ttcli/app.py @@ -4,10 +4,10 @@ import asyncclick as click from ttcli.option import option -from ttcli.utils import VERSION, logger +from ttcli.utils import CONTEXT_SETTINGS, VERSION, logger -@click.group() +@click.group(context_settings=CONTEXT_SETTINGS) @click.version_option(VERSION) async def app(): pass diff --git a/ttcli/option.py b/ttcli/option.py index 2cf8e48..0005850 100644 --- a/ttcli/option.py +++ b/ttcli/option.py @@ -13,7 +13,7 @@ from tastytrade.utils import get_tasty_monthly from ttcli.utils import (RenewableSession, get_confirmation, is_monthly, - print_error, print_warning) + print_error, print_warning, test_order_handle_errors) def choose_expiration( @@ -71,13 +71,14 @@ async def option(): @option.command(help='Buy or sell calls with the given parameters.') -@click.option('-s', '--strike', type=int, help='The chosen strike for the option.') +@click.option('-s', '--strike', type=Decimal, help='The chosen strike for the option.') @click.option('-d', '--delta', type=int, help='The chosen delta for the option.') +@click.option('-w', '--width', type=int, help='Turns the order into a spread with the given width.') @click.option('--gtc', is_flag=True, help='Place a GTC order instead of a day order.') @click.option('--weeklies', is_flag=True, help='Show all expirations, not just monthlies.') @click.argument('symbol', type=str) @click.argument('quantity', type=int) -async def call(symbol: str, quantity: int, strike: Optional[int] = None, +async def call(symbol: str, quantity: int, strike: Optional[Decimal] = None, width: Optional[int] = None, gtc: bool = False, weeklies: bool = False, delta: Optional[int] = None): if strike is not None and delta is not None: print_error('Must specify either delta or strike, but not both.') @@ -85,7 +86,7 @@ async def call(symbol: str, quantity: int, strike: Optional[int] = None, elif not strike and not delta: print_error('Please specify either delta or strike for the option.') return - elif abs(delta) > 99: + elif delta is not None and abs(delta) > 99: print_error('Delta value is too high, -99 <= delta <= 99') return @@ -112,17 +113,31 @@ async def call(symbol: str, quantity: int, strike: Optional[int] = None, strike = next(s.strike_price for s in subchain.strikes if s.call_streamer_symbol == selected.eventSymbol) - await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol]) - quote = await streamer.get_event(EventType.QUOTE) - mid = (quote.bidPrice + quote.askPrice) / Decimal(2) + if width: + spread_strike = next(s for s in subchain.strikes if s.strike_price == strike + width) + await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol, spread_strike.call_streamer_symbol]) + quote_dict = await listen_quotes(2, streamer) + bid = quote_dict[selected.eventSymbol].bidPrice - quote_dict[spread_strike.call_streamer_symbol].askPrice + ask = quote_dict[selected.eventSymbol].askPrice - quote_dict[spread_strike.call_streamer_symbol].bidPrice + mid = (bid + ask) / Decimal(2) + else: + await streamer.subscribe(EventType.QUOTE, [selected.eventSymbol]) + quote = await streamer.get_event(EventType.QUOTE) + bid = quote.bidPrice + ask = quote.askPrice + mid = (bid + ask) / Decimal(2) console = Console() - table = Table(show_header=True, header_style='bold', title_style='bold', - title=f'Quote for {symbol} {strike}C {expiration}') + if width: + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} call spread {expiration}') + else: + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} {strike}C {expiration}') table.add_column('Bid', style='green', width=8, justify='center') table.add_column('Mid', width=8, justify='center') table.add_column('Ask', style='red', width=8, justify='center') - table.add_row(f'{quote.bidPrice:.2f}', f'{mid:.2f}', f'{quote.askPrice:.2f}') + table.add_row(f'{bid:.2f}', f'{mid:.2f}', f'{ask:.2f}') console.print(table) price = input('Please enter a limit price per quantity (default mid): ') @@ -130,18 +145,31 @@ async def call(symbol: str, quantity: int, strike: Optional[int] = None, price = round(mid, 2) price = Decimal(price) - call = Option.get_option(sesh, next(s.call for s in subchain.strikes if s.strike_price == strike)) + short_symbol = next(s.call for s in subchain.strikes if s.strike_price == strike) + if width: + res = Option.get_options(sesh, [short_symbol, spread_strike.call]) + res.sort(key=lambda x: x.strike_price) + legs = [ + res[0].build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN), + res[1].build_leg(abs(quantity), OrderAction.BUY_TO_OPEN if quantity < 0 else OrderAction.SELL_TO_OPEN) + ] + else: + call = Option.get_option(sesh, short_symbol) + legs = [call.build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN)] order = NewOrder( time_in_force=OrderTimeInForce.GTC if gtc else OrderTimeInForce.DAY, order_type=OrderType.LIMIT, - legs=[call.build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN)], + legs=legs, price=price, price_effect=PriceEffect.CREDIT if quantity < 0 else PriceEffect.DEBIT ) acc = sesh.get_account() - nl = acc.get_balances(sesh).net_liquidating_value - data = acc.place_order(sesh, order, dry_run=True) + data = test_order_handle_errors(acc, sesh, order) + if data is None: + return + + nl = acc.get_balances(sesh).net_liquidating_value bp = data.buying_power_effect.change_in_buying_power percent = bp / nl * Decimal(100) fees = data.fee_calculation.total_fees @@ -154,10 +182,13 @@ async def call(symbol: str, quantity: int, strike: Optional[int] = None, table.add_column('Expiration', width=10, justify='center') table.add_column('Price', width=8, justify='center') table.add_column('BP', width=8, justify='center') - table.add_column('% of NL', width=8, justify='center') + table.add_column('BP %', width=8, justify='center') table.add_column('Fees', width=8, justify='center') - table.add_row(f'{quantity}', symbol, f'${strike:.2f}', 'CALL', f'{expiration}', f'${price:.2f}', + table.add_row(f'{quantity:+}', symbol, f'${strike:.2f}', 'CALL', f'{expiration}', f'${price:.2f}', f'${bp:.2f}', f'{percent:.2f}%', f'${fees:.2f}') + if width: + table.add_row(f'{-quantity:+}', symbol, f'${spread_strike.strike_price:.2f}', + 'CALL', f'{expiration}', '-', '-', '-', '-') console.print(table) if data.warnings: @@ -183,7 +214,7 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, width: O elif not strike and not delta: print_error('Please specify either delta or strike for the option.') return - elif abs(delta) > 99: + elif delta is not None and abs(delta) > 99: print_error('Delta value is too high, -99 <= delta <= 99') return @@ -262,10 +293,8 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, width: O ) acc = sesh.get_account() - data = acc.place_order(sesh, order, dry_run=True) - if data.errors: - for error in data.errors: - print_error(error.message) + data = test_order_handle_errors(acc, sesh, order) + if data is None: return nl = acc.get_balances(sesh).net_liquidating_value @@ -281,7 +310,7 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, width: O table.add_column('Expiration', width=10, justify='center') table.add_column('Price', width=8, justify='center') table.add_column('BP', width=8, justify='center') - table.add_column('% of NL', width=8, justify='center') + table.add_column('BP %', width=8, justify='center') table.add_column('Fees', width=8, justify='center') table.add_row(f'{quantity:+}', symbol, f'${strike:.2f}', 'PUT', f'{expiration}', f'${price:.2f}', f'${bp:.2f}', f'{percent:.2f}%', f'${fees:.2f}') @@ -297,6 +326,211 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, width: O acc.place_order(sesh, order, dry_run=False) +@option.command(help='Buy or sell strangles with the given parameters.') +@click.option('-c', '--call', type=Decimal, help='The chosen strike for the call option.') +@click.option('-p', '--put', type=Decimal, help='The chosen strike for the put option.') +@click.option('-d', '--delta', type=int, help='The chosen delta for both options.') +@click.option('-w', '--width', type=int, help='Turns the order into an iron condor with the given width.') +@click.option('--gtc', is_flag=True, help='Place a GTC order instead of a day order.') +@click.option('--weeklies', is_flag=True, help='Show all expirations, not just monthlies.') +@click.argument('symbol', type=str) +@click.argument('quantity', type=int) +async def strangle(symbol: str, quantity: int, call: Optional[Decimal] = None, width: Optional[int] = None, + gtc: bool = False, weeklies: bool = False, delta: Optional[int] = None, put: Optional[Decimal] = None): + if (call is not None or put is not None) and delta is not None: + print_error('Must specify either delta or strike, but not both.') + return + elif delta is not None and (call is not None or put is not None): + print_error('Please specify either delta, or strikes for both options.') + return + elif delta is not None and abs(delta) > 99: + print_error('Delta value is too high, -99 <= delta <= 99') + return + + sesh = RenewableSession() + chain = NestedOptionChain.get_chain(sesh, symbol) + expiration = choose_expiration(chain, weeklies) + subchain = next(e for e in chain.expirations if e.expiration_date == expiration) + + async with DXLinkStreamer(sesh) as streamer: + if delta is not None: + put_dxf = [s.put_streamer_symbol for s in subchain.strikes] + call_dxf = [s.call_streamer_symbol for s in subchain.strikes] + dxfeeds = put_dxf + call_dxf + await streamer.subscribe(EventType.GREEKS, dxfeeds) + greeks_dict = await listen_greeks(len(dxfeeds), streamer) + put_greeks = [v for v in greeks_dict.values() if v.eventSymbol in put_dxf] + call_greeks = [v for v in greeks_dict.values() if v.eventSymbol in call_dxf] + + lowest = 100 + selected_put = None + for g in put_greeks: + diff = abs(g.delta * Decimal(100) + delta) + if diff < lowest: + selected_put = g.eventSymbol + lowest = diff + lowest = 100 + selected_call = None + for g in call_greeks: + diff = abs(g.delta * Decimal(100) - delta) + if diff < lowest: + selected_call = g.eventSymbol + lowest = diff + # set strike with the closest delta + put_strike = next(s for s in subchain.strikes + if s.put_streamer_symbol == selected_put) + call_strike = next(s for s in subchain.strikes + if s.call_streamer_symbol == selected_call) + else: + put_strike = next(s for s in subchain.strikes if s.strike_price == put) + call_strike = next(s for s in subchain.strikes if s.strike_price == call) + + if width: + put_spread_strike = next(s for s in subchain.strikes if s.strike_price == put_strike.strike_price - width) + call_spread_strike = next(s for s in subchain.strikes if s.strike_price == call_strike.strike_price + width) + await streamer.subscribe( + EventType.QUOTE, + [ + call_strike.call_streamer_symbol, + put_strike.put_streamer_symbol, + put_spread_strike.put_streamer_symbol, + call_spread_strike.call_streamer_symbol + ] + ) + quote_dict = await listen_quotes(4, streamer) + bid = (quote_dict[call_strike.call_streamer_symbol].bidPrice + + quote_dict[put_strike.put_streamer_symbol].bidPrice - + quote_dict[put_spread_strike.put_streamer_symbol].askPrice - + quote_dict[call_spread_strike.call_streamer_symbol].askPrice) + ask = (quote_dict[call_strike.call_streamer_symbol].askPrice + + quote_dict[put_strike.put_streamer_symbol].askPrice - + quote_dict[put_spread_strike.put_streamer_symbol].bidPrice - + quote_dict[call_spread_strike.call_streamer_symbol].bidPrice) + mid = (bid + ask) / Decimal(2) + else: + await streamer.subscribe(EventType.QUOTE, [put_strike.put_streamer_symbol, call_strike.call_streamer_symbol]) + quote_dict = await listen_quotes(2, streamer) + bid = sum([q.bidPrice for q in quote_dict.values()]) + ask = sum([q.askPrice for q in quote_dict.values()]) + mid = (bid + ask) / Decimal(2) + + console = Console() + if width: + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} iron condor {expiration}') + else: + table = Table(show_header=True, header_style='bold', title_style='bold', + title=f'Quote for {symbol} {put_strike.strike_price}/{call_strike.strike_price} strangle {expiration}') + table.add_column('Bid', style='green', width=8, justify='center') + table.add_column('Mid', width=8, justify='center') + table.add_column('Ask', style='red', width=8, justify='center') + table.add_row(f'{bid:.2f}', f'{mid:.2f}', f'{ask:.2f}') + console.print(table) + + price = input('Please enter a limit price per quantity (default mid): ') + if not price: + price = round(mid, 2) + price = Decimal(price) + + tt_symbols = [put_strike.put, call_strike.call] + if width: + tt_symbols += [put_spread_strike.put, call_spread_strike.call] + options = Option.get_options(sesh, tt_symbols) + options.sort(key=lambda o: o.strike_price) + if width: + legs = [ + options[0].build_leg(abs(quantity), OrderAction.BUY_TO_OPEN if quantity < 0 else OrderAction.SELL_TO_OPEN), + options[1].build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN), + options[2].build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN), + options[3].build_leg(abs(quantity), OrderAction.BUY_TO_OPEN if quantity < 0 else OrderAction.SELL_TO_OPEN) + ] + else: + legs = [ + options[0].build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN), + options[1].build_leg(abs(quantity), OrderAction.SELL_TO_OPEN if quantity < 0 else OrderAction.BUY_TO_OPEN) + ] + order = NewOrder( + time_in_force=OrderTimeInForce.GTC if gtc else OrderTimeInForce.DAY, + order_type=OrderType.LIMIT, + legs=legs, + price=price, + price_effect=PriceEffect.CREDIT if quantity < 0 else PriceEffect.DEBIT + ) + acc = sesh.get_account() + + data = test_order_handle_errors(acc, sesh, order) + if data is None: + return + + nl = acc.get_balances(sesh).net_liquidating_value + bp = data.buying_power_effect.change_in_buying_power + percent = bp / nl * Decimal(100) + fees = data.fee_calculation.total_fees + + table = Table(header_style='bold', title_style='bold', title='Order Review') + table.add_column('Quantity', width=8, justify='center') + table.add_column('Symbol', width=8, justify='center') + table.add_column('Strike', width=8, justify='center') + table.add_column('Type', width=8, justify='center') + table.add_column('Expiration', width=10, justify='center') + table.add_column('Price', width=8, justify='center') + table.add_column('BP', width=8, justify='center') + table.add_column('BP %', width=8, justify='center') + table.add_column('Fees', width=8, justify='center') + table.add_row( + f'{quantity:+}', + symbol, + f'${put_strike.strike_price:.2f}', + 'PUT', + f'{expiration}', + f'${price:.2f}', + f'${bp:.2f}', + f'{percent:.2f}%', + f'${fees:.2f}' + ) + table.add_row( + f'{quantity:+}', + symbol, + f'${call_strike.strike_price:.2f}', + 'CALL', + f'{expiration}', + '-', + '-', + '-', + '-' + ) + if width: + table.add_row( + f'{-quantity:+}', + symbol, + f'${put_spread_strike.strike_price:.2f}', + 'PUT', + f'{expiration}', + '-', + '-', + '-', + '-' + ) + table.add_row( + f'{-quantity:+}', + symbol, + f'${call_spread_strike.strike_price:.2f}', + 'CALL', + f'{expiration}', + '-', + '-', + '-', + '-' + ) + console.print(table) + + if data.warnings: + for warning in data.warnings: + print_warning(warning.message) + if get_confirmation('Send order? Y/n '): + acc.place_order(sesh, order, dry_run=False) + + @option.command(help='Fetch and display an options chain.') @click.option('-w', '--weeklies', is_flag=True, help='Show all expirations, not just monthlies.') @@ -318,13 +552,13 @@ async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): console = Console() table = Table(show_header=True, header_style='bold', title_style='bold', title=f'Options chain for {symbol} expiring {expiration}') - table.add_column(u'Call \u03B4', width=8, justify='center') + table.add_column(u'Call \u0394', width=8, justify='center') table.add_column('Bid', style='green', width=8, justify='center') table.add_column('Ask', style='red', width=8, justify='center') table.add_column('Strike', width=8, justify='center') table.add_column('Bid', style='green', width=8, justify='center') table.add_column('Ask', style='red', width=8, justify='center') - table.add_column(u'Put \u03B4', width=8, justify='center') + table.add_column(u'Put \u0394', width=8, justify='center') if strikes * 2 < len(subchain.strikes): mid_index = 0 @@ -361,7 +595,7 @@ async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): f'{put_delta:g}' ) if i == strikes - 1: - table.add_row('=======', 'ITM ^', '=======', '=======', - '=======', 'ITM v', '=======', style='white') + table.add_row('=======', u'\u25B2 ITM \u25B2', '=======', '=======', + '=======', u'\u25BC ITM \u25BC', '=======', style='white') console.print(table) diff --git a/ttcli/utils.py b/ttcli/utils.py index bee2e04..f62b936 100644 --- a/ttcli/utils.py +++ b/ttcli/utils.py @@ -7,25 +7,56 @@ from configparser import ConfigParser from datetime import date from decimal import Decimal +from typing import Optional -from rich import print +import requests +from rich import print as rich_print from tastytrade import Account, ProductionSession +from tastytrade.order import NewOrder, PlacedOrderResponse logger = logging.getLogger(__name__) VERSION = '2.0' ZERO = Decimal(0) +CONTEXT_SETTINGS = {'help_option_names': ['-h', '--help']} + CUSTOM_CONFIG_PATH = '.config/ttcli/ttcli.cfg' DEFAULT_CONFIG_PATH = 'etc/ttcli.cfg' TOKEN_PATH = '.config/ttcli/.session' def print_error(msg: str): - print(f'[bold red]Error: {msg}[/bold red]') + rich_print(f'[bold red]Error: {msg}[/bold red]') def print_warning(msg: str): - print(f'[light_coral]Warning: {msg}[/light_coral]') + rich_print(f'[light_coral]Warning: {msg}[/light_coral]') + + +def test_order_handle_errors( + account: Account, + session: 'RenewableSession', + order: NewOrder +) -> Optional[PlacedOrderResponse]: + url = f'{session.base_url}/accounts/{account.account_number}/orders/dry-run' + json = order.model_dump_json(exclude_none=True, by_alias=True) + + response = requests.post(url, headers=session.headers, data=json) + # modified to use our error handling + if response.status_code // 100 != 2: + content = response.json()['error'] + print_error(f"{content['message']}") + errors = content.get('errors') + if errors is not None: + for error in errors: + if "code" in error: + print_error(f"{error['message']}") + else: + print_error(f"{error['reason']}") + return None + else: + data = response.json()['data'] + return PlacedOrderResponse(**data) class RenewableSession(ProductionSession): @@ -69,11 +100,11 @@ def __init__(self): def _get_credentials(self): username = (self.config['general'].get('username') or - os.getenv('TTCLI_USERNAME')) + os.getenv('TT_USERNAME')) if not username: username = getpass.getpass('Username: ') password = (self.config['general'].get('password') or - os.getenv('TTCLI_PASSWORD')) + os.getenv('TT_PASSWORD')) if not password: password = getpass.getpass('Password: ') From 510fa747d1bae54e6bfad0b6a9ad45685bd8f2dd Mon Sep 17 00:00:00 2001 From: Graeme Holliday Date: Mon, 1 Jul 2024 18:59:48 -0500 Subject: [PATCH 4/4] add more columns to chain --- etc/ttcli.cfg | 6 +-- ttcli/app.py | 2 + ttcli/option.py | 98 +++++++++++++++++++++++++++++++++++++++------- ttcli/portfolio.py | 6 +++ ttcli/utils.py | 28 +++++++------ 5 files changed, 109 insertions(+), 31 deletions(-) create mode 100644 ttcli/portfolio.py diff --git a/etc/ttcli.cfg b/etc/ttcli.cfg index d9279d3..d5221d4 100644 --- a/etc/ttcli.cfg +++ b/etc/ttcli.cfg @@ -13,8 +13,8 @@ portfolio-delta-variation = 5 [order] bp-warn-above-percent = 5 -[options] +[option] chain-show-delta = true -chain-show-iv = false -chain-show-oi = false +chain-show-volume = false +chain-show-open-interest = false chain-show-theta = false diff --git a/ttcli/app.py b/ttcli/app.py index f873c4a..fe7a6c7 100644 --- a/ttcli/app.py +++ b/ttcli/app.py @@ -4,6 +4,7 @@ import asyncclick as click from ttcli.option import option +from ttcli.portfolio import portfolio from ttcli.utils import CONTEXT_SETTINGS, VERSION, logger @@ -19,5 +20,6 @@ def main(): logger.debug('Using Windows-specific event loop policy') app.add_command(option) + app.add_command(portfolio) app(_anyio_backend='asyncio') diff --git a/ttcli/option.py b/ttcli/option.py index 0005850..ab5db74 100644 --- a/ttcli/option.py +++ b/ttcli/option.py @@ -65,7 +65,29 @@ async def listen_greeks( return greeks_dict -@click.group(chain=True, help='Buy, sell, and analyze options.') +async def listen_summaries( + n_summaries: int, + streamer: DXLinkStreamer +) -> dict[str, Quote]: + summary_dict = {} + async for summary in streamer.listen(EventType.SUMMARY): + summary_dict[summary.eventSymbol] = summary + if len(summary_dict) == n_summaries: + return summary_dict + + +async def listen_trades( + n_trades: int, + streamer: DXLinkStreamer +) -> dict[str, Quote]: + trade_dict = {} + async for trade in streamer.listen(EventType.TRADE): + trade_dict[trade.eventSymbol] = trade + if len(trade_dict) == n_trades: + return trade_dict + + +@click.group(help='Buy, sell, and analyze options.') async def option(): pass @@ -194,6 +216,9 @@ async def call(symbol: str, quantity: int, strike: Optional[Decimal] = None, wid if data.warnings: for warning in data.warnings: print_warning(warning.message) + warn_percent = sesh.config.getint('order', 'bp-warn-above-percent', fallback=None) + if warn_percent and percent > warn_percent: + print_warning(f'Buying power usage is above target of {warn_percent}%!') if get_confirmation('Send order? Y/n '): acc.place_order(sesh, order, dry_run=False) @@ -322,6 +347,9 @@ async def put(symbol: str, quantity: int, strike: Optional[int] = None, width: O if data.warnings: for warning in data.warnings: print_warning(warning.message) + warn_percent = sesh.config.getint('order', 'bp-warn-above-percent', fallback=None) + if warn_percent and percent > warn_percent: + print_warning(f'Buying power usage is above target of {warn_percent}%!') if get_confirmation('Send order? Y/n '): acc.place_order(sesh, order, dry_run=False) @@ -527,6 +555,9 @@ async def strangle(symbol: str, quantity: int, call: Optional[Decimal] = None, w if data.warnings: for warning in data.warnings: print_warning(warning.message) + warn_percent = sesh.config.getint('order', 'bp-warn-above-percent', fallback=None) + if warn_percent and percent > warn_percent: + print_warning(f'Buying power usage is above target of {warn_percent}%!') if get_confirmation('Send order? Y/n '): acc.place_order(sesh, order, dry_run=False) @@ -539,7 +570,6 @@ async def strangle(symbol: str, quantity: int, call: Optional[Decimal] = None, w @click.argument('symbol', type=str) async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): sesh = RenewableSession() - strike_price = None async with DXLinkStreamer(sesh) as streamer: await streamer.subscribe(EventType.QUOTE, [symbol]) quote = await streamer.get_event(EventType.QUOTE) @@ -552,13 +582,32 @@ async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): console = Console() table = Table(show_header=True, header_style='bold', title_style='bold', title=f'Options chain for {symbol} expiring {expiration}') - table.add_column(u'Call \u0394', width=8, justify='center') + + show_delta = sesh.config.getboolean('option', 'chain-show-delta', fallback=True) + show_theta = sesh.config.getboolean('option', 'chain-show-theta', fallback=False) + show_oi = sesh.config.getboolean('option', 'chain-show-open-interest', fallback=False) + show_volume = sesh.config.getboolean('option', 'chain-show-volume', fallback=False) + if show_volume: + table.add_column(u'Volume', width=8, justify='right') + if show_oi: + table.add_column(u'Open Int', width=8, justify='right') + if show_theta: + table.add_column(u'Call \u03B8', width=6, justify='center') + if show_delta: + table.add_column(u'Call \u0394', width=6, justify='center') table.add_column('Bid', style='green', width=8, justify='center') table.add_column('Ask', style='red', width=8, justify='center') table.add_column('Strike', width=8, justify='center') table.add_column('Bid', style='green', width=8, justify='center') table.add_column('Ask', style='red', width=8, justify='center') - table.add_column(u'Put \u0394', width=8, justify='center') + if show_delta: + table.add_column(u'Put \u0394', width=6, justify='center') + if show_theta: + table.add_column(u'Put \u03B8', width=6, justify='center') + if show_oi: + table.add_column(u'Open Int', width=8, justify='right') + if show_volume: + table.add_column(u'Volume', width=8, justify='right') if strikes * 2 < len(subchain.strikes): mid_index = 0 @@ -572,30 +621,49 @@ async def chain(symbol: str, strikes: int = 8, weeklies: bool = False): [s.put_streamer_symbol for s in all_strikes]) await streamer.subscribe(EventType.QUOTE, dxfeeds) await streamer.subscribe(EventType.GREEKS, dxfeeds) + if show_oi: + await streamer.subscribe(EventType.SUMMARY, dxfeeds) + if show_volume: + await streamer.subscribe(EventType.TRADE, dxfeeds) greeks_dict = await listen_greeks(len(dxfeeds), streamer) # take into account the symbol we subscribed to quote_dict = await listen_quotes(len(dxfeeds), streamer, skip=symbol) + if show_oi: + summary_dict = await listen_summaries(len(dxfeeds), streamer) + if show_volume: + trade_dict = await listen_trades(len(dxfeeds), streamer) for i, strike in enumerate(all_strikes): put_bid = quote_dict[strike.put_streamer_symbol].bidPrice put_ask = quote_dict[strike.put_streamer_symbol].askPrice - put_delta = int(greeks_dict[strike.put_streamer_symbol].delta * 100) call_bid = quote_dict[strike.call_streamer_symbol].bidPrice call_ask = quote_dict[strike.call_streamer_symbol].askPrice - call_delta = int(greeks_dict[strike.call_streamer_symbol].delta * 100) - - table.add_row( - f'{call_delta:g}', + row = [ f'{call_bid:.2f}', f'{call_ask:.2f}', f'{strike.strike_price:.2f}', f'{put_bid:.2f}', - f'{put_ask:.2f}', - f'{put_delta:g}' - ) - if i == strikes - 1: - table.add_row('=======', u'\u25B2 ITM \u25B2', '=======', '=======', - '=======', u'\u25BC ITM \u25BC', '=======', style='white') + f'{put_ask:.2f}' + ] + prepend = [] + if show_delta: + put_delta = int(greeks_dict[strike.put_streamer_symbol].delta * 100) + call_delta = int(greeks_dict[strike.call_streamer_symbol].delta * 100) + prepend.append(f'{call_delta:g}') + row.append(f'{put_delta:g}') + + if show_theta: + prepend.append(f'{abs(greeks_dict[strike.put_streamer_symbol].theta):.2f}') + row.append(f'{abs(greeks_dict[strike.call_streamer_symbol].theta):.2f}') + if show_oi: + prepend.append(f'{summary_dict[strike.put_streamer_symbol].openInterest}') + row.append(f'{summary_dict[strike.call_streamer_symbol].openInterest}') + if show_volume: + prepend.append(f'{trade_dict[strike.put_streamer_symbol].dayVolume}') + row.append(f'{trade_dict[strike.call_streamer_symbol].dayVolume}') + + prepend.reverse() + table.add_row(*(prepend + row), end_section=(i == strikes - 1)) console.print(table) diff --git a/ttcli/portfolio.py b/ttcli/portfolio.py new file mode 100644 index 0000000..67a6725 --- /dev/null +++ b/ttcli/portfolio.py @@ -0,0 +1,6 @@ +import asyncclick as click + + +@click.group(help='View positions and stats for your portfolio.') +async def portfolio(): + pass diff --git a/ttcli/utils.py b/ttcli/utils.py index f62b936..8ad6a73 100644 --- a/ttcli/utils.py +++ b/ttcli/utils.py @@ -65,15 +65,6 @@ def __init__(self): default_path = os.path.join(sys.prefix, DEFAULT_CONFIG_PATH) token_path = os.path.join(os.path.expanduser('~'), TOKEN_PATH) - # load config - self.config = ConfigParser() - if not os.path.exists(custom_path): - # copy default config to user home dir - os.makedirs(os.path.dirname(custom_path), exist_ok=True) - shutil.copyfile(default_path, custom_path) - self.config.read(default_path) - self.config.read(custom_path) - logged_in = False # try to load token if os.path.exists(token_path): @@ -83,6 +74,15 @@ def __init__(self): # make sure token hasn't expired logged_in = self.validate() + # load config + self.config = ConfigParser() + if not os.path.exists(custom_path): + # copy default config to user home dir + os.makedirs(os.path.dirname(custom_path), exist_ok=True) + shutil.copyfile(default_path, custom_path) + self.config.read(default_path) + self.config.read(custom_path) + if not logged_in: # either the token expired or doesn't exist username, password = self._get_credentials() @@ -99,12 +99,14 @@ def __init__(self): logger.debug('Logged in with cached session.') def _get_credentials(self): - username = (self.config['general'].get('username') or - os.getenv('TT_USERNAME')) + username = os.getenv('TT_USERNAME') + password = os.getenv('TT_PASSWORD') + if self.config.has_section('general'): + username = username or self.config['general'].get('username') + password = password or self.config['general'].get('password') + if not username: username = getpass.getpass('Username: ') - password = (self.config['general'].get('password') or - os.getenv('TT_PASSWORD')) if not password: password = getpass.getpass('Password: ')