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  )