Module: YfAsDataframe::PriceTechnical
- Extended by:
- ActiveSupport::Concern
- Included in:
- YfAsDataframe
- Defined in:
- lib/yf_as_dataframe/price_technical.rb
Instance Method Summary collapse
- #ad(df) ⇒ Object
- #adosc(df, short_window: 2, long_window: 5) ⇒ Object
- #adx(df, column: 'Adj Close', window: 5) ⇒ Object (also: #avg_dir_index)
- #adxr(df, column: 'Adj Close', window: 5) ⇒ Object (also: #avg_dir_movement_rating)
- #ao(df) ⇒ Object
- #apo(df, column: 'Adj Close', short_window: 12, long_window: 29) ⇒ Object
- #aroon(df, window: 20) ⇒ Object
- #aroonosc(df, window: 20) ⇒ Object
- #atr(df, window: 20) ⇒ Object (also: #avg_true_range)
- #avg_daily_trading_volume(df, window: 20) ⇒ Object
- #avg_price(df) ⇒ Object (also: #avgprice)
- #bbands(df, column: 'Adj Close', window: 20, stddev: 1) ⇒ Object
- #bop(df) ⇒ Object
- #cci(df, window: 20) ⇒ Object
- #cmo(df, column: 'Adj Close', window: 20) ⇒ Object
- #cvi(df, window: 20) ⇒ Object
- #dema(df, column: 'Adj Close', window: 20) ⇒ Object
- #di(df, window: 20) ⇒ Object
- #dm(df, window: 20) ⇒ Object
- #dpo(df, column: 'Adj Close', window: 20) ⇒ Object
- #dx(df, window: 20) ⇒ Object
- #ema(df, column: 'Adj Close', window: 5) ⇒ Object
- #emv(df) ⇒ Object
- #fisher(df, window: 20) ⇒ Object
- #fosc(df, window: 20) ⇒ Object
- #hma(df, column: 'Adj Close', window: 5) ⇒ Object
- #kama(df, column: 'Adj Close', window: 5) ⇒ Object
- #kvo(df, short_window: 5, long_window: 20) ⇒ Object
- #linreg(df, column: 'Adj Close', window: 20) ⇒ Object
- #linregintercept(df, column: 'Adj Close', window: 20) ⇒ Object
- #linregslope(df, column: 'Adj Close', window: 20) ⇒ Object
- #macd(df, column: 'Adj Close', short_window: 12, long_window: 26, signal_window: 9) ⇒ Object
- #marketfi(df) ⇒ Object
- #mass(df, window: 20) ⇒ Object
- #max(df, column: 'Adj Close', window: 20) ⇒ Object
- #md(df, column: 'Adj Close', window: 20) ⇒ Object
- #median_price(df) ⇒ Object (also: #medprice)
- #mfi(df, window: 20) ⇒ Object
- #min(df, column: 'Adj Close', window: 20) ⇒ Object
- #mom(df, column: 'Adj Close', window: 5) ⇒ Object (also: #momentum)
- #moving_avgs(df, window: 20) ⇒ Object
- #natr(df, window: 20) ⇒ Object (also: #normalized_avg_true_range)
- #nvi(df) ⇒ Object
- #obv(df) ⇒ Object
- #ppo(df, column: 'Adj Close', short_window: 12, long_window: 26) ⇒ Object
- #psar(df, acceleration_factor_step: 0.2, acceleration_factor_maximum: 2) ⇒ Object
- #pvi(df) ⇒ Object
- #qstick(df, window: 20) ⇒ Object
- #roc(df, column: 'Adj Close', window: 20) ⇒ Object
- #rocr(df, column: 'Adj Close', window: 20) ⇒ Object
- #rsi(df, window: 20) ⇒ Object
- #sma(df, column: 'Adj Close', window: 20) ⇒ Object
- #stddev(df, column: 'Adj Close', window: 20) ⇒ Object
- #stderr(df, column: 'Adj Close', window: 20) ⇒ Object
- #stochrsi(df, column: 'Adj Close', window: 20) ⇒ Object
- #sum(df, column: 'Adj Close', window: 20) ⇒ Object
- #tema(df, column: 'Adj Close', window: 20) ⇒ Object
- #tr(df, column: 'Adj Close') ⇒ Object (also: #true_range)
- #trima(df, column: 'Adj Close', window: 20) ⇒ Object
- #trix(df, column: 'Adj Close', window: 20) ⇒ Object
- #tsf(df, column: 'Adj Close', window: 20) ⇒ Object
- #typical_price(df) ⇒ Object (also: #typprice)
- #ultosc(df, short_window: 5, medium_window: 12, long_window: 26) ⇒ Object
- #var(df, column: 'Adj Close', window: 20) ⇒ Object
- #vhf(df, column: 'Adj Close', window: 20) ⇒ Object
- #vidya(df, column: 'Adj Close', short_window: 5, long_window: 20, alpha: 0.2) ⇒ Object
- #vol_weighted_moving_avg(df, window: 20) ⇒ Object (also: #vwma)
- #volatility(df, column: 'Adj Close', window: 20) ⇒ Object
- #vosc(df, column: 'Adj Close', short_window: 5, long_window: 20) ⇒ Object
- #wad(df) ⇒ Object
- #wcprice(df) ⇒ Object
- #weighted_close_price(df) ⇒ Object
- #wilders(df, column: 'Adj Close', window: 20) ⇒ Object
- #willr(df, window: 20) ⇒ Object
- #wma(df, column: 'Adj Close', window: 5) ⇒ Object
- #zlema(df, column: 'Adj Close', window: 5) ⇒ Object
Instance Method Details
#ad(df) ⇒ Object
8 9 10 11 12 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 8 def ad(df) inputs = ['High', 'Low','Adj Close','Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.ad(inputs).first Polars::Series.new("Accum-Distrib Ln", [nil]*(df.rows.length - output.length)+output) end |
#adosc(df, short_window: 2, long_window: 5) ⇒ Object
15 16 17 18 19 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 15 def adosc(df, short_window: 2, long_window: 5) inputs = ['High', 'Low','Adj Close','Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.adosc(inputs, short_period: short_window, long_period: long_window).first Polars::Series.new("#{short_window}/#{long_window} Accum-Distrib Osc", [nil]*(df.rows.length - output.length)+output) end |
#adx(df, column: 'Adj Close', window: 5) ⇒ Object Also known as: avg_dir_index
22 23 24 25 26 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 22 def adx(df, column: 'Adj Close', window: 5) input = Polars::Series.new(df[column]).to_a output = Tulirb.adx([input], period: window).first Polars::Series.new("#{window}-day Avg Dir Movemt Idx for #{column}", [nil]*(df.rows.length - output.length)+output) end |
#adxr(df, column: 'Adj Close', window: 5) ⇒ Object Also known as: avg_dir_movement_rating
30 31 32 33 34 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 30 def adxr(df, column: 'Adj Close', window: 5) input = Polars::Series.new(df[column]).to_a output = Tulirb.adxr([input], period: window).first Polars::Series.new("#{window}-day Avg Dir Movemt Rating for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#ao(df) ⇒ Object
50 51 52 53 54 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 50 def ao(df) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.ao(inputs).first Polars::Series.new("Accum-Distrib Ln", [nil]*(df.rows.length - output.length)+output) #) end |
#apo(df, column: 'Adj Close', short_window: 12, long_window: 29) ⇒ Object
57 58 59 60 61 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 57 def apo(df, column: 'Adj Close', short_window: 12, long_window: 29) input = Polars::Series.new(df[column]).to_a output = Tulirb.ao([input], short_period: short_window, long_period: long_window).first Polars::Series.new("#{short_window}/#{long_window} Abs Price Osc for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#aroon(df, window: 20) ⇒ Object
64 65 66 67 68 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 64 def aroon(df, window: 20) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.aroon(inputs, period: window).first Polars::Series.new("#{window} Aroon Ind", [nil]*(df.rows.length - output.length)+output) #) end |
#aroonosc(df, window: 20) ⇒ Object
70 71 72 73 74 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 70 def aroonosc(df, window: 20) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.aroonosc(inputs, period: window).first Polars::Series.new("#{window} Aroon Osc Ind", [nil]*(df.rows.length - output.length)+output) #) end |
#atr(df, window: 20) ⇒ Object Also known as: avg_true_range
85 86 87 88 89 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 85 def atr(df, window: 20) inputs = ['High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.atr(inputs, period: window).first Polars::Series.new("#{window}-day Avg True Range", [nil]*(df.rows.length - output.length)+output)#) end |
#avg_daily_trading_volume(df, window: 20) ⇒ Object
39 40 41 42 43 44 45 46 47 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 39 def avg_daily_trading_volume(df, window: 20) df.insert_at_idx(0, Polars::Series.new('idx', (1..df.length).to_a)) df = df.set_sorted('idx', descending: false) adtv = df.group_by_rolling(index_column: 'idx', period: "#{window}i"). agg([Polars.mean('Volume').alias("ADTV(#{window})")]).to_series(1) df = df.drop('idx') adtv end |
#avg_price(df) ⇒ Object Also known as: avgprice
77 78 79 80 81 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 77 def avg_price(df) inputs = ['Open', 'High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.avgprice(inputs).first Polars::Series.new("Avg Price", [nil]*(df.rows.length - output.length)+output) #) end |
#bbands(df, column: 'Adj Close', window: 20, stddev: 1) ⇒ Object
93 94 95 96 97 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 93 def bbands(df, column: 'Adj Close', window: 20, stddev: 1 ) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.bbands(inputs, period: window, stddev: stddev).first Polars::Series.new("#{window}-day Boll Band for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#bop(df) ⇒ Object
100 101 102 103 104 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 100 def bop(df) inputs = ['Open', 'High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.bop(inputs).first Polars::Series.new("Bal of Power", [nil]*(df.rows.length - output.length)+output) #) end |
#cci(df, window: 20) ⇒ Object
107 108 109 110 111 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 107 def cci(df, window: 20) inputs = ['High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.cci(inputs, period: window).first Polars::Series.new("#{window}-day Comm Channel Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#cmo(df, column: 'Adj Close', window: 20) ⇒ Object
114 115 116 117 118 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 114 def cmo(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.cmo(inputs, period: window).first Polars::Series.new("#{window}-day Chande Mom Osc for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#cvi(df, window: 20) ⇒ Object
121 122 123 124 125 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 121 def cvi(df, window: 20) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.cvi(inputs, period: window).first Polars::Series.new("#{window}-day Chaikins Volatility", [nil]*(df.rows.length - output.length)+output) #) end |
#dema(df, column: 'Adj Close', window: 20) ⇒ Object
128 129 130 131 132 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 128 def dema(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.dema(inputs, period: window).first Polars::Series.new("Dbl EMA(#{window})", [nil]*(df.rows.length - output.length)+output) #) end |
#di(df, window: 20) ⇒ Object
135 136 137 138 139 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 135 def di(df, window: 20) inputs = ['High','Low','Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.di(inputs, period: window).first Polars::Series.new("#{window}-day Dir Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#dm(df, window: 20) ⇒ Object
142 143 144 145 146 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 142 def dm(df, window: 20) inputs = ['High','Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.dm(inputs, period: window).first Polars::Series.new("#{window}-day Dir Movemt", [nil]*(df.rows.length - output.length)+output) #) end |
#dpo(df, column: 'Adj Close', window: 20) ⇒ Object
149 150 151 152 153 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 149 def dpo(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.dpo(inputs, period: window).first Polars::Series.new("#{window}-day Detrend Price Osc of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#dx(df, window: 20) ⇒ Object
156 157 158 159 160 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 156 def dx(df, window: 20) inputs = ['High','Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.dx(inputs, period: window).first Polars::Series.new("#{window}-day Dir Movemt Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#ema(df, column: 'Adj Close', window: 5) ⇒ Object
163 164 165 166 167 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 163 def ema(df, column: 'Adj Close', window: 5) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.ema(inputs, period: window).first Polars::Series.new("EMA(#{window}) for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#emv(df) ⇒ Object
170 171 172 173 174 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 170 def emv(df) inputs = ['High', 'Low', 'Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.emv(inputs).first Polars::Series.new("Ease of Mvmt", [nil]*(df.rows.length - output.length)+output) #) end |
#fisher(df, window: 20) ⇒ Object
177 178 179 180 181 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 177 def fisher(df, window: 20) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.fisher(inputs, period: window).first Polars::Series.new("#{window}-day Fisher Xform", [nil]*(df.rows.length - output.length)+output) #) end |
#fosc(df, window: 20) ⇒ Object
184 185 186 187 188 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 184 def fosc(df, window: 20) inputs = ['Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.fosc(inputs, period: window).first Polars::Series.new("Fcast Osc", [nil]*(df.rows.length - output.length)+output) #) end |
#hma(df, column: 'Adj Close', window: 5) ⇒ Object
191 192 193 194 195 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 191 def hma(df, column: 'Adj Close', window: 5) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.ema(inputs, period: window).first Polars::Series.new("EMA(#{window}) for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#kama(df, column: 'Adj Close', window: 5) ⇒ Object
198 199 200 201 202 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 198 def kama(df, column: 'Adj Close', window: 5) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.kama(inputs, period: window).first Polars::Series.new("KAMA(#{window}) for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#kvo(df, short_window: 5, long_window: 20) ⇒ Object
205 206 207 208 209 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 205 def kvo(df, short_window: 5, long_window: 20) inputs = ['High', 'Low', 'Adj Close', 'Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.kvo(inputs, short_period: short_window, long_period: long_window).first Polars::Series.new("#{short_window}/#{long_window} Klinger Vol Osc", [nil]*(df.rows.length - output.length)+output) #) end |
#linreg(df, column: 'Adj Close', window: 20) ⇒ Object
212 213 214 215 216 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 212 def linreg(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.linreg(inputs, period: window).first Polars::Series.new("#{window}-day Lin Reg Est for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#linregintercept(df, column: 'Adj Close', window: 20) ⇒ Object
219 220 221 222 223 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 219 def linregintercept(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.linregintercept(inputs, period: window).first Polars::Series.new("#{window}-day Lin Reg Int for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#linregslope(df, column: 'Adj Close', window: 20) ⇒ Object
226 227 228 229 230 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 226 def linregslope(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.linregslope(inputs, period: window).first Polars::Series.new("#{window}-day Lin Reg Slope for #{column}", [nil]*(df.rows.length - output.length)+output) end |
#macd(df, column: 'Adj Close', short_window: 12, long_window: 26, signal_window: 9) ⇒ Object
233 234 235 236 237 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 233 def macd(df, column: 'Adj Close', short_window: 12, long_window: 26, signal_window: 9) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.macd(inputs, short_period: short_window, long_period: long_window, signal_period: signal_window).first Polars::Series.new("#{short_window}/#{long_window}/#{signal_window} MACD for #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#marketfi(df) ⇒ Object
240 241 242 243 244 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 240 def marketfi(df) inputs = ['High', 'Low', 'Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.marketfi(inputs).first Polars::Series.new("Mkt Facilitation Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#mass(df, window: 20) ⇒ Object
247 248 249 250 251 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 247 def mass(df, window: 20) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.mass(inputs, period: window).first Polars::Series.new("#{window}-day Mass Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#max(df, column: 'Adj Close', window: 20) ⇒ Object
254 255 256 257 258 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 254 def max(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.max(inputs, period: window).first Polars::Series.new("Max of #{column} in #{window}-day pd", [nil]*(df.rows.length - output.length)+output) #) end |
#md(df, column: 'Adj Close', window: 20) ⇒ Object
261 262 263 264 265 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 261 def md(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.md(inputs, period: window).first Polars::Series.new("Mean Dev of #{column} in #{window}-day pd", [nil]*(df.rows.length - output.length)+output) #) end |
#median_price(df) ⇒ Object Also known as: medprice
268 269 270 271 272 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 268 def median_price(df) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.medprice(inputs).first Polars::Series.new("Med Price", [nil]*(df.rows.length - output.length)+output) #) end |
#mfi(df, window: 20) ⇒ Object
276 277 278 279 280 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 276 def mfi(df, window: 20) inputs = ['High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.mfi(inputs, period: window).first Polars::Series.new("#{window}-day Money Flow Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#min(df, column: 'Adj Close', window: 20) ⇒ Object
283 284 285 286 287 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 283 def min(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.min(inputs, period: window).first Polars::Series.new("Min of #{column} in #{window}-day pd", [nil]*(df.rows.length - output.length)+output) #) end |
#mom(df, column: 'Adj Close', window: 5) ⇒ Object Also known as: momentum
290 291 292 293 294 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 290 def mom(df, column: 'Adj Close', window: 5) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.mom(inputs, period: window).first Polars::Series.new("#{window}-day Momentum of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#moving_avgs(df, window: 20) ⇒ Object
298 299 300 301 302 303 304 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 298 def moving_avgs(df, window: 20) df.insert_at_idx(0, Polars::Series.new('idx', (1..df.length).to_a)) df = df.set_sorted('idx', descending: false) s = df.group_by_rolling(index_column: 'idx', period: "#{window}i").agg([Polars.mean('Adj Close').alias("MA(#{window})")]).to_series(1) #) df = df.drop('idx') s end |
#natr(df, window: 20) ⇒ Object Also known as: normalized_avg_true_range
306 307 308 309 310 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 306 def natr(df, window: 20) inputs = ['High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.natr(inputs, period: window).firs Polars::Series.new("#{window}-day Norm Avg True Range", [nil]*(df.rows.length - output.length)+output) #) end |
#nvi(df) ⇒ Object
342 343 344 345 346 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 342 def nvi(df) inputs = ['Adj Close', 'Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.nvi(inputs).first Polars::Series.new("Neg Vol Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#obv(df) ⇒ Object
349 350 351 352 353 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 349 def obv(df) inputs = ['Adj Close', 'Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.obv(inputs).first Polars::Series.new("On Bal Vol", [nil]*(df.rows.length - output.length)+output) #) end |
#ppo(df, column: 'Adj Close', short_window: 12, long_window: 26) ⇒ Object
356 357 358 359 360 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 356 def ppo(df, column: 'Adj Close', short_window: 12, long_window: 26) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.ppo(inputs, short_period: short_window, long_period: long_window).first Polars::Series.new("#{short_window}/#{long_window} Pctage Price Osc of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#psar(df, acceleration_factor_step: 0.2, acceleration_factor_maximum: 2) ⇒ Object
363 364 365 366 367 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 363 def psar(df, acceleration_factor_step: 0.2, acceleration_factor_maximum: 2) inputs = ['High', 'Low'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.psar(inputs, acceleration_factor_step, acceleration_factor_maximum).first Polars::Series.new("Parabolic SAR w step #{acceleration_factor_step} and max #{acceleration_factor_maximum}", [nil]*(df.rows.length - output.length)+output) #) end |
#pvi(df) ⇒ Object
370 371 372 373 374 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 370 def pvi(df) inputs = ['Adj Close', 'Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.pvi(inputs).first Polars::Series.new("Pos Vol Idx", [nil]*(df.rows.length - output.length)+output) #) end |
#qstick(df, window: 20) ⇒ Object
377 378 379 380 381 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 377 def qstick(df, window: 20) inputs = ['Open', 'Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.qstick(inputs, period: window).first Polars::Series.new("#{window}-day Qstick", [nil]*(df.rows.length - output.length)+output) #) end |
#roc(df, column: 'Adj Close', window: 20) ⇒ Object
384 385 386 387 388 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 384 def roc(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.roc(inputs, period: window).first Polars::Series.new("Rate of Chg of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#rocr(df, column: 'Adj Close', window: 20) ⇒ Object
391 392 393 394 395 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 391 def rocr(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.rocr(inputs, period: window).first Polars::Series.new("Rate of Chg Ratio of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#rsi(df, window: 20) ⇒ Object
397 398 399 400 401 402 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 397 def rsi(df, window: 20) return nil if w == 1 inputs = ['Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.rsi(inputs, period: window).first Polars::Series.new("#{window}-day RSI", [nil]*(df.rows.length - output.length)+output) #) end |
#sma(df, column: 'Adj Close', window: 20) ⇒ Object
404 405 406 407 408 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 404 def sma(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.sma(inputs, period: window).first Polars::Series.new("SMA(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#stddev(df, column: 'Adj Close', window: 20) ⇒ Object
411 412 413 414 415 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 411 def stddev(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.stddev(inputs, period: window).first Polars::Series.new("Rolling Stdev(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#stderr(df, column: 'Adj Close', window: 20) ⇒ Object
418 419 420 421 422 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 418 def stderr(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.stderr(inputs, period: window).first Polars::Series.new("Rolling Stderr(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#stochrsi(df, column: 'Adj Close', window: 20) ⇒ Object
425 426 427 428 429 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 425 def stochrsi(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.stochrsi(inputs, period: window).first Polars::Series.new("Stochastic RSI(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#sum(df, column: 'Adj Close', window: 20) ⇒ Object
432 433 434 435 436 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 432 def sum(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.sum(inputs, period: window).first Polars::Series.new("Rolling #{window}-day Sum of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#tema(df, column: 'Adj Close', window: 20) ⇒ Object
438 439 440 441 442 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 438 def tema(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.tema(inputs, period: window).first Polars::Series.new("TEMA(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#tr(df, column: 'Adj Close') ⇒ Object Also known as: true_range
445 446 447 448 449 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 445 def tr(df, column: 'Adj Close') inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.tr(inputs).first Polars::Series.new("True Range of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#trima(df, column: 'Adj Close', window: 20) ⇒ Object
453 454 455 456 457 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 453 def trima(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.trima(inputs, period: window).first Polars::Series.new("Triang MA(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#trix(df, column: 'Adj Close', window: 20) ⇒ Object
460 461 462 463 464 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 460 def trix(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.trix(inputs, period: window).first Polars::Series.new("Trix(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#tsf(df, column: 'Adj Close', window: 20) ⇒ Object
467 468 469 470 471 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 467 def tsf(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.tsf(inputs, period: window).first Polars::Series.new("Time-series Fcast(#{window}) of #{window}", [nil]*(df.rows.length - output.length)+output) #) end |
#typical_price(df) ⇒ Object Also known as: typprice
474 475 476 477 478 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 474 def typical_price(df) inputs = ['High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.typprice(inputs).first Polars::Series.new("Typical Price", [nil]*(df.rows.length - output.length)+output) #) end |
#ultosc(df, short_window: 5, medium_window: 12, long_window: 26) ⇒ Object
482 483 484 485 486 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 482 def ultosc(df, short_window: 5, medium_window: 12, long_window: 26) inputs = ['High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.ultosc(inputs, short_period: short_window, medium_period: medium_window, long_period: long_window).first Polars::Series.new("Ult Osc(#{short_window}, #{medium_window}, #{long_window})", [nil]*(df.rows.length - output.length)+output) #) end |
#var(df, column: 'Adj Close', window: 20) ⇒ Object
495 496 497 498 499 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 495 def var(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.var(inputs, period: window).first Polars::Series.new("Var over Per(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#vhf(df, column: 'Adj Close', window: 20) ⇒ Object
502 503 504 505 506 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 502 def vhf(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.vhf(inputs, period: window).first Polars::Series.new("VHF(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#vidya(df, column: 'Adj Close', short_window: 5, long_window: 20, alpha: 0.2) ⇒ Object
509 510 511 512 513 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 509 def vidya(df, column: 'Adj Close', short_window: 5, long_window: 20, alpha: 0.2) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.vidya(inputs, short_period: short_window, long_period: long_window, alpha: alpha).first Polars::Series.new("vidya(#{short_window},#{long_window},#{alpha}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#vol_weighted_moving_avg(df, window: 20) ⇒ Object Also known as: vwma
529 530 531 532 533 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 529 def vol_weighted_moving_avg(df, window: 20) inputs = ['Adj Close','Volume'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.vwma(inputs, period: window).first Polars::Series.new("VWMA(#{window})", [nil]*(df.rows.length - output.length)+output) #) end |
#volatility(df, column: 'Adj Close', window: 20) ⇒ Object
516 517 518 519 520 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 516 def volatility(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.volatility(inputs, period: window).first Polars::Series.new("#{window}-day Volatility of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#vosc(df, column: 'Adj Close', short_window: 5, long_window: 20) ⇒ Object
523 524 525 526 527 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 523 def vosc(df, column: 'Adj Close', short_window: 5, long_window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.vosc(inputs, short_period: short_window, long_period: long_window).first Polars::Series.new("#{short_window}/#{long_window} Vol Osc of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#wad(df) ⇒ Object
537 538 539 540 541 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 537 def wad(df) inputs = ['High','Low','Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.wad(inputs, period: window).first Polars::Series.new("Wms Accum/Distrib", [nil]*(df.rows.length - output.length)+output) #) end |
#wcprice(df) ⇒ Object
544 545 546 547 548 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 544 def wcprice(df) inputs = ['High','Low','Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.stderr(inputs).first Polars::Series.new("Wtd Close Price", [nil]*(df.rows.length - output.length)+output) #) end |
#weighted_close_price(df) ⇒ Object
488 489 490 491 492 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 488 def weighted_close_price(df) inputs = ['High', 'Low', 'Adj Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.wcprice(inputs).first Polars::Series.new("Wtd Close Price", [nil]*(df.rows.length - output.length)+output) #) end |
#wilders(df, column: 'Adj Close', window: 20) ⇒ Object
551 552 553 554 555 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 551 def wilders(df, column: 'Adj Close', window: 20) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.wilders(inputs, period: window).first Polars::Series.new("#{window}-day Wilders Smoothing of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#willr(df, window: 20) ⇒ Object
558 559 560 561 562 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 558 def willr(df, window: 20) inputs = ['High','Low','Close'].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.willr(inputs, period: window).first Polars::Series.new("#{window}-day Williams %R Ind", [nil]*(df.rows.length - output.length)+output) #) end |
#wma(df, column: 'Adj Close', window: 5) ⇒ Object
565 566 567 568 569 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 565 def wma(df, column: 'Adj Close', window: 5) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.wma(inputs, period: window).first Polars::Series.new("WMA(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |
#zlema(df, column: 'Adj Close', window: 5) ⇒ Object
572 573 574 575 576 |
# File 'lib/yf_as_dataframe/price_technical.rb', line 572 def zlema(df, column: 'Adj Close', window: 5) inputs = [column].map{|col| Polars::Series.new(df[col]).to_a} output = Tulirb.zlema(inputs, period: window).first Polars::Series.new("ZLEMA(#{window}) of #{column}", [nil]*(df.rows.length - output.length)+output) #) end |