Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

TALibEx

livebook/stock.livemd

TALibEx

Mix.install([
  {:tesla, "~> 1.4"},
  {:talib_ex_nif, "~> 0.1.0"},
  {:vega_lite, "~> 0.1.6"},
  {:kino, "~> 0.6.2"},
  {:kino_vega_lite, "~> 0.1.3"},
  {:nimble_csv, "~> 1.2"}
])
:ok

Section

alias NimbleCSV.RFC4180, as: CSV
NimbleCSV.RFC4180
timestamp = fn %Date{day: day, month: month, year: year} ->
  {{year, month, day}, {0, 0, 0}}
  |> NaiveDateTime.from_erl!()
  |> DateTime.from_naive!("Etc/UTC")
  |> DateTime.to_unix()
end
#Function<44.65746770/1 in :erl_eval.expr/5>
# load csv data for APPL
symbol = "AAPL"
period1 = ~D[2022-01-01]
period2 = Date.utc_today()
interval = "1d"
events = "history"
include_adjusted_close = true

{:ok, %{body: csv}} =
  Tesla.get(
    "https://query1.finance.yahoo.com/v7/finance/download/#{symbol}",
    query: [
      period1: timestamp.(period1),
      period2: timestamp.(period2),
      interval: interval,
      events: events,
      includeAdjustedClose: include_adjusted_close
    ]
  )

19:26:21.825 [warn]  Description: 'Authenticity is not established by certificate path validation'
     Reason: 'Option {verify, verify_peer} and cacertfile/cacerts is missing'

{:ok,
 %Tesla.Env{
   __client__: %Tesla.Client{adapter: nil, fun: nil, post: [], pre: []},
   __module__: Tesla,
   body: "Date,Open,High,Low,Close,Adj Close,Volume\n2022-01-03,177.830002,182.880005,177.710007,182.009995,181.259918,104487900\n2022-01-04,182.630005,182.940002,179.119995,179.699997,178.959457,99310400\n2022-01-05,179.610001,180.169998,174.639999,174.919998,174.199158,94537600\n2022-01-06,172.699997,175.300003,171.639999,172.000000,171.291183,96904000\n2022-01-07,172.889999,174.139999,171.029999,172.169998,171.460495,86709100\n2022-01-10,169.080002,172.500000,168.169998,172.190002,171.480408,106765600\n2022-01-11,172.320007,175.179993,170.820007,175.080002,174.358490,76138300\n2022-01-12,176.119995,177.179993,174.820007,175.529999,174.806641,74805200\n2022-01-13,175.779999,176.619995,171.789993,172.190002,171.480408,84505800\n2022-01-14,171.339996,173.779999,171.089996,173.070007,172.356796,80440800\n2022-01-18,171.509995,172.539993,169.410004,169.800003,169.100250,90956700\n2022-01-19,170.000000,171.080002,165.940002,166.229996,165.544952,94815000\n2022-01-20,166.979996,169.679993,164.179993,164.509995,163.832062,91420500\n2022-01-21,164.419998,166.330002,162.300003,162.410004,161.740707,122848900\n2022-01-24,160.020004,162.300003,154.699997,161.619995,160.953949,162294600\n2022-01-25,158.979996,162.759995,157.020004,159.779999,159.121536,115798400\n2022-01-26,163.500000,164.389999,157.820007,159.690002,159.031921,108275300\n2022-01-27,162.449997,163.839996,158.279999,159.220001,158.563858,121954600\n2022-01-28,165.710007,170.350006,162.800003,170.330002,169.628067,179935700\n2022-01-31,170.160004,175.000000,169.509995,174.779999,174.059723,115541600\n2022-02-01,174.009995,174.839996,172.309998,174.610001,173.890442,86213900\n2022-02-02,174.750000,175.880005,173.330002,175.839996,175.115356,84914300\n2022-02-03,174.479996,176.240005,172.119995,172.899994,172.187469,89418100\n2022-02-04,171.679993,174.100006,170.679993,172.389999,171.898315,82465400\n2022-02-07,172.860001,173.949997,170.949997,171.660004,171.170395,77251200\n2022-02-08,171.729996,175.350006,171.429993,174.830002,174.331345,74829200\n2022-02-09,176.050003,176.649994,174.899994,176.279999,175.777222,71285000\n2022-02-10,174.139999,175.479996,171.550003,172.119995,171.629074,90865900\n2022-02-11,172.330002,173.080002,168.039993,168.639999,168.159012,98670700\n2022-02-14,167.369995,169.580002,166.559998,168.880005,168.398315,86185500\n2022-02-15,170.970001,172.949997,170.250000,172.789993,172.297165,62527400\n2022-02-16,171.850006,173.339996,170.050003,172.550003,172.057861,61177400\n2022-02-17,171.029999,171.910004,168.470001,168.880005,168.398315,69589300\n2022-02-18,169.820007,170.539993,166.190002,167.300003,166.822830,82772700\n2022-02-22,164.979996,166.690002,162.149994,164.320007,163.851334,91162800\n2022-02-23,165.539993,166.149994,159.750000,160.070007,159.613464,90009200\n2022-02-24,152.580002,162.850006,152.000000,162.740005,162.275848,141147500\n2022-02-25,163.839996,165.119995,160.869995,164.850006,164.379822,91974200\n2022-02-28,163.059998,165.419998,162.429993,165.119995,164.649048,95056600\n2022-03-01,164.699997,166.600006,161.970001,163.199997,162.734528,83474400\n2022-03-02,164.389999,167.360001,162.949997,166.559998,166.084946,79724800\n2022-03-03,168.470001,168.910004,165.550003,166.229996,165.755875,76678400\n2022-03-04,164.490005,165.550003,162.100006,163.169998,162.704605,83737200\n2022-03-07,163.360001,165.020004,159.039993,159.300003,158.845657,96418800\n2022-03-08,158.820007,162.880005,155.800003,157.440002,156.990952,131148300\n2022-03-09,161.479996,163.410004,159.410004,162.949997,162.485245,91454900\n2022-03-10,160.199997,160.389999,155.979996,158.520004,158.067886,105342000\n2022-03-11,158.929993,159.279999,154.500000,154.729996,154.288681,96970100\n2022-03-14,151.449997,154.119995,150.100006,150.619995,150.190399,108732100\n2022-03-15,150.899994,155.570007,150.380005,155.089996,154.647644,92964300\n2022-03-16,157.050003,160.000000,154.460007,159.589996,159.134827,102300200\n2022-03-17,158.610001,161.000000,157.630005,160.619995,160.161880,75615400\n2022-03-18,160.509995,164.479996,159.759995,163.979996,163.512299,123511700\n2022-03-21,163.509995,166.350006,163.009995,165.380005,164.90831" <> ...,
   headers: [
     {"cache-control", "private, max-age=10, stale-while-revalidate=20"},
     {"connection", "keep-alive"},
     {"date", "Tue, 20 Sep 2022 16:26:24 GMT"},
     {"age", "0"},
     {"server", "ATS"},
     {"vary", "Origin"},
     {"content-length", "13507"},
     {"content-type", "text/csv;charset=utf-8"},
     {"content-disposition", "attachment; filename=AAPL.csv"},
     {"y-rid", "b3jj6l5hijqdg"},
     {"x-yahoo-request-id", "b3jj6l5hijqdg"},
     {"x-request-id", "17128235-15dc-475a-95a3-f358e49aa210"},
     {"x-envoy-upstream-service-time", "36"},
     {"x-envoy-decorator-operation",
      "finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*"},
     {"strict-transport-security", "max-age=15552000"},
     {"referrer-policy", "no-referrer-when-downgrade"},
     {"x-frame-options", "SAMEORIGIN"},
     {"expect-ct",
      "max-age=31536000, report-uri=\"http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only\""},
     {"x-xss-protection", "1; mode=block"},
     {"x-content-type-options", "nosniff"}
   ],
   method: :get,
   opts: [],
   query: [
     period1: 1640995200,
     period2: 1663632000,
     interval: "1d",
     events: "history",
     includeAdjustedClose: true
   ],
   status: 200,
   url: "https://query1.finance.yahoo.com/v7/finance/download/AAPL"
 }}
# convert csv to data
[date, open, high, low, close, _adjusted_close, volume] =
  csv
  |> CSV.parse_string()
  |> Enum.zip()
  |> Enum.map(&amp;Tuple.to_list/1)

open = Enum.map(open, &amp;String.to_float/1)
high = Enum.map(high, &amp;String.to_float/1)
low = Enum.map(low, &amp;String.to_float/1)
close = Enum.map(close, &amp;String.to_float/1)
volume = Enum.map(volume, &amp;String.to_integer/1)
[104487900, 99310400, 94537600, 96904000, 86709100, 106765600, 76138300, 74805200, 84505800,
 80440800, 90956700, 94815000, 91420500, 122848900, 162294600, 115798400, 108275300, 121954600,
 179935700, 115541600, 86213900, 84914300, 89418100, 82465400, 77251200, 74829200, 71285000,
 90865900, 98670700, 86185500, 62527400, 61177400, 69589300, 82772700, 91162800, 90009200,
 141147500, 91974200, 95056600, 83474400, 79724800, 76678400, 83737200, 96418800, 131148300,
 91454900, 105342000, 96970100, 108732100, 92964300, ...]
{:ok, sma5} = TalibEx.sma(values: close, time_period: 5)
{:ok, sma20} = TalibEx.sma(values: close, time_period: 20)
{:ok, sma50} = TalibEx.sma(values: close, time_period: 50)
{:ok,
 [:nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  ...]}
{:ok, roc} = TalibEx.roc(values: close, time_period: 5)
{:ok,
 [:nan, :nan, :nan, :nan, :nan, -5.395304252384603, -2.5709488464821684, 0.34873142406508517,
  0.11046627906976525, 0.5227443866265391, -1.3880010292351308, -5.054835446026562,
  -6.278131409321097, -5.679771117024557, -6.615826854389628, -5.901062322124928,
  -3.9343043718776283, -3.2156064438516374, 4.876545659096232, 8.142559341126088, 9.281513388919226,
  10.113340721230646, 8.591880991132506, 1.2094152385438095, -1.7850984196424058,
  0.1259956467212886, 0.2502291913154986, -0.45112725683496, -2.1753002040448943,
  -1.6194797478858103, -1.1668529295103425, -2.1159496375989906, -1.8824018673716414,
  -0.7945896631557647, -2.7001408485273326, -7.3615293218977085, -5.685307348270518,
  -2.3863091429917938, -1.3030531744820162, -0.6816029407788471, 4.054470366831442,
  2.1445194130355283, -1.0191130960589767, -3.5247045640959374, -3.529408765859232,
  -2.167387754171324, -4.63814725712921, -5.17252074734964, ...]}
{:ok, macd, macd_signal, macd_hist} =
  TalibEx.macd(values: close, slow_period: 26, fast_period: 12, signal_period: 9)
{:ok,
 [:nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, -0.7444370137388319, -1.1384069756123552, -1.7731309403210957, -2.037223882012313,
  -2.0525989117474523, -2.019715850579871, -2.124098297236827, -1.9136389002046599,
  -1.7532661543794177, -1.8517401551786747, -2.216507248053574, -2.6254102382198994,
  -2.476312863128328, -2.684668345741727, -3.1196521301739892, ...],
 [:nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, -0.8709551981421334, -0.9244455536361778, -1.0941826309731613, -1.2827908811809916,
  -1.4367524872942838, -1.5533451599514012, -1.6674957874084864, -1.716724409967721,
  -1.7240327588500604, -1.7495742381157833, -1.8429608401033415, -1.9994507197266531,
  -2.094823148406988, -2.212792187873936, ...],
 [:nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  :nan, 0.12651818440330154, -0.2139614219761774, -0.6789483093479345, -0.7544330008313214,
  -0.6158464244531685, -0.4663706906284699, -0.45660250982834083, -0.19691449023693886,
  -0.02923339552935733, -0.10216591706289146, -0.37354640795023264, -0.6259595184932463,
  -0.3814897147213401, ...]}
{:ok, cdl_engulfing} = TalibEx.cdl_engulfing(open: open, high: high, low: low, close: close)
{:ok,
 [:nan, :nan, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -100, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...]}
{:ok, rsi} = TalibEx.rsi(values: close, time_period: 14)
{:ok,
 [:nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan, :nan,
  15.097578884606977, 14.13846092715946, 14.091307653552002, 13.831862355645605, 41.330315286018916,
  48.42928050651345, 48.189396354367545, 50.11474743559168, 45.73941689628039, 45.005388580559426,
  43.918931423444334, 49.607909390215134, 52.00616897376121, 45.33932635014458, 40.6453016399304,
  41.09822707795724, 48.052818332969046, 47.68069387550926, 42.287580471975375, 40.18046453652654,
  36.487598120413615, 31.974176136923404, 37.22752905742443, 41.09871427560848, 41.59504653265974,
  39.073486672730446, 45.32053981064335, 44.83431040750177, 40.49575725613307, 35.78002621775475,
  33.74603217749457, 43.917013651062334, 38.76447355816572, 34.98295024826902, ...]}
data =
  [
    date: date,
    open: open,
    high: high,
    low: low,
    close: close,
    volume: volume,
    roc: roc,
    sma5: sma5,
    sma20: sma20,
    sma50: sma50,
    roc: roc,
    macd: macd,
    macd_signal: macd_signal,
    macd_hist: macd_hist,
    rsi: rsi,
    cdl_engulfing: cdl_engulfing
  ]
  |> then(fn list ->
    keys = Keyword.keys(list)

    filter_and_build = fn values ->
      values = Tuple.to_list(values)

      if :nan in values do
        []
      else
        keys
        |> Enum.zip(values)
        |> Map.new()
        |> case do
          %{cdl_engulfing: 0} = data -> data
          %{cdl_engulfing: 100} = data -> %{data | cdl_engulfing: 80}
          %{cdl_engulfing: -100} = data -> %{data | cdl_engulfing: 60}
        end
        |> List.wrap()
      end
    end

    list
    |> Keyword.values()
    |> Enum.zip()
    |> Enum.flat_map(filter_and_build)
  end)
[
  %{
    cdl_engulfing: 0,
    close: 155.089996,
    date: "2022-03-15",
    high: 155.570007,
    low: 150.380005,
    macd: -3.849442455126706,
    macd_hist: -0.946846790785306,
    macd_signal: -2.9025956643414,
    open: 150.899994,
    roc: -1.4926359058354044,
    rsi: 38.742982502781764,
    sma20: 162.82150030000003,
    sma5: 156.38199760000003,
    sma50: 167.63619992,
    volume: 92964300
  },
  %{
    cdl_engulfing: 0,
    close: 159.589996,
    date: "2022-03-16",
    high: 160.0,
    low: 154.460007,
    macd: -3.5223457177184514,
    macd_hist: -0.49580004270164135,
    macd_signal: -3.02654567501681,
    open: 157.050003,
    roc: -2.061982854777211,
    rsi: 45.109010512115404,
    sma20: 162.16150045000003,
    sma5: 155.70999740000005,
    sma50: 167.18779994,
    volume: 102300200
  },
  %{
    cdl_engulfing: 0,
    close: 160.619995,
    date: "2022-03-17",
    high: 161.0,
    low: 157.630005,
    macd: -3.1437674907721487,
    macd_hist: -0.09377745260427073,
    macd_signal: -3.049990038167878,
    open: 158.610001,
    roc: 1.324748263316966,
    rsi: 46.480011233974025,
    sma20: 161.56500005000004,
    sma5: 156.12999560000006,
    sma50: 166.8061999,
    volume: 75615400
  },
  %{
    cdl_engulfing: 0,
    close: 163.979996,
    date: "2022-03-18",
    high: 164.479996,
    low: 159.759995,
    macd: -2.543299939851039,
    macd_hist: 0.405352078653471,
    macd_signal: -2.94865201850451,
    open: 160.509995,
    roc: 5.978155651215822,
    rsi: 50.7973159777592,
    sma20: 161.31999960000005,
    sma5: 157.97999560000005,
    sma50: 166.58739985999998,
    volume: 123511700
  },
  %{
    cdl_engulfing: 0,
    close: 165.380005,
    date: "2022-03-21",
    high: 166.350006,
    low: 163.009995,
    macd: -1.9321830502136663,
    macd_hist: 0.8131751746326747,
    macd_signal: -2.745358224846341,
    open: 163.509995,
    roc: 9.799502383465097,
    rsi: 52.51609186336067,
    sma20: 161.22399970000006,
    sma5: 160.93199760000005,
    sma50: 166.45499995999998,
    volume: 95811400
  },
  %{
    cdl_engulfing: 0,
    close: 168.820007,
    date: "2022-03-22",
    high: 169.419998,
    low: 164.910004,
    macd: -1.1569524722902145,
    macd_hist: 1.2707246020449015,
    macd_signal: -2.427677074335116,
    open: 165.509995,
    roc: 8.852931429568155,
    rsi: 56.533938018506404,
    sma20: 161.44899970000006,
    sma5: 163.67799980000004,
    sma50: 166.38800013999997,
    volume: 81532000
  },
  %{
    cdl_engulfing: 0,
    close: 170.210007,
    date: "2022-03-23",
    high: 172.639999,
    low: 167.649994,
    macd: -0.4255102534352204,
    macd_hist: 1.6017334567199164,
    macd_signal: -2.027243710155137,
    open: 167.990005,
    roc: 6.654559349697564,
    rsi: 58.07753680331981,
    sma20: 161.95599970000006,
    sma5: 165.80200200000004,
    sma50: 166.34840023999996,
    volume: 98062700
  },
  %{
    cdl_engulfing: 0,
    close: 174.070007,
    date: "2022-03-24",
    high: 174.139999,
    low: 170.210007,
    macd: 0.4603263596669649,
    macd_hist: 1.9900560558576814,
    macd_signal: -1.5297296961907165,
    open: 171.059998,
    roc: 8.373809250834574,
    rsi: 62.102415959430004,
    sma20: 162.52249980000005,
    sma5: 168.49200440000004,
    sma50: 166.32820033999997,
    volume: 90131400
  },
  %{
    cdl_engulfing: 0,
    close: 174.720001,
    date: "2022-03-25",
    high: 175.279999,
    low: 172.75,
    macd: 1.2009633829274833,
    macd_hist: 2.18455446329456,
    macd_signal: -0.9835910803670765,
    open: 173.880005,
    roc: 6.549582425895406,
    rsi: 62.75094296123116,
    sma20: 163.01599955000006,
    sma5: 170.64000540000004,
    sma50: 166.31200037999994,
    volume: 80546200
  },
  %{
    cdl_engulfing: 0,
    close: 175.600006,
    date: "2022-03-28",
    high: 175.729996,
    low: 172.0,
    macd: 1.8377481916594718,
    macd_hist: 2.2570714176212388,
    macd_signal: -0.41932322596176685,
    open: 172.169998,
    roc: 6.179707758504427,
    rsi: 63.65769691818307,
    sma20: 163.54000010000007,
    sma5: 172.68400560000003,
    sma50: 166.38020045999994,
    volume: 90371900
  },
  %{
    cdl_engulfing: 0,
    close: 178.960007,
    date: "2022-03-29",
    high: 179.009995,
    low: 176.339996,
    macd: 2.583744937057361,
    macd_hist: 2.402454530415302,
    macd_signal: 0.18129040664205875,
    open: 176.690002,
    roc: 6.006397097235028,
    rsi: 66.96440086886315,
    sma20: 164.32800060000005,
    sma5: 174.71200560000005,
    sma50: 166.49800045999993,
    volume: 100589400
  },
  %{
    cdl_engulfing: 0,
    close: 177.770004,
    date: "2022-03-30",
    high: 179.610001,
    low: 176.699997,
    macd: 3.043841920636254,
    macd_hist: 2.290041211195356,
    macd_signal: 0.7538007094408978,
    open: 178.550003,
    roc: 4.441570230356673,
    rsi: 64.71842972244696,
    sma20: 164.88850090000005,
    sma5: 176.22400500000003,
    sma50: 166.65740047999992,
    volume: 92633200
  },
  %{
    cdl_engulfing: 0,
    close: 174.610001,
    date: "2022-03-31",
    high: 178.029999,
    low: 174.399994,
    macd: 3.1175490967093253,
    macd_hist: 1.890998709814742,
    macd_signal: 1.2265503868945833,
    open: 177.839996,
    roc: 0.31021656706200496,
    rsi: 59.05426855928805,
    sma20: 165.30750115000006,
    sma5: 176.33200380000002,
    sma50: 166.8250005799999,
    volume: 103049300
  },
  %{
    cdl_engulfing: 0,
    close: 174.309998,
    date: "2022-04-01",
    high: 174.880005,
    low: 171.940002,
    macd: 3.11583739594937,
    macd_hist: 1.5114296072438296,
    macd_signal: 1.6044077887055406,
    open: 174.029999,
    roc: -0.23466288785105593,
    rsi: 58.53053200307679,
    sma20: 165.86450115000008,
    sma5: 176.25000320000004,
    sma50: 167.0210006399999,
    volume: 78751300
  },
  %{
    cdl_engulfing: 0,
    close: 178.440002,
    date: "2022-04-04",
    high: 178.490005,
    low: 174.440002,
    macd: 3.4084472099300456,
    macd_hist: 1.443231536979604,
    macd_signal: 1.9652156729504415,
    open: 174.570007,
    roc: 1.617309739727446,
    rsi: 63.34947070926451,
    sma20: 166.82150110000006,
    sma5: 176.8180024,
    sma50: 167.3416005999999,
    volume: 76468400
  },
  %{
    cdl_engulfing: 0,
    close: 175.059998,
    date: "2022-04-05",
    high: 178.300003,
    low: 174.419998,
    macd: 3.3292272612262366,
    macd_hist: 1.0912092706206362,
    macd_signal: 2.2380179906056004,
    open: 177.5,
    roc: -2.1792628785491597,
    rsi: 57.464135040092835,
    sma20: 167.70250090000008,
    sma5: 176.03800060000003,
    sma50: 167.61040065999995,
    volume: 73401800
  },
  %{
    cdl_engulfing: 0,
    close: 171.830002,
    date: "2022-04-06",
    high: 173.630005,
    low: 170.130005,
    macd: 2.9715569394642785,
    macd_hist: 0.5868311590869424,
    macd_signal: 2.384725780377336,
    open: 172.360001,
    roc: -3.3413972359476296,
    rsi: 52.44950292772784,
    sma20: 168.1465011500001,
    sma5: 174.85000020000004,
    sma50: 167.85140071999996,
    volume: 89058800
  },
  %{
    cdl_engulfing: 0,
    close: 172.139999,
    date: "2022-04-07",
    high: 173.360001,
    low: 169.850006,
    macd: 2.682196112562849,
    macd_hist: 0.23797626574841058,
    macd_signal: 2.4442198468144385,
    open: 171.160004,
    roc: -1.4145822036848998,
    rsi: 52.87455084820092,
    sma20: 168.82750090000008,
    sma5: 174.35599980000003,
    sma50: 168.10040065999993,
    volume: 77594700
  },
  %{
    cdl_engulfing: 0,
    close: 170.089996,
    date: "2022-04-08",
    high: 171.779999,
    low: 169.199997,
    macd: 2.2613895716849584,
    macd_hist: -0.1462642201035842,
    macd_signal: 2.4076537917885426,
    open: 171.779999,
    roc: -2.420975301715045,
    rsi: 49.710025974772066,
    sma20: 169.5955009000001,
    sma5: 173.51199940000004,
    sma50: 168.31780055999997,
    volume: 76575500
  },
  %{
    cdl_engulfing: 0,
    close: 165.75,
    date: "2022-04-11",
    high: 169.029999,
    low: 165.5,
    macd: 1.5597165089266696,
    macd_hist: -0.6783498262894985,
    macd_signal: 2.238066335216168,
    open: 168.710007,
    roc: -7.1116352038597235,
    rsi: 43.74140419752012,
    sma20: 170.3520011500001,
    sma5: 170.97399900000005,
    sma50: 168.22620051999994,
    volume: 72246700
  },
  %{
    cdl_engulfing: 0,
    close: 167.660004,
    date: "2022-04-12",
    high: 169.869995,
    low: 166.639999,
    macd: 1.1445631006809833,
    macd_hist: -0.8748025876281478,
    macd_signal: 2.019365688309131,
    open: 168.020004,
    roc: -4.227118750452641,
    rsi: 46.77049391265767,
    sma20: 170.98050155000007,
    sma5: 169.49400020000004,
    sma50: 168.08380061999992,
    volume: 79265200
  },
  %{
    cdl_engulfing: 80,
    close: 170.399994,
    date: "2022-04-13",
    high: 171.039993,
    low: 166.770004,
    macd: 1.024831705608932,
    macd_hist: -0.7956271861601594,
    macd_signal: 1.8204588917690914,
    open: 167.389999,
    roc: -0.8322225358526225,
    rsi: 50.85814813274311,
    sma20: 171.52100145000006,
    sma5: 169.20799860000005,
    sma50: 167.99960047999994,
    volume: 70618900
  },
  %{
    cdl_engulfing: 60,
    close: 165.289993,
    date: "2022-04-14",
    high: 171.270004,
    low: 165.039993,
    macd: 0.5117106558446949,
    macd_hist: -1.0469985887395172,
    macd_signal: 1.5587092445842121,
    open: 170.619995,
    roc: -3.979322667476015,
    rsi: 44.06227419530482,
    sma20: 171.75450135000006,
    sma5: 167.83799740000003,
    sma50: 167.78860041999994,
    volume: 75329400
  },
  %{
    cdl_engulfing: 0,
    close: 165.070007,
    date: "2022-04-18",
    high: 166.600006,
    low: 163.570007,
    macd: 0.08631253815653395,
    macd_hist: -1.1779173651421426,
    macd_signal: 1.2642299032986766,
    open: 163.919998,
    roc: -2.951372284117171,
    rsi: 43.79098765111992,
    sma20: 171.80900190000006,
    sma5: 166.83399960000003,
    sma50: 167.63200067999995,
    volume: 69023900
  },
  %{
    cdl_engulfing: 0,
    close: 167.399994,
    date: "2022-04-19",
    high: 167.820007,
    low: 163.910004,
    macd: -0.06209229522488613,
    macd_hist: -1.0610577588188501,
    macd_signal: 0.998965463593964,
    open: 165.020004,
    roc: 0.9954714932126629,
    rsi: 47.47935789650038,
    sma20: 171.91000135000004,
    sma5: 167.16399840000003,
    sma50: 167.5322005799999,
    volume: 67723800
  },
  %{
    cdl_engulfing: 0,
    close: 167.229996,
    date: "2022-04-20",
    high: 168.880005,
    low: 166.100006,
    macd: -0.19121737784305992,
    macd_hist: -0.9521462731496191,
    macd_signal: 0.7609288953065592,
    open: 168.759995,
    roc: -0.25647619571808056,
    rsi: 47.235815279459665,
    sma20: 171.83050080000004,
    sma5: 167.07799680000005,
    sma50: 167.44360041999994,
    volume: 67929800
  },
  %{
    cdl_engulfing: 0,
    close: 166.419998,
    date: "2022-04-21",
    high: 171.529999,
    low: 165.910004,
    macd: -0.35481986276792554,
    macd_hist: -0.8925990064595878,
    macd_signal: 0.5377791436916622,
    open: 168.910004,
    roc: -2.3356784859980717,
    rsi: 46.02442707522933,
    sma20: 171.64100035000004,
    sma5: 166.28199760000004,
    sma50: 167.27540033999992,
    volume: 87227800
  },
  %{
    cdl_engulfing: 0,
    close: 161.789993,
    date: "2022-04-22",
    high: 167.869995,
    low: 161.5,
    macd: -0.8483000448285338,
    macd_hist: -1.108863350816157,
    macd_signal: 0.26056330598762306,
    open: 166.460007,
    roc: -2.117490560968205,
    rsi: 39.74928650135733,
    sma20: 171.02699965000005,
    sma5: 165.58199760000005,
    sma50: 166.9856002199999,
    volume: 84882400
  },
  %{
    cdl_engulfing: 0,
    close: 162.880005,
    date: "2022-04-25",
    high: 163.169998,
    low: 158.460007,
    macd: -1.1383100559035881,
    macd_hist: -1.1190986895129689,
    macd_signal: -0.01921136639061921,
    open: 161.119995,
    roc: -1.3267110360030365,
    rsi: 41.76242141206,
    sma20: 170.43499985000003,
    sma5: 165.14399720000003,
    sma50: 166.80080041999992,
    volume: 96046400
  },
  %{
    cdl_engulfing: 0,
    close: 156.800003,
    date: "2022-04-26",
    high: 162.339996,
    low: 156.720001,
    macd: -1.8375680867355868,
    macd_hist: -1.454685376275974,
    macd_signal: -0.38288271045961275,
    open: 162.25,
    roc: -6.3321334408172,
    rsi: 34.781454871764936,
    sma20: 169.49499970000002,
    sma5: 163.02399900000006,
    sma50: 166.5640004999999,
    volume: 95623200
  },
  %{
    cdl_engulfing: 0,
    close: 156.570007,
    date: "2022-04-27",
    high: 159.789993,
    low: 155.380005,
    macd: -2.3828261326952997,
    macd_hist: -1.5999547377885497,
    macd_signal: -0.7828713949067502,
    open: 155.910004,
    roc: -6.374447919020454,
    rsi: 34.54620388104945,
    sma20: 168.3754997,
    sma5: 160.89200120000004,
    sma50: 166.3178005399999,
    volume: 88063200
  },
  %{
    cdl_engulfing: 0,
    close: 163.639999,
    date: "2022-04-28",
    high: 164.520004,
    low: 158.929993,
    macd: -2.2188799278751787,
    macd_hist: -1.1488068263747429,
    macd_signal: -1.0700731015004359,
    open: 159.25,
    roc: -1.670471718188582,
    rsi: 46.52059876299832,
    sma20: 167.66899945,
    sma5: 160.33600140000004,
    sma50: 166.13480065999988,
    volume: 130216800
  },
  %{
    cdl_engulfing: 0,
    close: 157.649994,
    date: "2022-04-29",
    high: 166.199997,
    low: 157.25,
    macd: -2.5429808223565544,
    macd_hist: -1.178326176684895,
    macd_signal: -1.3646546456716595,
    open: 161.839996,
    roc: -2.5588721052729246,
    rsi: 39.86609887679818,
    sma20: 166.8209991,
    sma5: 159.50800160000006,
    sma50: 165.83680047999988,
    volume: 131747600
  },
  %{
    cdl_engulfing: 0,
    close: 157.960007,
    date: "2022-05-02",
    high: 158.229996,
    low: 153.270004,
    macd: -2.743195804387767,
    macd_hist: -1.102832926972886,
    macd_signal: -1.640362877414881,
    open: 156.710007,
    roc: -3.0206273630701497,
    rsi: 40.34173860585698,
    sma20: 166.00349955,
    sma5: 158.52400200000005,
    sma50: 165.61840051999988,
    volume: 123055300
  },
  %{
    cdl_engulfing: 0,
    close: 159.479996,
    date: "2022-05-03",
    high: 160.710007,
    low: 156.320007,
    macd: -2.747545219889304,
    macd_hist: -0.8857458739795381,
    macd_signal: -1.8617993459097657,
    open: 158.149994,
    roc: 1.7091791764825448,
    rsi: 42.73342998583259,
    sma20: 165.05549925,
    sma5: 159.06000060000005,
    sma50: 165.4620003799999,
    volume: 88966500
  },
  %{
    cdl_engulfing: 0,
    close: 166.020004,
    date: "2022-05-04",
    high: 166.479996,
    low: 159.259995,
    macd: -2.1979317850840516,
    macd_hist: -0.26890595133942874,
    macd_signal: -1.9290258337446229,
    open: 159.669998,
    roc: 6.035636825385082,
    rsi: 51.70483943099953,
    sma20: 164.60349954999998,
    sma5: 160.95000000000005,
    sma50: 165.49600031999987,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 156.770004,
    date: "2022-05-05",
    high: 164.080002,
    low: 154.949997,
    macd: -2.4801670508624625,
    macd_hist: -0.44091297369427185,
    macd_signal: -2.0392540771681906,
    open: 163.850006,
    roc: -4.198237009277905,
    rsi: 41.74389324743946,
    sma20: 163.85049965,
    sma5: 159.57600100000005,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 157.279999,
    date: "2022-05-06",
    high: 159.440002,
    low: 154.179993,
    macd: -2.632344173043691,
    macd_hist: -0.47447207670040026,
    macd_signal: -2.157872096343291,
    open: 156.009995,
    roc: -0.23469395120940817,
    rsi: 42.402733525004095,
    sma20: 163.10749964999997,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 152.059998,
    date: "2022-05-09",
    high: 155.830002,
    low: 151.490005,
    macd: -3.137983375059804,
    macd_hist: -0.7840890229732103,
    macd_signal: -2.3538943520865936,
    open: 154.929993,
    roc: -3.7351283480254516,
    rsi: 37.70270450323948,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 154.509995,
    date: "2022-05-10",
    high: 156.740005,
    low: 152.929993,
    macd: -3.3029375945874335,
    macd_hist: -0.759234594000672,
    macd_signal: -2.5437030005867616,
    open: 155.520004,
    roc: -3.1163789344464177,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 146.5,
    date: "2022-05-11",
    high: 155.449997,
    low: 145.809998,
    macd: -4.03350887661523,
    macd_hist: -1.1918447008227746,
    macd_signal: -2.841664175792455,
    open: 153.5,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 142.559998,
    date: "2022-05-12",
    high: 146.199997,
    low: 138.800003,
    macd: -4.874230024909195,
    macd_hist: -1.6260526792933923,
    macd_signal: -3.248177345615803,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 147.110001,
    date: "2022-05-13",
    high: 148.100006,
    low: 143.110001,
    macd: -5.114404702063609,
    macd_hist: -1.4929818851582448,
    ...
  },
  %{
    cdl_engulfing: 0,
    close: 145.539993,
    date: "2022-05-16",
    high: 147.520004,
    low: 144.179993,
    macd: -5.369534734568504,
    ...
  },
  %{cdl_engulfing: 0, close: 149.240005, date: "2022-05-17", high: 149.770004, low: 146.679993, ...},
  %{cdl_engulfing: 0, close: 140.820007, date: "2022-05-18", high: 147.360001, ...},
  %{cdl_engulfing: 0, close: 137.350006, date: "2022-05-19", ...},
  %{cdl_engulfing: 0, close: 137.589996, ...},
  %{cdl_engulfing: 0, ...},
  %{...},
  ...
]
ohlc_colors = [
  datum: "OHLC",
  condition: [
    [test: "datum.open < datum.close", value: "#06982d"],
    [test: "datum.open >= datum.close", value: "#ae1325"]
  ]
]

price_chart =
  VegaLite.new(width: 550, height: 250)
  |> VegaLite.encode_field(:x, "date", type: :temporal)
  |> VegaLite.encode(:y, field: "close", type: :quantitative, scale: [zero: false])
  |> VegaLite.layers([
    VegaLite.new(title: "Price", legend: false)
    |> VegaLite.encode(:color, ohlc_colors)
    |> VegaLite.mark(:rule)
    |> VegaLite.encode_field(:y, "low", type: :quantitative)
    |> VegaLite.encode_field(:y2, "high", type: :quantitative),
    VegaLite.new(title: "Price", legend: false)
    |> VegaLite.encode(:color, ohlc_colors)
    |> VegaLite.mark(:bar)
    |> VegaLite.encode_field(:y, "open", type: :quantitative)
    |> VegaLite.encode_field(:y2, "close", type: :quantitative),
    VegaLite.new(title: "sma5")
    |> VegaLite.mark(:line)
    |> VegaLite.encode(:color, datum: "SMA5")
    |> VegaLite.encode_field(:y, "sma5", type: :quantitative),
    VegaLite.new(title: "sma20")
    |> VegaLite.mark(:line)
    |> VegaLite.encode(:color, datum: "SMA20")
    |> VegaLite.encode_field(:y, "sma20", type: :quantitative),
    VegaLite.new(title: "sma50")
    |> VegaLite.mark(:line)
    |> VegaLite.encode(:color, datum: "SMA50")
    |> VegaLite.encode_field(:y, "sma50", type: :quantitative),
    VegaLite.new()
    |> VegaLite.mark(:point)
    |> VegaLite.transform(filter: "datum.cdl_engulfing !== 0")
    |> VegaLite.encode(:color,
      datum: "cdl_engulfing",
      type: :nominal,
      condition: [
        [test: "datum.close < datum.cdl_engulfing", value: "#06982d"],
        [test: "datum.close > datum.cdl_engulfing", value: "#ae1325"]
      ]
    )
    |> VegaLite.encode_field(:y, "cdl_engulfing", type: :nominal)
    |> VegaLite.resolve(:legend, y: :independent)
  ])

volume_chart =
  VegaLite.new(width: 550, height: 50)
  |> VegaLite.encode_field(:x, "date", type: :temporal)
  |> VegaLite.layers([
    VegaLite.new()
    |> VegaLite.mark(:line)
    |> VegaLite.encode(:color, datum: "Volume", value: "blue")
    |> VegaLite.encode_field(:y, "volume", type: :quantitative)
  ])

macd_chart =
  VegaLite.new(width: 550, height: 75)
  |> VegaLite.encode_field(:x, "date", type: :temporal)
  |> VegaLite.encode(:y, field: "macd", type: :quantitative, scale: [zero: false])
  |> VegaLite.layers([
    VegaLite.new()
    |> VegaLite.mark(:bar)
    |> VegaLite.encode(:color, datum: "macd_hist")
    |> VegaLite.encode_field(:y, "macd_hist", type: :quantitative),
    VegaLite.new()
    |> VegaLite.mark(:line)
    |> VegaLite.encode(:color, datum: "macd_signal")
    |> VegaLite.encode_field(:y, "macd_signal", type: :quantitative),
    VegaLite.new()
    |> VegaLite.mark(:line)
    |> VegaLite.encode(:color, datum: "macd")
    |> VegaLite.encode_field(:y, "macd", type: :quantitative)
  ])

rsi_chart =
  VegaLite.new(width: 550, height: 75)
  |> VegaLite.encode_field(:x, "date", type: :temporal)
  |> VegaLite.encode(:y, field: "rsi", type: :quantitative, scale: [zero: false])
  |> VegaLite.layers([
    VegaLite.new()
    |> VegaLite.mark(:line)
    |> VegaLite.encode(:color, datum: "rsi")
    |> VegaLite.encode_field(:y, "rsi", type: :quantitative)
  ])

VegaLite.new(title: "APPL")
|> VegaLite.data_from_values(data)
|> VegaLite.concat(
  [
    price_chart,
    macd_chart,
    rsi_chart,
    volume_chart
  ],
  :vertical
)
{"$schema":"https://vega.github.io/schema/vega-lite/v5.json","data":{"values":[{"cdl_engulfing":0,"close":155.089996,"date":"2022-03-15","high":155.570007,"low":150.380005,"macd":-3.849442455126706,"macd_hist":-0.946846790785306,"macd_signal":-2.9025956643414,"open":150.899994,"roc":-1.4926359058354044,"rsi":38.742982502781764,"sma20":162.82150030000003,"sma5":156.38199760000003,"sma50":167.63619992,"volume":92964300},{"cdl_engulfing":0,"close":159.589996,"date":"2022-03-16","high":160.0,"low":154.460007,"macd":-3.5223457177184514,"macd_hist":-0.49580004270164135,"macd_signal":-3.02654567501681,"open":157.050003,"roc":-2.061982854777211,"rsi":45.109010512115404,"sma20":162.16150045000003,"sma5":155.70999740000005,"sma50":167.18779994,"volume":102300200},{"cdl_engulfing":0,"close":160.619995,"date":"2022-03-17","high":161.0,"low":157.630005,"macd":-3.1437674907721487,"macd_hist":-0.09377745260427073,"macd_signal":-3.049990038167878,"open":158.610001,"roc":1.324748263316966,"rsi":46.480011233974025,"sma20":161.56500005000004,"sma5":156.12999560000006,"sma50":166.8061999,"volume":75615400},{"cdl_engulfing":0,"close":163.979996,"date":"2022-03-18","high":164.479996,"low":159.759995,"macd":-2.543299939851039,"macd_hist":0.405352078653471,"macd_signal":-2.94865201850451,"open":160.509995,"roc":5.978155651215822,"rsi":50.7973159777592,"sma20":161.31999960000005,"sma5":157.97999560000005,"sma50":166.58739985999998,"volume":123511700},{"cdl_engulfing":0,"close":165.380005,"date":"2022-03-21","high":166.350006,"low":163.009995,"macd":-1.9321830502136663,"macd_hist":0.8131751746326747,"macd_signal":-2.745358224846341,"open":163.509995,"roc":9.799502383465097,"rsi":52.51609186336067,"sma20":161.22399970000006,"sma5":160.93199760000005,"sma50":166.45499995999998,"volume":95811400},{"cdl_engulfing":0,"close":168.820007,"date":"2022-03-22","high":169.419998,"low":164.910004,"macd":-1.1569524722902145,"macd_hist":1.2707246020449015,"macd_signal":-2.427677074335116,"open":165.509995,"roc":8.852931429568155,"rsi":56.533938018506404,"sma20":161.44899970000006,"sma5":163.67799980000004,"sma50":166.38800013999997,"volume":81532000},{"cdl_engulfing":0,"close":170.210007,"date":"2022-03-23","high":172.639999,"low":167.649994,"macd":-0.4255102534352204,"macd_hist":1.6017334567199164,"macd_signal":-2.027243710155137,"open":167.990005,"roc":6.654559349697564,"rsi":58.07753680331981,"sma20":161.95599970000006,"sma5":165.80200200000004,"sma50":166.34840023999996,"volume":98062700},{"cdl_engulfing":0,"close":174.070007,"date":"2022-03-24","high":174.139999,"low":170.210007,"macd":0.4603263596669649,"macd_hist":1.9900560558576814,"macd_signal":-1.5297296961907165,"open":171.059998,"roc":8.373809250834574,"rsi":62.102415959430004,"sma20":162.52249980000005,"sma5":168.49200440000004,"sma50":166.32820033999997,"volume":90131400},{"cdl_engulfing":0,"close":174.720001,"date":"2022-03-25","high":175.279999,"low":172.75,"macd":1.2009633829274833,"macd_hist":2.18455446329456,"macd_signal":-0.9835910803670765,"open":173.880005,"roc":6.549582425895406,"rsi":62.75094296123116,"sma20":163.01599955000006,"sma5":170.64000540000004,"sma50":166.31200037999994,"volume":80546200},{"cdl_engulfing":0,"close":175.600006,"date":"2022-03-28","high":175.729996,"low":172.0,"macd":1.8377481916594718,"macd_hist":2.2570714176212388,"macd_signal":-0.41932322596176685,"open":172.169998,"roc":6.179707758504427,"rsi":63.65769691818307,"sma20":163.54000010000007,"sma5":172.68400560000003,"sma50":166.38020045999994,"volume":90371900},{"cdl_engulfing":0,"close":178.960007,"date":"2022-03-29","high":179.009995,"low":176.339996,"macd":2.583744937057361,"macd_hist":2.402454530415302,"macd_signal":0.18129040664205875,"open":176.690002,"roc":6.006397097235028,"rsi":66.96440086886315,"sma20":164.32800060000005,"sma5":174.71200560000005,"sma50":166.49800045999993,"volume":100589400},{"cdl_engulfing":0,"close":177.770004,"date":"2022-03-30","high":179.610001,"low":176.699997,"macd":3.043841920636254,"macd_hist":2.290041211195356,"macd_signal":0.7538007094408978,"open":178.550003,"roc":4.441570230356673,"rsi":64.71842972244696,"sma20":164.88850090000005,"sma5":176.22400500000003,"sma50":166.65740047999992,"volume":92633200},{"cdl_engulfing":0,"close":174.610001,"date":"2022-03-31","high":178.029999,"low":174.399994,"macd":3.1175490967093253,"macd_hist":1.890998709814742,"macd_signal":1.2265503868945833,"open":177.839996,"roc":0.31021656706200496,"rsi":59.05426855928805,"sma20":165.30750115000006,"sma5":176.33200380000002,"sma50":166.8250005799999,"volume":103049300},{"cdl_engulfing":0,"close":174.309998,"date":"2022-04-01","high":174.880005,"low":171.940002,"macd":3.11583739594937,"macd_hist":1.5114296072438296,"macd_signal":1.6044077887055406,"open":174.029999,"roc":-0.23466288785105593,"rsi":58.53053200307679,"sma20":165.86450115000008,"sma5":176.25000320000004,"sma50":167.0210006399999,"volume":78751300},{"cdl_engulfing":0,"close":178.440002,"date":"2022-04-04","high":178.490005,"low":174.440002,"macd":3.4084472099300456,"macd_hist":1.443231536979604,"macd_signal":1.9652156729504415,"open":174.570007,"roc":1.617309739727446,"rsi":63.34947070926451,"sma20":166.82150110000006,"sma5":176.8180024,"sma50":167.3416005999999,"volume":76468400},{"cdl_engulfing":0,"close":175.059998,"date":"2022-04-05","high":178.300003,"low":174.419998,"macd":3.3292272612262366,"macd_hist":1.0912092706206362,"macd_signal":2.2380179906056004,"open":177.5,"roc":-2.1792628785491597,"rsi":57.464135040092835,"sma20":167.70250090000008,"sma5":176.03800060000003,"sma50":167.61040065999995,"volume":73401800},{"cdl_engulfing":0,"close":171.830002,"date":"2022-04-06","high":173.630005,"low":170.130005,"macd":2.9715569394642785,"macd_hist":0.5868311590869424,"macd_signal":2.384725780377336,"open":172.360001,"roc":-3.3413972359476296,"rsi":52.44950292772784,"sma20":168.1465011500001,"sma5":174.85000020000004,"sma50":167.85140071999996,"volume":89058800},{"cdl_engulfing":0,"close":172.139999,"date":"2022-04-07","high":173.360001,"low":169.850006,"macd":2.682196112562849,"macd_hist":0.23797626574841058,"macd_signal":2.4442198468144385,"open":171.160004,"roc":-1.4145822036848998,"rsi":52.87455084820092,"sma20":168.82750090000008,"sma5":174.35599980000003,"sma50":168.10040065999993,"volume":77594700},{"cdl_engulfing":0,"close":170.089996,"date":"2022-04-08","high":171.779999,"low":169.199997,"macd":2.2613895716849584,"macd_hist":-0.1462642201035842,"macd_signal":2.4076537917885426,"open":171.779999,"roc":-2.420975301715045,"rsi":49.710025974772066,"sma20":169.5955009000001,"sma5":173.51199940000004,"sma50":168.31780055999997,"volume":76575500},{"cdl_engulfing":0,"close":165.75,"date":"2022-04-11","high":169.029999,"low":165.5,"macd":1.5597165089266696,"macd_hist":-0.6783498262894985,"macd_signal":2.238066335216168,"open":168.710007,"roc":-7.1116352038597235,"rsi":43.74140419752012,"sma20":170.3520011500001,"sma5":170.97399900000005,"sma50":168.22620051999994,"volume":72246700},{"cdl_engulfing":0,"close":167.660004,"date":"2022-04-12","high":169.869995,"low":166.639999,"macd":1.1445631006809833,"macd_hist":-0.8748025876281478,"macd_signal":2.019365688309131,"open":168.020004,"roc":-4.227118750452641,"rsi":46.77049391265767,"sma20":170.98050155000007,"sma5":169.49400020000004,"sma50":168.08380061999992,"volume":79265200},{"cdl_engulfing":80,"close":170.399994,"date":"2022-04-13","high":171.039993,"low":166.770004,"macd":1.024831705608932,"macd_hist":-0.7956271861601594,"macd_signal":1.8204588917690914,"open":167.389999,"roc":-0.8322225358526225,"rsi":50.85814813274311,"sma20":171.52100145000006,"sma5":169.20799860000005,"sma50":167.99960047999994,"volume":70618900},{"cdl_engulfing":60,"close":165.289993,"date":"2022-04-14","high":171.270004,"low":165.039993,"macd":0.5117106558446949,"macd_hist":-1.0469985887395172,"macd_signal":1.5587092445842121,"open":170.619995,"roc":-3.979322667476015,"rsi":44.06227419530482,"sma20":171.75450135000006,"sma5":167.83799740000003,"sma50":167.78860041999994,"volume":75329400},{"cdl_engulfing":0,"close":165.070007,"date":"2022-04-18","high":166.600006,"low":163.570007,"macd":0.08631253815653395,"macd_hist":-1.1779173651421426,"macd_signal":1.2642299032986766,"open":163.919998,"roc":-2.951372284117171,"rsi":43.79098765111992,"sma20":171.80900190000006,"sma5":166.83399960000003,"sma50":167.63200067999995,"volume":69023900},{"cdl_engulfing":0,"close":167.399994,"date":"2022-04-19","high":167.820007,"low":163.910004,"macd":-0.06209229522488613,"macd_hist":-1.0610577588188501,"macd_signal":0.998965463593964,"open":165.020004,"roc":0.9954714932126629,"rsi":47.47935789650038,"sma20":171.91000135000004,"sma5":167.16399840000003,"sma50":167.5322005799999,"volume":67723800},{"cdl_engulfing":0,"close":167.229996,"date":"2022-04-20","high":168.880005,"low":166.100006,"macd":-0.19121737784305992,"macd_hist":-0.9521462731496191,"macd_signal":0.7609288953065592,"open":168.759995,"roc":-0.25647619571808056,"rsi":47.235815279459665,"sma20":171.83050080000004,"sma5":167.07799680000005,"sma50":167.44360041999994,"volume":67929800},{"cdl_engulfing":0,"close":166.419998,"date":"2022-04-21","high":171.529999,"low":165.910004,"macd":-0.35481986276792554,"macd_hist":-0.8925990064595878,"macd_signal":0.5377791436916622,"open":168.910004,"roc":-2.3356784859980717,"rsi":46.02442707522933,"sma20":171.64100035000004,"sma5":166.28199760000004,"sma50":167.27540033999992,"volume":87227800},{"cdl_engulfing":0,"close":161.789993,"date":"2022-04-22","high":167.869995,"low":161.5,"macd":-0.8483000448285338,"macd_hist":-1.108863350816157,"macd_signal":0.26056330598762306,"open":166.460007,"roc":-2.117490560968205,"rsi":39.74928650135733,"sma20":171.02699965000005,"sma5":165.58199760000005,"sma50":166.9856002199999,"volume":84882400},{"cdl_engulfing":0,"close":162.880005,"date":"2022-04-25","high":163.169998,"low":158.460007,"macd":-1.1383100559035881,"macd_hist":-1.1190986895129689,"macd_signal":-0.01921136639061921,"open":161.119995,"roc":-1.3267110360030365,"rsi":41.76242141206,"sma20":170.43499985000003,"sma5":165.14399720000003,"sma50":166.80080041999992,"volume":96046400},{"cdl_engulfing":0,"close":156.800003,"date":"2022-04-26","high":162.339996,"low":156.720001,"macd":-1.8375680867355868,"macd_hist":-1.454685376275974,"macd_signal":-0.38288271045961275,"open":162.25,"roc":-6.3321334408172,"rsi":34.781454871764936,"sma20":169.49499970000002,"sma5":163.02399900000006,"sma50":166.5640004999999,"volume":95623200},{"cdl_engulfing":0,"close":156.570007,"date":"2022-04-27","high":159.789993,"low":155.380005,"macd":-2.3828261326952997,"macd_hist":-1.5999547377885497,"macd_signal":-0.7828713949067502,"open":155.910004,"roc":-6.374447919020454,"rsi":34.54620388104945,"sma20":168.3754997,"sma5":160.89200120000004,"sma50":166.3178005399999,"volume":88063200},{"cdl_engulfing":0,"close":163.639999,"date":"2022-04-28","high":164.520004,"low":158.929993,"macd":-2.2188799278751787,"macd_hist":-1.1488068263747429,"macd_signal":-1.0700731015004359,"open":159.25,"roc":-1.670471718188582,"rsi":46.52059876299832,"sma20":167.66899945,"sma5":160.33600140000004,"sma50":166.13480065999988,"volume":130216800},{"cdl_engulfing":0,"close":157.649994,"date":"2022-04-29","high":166.199997,"low":157.25,"macd":-2.5429808223565544,"macd_hist":-1.178326176684895,"macd_signal":-1.3646546456716595,"open":161.839996,"roc":-2.5588721052729246,"rsi":39.86609887679818,"sma20":166.8209991,"sma5":159.50800160000006,"sma50":165.83680047999988,"volume":131747600},{"cdl_engulfing":0,"close":157.960007,"date":"2022-05-02","high":158.229996,"low":153.270004,"macd":-2.743195804387767,"macd_hist":-1.102832926972886,"macd_signal":-1.640362877414881,"open":156.710007,"roc":-3.0206273630701497,"rsi":40.34173860585698,"sma20":166.00349955,"sma5":158.52400200000005,"sma50":165.61840051999988,"volume":123055300},{"cdl_engulfing":0,"close":159.479996,"date":"2022-05-03","high":160.710007,"low":156.320007,"macd":-2.747545219889304,"macd_hist":-0.8857458739795381,"macd_signal":-1.8617993459097657,"open":158.149994,"roc":1.7091791764825448,"rsi":42.73342998583259,"sma20":165.05549925,"sma5":159.06000060000005,"sma50":165.4620003799999,"volume":88966500},{"cdl_engulfing":0,"close":166.020004,"date":"2022-05-04","high":166.479996,"low":159.259995,"macd":-2.1979317850840516,"macd_hist":-0.26890595133942874,"macd_signal":-1.9290258337446229,"open":159.669998,"roc":6.035636825385082,"rsi":51.70483943099953,"sma20":164.60349954999998,"sma5":160.95000000000005,"sma50":165.49600031999987,"volume":108256500},{"cdl_engulfing":0,"close":156.770004,"date":"2022-05-05","high":164.080002,"low":154.949997,"macd":-2.4801670508624625,"macd_hist":-0.44091297369427185,"macd_signal":-2.0392540771681906,"open":163.850006,"roc":-4.198237009277905,"rsi":41.74389324743946,"sma20":163.85049965,"sma5":159.57600100000005,"sma50":165.43000025999987,"volume":130525300},{"cdl_engulfing":0,"close":157.279999,"date":"2022-05-06","high":159.440002,"low":154.179993,"macd":-2.632344173043691,"macd_hist":-0.47447207670040026,"macd_signal":-2.157872096343291,"open":156.009995,"roc":-0.23469395120940817,"rsi":42.402733525004095,"sma20":163.10749964999997,"sma5":159.50200200000003,"sma50":165.32080013999988,"volume":116124600},{"cdl_engulfing":0,"close":152.059998,"date":"2022-05-09","high":155.830002,"low":151.490005,"macd":-3.137983375059804,"macd_hist":-0.7840890229732103,"macd_signal":-2.3538943520865936,"open":154.929993,"roc":-3.7351283480254516,"rsi":37.70270450323948,"sma20":162.20599975,"sma5":158.32200020000005,"sma50":165.0649999799999,"volume":131577900},{"cdl_engulfing":0,"close":154.509995,"date":"2022-05-10","high":156.740005,"low":152.929993,"macd":-3.3029375945874335,"macd_hist":-0.759234594000672,"macd_signal":-2.5437030005867616,"open":155.520004,"roc":-3.1163789344464177,"rsi":41.00777776778848,"sma20":161.64399949999998,"sma5":157.32800000000003,"sma50":164.85279997999987,"volume":115366700},{"cdl_engulfing":0,"close":146.5,"date":"2022-05-11","high":155.449997,"low":145.809998,"macd":-4.03350887661523,"macd_hist":-1.1918447008227746,"macd_signal":-2.841664175792455,"open":153.5,"roc":-11.757621689974185,"rsi":34.553403996632746,"sma20":160.58599929999997,"sma5":153.42399920000005,"sma50":164.5188000399999,"volume":142689800},{"cdl_engulfing":0,"close":142.559998,"date":"2022-05-12","high":146.199997,"low":138.800003,"macd":-4.874230024909195,"macd_hist":-1.6260526792933923,"macd_signal":-3.248177345615803,"open":142.770004,"roc":-9.06423782447565,"rsi":31.894217998303663,"sma20":159.1939995,"sma5":150.58199800000006,"sma50":164.03880003999987,"volume":182602000},{"cdl_engulfing":0,"close":147.110001,"date":"2022-05-13","high":148.100006,"low":143.110001,"macd":-5.114404702063609,"macd_hist":-1.4929818851582448,"macd_signal":-3.6214228169053646,"open":144.589996,"roc":-6.466173744062642,"rsi":37.84324743418496,"sma20":158.2849999,"sma5":148.54799840000007,"sma50":163.65640013999987,"volume":113990900},{"cdl_engulfing":0,"close":145.539993,"date":"2022-05-16","high":147.520004,"low":144.179993,"macd":-5.369534734568504,"macd_hist":-1.398489534130511,"macd_signal":-3.9710452004379926,"open":145.550003,"roc":-4.287784483595747,"rsi":36.65350617175837,"sma20":157.3084992,"sma5":147.24399740000007,"sma50":163.30380003999989,"volume":86643800},{"cdl_engulfing":0,"close":149.240005,"date":"2022-05-17","high":149.770004,"low":146.679993,"macd":-5.213074005225394,"macd_hist":-0.9936230438299214,"macd_signal":-4.219450961395473,"open":148.860001,"roc":-3.4107761119272606,"rsi":41.334447946317006,"sma20":156.40049975000002,"sma5":146.18999940000006,"sma50":163.10260007999986,"volume":78336300},{"cdl_engulfing":0,"close":140.820007,"date":"2022-05-18","high":147.360001,"low":139.899994,"macd":-5.702763314085047,"macd_hist":-1.1866498821516593,"macd_signal":-4.5161134319333875,"open":146.850006,"roc":-3.877128327645052,"rsi":34.99674537543524,"sma20":155.0800003,"sma5":145.05400080000007,"sma50":162.77020017999988,"volume":109742900},{"cdl_engulfing":0,"close":137.350006,"date":"2022-05-19","high":141.660004,"low":136.600006,"macd":-6.298243469868709,"macd_hist":-1.4257040303482569,"macd_signal":-4.872539439520452,"open":139.880005,"roc":-3.6545960108669506,"rsi":32.76698357688373,"sma20":153.6265007,"sma5":144.01200240000006,"sma50":162.25820035999988,"volume":136095600},{"cdl_engulfing":0,"close":137.589996,"date":"2022-05-20","high":140.699997,"low":132.610001,"macd":-6.6738683956835985,"macd_hist":-1.441063164930517,"macd_signal":-5.2328052307530815,"open":139.089996,"roc":-6.471351325733455,"rsi":33.084528798954,"sma20":152.41650085000003,"sma5":142.10800140000006,"sma50":161.83960019999986,"volume":137426100},{"cdl_engulfing":0,"close":143.110001,"date":"2022-05-23","high":143.259995,"low":137.649994,"macd":-6.451763669234509,"macd_hist":-0.9751667507851423,"macd_signal":-5.476596918449367,"open":137.789993,"roc":-1.6696386676341213,"rsi":40.093119531377354,"sma20":151.42800065000003,"sma5":141.62200300000006,"sma50":161.60720029999985,"volume":117726300},{"cdl_engulfing":0,"close":140.360001,"date":"2022-05-24","high":141.970001,"low":137.330002,"macd":-6.423598841740386,"macd_hist":-0.757601538632815,"macd_signal":-5.665997303107571,"open":140.809998,"roc":-5.950149894460255,"rsi":37.96003219353567,"sma20":150.60600055000003,"sma5":139.84600220000007,"sma50":161.40200041999987,"volume":104132700},{"cdl_engulfing":0,"close":140.520004,"date":"2022-05-25","high":141.789993,"low":138.339996,"macd":-6.315565203769324,"macd_hist":-0.5196543205294031,"macd_signal":-5.795910883239921,"open":138.429993,"roc":-0.21304004053912529,"rsi":38.16616404000119,"sma20":149.80350040000005,"sma5":139.78600160000005,"sma50":161.11060057999987,"volume":92482700},{"cdl_engulfing":0,"close":143.779999,"date":"2022-05-26","high":144.339996,"low":137.139999,"macd":-5.898894630387218,"macd_hist":-0.08238699771783775,"macd_signal":-5.8165076326693805,"open":137.389999,"roc":4.681465394329876,"rsi":42.36774407925606,"sma20":148.81050040000005,"sma5":141.07200020000005,"sma50":160.79440063999988,"volume":90601500},{"cdl_engulfing":0,"close":149.639999,"date":"2022-05-27","high":149.679993,"low":145.259995,"macd":-5.037755068559221,"macd_hist":0.6230020512881271,"macd_signal":-5.660757119847348,"open":145.389999,"roc":8.757906352435674,"rsi":49.06733408060634,"sma20":148.41000065000006,"sma5":143.48200080000004,"sma50":160.57480071999987,"volume":90978500},{"cdl_engulfing":0,"close":148.839996,"date":"2022-05-31","high":150.660004,"low":146.839996,"macd":-4.369480664636313,"macd_hist":1.0330211641688276,"macd_signal":-5.402501828805141,"open":149.070007,"roc":4.003909552065488,"rsi":48.24282765570635,"sma20":147.95400010000006,"sma5":144.62799980000005,"sma50":160.27200071999988,"volume":103718400},{"cdl_engulfing":0,"close":148.710007,"date":"2022-06-01","high":151.740005,"low":147.679993,"macd":-3.806478693874652,"macd_hist":1.276818507944391,"macd_signal":-5.083297201819043,"open":149.899994,"roc":5.948992548097776,"rsi":48.101392003745076,"sma20":147.41550065000007,"sma5":146.29800100000006,"sma50":159.93860075999987,"volume":74286600},{"cdl_engulfing":80,"close":151.210007,"date":"2022-06-02","high":151.270004,"low":146.860001,"macd":-3.12257140972946,"macd_hist":1.568580633671667,"macd_signal":-4.691152043401127,"open":147.830002,"roc":7.607459931469962,"rsi":51.07236338966653,"sma20":146.67500080000008,"sma5":148.43600160000005,"sma50":159.58640075999986,"volume":72348100},{"cdl_engulfing":0,"close":145.380005,"date":"2022-06-03","high":147.970001,"low":144.460007,"macd":-3.016233139704269,"macd_hist":1.3399351229574865,"macd_signal":-4.356168262661756,"open":146.899994,"roc":1.1128154201753837,"rsi":44.6528084871976,"sma20":146.10550085000006,"sma5":148.75600280000006,"sma50":159.08980071999986,"volume":88570300},{"cdl_engulfing":0,"close":146.139999,"date":"2022-06-06","high":148.570007,"low":144.899994,"macd":-2.8379203510554305,"macd_hist":1.2145983292850602,"macd_signal":-4.052518680340491,"open":147.029999,"roc":-2.3389468212974274,"rsi":45.61252724675154,"sma20":145.54850085000007,"sma5":148.05600280000004,"sma50":158.53120055999986,"volume":71598400},{"cdl_engulfing":80,"close":148.710007,"date":"2022-06-07","high":149.0,"low":144.100006,"macd":-2.460860743412553,"macd_hist":1.2733263495423501,"macd_signal":-3.7341870929549033,"open":144.350006,"roc":-0.08733472419605315,"rsi":48.84297464742284,"sma20":145.38100130000007,"sma5":148.03000500000005,"sma50":158.01100067999985,"volume":67808200},{"cdl_engulfing":0,"close":147.960007,"date":"2022-06-08","high":149.869995,"low":147.460007,"macd":-2.1972287346505937,"macd_hist":1.2295666866434476,"macd_signal":-3.4267954212940412,"open":148.580002,"roc":-0.5043372770468624,"rsi":47.94792913044099,"sma20":145.05350190000007,"sma5":147.88000500000004,"sma50":157.45820069999985,"volume":53950200},{"cdl_engulfing":0,"close":142.639999,"date":"2022-06-09","high":147.949997,"low":142.529999,"macd":-2.390027898900911,"macd_hist":0.8294140179145044,"macd_signal":-3.2194419168154154,"open":147.080002,"roc":-5.66761960403851,"rsi":42.06017344283894,"sma20":144.86050185000008,"sma5":146.16600340000005,"sma50":156.73180053999985,"volume":69473000},{"cdl_engulfing":0,"close":137.130005,"date":"2022-06-10","high":140.759995,"low":137.059998,"macd":-2.9533882709044406,"macd_hist":0.21284291672877975,"macd_signal":-3.1662311876332203,"open":140.279999,"roc":-5.674783131284111,"rsi":36.99343886229604,"sma20":144.58900220000007,"sma5":144.51600340000005,"sma50":155.91900055999986,"volume":91437900},{"cdl_engulfing":0,"close":131.880005,"date":"2022-06-13","high":135.199997,"low":131.440002,"macd":-3.7799140521504455,"macd_hist":-0.49094629161378034,"macd_signal":-3.288967760536665,"open":132.869995,"roc":-9.757762486367593,"rsi":32.92376631473944,"sma20":143.82750240000007,"sma5":141.66400460000006,"sma50":155.06440063999986,"volume":122207100},{"cdl_engulfing":0,"close":132.759995,"date":"2022-06-14","high":133.889999,"low":131.479996,"macd":-4.314202410082203,"macd_hist":-0.8201877196364302,"macd_signal":-3.4940146904457725,"open":133.130005,"roc":-10.725580827926384,"rsi":34.22983733977314,"sma20":143.18850250000008,"sma5":138.47400220000003,"sma50":154.23340057999988,"volume":84784300},{"cdl_engulfing":0,"close":135.429993,"date":"2022-06-15","high":137.339996,"low":132.160004,"macd":-4.47064840663748,"macd_hist":-0.7813069729533657,"macd_signal":-3.689341433684114,"open":134.289993,"roc":-8.468514062722365,"rsi":38.16404330504365,"sma20":142.49800190000008,"sma5":135.96799940000002,"sma50":153.37320039999986,"volume":91533000},{"cdl_engulfing":0,"close":130.059998,"date":"2022-06-16","high":132.389999,"low":129.039993,"macd":-4.970648165686356,"macd_hist":-1.0250453856017936,"macd_signal":-3.9456027800845623,"open":132.080002,"roc":-8.819406259249895,"rsi":33.786602092477466,"sma20":141.9600014500001,"sma5":133.45199920000005,"sma50":152.47320039999985,"volume":108123900},{"cdl_engulfing":0,"close":131.559998,"date":"2022-06-17","high":133.080002,"low":129.809998,"macd":-5.186082185845038,"macd_hist":-0.9923835246083801,"macd_signal":-4.193698661236658,"open":130.070007,"roc":-4.061844087295119,"rsi":35.995022505124695,"sma20":141.6705010500001,"sma5":132.33799780000004,"sma50":151.66780031999986,"volume":134520300},{"cdl_engulfing":0,"close":135.869995,"date":"2022-06-21","high":137.059998,"low":133.320007,"macd":-4.951951447384232,"macd_hist":-0.6066022289180593,"macd_signal":-4.345349218466173,"open":133.419998,"roc":3.025470009650033,"rsi":41.98276727074036,"sma20":141.5845010000001,"sma5":133.13599580000005,"sma50":150.94240023999987,"volume":81000500},{"cdl_engulfing":0,"close":135.350006,"date":"2022-06-22","high":137.759995,"low":133.910004,"macd":-4.753563792494589,"macd_hist":-0.3265716592227328,"macd_signal":-4.426992133271856,"open":134.789993,"roc":1.9508971810371145,"rsi":41.47859903294783,"sma20":141.1965012500001,"sma5":133.65399800000006,"sma50":150.24760043999987,"volume":73409200},{"cdl_engulfing":0,"close":138.270004,"date":"2022-06-23","high":138.589996,"low":135.630005,"macd":-4.311025888606764,"macd_hist":0.09277299573207376,"macd_signal":-4.403798884338838,"open":136.820007,"roc":2.09703252365967,"rsi":45.440876511578885,"sma20":141.0920014000001,"sma5":134.22200020000005,"sma50":149.69800051999985,"volume":72433800},{"cdl_engulfing":0,"close":141.660004,"date":"2022-06-24","high":141.910004,"low":139.770004,"macd":-3.6447523070580985,"macd_hist":0.6072372618245918,"macd_signal":-4.25198956888269,"open":139.899994,"roc":8.918965230185517,"rsi":49.69891291587837,"sma20":141.1490014000001,"sma5":136.54200140000006,"sma50":149.17800051999987,"volume":89116800},{"cdl_engulfing":0,"close":141.660004,"date":"2022-06-27","high":143.490005,"low":140.970001,"macd":-3.0812074519182033,"macd_hist":0.9366256935715898,"macd_signal":-4.017833145489793,"open":142.699997,"roc":7.6771101805580555,"rsi":49.69891291587837,"sma20":141.0430016500001,"sma5":138.56200260000003,"sma50":148.60320071999985,"volume":70207900},{"cdl_engulfing":0,"close":137.440002,"date":"2022-06-28","high":143.419998,"low":137.320007,"macd":-2.941208565960494,"macd_hist":0.8612996636234391,"macd_signal":-3.802508229583933,"open":142.130005,"roc":1.1555214968544059,"rsi":44.66618792199837,"sma20":140.43300180000008,"sma5":138.87600400000002,"sma50":148.04620089999986,"volume":67083400},{"cdl_engulfing":0,"close":139.229996,"date":"2022-06-29","high":140.669998,"low":136.669998,"macd":-2.6552132386037783,"macd_hist":0.917835992784124,"macd_signal":-3.5730492313879023,"open":137.460007,"roc":2.8666345238285373,"rsi":47.11261355215117,"sma20":139.95250180000008,"sma5":139.652002,"sma50":147.52940067999987,"volume":66242400},{"cdl_engulfing":0,"close":136.720001,"date":"2022-06-30","high":138.369995,"low":133.770004,"macd":-2.6011115064740977,"macd_hist":0.7775501799310436,"macd_signal":-3.3786616864051413,"open":137.25,"roc":-1.1209972916468636,"rsi":44.16401313883978,"sma20":139.35300150000006,"sma5":139.34200140000002,"sma50":146.91580081999984,"volume":98964500},{"cdl_engulfing":80,"close":138.929993,"date":"2022-07-01","high":139.039993,"low":135.660004,"macd":-2.3527861550166733,"macd_hist":0.8207004251107746,"macd_signal":-3.173486580127448,"open":136.039993,"roc":-1.9271572235731393,"rsi":47.29195152748319,"sma20":138.73900080000007,"sma5":138.79599920000004,"sma50":146.34980075999982,"volume":71051600},{"cdl_engulfing":0,"close":141.559998,"date":"2022-07-05","high":141.610001,"low":136.929993,"macd":-1.921615909230752,"macd_hist":1.0014965367173567,"macd_signal":-2.923112445948109,"open":137.770004,"roc":-0.0705957907497834,"rsi":50.82264273630358,"sma20":138.54800045000007,"sma5":138.77599800000002,"sma50":145.85260075999983,"volume":73353800},{"cdl_engulfing":0,"close":142.919998,"date":"2022-07-06","high":144.119995,"low":141.080002,"macd":-1.4534156778117904,"macd_hist":1.1757574145090546,"macd_signal":-2.629173092320845,"open":141.350006,"roc":3.987191443725391,"rsi":52.59115938231288,"sma20":138.3870004000001,"sma5":139.8719972,"sma50":145.47520085999983,"volume":74064300},{"cdl_engulfing":0,"close":146.350006,"date":"2022-07-07","high":146.550003,"low":143.279999,"macd":-0.7964101212549224,"macd_hist":1.4662103768527381,"macd_signal":-2.2626204981076605,"open":143.289993,"roc":5.113847737236177,"rsi":56.809778396136956,"sma20":138.26900035000008,"sma5":141.2959992,"sma50":145.1446008799998,"volume":66253700},{"cdl_engulfing":0,"close":147.039993,"date":"2022-07-08","high":147.550003,"low":145.0,"macd":-0.21754458126017084,"macd_hist":1.6360607334779917,"macd_signal":-1.8536053147381626,"open":145.259995,"roc":7.548267937768682,"rsi":57.62661388855107,"sma20":138.22299965000008,"sma5":143.35999759999999,"sma50":144.94940067999983,"volume":64547800},{"cdl_engulfing":0,"close":144.869995,"date":"2022-07-11","high":146.639999,"low":143.779999,"macd":0.06535643818028802,"macd_hist":1.5351694023347604,"macd_signal":-1.4698129641544724,"open":145.669998,"roc":4.275536096802357,"rsi":54.1575576005995,"sma20":138.33449945000007,"sma5":144.547998,"sma50":144.71540043999983,"volume":63141600},{"cdl_engulfing":0,"close":145.860001,"date":"2022-07-12","high":148.449997,"low":145.050003,"macd":0.36523257092500216,"macd_hist":1.4680364280635796,"macd_signal":-1.1028038571385774,"open":145.759995,"roc":3.0375833997963175,"rsi":55.47448069880976,"sma20":138.77099925000007,"sma5":145.4079986,"sma50":144.35980047999982,"volume":77588800},{"cdl_engulfing":0,"close":145.490005,"date":"2022-07-13","high":146.449997,"low":142.119995,"macd":0.5665007140050591,"macd_hist":1.3354436569149093,"macd_signal":-0.7689429429098501,"open":142.990005,"roc":1.7982137111420826,"rsi":54.840410633043554,"sma20":139.45149925000007,"sma5":145.92200000000003,"sma50":144.1166006999998,"volume":71185600},{"cdl_engulfing":0,"close":148.470001,"date":"2022-07-14","high":148.949997,"low":143.25,"macd":0.9554540601332349,"macd_hist":1.379517602434468,"macd_signal":-0.42406354230123305,"open":144.080002,"roc":1.4485786901846653,"rsi":58.913692407717875,"sma20":140.2369995500001,"sma5":146.34599900000003,"sma50":143.9268005799998,"volume":78140700},{"cdl_engulfing":0,"close":150.169998,"date":"2022-07-15","high":150.860001,"low":148.199997,"macd":1.3849135186652006,"macd_hist":1.4471816487731468,"macd_signal":-0.062268130107946296,"open":149.779999,"roc":2.1286759718493586,"rsi":61.07087199858401,"sma20":140.97399980000006,"sma5":146.97200000000004,"sma50":143.7406006199998,"volume":76259900},{"cdl_engulfing":60,"close":147.070007,"date":"2022-07-18","high":151.570007,"low":146.699997,"macd":1.458309384823707,"macd_hist":1.2164620119453227,"macd_signal":0.24184737287838437,"open":150.740005,"roc":1.5186112210468616,"rsi":55.36262419154588,"sma20":141.82450025000006,"sma5":147.41200240000003,"sma50":143.3616006799998,"volume":81420900},{"cdl_engulfing":0,"close":151.0,"date":"2022-07-19","high":151.229996,"low":146.910004,"macd":1.8126980732974687,"macd_hist":1.2566805603352673,"macd_signal":0.5560175129622013,"open":147.919998,"roc":3.5239263435902446,"rsi":60.41417190064929,"sma20":142.79650035000003,"sma5":148.44000220000004,"sma50":143.2462005999998,"volume":82982400},{"cdl_engulfing":0,"close":153.039993,"date":"2022-07-20","high":153.720001,"low":150.369995,"macd":2.232429985084053,"macd_hist":1.3411299776974817,"macd_signal":0.8913000073865717,"open":151.119995,"roc":5.1893516671471795,"rsi":62.76947369778219,"sma20":143.65500025000003,"sma5":149.94999980000003,"sma50":143.1614004799998,"volume":64823400},{"cdl_engulfing":0,"close":155.350006,"date":"2022-07-21","high":155.570007,"low":151.940002,"macd":2.7201135172805664,"macd_hist":1.4630508079151956,"macd_signal":1.2570627093653708,"open":154.5,"roc":4.633936117505666,"rsi":65.28805626150934,"sma20":144.65500025000003,"sma5":151.32600080000003,"sma50":143.2272006399998,"volume":65086600},{"cdl_engulfing":60,"close":154.089996,"date":"2022-07-22","high":156.279999,"low":153.410004,"macd":2.970689691881489,"macd_hist":1.3709015860128946,"macd_signal":1.5997881058685945,"open":155.389999,"roc":2.610373611378769,"rsi":62.792822307100785,"sma20":145.44599985000005,"sma5":152.11000040000005,"sma50":143.2188006599998,"volume":66675400},{"cdl_engulfing":0,"close":152.949997,"date":"2022-07-25","high":155.039993,"low":152.279999,"macd":3.042215951846515,"macd_hist":1.1539422767823364,"macd_signal":1.8882736750641786,"open":154.009995,"roc":3.9980891549151742,"rsi":60.5384582539765,"sma20":146.01049950000007,"sma5":153.2859984,"sma50":143.3478005999998,"volume":53623900},{"cdl_engulfing":0,"close":151.600006,"date":"2022-07-26","high":153.089996,"low":150.800003,"macd":2.955894327011748,"macd_hist":0.8540965215580556,"macd_signal":2.1017978054536925,"open":152.259995,"roc":0.3973549668874199,"rsi":57.88804253937371,"sma20":146.50749960000007,"sma5":153.40599960000003,"sma50":143.5286007599998,"volume":55138700},{"cdl_engulfing":0,"close":156.789993,"date":"2022-07-27","high":157.330002,"low":152.160004,"macd":3.2685940759074583,"macd_hist":0.9334370163630128,"macd_signal":2.3351570595444455,"open":152.580002,"roc":2.450339892527298,"rsi":64.34997683656064,"sma20":147.4749991500001,"sma5":154.15599960000003,"sma50":143.7222005999998,"volume":78620700},{"cdl_engulfing":0,"close":157.350006,"date":"2022-07-28","high":157.639999,"low":154.410004,"macd":3.5210112230376183,"macd_hist":0.9486833307945384,"macd_signal":2.57232789224308,"open":156.979996,"roc":1.2874154636337787,"rsi":64.97451331448858,"sma20":148.3809996500001,"sma5":154.5559996,"sma50":143.95840085999978,"volume":81378700},{"cdl_engulfing":0,"close":162.509995,"date":"2022-07-29","high":163.630005,"low":159.5,"macd":4.090271515255978,"macd_hist":1.2143548984103183,"macd_signal":2.8759166168456596,"open":161.240005,"roc":5.46433851552568,"rsi":70.16145113797471,"sma20":149.67049935000006,"sma5":156.23999940000002,"sma50":144.2238006599998,"volume":101786900},{"cdl_engulfing":0,"close":161.509995,"date":"2022-08-01","high":163.589996,"low":160.889999,"macd":4.409888308130689,"macd_hist":1.2271773530280239,"macd_signal":3.1827109551026656,"open":161.009995,"roc":5.596598998298785,"rsi":68.05795524728228,"sma20":150.79949945000004,"sma5":157.951999,"sma50":144.63760041999979,"volume":67829400},{"cdl_engulfing":0,"close":160.009995,"date":"2022-08-02","high":162.410004,"low":159.630005,"macd":4.490387068267523,"macd_hist":1.0461408905318863,"macd_signal":3.444246177735637,"open":160.100006,"roc":5.547485928199758,"rsi":64.91413075229147,"sma20":151.72199930000005,"sma5":159.6339968,"sma50":145.09080019999982,"volume":59907000},{"cdl_engulfing":0,"close":166.130005,"date":"2022-08-03","high":166.589996,"low":160.75,"macd":4.990489321158009,"macd_hist":1.2369945147378973,"macd_signal":3.7534948064201115,"open":160.839996,"roc":5.957020484081532,"rsi":70.83388339837899,"sma20":152.88249965000006,"sma5":161.5019992,"sma50":145.6616003799998,"volume":82507500},{"cdl_engulfing":0,"close":165.809998,"date":"2022-08-04","high":167.190002,"low":164.429993,"macd":5.299908028452165,"macd_hist":1.237130577625643,"macd_signal":4.062777450826522,"open":166.009995,"roc":5.376543805152445,"rsi":70.16723367284068,"sma20":153.85549925000004,"sma5":163.19399760000002,"sma50":146.1156003199998,"volume":55474100},{"cdl_engulfing":0,"close":165.350006,"date":"2022-08-05","high":165.850006,"low":163.0,"macd":5.4452377617629395,"macd_hist":1.105968248749134,"macd_signal":4.3392695130138055,"open":163.210007,"roc":1.7475915865974967,"rsi":69.15964130729661,"sma20":154.77099990000005,"sma5":163.7619998,"sma50":146.61540041999982,"volume":56697000},{"cdl_engulfing":0,"close":164.869995,"date":"2022-08-08","high":167.809998,"low":164.199997,"macd":5.458754621060422,"macd_hist":0.8955880864372929,"macd_signal":4.563166534623129,"open":166.369995,"roc":2.080366605175099,"rsi":68.06130241242772,"sma20":155.77099990000005,"sma5":164.4339998,"sma50":147.1024002399998,"volume":60276900},{"cdl_engulfing":0,"close":164.919998,"date":"2022-08-09","high":165.820007,"low":163.25,"macd":5.411125566423863,"macd_hist":0.6783672254405868,"macd_signal":4.732758340983276,"open":164.020004,"roc":3.0685601858808864,"rsi":68.11810358906905,"sma20":156.72399975000005,"sma5":165.4160004,"sma50":147.52520021999982,"volume":63135500},{"cdl_engulfing":0,"close":169.240005,"date":"2022-08-10","high":169.339996,"low":166.899994,"macd":5.6567600499259925,"macd_hist":0.7392013671541733,"macd_signal":4.917558682771819,"open":167.679993,"roc":1.8720278735921303,"rsi":72.64454716453058,"sma20":157.91149975000005,"sma5":166.03800040000002,"sma50":147.9172003399998,"volume":70170500},{"cdl_engulfing":0,"close":168.490005,"date":"2022-08-11","high":170.990005,"low":168.190002,"macd":5.724915157513948,"macd_hist":0.6458851797937033,"macd_signal":5.079029977720245,"open":170.059998,"roc":1.616312063401626,"rsi":70.76609688786198,"sma20":158.91249995000004,"sma5":166.57400180000002,"sma50":148.3102005199998,"volume":57149200},{"cdl_engulfing":0,"close":172.100006,"date":"2022-08-12","high":172.169998,"low":169.399994,"macd":6.001049123202392,"macd_hist":0.7376153163857184,"macd_signal":5.263433806816674,"open":169.820007,"roc":4.082249625077128,"rsi":74.2214042185424,"sma20":160.00900035000006,"sma5":167.9240018,"sma50":148.7780004999998,"volume":68039400},{"cdl_engulfing":0,"close":173.190002,"date":"2022-08-15","high":173.389999,"low":171.350006,"macd":6.2359566219816145,"macd_hist":0.7780182521319521,"macd_signal":5.457938369849662,"open":171.520004,"roc":5.046404592903642,"rsi":75.17548027872223,"sma20":161.31500010000008,"sma5":169.5880032,"sma50":149.2176003999998,"volume":54091700},{"cdl_engulfing":0,"close":173.029999,"date":"2022-08-16","high":173.710007,"low":171.660004,"macd":6.3361721538230995,"macd_hist":0.7025870271787493,"macd_signal":5.63358512664435,"open":172.779999,"roc":4.917536440911197,"rsi":74.73820561606142,"sma20":162.41650005000005,"sma5":171.2100034,"sma50":149.77060027999983,"volume":56377100},{"cdl_engulfing":0,"close":174.550003,"date":"2022-08-17","high":176.149994,"low":172.570007,"macd":6.463735386418875,"macd_hist":0.6641202078196198,"macd_signal":5.799615178599256,"open":172.770004,"roc":3.137554858852676,"rsi":76.15706422482288,"sma20":163.49200055000006,"sma5":172.27200299999998,"sma50":150.33880035999982,"volume":79542000},{"cdl_engulfing":0,"close":174.149994,"date":"2022-08-18","high":174.899994,"low":173.119995,"macd":6.458107738037569,"macd_hist":0.5267940475506503,"macd_signal":5.931313690486919,"open":173.75,"roc":3.3592431788461274,"rsi":74.96380104911682,"sma20":164.43199995000003,"sma5":173.4040008,"sma50":150.84760009999982,"volume":62290100},{"cdl_engulfing":0,"close":171.520004,"date":"2022-08-19","high":173.740005,"low":171.309998,"macd":6.170302170353779,"macd_hist":0.19119078389348765,"macd_signal":5.979111386460291,"open":173.029999,"roc":-0.3370145146886272,"rsi":67.47770545995887,"sma20":165.30350035000004,"sma5":173.2880004,"sma50":151.31880003999984,"volume":70346300},{"cdl_engulfing":0,"close":167.570007,"date":"2022-08-22","high":169.860001,"low":167.139999,"macd":5.5593971680903564,"macd_hist":-0.3357713746959474,"macd_signal":5.895168542786304,"open":169.690002,"roc":-3.2449881258157065,"rsi":58.09422259460402,"sma20":166.03450085000003,"sma5":172.16400140000002,"sma50":151.81740019999984,"volume":69026800},{"cdl_engulfing":0,"close":167.229996,"date":"2022-08-23","high":168.710007,"low":166.649994,"macd":4.990289554714849,"macd_hist":-0.7239031904571638,"macd_signal":5.714192745172013,"open":167.080002,"roc":-3.3520216341213827,"rsi":57.35486438185615,"sma20":166.81600035000002,"sma5":171.00400080000003,"sma50":152.41940001999984,"volume":54147100},{"cdl_engulfing":0,"close":167.529999,"date":"2022-08-24","high":168.110001,"low":166.25,"macd":4.511469988056376,"macd_hist":-0.962178205692509,"macd_signal":5.473648193748885,"open":167.320007,"roc":-4.02177248888389,"rsi":57.86441611935567,"sma20":167.35300065,"sma5":169.60000000000002,"sma50":153.13239989999985,"volume":53841500},{"cdl_engulfing":0,"close":170.029999,"date":"2022-08-25","high":170.139999,"low":168.350006,"macd":4.284343888958659,"macd_hist":-0.951443443832181,"macd_signal":5.23578733279084,"open":168.779999,"roc":-2.3657738397625194,"rsi":61.94506193056686,"sma20":167.9870003,"sma5":168.776001,"sma50":153.87779997999985,"volume":51218200},{"cdl_engulfing":60,"close":163.619995,"date":"2022-08-26","high":171.050003,"low":163.559998,"macd":3.546232308309925,"macd_hist":-1.3516440195847323,"macd_signal":4.897876327894657,"open":170.570007,"roc":-4.605882005459849,"rsi":48.875190323887146,"sma20":168.0425003,"sma5":167.19599920000002,"sma50":154.44160001999987,"volume":78961000},{"cdl_engulfing":0,"close":161.380005,"date":"2022-08-29","high":162.899994,"low":159.820007,"macd":2.7488381946015465,"macd_hist":-1.7192305066344886,"macd_signal":4.468068701236035,"open":161.149994,"roc":-3.6939796750142695,"rsi":45.279834154760096,"sma20":168.0360008,"sma5":165.9579988,"sma50":155.06800015999985,"volume":73314000},{"cdl_engulfing":60,"close":158.910004,"date":"2022-08-30","high":162.559998,"low":157.720001,"macd":1.8957363084243184,"macd_hist":-2.0578659142493736,"macd_signal":3.953602222673692,"open":162.130005,"roc":-4.975179213662129,"rsi":41.64217043748203,"sma20":167.98100125000002,"sma5":164.29400040000002,"sma50":155.6150002799999,"volume":77906200},{"cdl_engulfing":0,"close":157.220001,"date":"2022-08-31","high":160.580002,"low":157.139999,"macd":1.0709327530612427,"macd_hist":-2.3061355756899595,"macd_signal":3.377068328751202,"open":160.309998,"roc":-6.154120492772163,"rsi":39.314884451933374,"sma20":167.53550105000002,"sma5":162.2320008,"sma50":156.04200039999986,"volume":87991100},{"cdl_engulfing":0,"close":157.960007,"date":"2022-09-01","high":158.419998,"low":154.669998,"macd":0.4715465971150934,"macd_hist":-2.324417385308887,"macd_signal":2.7959639824239804,"open":156.639999,"roc":-7.098742616589682,"rsi":40.8731224501874,"sma20":167.14300150000003,"sma5":159.8180024,"sma50":156.49420041999986,"volume":74229900},{"cdl_engulfing":60,"close":155.809998,"date":"2022-09-02","high":160.360001,"low":154.970001,"macd":-0.17494238087249414,"macd_hist":-2.3767250906371795,"macd_signal":2.2017827097646854,"open":159.75,"roc":-4.773253415635404,"rsi":37.83351163446787,"sma20":166.66600110000002,"sma5":158.25600300000002,"sma50":156.84500029999987,"volume":76905200},{"cdl_engulfing":0,"close":154.529999,"date":"2022-09-06","high":157.089996,"low":153.690002,"macd":-0.7815653763799162,"macd_hist":-2.3866784689156813,"macd_signal":1.605113092535765,"open":156.470001,"roc":-4.244643566593032,"rsi":36.111713258179456,"sma20":166.1490013,"sma5":156.8860018,"sma50":157.10240019999986,"volume":73714800},{"cdl_engulfing":0,"close":155.960007,"date":"2022-09-07","high":156.669998,"low":153.610001,"macd":-1.1338583628728145,"macd_hist":-2.191177164326864,"macd_signal":1.057318801454049,"open":154.820007,"roc":-1.8563947679467674,"rsi":39.42828235461378,"sma20":165.70100175000002,"sma5":156.29600240000002,"sma50":157.38840025999986,"volume":87449600},{"cdl_engulfing":0,"close":154.460007,"date":"2022-09-08","high":156.360001,"low":152.679993,"macd":-1.5166080433117202,"macd_hist":-2.0591414758126154,"macd_signal":0.5425334325008951,"open":154.639999,"roc":-1.7554980170748191,"rsi":37.24422411814871,"sma20":164.96200185000004,"sma5":155.7440036,"sma50":157.72880035999984,"volume":84923800},{"cdl_engulfing":0,"close":157.369995,"date":"2022-09-09","high":157.820007,"low":154.75,"macd":-1.5670640716520552,"macd_hist":-1.6876780033223602,"macd_signal":0.12061393167030504,"open":155.470001,"roc":-0.3735198618976976,"rsi":43.75355109293058,"sma20":164.40600135000003,"sma5":155.62600120000002,"sma50":158.09160033999984,"volume":68028800},{"cdl_engulfing":0,"close":163.429993,"date":"2022-09-12","high":164.259995,"low":159.300003,"macd":-1.105318224093594,"macd_hist":-0.9807457246111192,"macd_signal":-0.12457249948247476,"open":159.589996,"roc":4.890568704069942,"rsi":54.36840456804132,"sma20":163.9725007,"sma5":157.15000020000002,"sma50":158.62580017999983,"volume":104956000},{"cdl_engulfing":0,"close":153.839996,"date":"2022-09-13","high":160.539993,"low":153.369995,"macd":-1.4959693210310832,"macd_hist":-1.0971174572388867,"macd_signal":-0.3988518637921964,"open":159.899994,"roc":-0.44651718401939045,"rsi":41.13754778176743,"sma20":163.00500040000003,"sma5":157.01199960000002,"sma50":158.92400023999983,"volume":122656600},{"cdl_engulfing":0,"close":155.309998,"date":"2022-09-14","high":157.100006,"low":153.610001,"macd":-1.667721795030161,"macd_hist":-1.0150959449903718,"macd_signal":-0.6526258500397892,"open":154.789993,"roc":-0.4167792836787809,"rsi":43.41085761034776,"sma20":162.11900035000005,"sma5":156.88199780000005,"sma50":159.19900023999983,"volume":87965400},{"cdl_engulfing":0,"close":152.369995,"date":"2022-09-15","high":155.240005,"low":151.380005,"macd":-2.0178104764250975,"macd_hist":-1.0921477011082465,"macd_signal":-0.9256627753168509,"open":154.649994,"roc":-1.353108834185146,"rsi":40.077120706670016,"sma20":161.00999995000006,"sma5":156.46399540000004,"sma50":159.38800017999984,"volume":90481100},{"cdl_engulfing":0,"close":150.699997,"date":"2022-09-16","high":151.350006,"low":148.369995,"macd":-2.4023207028579066,"macd_hist":-1.1813263420328446,"macd_signal":-1.220994360825062,"open":151.210007,"roc":-4.238417876292111,"rsi":38.27889101217165,"sma20":159.83750010000009,"sma5":155.12999580000005,"sma50":159.47499999999982,"volume":162157000},{"cdl_engulfing":80,"close":154.479996,"date":"2022-09-19","high":154.559998,"low":149.100006,"macd":-2.374659897893764,"macd_hist":-0.9229324296549617,"macd_signal":-1.4517274682388024,"open":149.309998,"roc":-5.4763491301134675,"rsi":44.363957146246854,"sma20":158.98549970000008,"sma5":153.33999640000008,"sma50":159.62380005999984,"volume":81328800}]},"title":"APPL","vconcat":[{"encoding":{"x":{"field":"date","type":"temporal"},"y":{"field":"close","scale":{"zero":false},"type":"quantitative"}},"height":250,"layer":[{"encoding":{"color":{"condition":[{"test":"datum.open < datum.close","value":"#06982d"},{"test":"datum.open >= datum.close","value":"#ae1325"}],"datum":"OHLC"},"y":{"field":"low","type":"quantitative"},"y2":{"field":"high","type":"quantitative"}},"legend":false,"mark":"rule","title":"Price"},{"encoding":{"color":{"condition":[{"test":"datum.open < datum.close","value":"#06982d"},{"test":"datum.open >= datum.close","value":"#ae1325"}],"datum":"OHLC"},"y":{"field":"open","type":"quantitative"},"y2":{"field":"close","type":"quantitative"}},"legend":false,"mark":"bar","title":"Price"},{"encoding":{"color":{"datum":"SMA5"},"y":{"field":"sma5","type":"quantitative"}},"mark":"line","title":"sma5"},{"encoding":{"color":{"datum":"SMA20"},"y":{"field":"sma20","type":"quantitative"}},"mark":"line","title":"sma20"},{"encoding":{"color":{"datum":"SMA50"},"y":{"field":"sma50","type":"quantitative"}},"mark":"line","title":"sma50"},{"encoding":{"color":{"condition":[{"test":"datum.close < datum.cdl_engulfing","value":"#06982d"},{"test":"datum.close > datum.cdl_engulfing","value":"#ae1325"}],"datum":"cdl_engulfing","type":"nominal"},"y":{"field":"cdl_engulfing","type":"nominal"}},"mark":"point","resolve":{"legend":{"y":"independent"}},"transform":[{"filter":"datum.cdl_engulfing !== 0"}]}],"width":550},{"encoding":{"x":{"field":"date","type":"temporal"},"y":{"field":"macd","scale":{"zero":false},"type":"quantitative"}},"height":75,"layer":[{"encoding":{"color":{"datum":"macd_hist"},"y":{"field":"macd_hist","type":"quantitative"}},"mark":"bar"},{"encoding":{"color":{"datum":"macd_signal"},"y":{"field":"macd_signal","type":"quantitative"}},"mark":"line"},{"encoding":{"color":{"datum":"macd"},"y":{"field":"macd","type":"quantitative"}},"mark":"line"}],"width":550},{"encoding":{"x":{"field":"date","type":"temporal"},"y":{"field":"rsi","scale":{"zero":false},"type":"quantitative"}},"height":75,"layer":[{"encoding":{"color":{"datum":"rsi"},"y":{"field":"rsi","type":"quantitative"}},"mark":"line"}],"width":550},{"encoding":{"x":{"field":"date","type":"temporal"}},"height":50,"layer":[{"encoding":{"color":{"datum":"Volume","value":"blue"},"y":{"field":"volume","type":"quantitative"}},"mark":"line"}],"width":550}]}