github.com/MicahParks/go-rsi/v2@v2.0.3/rsi_test.go (about) 1 package rsi_test 2 3 import ( 4 "log" 5 "math/big" 6 "os" 7 "testing" 8 9 "github.com/MicahParks/go-rsi/v2" 10 ) 11 12 func BenchmarkBigRSI_Calculate(b *testing.B) { 13 const initialLength = rsi.DefaultPeriods + 1 14 15 r, _ := rsi.NewBig(bigPrices[:initialLength]) 16 17 for _, next := range bigPrices[initialLength:] { 18 r.Calculate(next) 19 } 20 } 21 22 func BenchmarkRSI_Calculate(b *testing.B) { 23 const initialLength = rsi.DefaultPeriods + 1 24 25 r, _ := rsi.New(prices[:initialLength]) 26 27 for _, next := range prices[initialLength:] { 28 r.Calculate(next) 29 } 30 } 31 32 func ExampleRSI_Calculate() { 33 // Create a logger. 34 logger := log.New(os.Stdout, "", 0) 35 36 // Create the RSI data structure and get the first result. 37 // 38 // The slice argument should be the number of periods 39 const initialLength = rsi.DefaultPeriods + 1 40 r, result := rsi.New(prices[:initialLength]) 41 logger.Printf("Period index: %d\nFirst RSI result: %.8f", rsi.DefaultPeriods, result) 42 43 // Use the remaining data to generate the RSI for each period. 44 for _, next := range prices[initialLength:] { 45 result = r.Calculate(next) 46 } 47 logger.Printf("Period index: %d\nLast RSI result: %.8f", len(prices)-1, result) 48 // Output: Period index: 14 49 // First RSI result: 72.36421725 50 // Period index: 166 51 // Last RSI result: 37.34374224 52 } 53 54 func TestBigRSI_Calculate(t *testing.T) { 55 const initialLength = rsi.DefaultPeriods + 1 56 57 r, result := rsi.NewBig(bigPrices[:initialLength]) 58 if result.Cmp(bigResults[0]) != 0 { 59 t.FailNow() 60 } 61 62 for i, next := range bigPrices[initialLength:] { 63 result = r.Calculate(next) 64 if result.Cmp(bigResults[i+1]) != 0 { 65 t.FailNow() 66 } 67 } 68 } 69 70 func TestRSI_Calculate(t *testing.T) { 71 const initialLength = rsi.DefaultPeriods + 1 72 73 r, result := rsi.New(prices[:initialLength]) 74 if result != results[0] { 75 t.FailNow() 76 } 77 78 for i, next := range prices[initialLength:] { 79 result = r.Calculate(next) 80 if result != results[i+1] { 81 t.FailNow() 82 } 83 } 84 } 85 86 func TestBigRSI_Invalid(t *testing.T) { 87 r, result := rsi.NewBig(nil) 88 if r != nil || result != nil { 89 t.FailNow() 90 } 91 } 92 93 func TestRSI_Invalid(t *testing.T) { 94 r, result := rsi.New(nil) 95 if r != nil || result != 0 { 96 t.FailNow() 97 } 98 } 99 100 func floatToBig(s []float64) (b []*big.Float) { 101 l := len(s) 102 b = make([]*big.Float, l) 103 for i := 0; i < l; i++ { 104 b[i] = big.NewFloat(s[i]) 105 } 106 return b 107 } 108 109 var ( 110 bigPrices = floatToBig(prices) 111 bigResults = floatToBig(results) 112 prices = []float64{ 113 88.55, 114 88.96, 115 87.93, 116 88.48, 117 88.14, 118 89.1, 119 89.61, 120 89.58, 121 89.53, 122 89.47, 123 90.2, 124 90.8, 125 90.92, 126 90.7, 127 91.35, 128 91.73, 129 91.11, 130 91.76, 131 90.67, 132 89.97, 133 90.04, 134 89.15, 135 89.74, 136 89.79, 137 88.25, 138 88.61, 139 88.28, 140 88.46, 141 88.67, 142 88.52, 143 88.36, 144 89.32, 145 88.97, 146 88.59, 147 89.2, 148 87.7, 149 88.51, 150 89.53, 151 89.55, 152 89.43, 153 88.95, 154 89.61, 155 89.56, 156 88.71, 157 88.97, 158 89.16, 159 89.16, 160 89.26, 161 89.83, 162 89.37, 163 88.77, 164 88.58, 165 88.63, 166 88.17, 167 89.29, 168 89.02, 169 90.13, 170 90.58, 171 90.11, 172 90.77, 173 90.58, 174 89.93, 175 89.77, 176 89.01, 177 88.6, 178 88.77, 179 88.68, 180 89.22, 181 88.99, 182 86.49, 183 86.61, 184 86.08, 185 86.62, 186 87.45, 187 88.09, 188 89.3, 189 89.43, 190 88.07, 191 88, 192 88.21, 193 88.99, 194 87.51, 195 88.63, 196 90.02, 197 90.58, 198 91.15, 199 91.7, 200 91.03, 201 90.14, 202 90.1, 203 91.11, 204 91.24, 205 90.7, 206 91.76, 207 92.52, 208 92.8, 209 92.19, 210 91.79, 211 91.53, 212 92.38, 213 92.08, 214 92.09, 215 90.47, 216 91.46, 217 90.79, 218 89.65, 219 90.23, 220 91.45, 221 91.12, 222 90.46, 223 89.74, 224 91.33, 225 90.58, 226 91.51, 227 91.93, 228 91, 229 89.05, 230 89.48, 231 88.48, 232 89.11, 233 89.8, 234 90.04, 235 90.35, 236 90.3, 237 90.64, 238 90.69, 239 91.57, 240 92.25, 241 93.34, 242 92.82, 243 93.27, 244 93.4, 245 93.25, 246 93.3, 247 93.46, 248 94.38, 249 95.17, 250 94.83, 251 95.2, 252 94.99, 253 94.97, 254 94.79, 255 94.03, 256 93.81, 257 93.75, 258 92.73, 259 91.95, 260 91.59, 261 91.47, 262 91.34, 263 91.78, 264 90.72, 265 89.89, 266 89.4, 267 88.95, 268 88.16, 269 87.91, 270 86.92, 271 86.83, 272 86.42, 273 86.98, 274 87.52, 275 87.09, 276 86.82, 277 88.84, 278 87.27, 279 87.16, 280 } 281 results = []float64{ 282 72.36421725239623015113465953618288040161132812500, 283 74.05997693194935038718540454283356666564941406250, 284 66.85220483413692704743880312889814376831054687500, 285 70.13392792714788015473459381610155105590820312500, 286 59.49650209930549493719809106551110744476318359375, 287 53.84798951579623604857260943390429019927978515625, 288 54.31507914768538114458351628854870796203613281250, 289 47.70441856222932131004199618473649024963378906250, 290 51.88513226122601906808995408937335014343261718750, 291 52.23363827029182004935137229040265083312988281250, 292 42.11535487927940835106710437685251235961914062500, 293 44.80693633023408040116919437423348426818847656250, 294 42.84043542606477217304927762597799301147460937500, 295 44.27700479297108415721595520153641700744628906250, 296 45.98270230770441457934794016182422637939453125000, 297 44.92488376868042365686051198281347751617431640625, 298 43.76826711040049389112027711234986782073974609375, 299 51.78853291793669910703101777471601963043212890625, 300 49.04216675921485091294016456231474876403808593750, 301 46.17885754633900319277017842978239059448242187500, 302 51.11311585011414848622735007666051387786865234375, 303 41.12800816489130539821417187340557575225830078125, 304 47.13388269577535538701340556144714355468750000000, 305 53.55884226908488443541500600986182689666748046875, 306 53.67771915686585515459228190593421459197998046875, 307 52.80434570118169546049102791585028171539306640625, 308 49.34574578714600789908217848278582096099853515625, 309 53.82424072424835514993901597335934638977050781250, 310 53.43877707811076049893017625436186790466308593750, 311 47.24450319236687789725692709907889366149902343750, 312 49.18479341136264082479101489298045635223388671875, 313 50.61423271473989160540440934710204601287841796875, 314 50.61423271473988449997705174610018730163574218750, 315 51.44790575424983103403064887970685958862304687500, 316 56.00660525942230094642582116648554801940917968750, 317 51.78116042111749806053921929560601711273193359375, 318 46.81938613254978065469913417473435401916503906250, 319 45.33784691804491018274347879923880100250244140625, 320 45.82369213011979525163042126223444938659667968750, 321 42.11500214933612085133063374087214469909667968750, 322 52.24855708462988701512585976161062717437744140625, 323 49.97713629285671999014084576629102230072021484375, 324 58.05111524271458023349623545072972774505615234375, 325 60.81258265615276314974835258908569812774658203125, 326 56.62019987031404610888785100542008876800537109375, 327 60.71578810781209512015266227535903453826904296875, 328 58.98917354042886529441602760925889015197753906250, 329 53.39496666304241045963863143697381019592285156250, 330 52.08555908257530120408773655071854591369628906250, 331 46.27997475707561392255229293368756771087646484375, 332 43.46531206180392103988197050057351589202880859375, 333 44.96003647943255998598033329471945762634277343750, 334 44.29237946922328461596407578326761722564697265625, 335 49.16974167856584898572691599838435649871826171875, 336 47.27134435321612215830100467428565025329589843750, 337 32.55724485497356113228306639939546585083007812500, 338 33.62522872456337097446521511301398277282714843750, 339 31.26998240648629234783584251999855041503906250000, 340 36.17525082033900929445735528133809566497802734375, 341 42.91865978528071678965716273523867130279541015625, 342 47.52279084366808348249833215959370136260986328125, 343 54.92526321542292322419598349370062351226806640625, 344 55.64911724860040465046040480956435203552246093750, 345 47.12333797770608612154319416731595993041992187500, 346 46.72652750314765057737531606107950210571289062500, 347 48.13746179051918971936174784786999225616455078125, 348 53.10542506163260867424469324760138988494873046875, 349 44.41223736089831675144523615017533302307128906250, 350 50.95519582110640754990527057088911533355712890625, 351 57.62198921999431178164741140790283679962158203125, 352 59.98211954189517314262047875672578811645507812500, 353 62.28454850878468818109467974863946437835693359375, 354 64.41222461251919639835250563919544219970703125000, 355 59.97365040352647724830603692680597305297851562500, 356 54.59212862334961613441919325850903987884521484375, 357 54.35605513519478648731819703243672847747802734375, 358 59.15852524251353372619632864370942115783691406250, 359 59.74561080619992026186082512140274047851562500000, 360 56.13587378573461705855152104049921035766601562500, 361 61.10378361342542063994187628850340843200683593750, 362 64.23169865173213111120276153087615966796875000000, 363 65.33764677636509077274240553379058837890625000000, 364 60.91846487295106271631084382534027099609375000000, 365 58.14144461591340729000876308418810367584228515625, 366 56.34351745609001227421686053276062011718750000000, 367 60.62982991715479386130027705803513526916503906250, 368 58.44862534452428803888324182480573654174804687500, 369 58.50221714797357464021843043155968189239501953125, 370 47.75630287639128113141850917600095272064208984375, 371 53.39071199497411157608439680188894271850585937500, 372 49.49987639274083761620204313658177852630615234375, 373 43.66862910653001250693705515004694461822509765625, 374 47.08410567765293563979867030866444110870361328125, 375 53.47425292984723910194588825106620788574218750000, 376 51.65709166975666022381119546480476856231689453125, 377 48.13406475870112899428931996226310729980468750000, 378 44.56348757743649713347622309811413288116455078125, 379 52.87673281423685267554901656694710254669189453125, 380 49.13386537769238771033997181802988052368164062500, 381 53.52674491309722526466430281288921833038330078125, 382 55.40003941176207291618993622250854969024658203125, 383 50.54187042968276699639318394474685192108154296875, 384 42.18799852794345639495077193714678287506103515625, 385 44.37149462775733610442330245859920978546142578125, 386 40.53704747325650714628864079713821411132812500000, 387 43.83030717971909240304739796556532382965087890625, 388 47.27454455761413498748879646882414817810058593750, 389 48.45839222492051590052142273634672164916992187500, 390 50.01942445978338014356268104165792465209960937500, 391 49.75766229621439151742379181087017059326171875000, 392 51.61204367429233030861723818816244602203369140625, 393 51.89324093739617183018708601593971252441406250000, 394 56.66630123268223684362965286709368228912353515625, 395 59.97131355988052803240861976519227027893066406250, 396 64.62830522892326712280919309705495834350585937500, 397 60.98323333742712293314980342984199523925781250000, 398 62.93164405165115482532200985588133335113525390625, 399 63.49873494220744163385461433790624141693115234375, 400 62.31414356497017337233046418987214565277099609375, 401 62.56483911581793222467240411788225173950195312500, 402 63.40379467170008354059973498806357383728027343750, 403 67.86353778710031292575877159833908081054687500000, 404 71.11830823557873770823789527639746665954589843750, 405 67.92957838565115480378153733909130096435546875000, 406 69.53063680317060857305477838963270187377929687500, 407 67.47177637189972188025421928614377975463867187500, 408 67.26748441372444631269900128245353698730468750000, 409 65.34969942807623510816483758389949798583984375000, 410 57.85030568475448831122776027768850326538085937500, 411 55.85220816100923713065640185959637165069580078125, 412 55.29131365670868802908444195054471492767333984375, 413 46.70448112293730957844672957435250282287597656250, 414 41.40851871208760570652884780429303646087646484375, 415 39.19921080273221747347633936442434787750244140625, 416 38.46254917960087027495319489389657974243164062500, 417 37.63735416132757904961181338876485824584960937500, 418 42.16046599492975843759268173016607761383056640625, 419 35.48352650149870157747500343248248100280761718750, 420 31.30313647135980659186316188424825668334960937500, 421 29.12185488847960357361444039270281791687011718750, 422 27.24426761600005875152419321238994598388671875000, 423 24.28418463313560948790836846455931663513183593750, 424 23.41710390754519721667747944593429565429687500000, 425 20.32257458897356627858243882656097412109375000000, 426 20.06300760276685934968554647639393806457519531250, 427 18.87997125587740754326659953221678733825683593750, 428 25.35431304855745793247479014098644256591796875000, 429 31.06754296943068993641645647585391998291015625000, 430 29.15401532944198947916447650641202926635742187500, 431 27.98832103494609668814518954604864120483398437500, 432 45.53442427378082157929384266026318073272705078125, 433 37.82105167168070636307675158604979515075683593750, 434 37.34374224244366047287257970310747623443603515625, 435 } 436 )