# XOM SMA-EMA-RSI Golden Crosses ’22

Featured Photo by Johannes Plenio on Pexels.

Today we will discuss the XOM stock using most basic technical trading indicators (TTIs) within the Python library ta-lib. Recall that this library is widely used by algo traders requiring to perform technical analysis of financial market data. It includes 150+ indicators such as ADX, MACD, RSI, Stochastic, Bollinger Bands, etc., Candlestick pattern recognition, and open-source API for C/C++, Java, Perl, Python and 100% Managed .NET.

Following the recent DDIntel post, we will restrict ourselves to the most common trend indicators such as the Simple Moving Averages (SMA) and the Exponential Moving Average (EMA). Also, we will compute the Relative Strength Indicator (RSI). This is the most popular momentum indicator. It measures the speed and magnitude of a security’s recent price changes to evaluate overvalued or undervalued conditions in the price of that security.

Contents:

## Key Libraries

Let’s install ta-lib within the Anaconda IDE as follows

conda install -c conda-forge ta-lib

We can now open our Jupyter notebook and start scripting.

Let’s set the working directory YOURPATH

import os
os.chdir(‘YOURPATH’)
os. getcwd()

and import the key libraries

import talib

import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import yfinance as yf

## Stock Data

We are ready to import the XOM stock data from yfinance
stock_data.tail()

`[*********************100%***********************]  1 of 1 completed`

We can examine the XOM fundamentals in Appendix.

## SMA

• SMA is simply the mean, or average, of the stock price values over the specified period.
• Averaging out the prices creates a smoothing effect, which clarifies the price’s direction — upward, downward, or sideways. Moving averages based on a longer lookback period have a better smoothing effect compared to those with shorter ones.

Let’s calculate the following two SMAs
stock_data[“SMA_short”] = talib.SMA(stock_data[“Close”], timeperiod=10)
stock_data[“SMA_long”] = talib.SMA(stock_data[“Close”], timeperiod=50)

and create their line plots
fig = go.Figure(data=[go.Scatter(
name=”Close”,
x=stock_data.index,
y=stock_data[“Close”],
mode=’lines’),
go.Scatter(name=”SMA_short”, x=stock_data.index, y=stock_data[‘SMA_short’], line=dict(color=’green’, width=2.5)),
go.Scatter(name=”SMA_long”, x=stock_data.index, y=stock_data[‘SMA_long’], line=dict(color=’red’, width=2.5))])

fig.update_layout(title=’XOM Prices’)

##### Edit axis labels

fig[‘layout’][‘yaxis’][‘title’]=’Price’

fig.show()

• If the SMA is moving up, the trend is up. If the SMA is moving down, the trend is down. Shorter/longer period SMAs can be used to determine shorter/longer term trends.
• Price crossing SMA is often used to trigger trading signals. When prices cross above the SMA, you might want to go long or cover short; when they cross below the SMA, you might want to go short or exit long.
• SMA Crossing SMA is another common trading signal. When a short period SMA crosses above a long period SMA, you may want to go long. You may want to go short when the short-term SMA crosses back below the long-term SMA.

## EMA

An even more effective way of producing trading signals is with a double exponential moving average strategy, using one short-term and one-long term EMA. This exponential moving average strategy creates a trading signal when the shorter EMA indicator crosses the longer one.

As with SMAs, we can calculate the following two EMAs
stock_data[“EMA_short”] = talib.EMA(stock_data[“Close”], timeperiod=10)
stock_data[“EMA_long”] = talib.EMA(stock_data[“Close”], timeperiod=50)

and create the plot
fig = go.Figure(data=[go.Scatter(
name=”Close”,
x=stock_data.index,
y=stock_data[“Close”],
mode=’lines’),
go.Scatter(name=”EMA_short”, x=stock_data.index, y=stock_data[‘EMA_short’], line=dict(color=’green’, width=2.5)),
go.Scatter(name=”EMA_long”, x=stock_data.index, y=stock_data[‘EMA_long’], line=dict(color=’red’, width=2.5))])

##### Customise and show the plot

fig.update_layout(title=’XOM Prices’)
fig[‘layout’][‘yaxis’][‘title’]=’Price’
fig.show()

With this EMA crossover strategy, the trader would buy when the short-term EMA crosses above the long-term EMA, and sell when the short-term EMA crosses below the long-term EMA.

## SMA vs EMA

Let’s calculate both the SMA and EMA indicators with the same lookback period, and plot them together.

##### Calculate the SMA

stock_data[‘SMA’] = talib.SMA(stock_data[‘Close’], timeperiod=50)

##### Calculate the EMA

stock_data[‘EMA’] = talib.EMA(stock_data[‘Close’], timeperiod=50)

##### Plot the SMA, EMA with prices

fig = go.Figure(data=[go.Scatter(
name=”Close”,
x=stock_data.index,
y=stock_data[“Close”],
mode=’lines’),
go.Scatter(name=”SMA”, x=stock_data.index, y=stock_data[‘SMA’], line=dict(color=’orange’, width=2.5)),
go.Scatter(name=”EMA”, x=stock_data.index, y=stock_data[‘EMA’], line=dict(color=’green’, width=2.5))])

##### Customise and show the plot

fig.update_layout(title=’XOM Prices’)
fig[‘layout’][‘yaxis’][‘title’]=’Price’
fig.show()

• It is clear that EMA is more sensitive to price movement turning up before SMA.
• Both moving averages use previous price data, so they lag behind current trends. For this reason, they are often used alongside other technical indicators, underpinning them to provide a more in-depth analysis. The data sets that are used to form the average are continuously replaced by new data, which is why it’s called a moving average.
• Due to the way they’re calculated, EMA give more weighting to recent prices, which can potentially make them more relevant. Traders with a short-term perspective will usually get similar results with whichever average they use, whereas traders with a long-term perspective need to carefully determine what they need their indicators to show them. There will be a distinct difference between SMA and EMA over a longer time period.

## RSI Indicator

Let’s invoke the RSI formula and create the RSI momentum indicator curve with horizontal lines at 30 and 70

##### Calculate RSI

stock_data[‘RSI’] = talib.RSI(stock_data[‘Close’])

##### Create subplots

fig = make_subplots(rows=2, cols=1,
subplot_titles=[
“Close Price”, “Momentum Indicator RSI”])

##### Make subplot of prices

go.Scatter(
name=”Close”,
x = stock_data.index,
y=stock_data[“Close”]
),
row=1, col=1
)

##### Make subplot of RSI

go.Scatter(
name=”RSI”,
x= stock_data.index,
y=stock_data[“RSI”]
),
row=2, col=1
)

##### Customise and show plot

fig[‘layout’][‘yaxis’][‘title’]=’Price’
fig[‘layout’][‘yaxis2’][‘title’]=’RSI’
fig.update_layout(height=600, title_text=”XOM Data”)
fig[‘layout’].update(shapes=[{‘type’: ‘line’,’y0′:70,’y1′: 70,’x0′:str(stock_data.index[0]),
‘x1′:str(stock_data.index[-1]),’xref’:’x2′,’yref’:’y2′,
‘line’: {‘color’: ‘green’,’width’: 2.5}},
{‘type’: ‘line’,’y0′:30,’y1′: 30,’x0′:str(stock_data.index[0]),
‘x1′:str(stock_data.index[-1]),’xref’:’x2′,’yref’:’y2′,
‘line’: {‘color’: ‘green’,’width’: 2.5}}]) # Adds horizontal lines

fig.show()

• The way W. Wilder recommends using the RSI is by using the 30 and 70 levels in the oscillator as oversold and overbought levels respectively. This means that when RSI falls below 30, you aim to buy the financial security that has been sold too much and when the RSI reaches over 70, you aim to sell the financial asset that has been bought too much.
• Traditionally, an RSI over 70 indicates the security is overbought and overvalued, which means the price may reverse. Likewise, an RSI below 30 means the asset is oversold and undervalued and the price may rally from hereon.

## Summary

• XOM is being the “belle of the ball” for investors at present.
• It’s having trouble breaking through the \$110 level.
• The stock has pretty much reached the top end of their estimates.
• XOM’s stock will be falling ~20% in the near term.
• In the first half of 2023, XOM might be dropping back into the \$90 buy range.
• Our observations are consistent with the SeekingAlpha advice mentioned above.

## Explore More

Energy E&P: XOM Technical Analysis Nov ’22

The Zacks’s Market Outlook Nov ’22 – Energy Focus

## Appendix: XOM Fundamentals

Let’s look at the XOM stock fundamentals

import yfinance as yf

xom = yf.Ticker(“XOM”)

##### get stock info

xom.info

```{'zip': '75039-2298',
'sector': 'Energy',
'fullTimeEmployees': 63000,
'longBusinessSummary': 'Exxon Mobil Corporation explores for and produces crude oil and natural gas in the United States and internationally. It operates through Upstream, Downstream, and Chemical segments. The company is also involved in the manufacture, trade, transport, and sale of crude oil, natural gas, petroleum products, petrochemicals, and other specialty products; manufactures and sells petrochemicals, including olefins, polyolefins, aromatics, and various other petrochemicals; and captures and stores carbon, hydrogen, and biofuels. As of December 31, 2021, it had approximately 20,528 net operated wells with proved reserves. The company was founded in 1870 and is headquartered in Irving, Texas.',
'city': 'Irving',
'phone': '972-940-6000',
'state': 'TX',
'country': 'United States',
'companyOfficers': [],
'website': 'https://corporate.exxonmobil.com',
'maxAge': 1,
'industry': 'Oil & Gas Integrated',
'ebitdaMargins': 0.21141,
'profitMargins': 0.13317999,
'grossMargins': 0.32086,
'operatingCashflow': 76300001280,
'revenueGrowth': 0.482,
'operatingMargins': 0.16066,
'ebitda': 82322997248,
'targetLowPrice': 77,
'grossProfits': 90045000000,
'freeCashflow': 43145248768,
'targetMedianPrice': 120,
'currentPrice': 110.67,
'earningsGrowth': 1.981,
'currentRatio': 1.341,
'returnOnAssets': 0.11063,
'numberOfAnalystOpinions': 25,
'targetMeanPrice': 117.46,
'debtToEquity': 23.532,
'returnOnEquity': 0.29733,
'targetHighPrice': 138,
'totalCash': 30407000064,
'totalDebt': 45427998720,
'totalRevenue': 389392007168,
'totalCashPerShare': 7.383,
'financialCurrency': 'USD',
'revenuePerShare': 91.859,
'quickRatio': 0.983,
'recommendationMean': 2.3,
'exchange': 'NYQ',
'shortName': 'Exxon Mobil Corporation',
'longName': 'Exxon Mobil Corporation',
'exchangeTimezoneName': 'America/New_York',
'exchangeTimezoneShortName': 'EST',
'isEsgPopulated': False,
'gmtOffSetMilliseconds': '-18000000',
'quoteType': 'EQUITY',
'symbol': 'XOM',
'messageBoardId': 'finmb_406338',
'market': 'us_market',
'annualHoldingsTurnover': None,
'enterpriseToRevenue': 1.226,
'beta3Year': None,
'enterpriseToEbitda': 5.797,
'52WeekChange': 0.816906,
'morningStarRiskRating': None,
'forwardEps': 11.38,
'revenueQuarterlyGrowth': None,
'sharesOutstanding': 4118289920,
'fundInceptionDate': None,
'annualReportExpenseRatio': None,
'totalAssets': None,
'bookValue': 45.189,
'sharesShort': 41236390,
'sharesPercentSharesOut': 0.01,
'fundFamily': None,
'lastFiscalYearEnd': 1640908800,
'heldPercentInstitutions': 0.598,
'netIncomeToCommon': 51860000768,
'trailingEps': 12.25,
'lastDividendValue': 0.91,
'SandP52WeekChange': -0.10858184,
'priceToBook': 2.4490473,
'heldPercentInsiders': 0.0007,
'nextFiscalYearEnd': 1703980800,
'yield': None,
'mostRecentQuarter': 1664496000,
'shortRatio': 2.15,
'sharesShortPreviousMonthDate': 1665705600,
'floatShares': 4112198347,
'beta': 1.129488,
'enterpriseValue': 477200154624,
'priceHint': 2,
'threeYearAverageReturn': None,
'lastSplitDate': 995500800,
'lastSplitFactor': '2:1',
'legalType': None,
'lastDividendDate': 1668384000,
'morningStarOverallRating': None,
'earningsQuarterlyGrowth': 1.913,
'priceToSalesTrailing12Months': 1.1704686,
'dateShortInterest': 1668470400,
'pegRatio': 0.31,
'ytdReturn': None,
'forwardPE': 9.724956,
'lastCapGain': None,
'shortPercentOfFloat': 0.01,
'sharesShortPriorMonth': 41541776,
'impliedSharesOutstanding': 0,
'category': None,
'fiveYearAverageReturn': None,
'previousClose': 111.34,
'regularMarketOpen': 111.64,
'twoHundredDayAverage': 92.65395,
'trailingAnnualDividendYield': 0.031614874,
'payoutRatio': 0.2873,
'volume24Hr': None,
'regularMarketDayHigh': 112.07,
'navPrice': None,
'averageDailyVolume10Day': 15942080,
'regularMarketPreviousClose': 111.34,
'fiftyDayAverage': 104.1276,
'trailingAnnualDividendRate': 3.52,
'open': 111.64,
'toCurrency': None,
'averageVolume10days': 15942080,
'expireDate': None,
'algorithm': None,
'dividendRate': 3.64,
'exDividendDate': 1668384000,
'circulatingSupply': None,
'startDate': None,
'regularMarketDayLow': 110.18,
'currency': 'USD',
'trailingPE': 9.034286,
'regularMarketVolume': 5617104,
'lastMarket': None,
'maxSupply': None,
'openInterest': None,
'marketCap': 455771127808,
'volumeAllCurrencies': None,
'strikePrice': None,
'averageVolume': 19267972,
'dayLow': 110.18,
'volume': 5617104,
'fiftyTwoWeekHigh': 114.66,
'fromCurrency': None,
'fiveYearAvgDividendYield': 5.38,
'fiftyTwoWeekLow': 57.96,
'bid': 110.49,
'dividendYield': 0.033099998,
'bidSize': 800,
'dayHigh': 112.07,
'regularMarketPrice': 110.67,
'preMarketPrice': 111.38,
'logo_url': 'https://logo.clearbit.com/corporate.exxonmobil.com'}```
##### get historical market data

hist = xom.history(period=”max”)

hist.tail()

Show actions (dividends, splits)
xom.actions

Show financials
xom.financials
xom.quarterly_financials

Show major holders
xom.major_holders

show institutional holders
xom.institutional_holders

show the balance sheet
xom.balance_sheet
xom.quarterly_balance_sheet

show cashflow
xom.cashflow
xom.quarterly_cashflow

show earnings
xom.earnings
xom.quarterly_earnings

show sustainability (ESG)
xom.sustainability

show analysts recommendations
xom.recommendations

show next event (earnings, etc)
xom.calendar

show all earnings dates
xom.earnings_dates

show ISIN code – experimental

##### ISIN = International Securities Identification Number

xom.isin

`'-'`

show options expirations
xom.options

```('2022-12-02',
'2022-12-09',
'2022-12-16',
'2022-12-23',
'2022-12-30',
'2023-01-06',
'2023-01-20',
'2023-02-17',
'2023-03-17',
'2023-04-21',
'2023-06-16',
'2023-07-21',
'2024-01-19',
'2024-06-21',
'2025-01-17',
'2026-02-21')```

show news
xom.news

```[{'uuid': '4dfd85df-1b31-3a0c-8257-b615f57d9ecd',
'title': 'CVX to Commence Venezuelan Oil Output Amid Easing Sanctions',
'publisher': 'Zacks',
'providerPublishTime': 1669900621,
'type': 'STORY',
'width': 635,
'height': 400,
'tag': 'original'},
{'url': 'https://s.yimg.com/uu/api/res/1.2/L5y1WN2SX04iC4Fku2ctKA--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/zacks.com/6b283354cdabb079603e8ccc6e86b556',
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['CVX', 'VLO', 'PSX', 'XOM']},
{'uuid': '38693702-8602-3097-80ac-4c6e4da44eb0',
'title': 'BofA warns hot inflation might run rampant for another 10 years — here’s the 1 shockproof sector that could preserve your wealth under that worst-case scenario',
'publisher': 'MoneyWise',
'providerPublishTime': 1669896000,
'type': 'STORY',
'width': 728,
'height': 400,
'tag': 'original'},
{'url': 'https://s.yimg.com/uu/api/res/1.2/J.hXoAYnTLRGs7OrCq6sNg--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/moneywise_327/4b1b0a3cef8079f92c5de821105bd124',
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['XOM', 'COP']},
{'uuid': '5e662628-041f-301f-8b45-93cfa5da31f1',
'title': 'ExxonMobil and Mitsubishi Heavy Industries partner to advance carbon capture technology',
'providerPublishTime': 1669837223,
'type': 'STORY',
'width': 1440,
'height': 960,
'tag': 'original'},
{'url': 'https://s.yimg.com/uu/api/res/1.2/uxqxlP.R2J0dbfrYaPKh8w--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/bizjournals.com/7c4117b5de6c0c8da7136e56c17d368e',
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['XOM']},
'title': 'Top 10 Stocks to Buy in 10 Different Sectors',
'publisher': 'Insider Monkey',
'providerPublishTime': 1669834459,
'type': 'STORY',
'width': 400,
'height': 266,
'tag': 'original'},
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['DUK', 'LMT', 'CCI', 'GOOGL', 'WMT', 'XOM']},
{'uuid': 'ef4b8b79-1482-389c-9760-a116a4f30fe7',
'title': '11 Best Nuclear Energy Stocks To Buy Today',
'publisher': 'Insider Monkey',
'providerPublishTime': 1669833456,
'type': 'STORY',
'width': 768,
'height': 509,
'tag': 'original'},
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['LEU', 'URG', 'UUUU', 'NXE', 'DNN', 'COP', 'XOM']},
{'uuid': '62ebc71f-0e14-345b-b6a1-0aedd66563a5',
'title': '20 big oil companies expected to be cash gushers in 2023\xa0despite short-term uncertainty',
'publisher': 'MarketWatch',
'providerPublishTime': 1669827840,
'type': 'STORY',
'width': 1280,
'height': 640,
'tag': 'original'},
{'url': 'https://s.yimg.com/uu/api/res/1.2/YH194ZB5o.jFE6QoqhYf_A--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/marketwatch.com/ba8718e0f1420ce24b536eb1e2882bbc',
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['^GSPC', 'XOM']},
{'uuid': '20849d92-c2aa-35ac-93c4-e19cfb17698c',
'title': 'Enbridge (ENB), Bad River Tribe to Form Line 5 Oil Spill Plan',
'publisher': 'Zacks',
'providerPublishTime': 1669819022,
'type': 'STORY',
'width': 635,
'height': 400,
'tag': 'original'},
{'url': 'https://s.yimg.com/uu/api/res/1.2/AvFL3LMAuwgaMyrpIgHyZA--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/zacks.com/5102c7cc524ab92392c1c3e5f0753c65',
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['ENB', 'XOM']},
'title': '14 Safe Stocks to Buy For Beginner Investors',
'publisher': 'Insider Monkey',
'providerPublishTime': 1669817598,
'type': 'STORY',
'width': 750,
'height': 500,
'tag': 'original'},
{'url': 'https://s.yimg.com/uu/api/res/1.2/W8hLTwS3qdDmoFOoPcwQXw--~B/Zmk9ZmlsbDtoPTE0MDtweW9mZj0wO3c9MTQwO2FwcGlkPXl0YWNoeW9u/https://media.zenfs.com/en/insidermonkey.com/c5a299131495043dc9951e0d351ca092',
'width': 140,
'height': 140,
'tag': '140x140'}]},
'relatedTickers': ['JNJ',
'KO',
'CVX',
'TSLA',
'NVDA',
'MU',
'XOM',
'NOW',
'CRM']}]```

In [31]:

`# get option chain for specific expiration`
`opt = xom.option_chain('2023-01-06')`

In [32]:

`print(opt)`

get option chain for specific expiration
opt = xom.option_chain(‘2023-01-06’)

print(opt)

```Options(calls=        contractSymbol             lastTradeDate  strike  lastPrice   bid  \
0   XOM230106C00106000 2022-11-30 18:47:17+00:00   106.0       7.50  7.00
1   XOM230106C00107000 2022-11-30 15:11:57+00:00   107.0       6.95  6.35
2   XOM230106C00110000 2022-12-01 17:17:08+00:00   110.0       4.50  4.35
3   XOM230106C00111000 2022-11-30 20:59:20+00:00   111.0       4.47  3.90
4   XOM230106C00112000 2022-12-01 16:20:07+00:00   112.0       3.80  3.35
5   XOM230106C00113000 2022-12-01 15:37:10+00:00   113.0       3.42  2.95
6   XOM230106C00114000 2022-11-30 20:35:13+00:00   114.0       3.25  2.53
7   XOM230106C00115000 2022-12-01 17:01:22+00:00   115.0       2.27  2.20
8   XOM230106C00116000 2022-12-01 14:49:31+00:00   116.0       2.29  1.86
9   XOM230106C00117000 2022-12-01 14:49:31+00:00   117.0       1.96  1.58
10  XOM230106C00118000 2022-12-01 16:04:45+00:00   118.0       1.42  1.32
11  XOM230106C00120000 2022-12-01 17:21:45+00:00   120.0       0.93  0.91
12  XOM230106C00121000 2022-11-30 18:30:12+00:00   121.0       1.00  0.76
13  XOM230106C00122000 2022-11-30 16:31:36+00:00   122.0       0.84  0.63
14  XOM230106C00124000 2022-11-28 17:30:44+00:00   124.0       0.68  0.42
15  XOM230106C00125000 2022-11-30 20:46:09+00:00   125.0       0.49  0.34
16  XOM230106C00126000 2022-12-01 17:06:21+00:00   126.0       0.32  0.28
17  XOM230106C00130000 2022-11-28 16:45:17+00:00   130.0       0.26  0.11
18  XOM230106C00165000 2022-11-25 16:10:05+00:00   165.0       0.05  0.00

ask  change  percentChange  volume  openInterest  impliedVolatility  \
0   7.15    0.00       0.000000      13            14           0.321418
1   6.50    0.00       0.000000       3             4           0.319709
2   4.50   -0.55     -10.891092       1           215           0.296272
3   4.10    0.00       0.000000      27            30           0.302497
4   3.55   -0.10      -2.564106      21            17           0.295417
5   3.10    0.17       5.230772      10            11           0.292732
6   2.69    0.00       0.000000       3            36           0.290290
7   2.34   -0.42     -15.613385      14            52           0.289436
8   1.97    0.04       1.777776       1             9           0.284309
9   1.70    0.08       4.255321       1            18           0.284431
10  1.43   -0.23     -13.939395       4            21           0.281745
11  1.01   -0.31     -25.000000       8            81           0.279060
12  0.85    0.00       0.000000      13           173           0.279060
13  0.70    0.00       0.000000       3            22           0.277351
14  0.51    0.00       0.000000       1             2           0.281257
15  0.41    0.00       0.000000      13            40           0.279060
16  0.35   -0.11     -25.581400      22             7           0.281501
17  0.17    0.00       0.000000       1             3           0.286140
18  0.07    0.00       0.000000       1             1           0.531255

inTheMoney contractSize currency
0         True      REGULAR      USD
1         True      REGULAR      USD
2         True      REGULAR      USD
3        False      REGULAR      USD
4        False      REGULAR      USD
5        False      REGULAR      USD
6        False      REGULAR      USD
7        False      REGULAR      USD
8        False      REGULAR      USD
9        False      REGULAR      USD
10       False      REGULAR      USD
11       False      REGULAR      USD
12       False      REGULAR      USD
13       False      REGULAR      USD
14       False      REGULAR      USD
15       False      REGULAR      USD
16       False      REGULAR      USD
17       False      REGULAR      USD
18       False      REGULAR      USD  , puts=        contractSymbol             lastTradeDate  strike  lastPrice    bid  \
0   XOM230106P00100000 2022-11-30 20:49:27+00:00   100.0       0.87   0.92
1   XOM230106P00102000 2022-11-30 19:01:08+00:00   102.0       1.24   1.21
2   XOM230106P00103000 2022-12-01 16:03:23+00:00   103.0       1.35   1.40
3   XOM230106P00105000 2022-12-01 16:13:43+00:00   105.0       1.75   1.85
4   XOM230106P00106000 2022-12-01 15:47:29+00:00   106.0       1.97   2.13
5   XOM230106P00108000 2022-12-01 15:07:12+00:00   108.0       2.39   2.74
6   XOM230106P00109000 2022-12-01 15:15:11+00:00   109.0       2.73   3.10
7   XOM230106P00110000 2022-12-01 16:07:29+00:00   110.0       3.50   3.50
8   XOM230106P00111000 2022-12-01 15:38:03+00:00   111.0       3.65   3.95
9   XOM230106P00112000 2022-12-01 16:35:17+00:00   112.0       4.20   4.60
10  XOM230106P00113000 2022-11-30 19:32:10+00:00   113.0       4.80   5.00
11  XOM230106P00114000 2022-12-01 16:34:07+00:00   114.0       5.25   5.60
12  XOM230106P00115000 2022-12-01 15:19:20+00:00   115.0       5.65   6.25
13  XOM230106P00119000 2022-11-30 18:13:56+00:00   119.0       9.65   9.15
14  XOM230106P00121000 2022-11-30 18:59:59+00:00   121.0      10.40  10.85
15  XOM230106P00126000 2022-11-28 14:31:07+00:00   126.0      15.90  15.40

ask  change  percentChange  volume  openInterest  impliedVolatility  \
0    1.01    0.00       0.000000     320           404           0.333503
1    1.32    0.00       0.000000     235           250           0.322394
2    1.52   -0.43     -24.157300       1            26           0.318366
3    1.96   -0.25     -12.500000      23            98           0.307136
4    2.23   -0.58     -22.745096       4             8           0.302253
5    2.90   -0.81     -25.312498      17           524           0.295417
6    3.30   -0.32     -10.491801      10            92           0.292976
7    3.70    0.31       9.717866      43           491           0.287727
8    4.15   -0.19      -4.947912      82           113           0.283454
9    4.70    0.05       1.204812       3            61           0.283332
10   5.20    0.00       0.000000       1             4           0.276863
11   5.80   -0.45      -7.894734       7            10           0.274788
12   6.45   -0.95     -14.393937       3            56           0.273445
13   9.35    0.00       0.000000       8            18           0.263435
14  11.15    0.00       0.000000       1             6           0.276863
15  15.75    0.00       0.000000       1             0           0.296150

inTheMoney contractSize currency
0        False      REGULAR      USD
1        False      REGULAR      USD
2        False      REGULAR      USD
3        False      REGULAR      USD
4        False      REGULAR      USD
5        False      REGULAR      USD
6        False      REGULAR      USD
7        False      REGULAR      USD
8         True      REGULAR      USD
9         True      REGULAR      USD
10        True      REGULAR      USD
11        True      REGULAR      USD
12        True      REGULAR      USD
13        True      REGULAR      USD
14        True      REGULAR      USD
15        True      REGULAR      USD  )
```

`​`

One-Time
Monthly
Yearly

#### Make a yearly donation

Choose an amount

\$5.00
\$15.00
\$100.00
\$5.00
\$15.00
\$100.00
\$5.00
\$15.00
\$100.00

Or enter a custom amount

\$