github.com/MicahParks/go-rsi@v1.0.7/examples/simple/main.go (about)

     1  package main
     2  
     3  import (
     4  	"log"
     5  	"os"
     6  
     7  	"github.com/MicahParks/go-rsi"
     8  )
     9  
    10  func main() {
    11  	// Create a logger.
    12  	logger := log.New(os.Stdout, "", 0)
    13  
    14  	// Gather some data.
    15  	//
    16  	// For production systems, it'd be best to gather data asynchronously.
    17  	avgGains, avgLosses, _ := testData()
    18  
    19  	// Determine the number of periods for the initial inputs. Defaults to 14.
    20  	periods := rsi.DefaultPeriods
    21  
    22  	// Average the gains and losses over the given period.
    23  	avgGain := avg(avgGains[0:periods])
    24  	avgLoss := avg(avgLosses[0:periods])
    25  	initialInput := rsi.Input{
    26  		AverageGain: avgGain,
    27  		AverageLoss: avgLoss,
    28  	}
    29  
    30  	// Create the RSI data structure and get the first result.
    31  	//
    32  	// If the first argument, the initial periods is 0, the default value, 14, will be used.
    33  	r, result := rsi.New(uint(periods), initialInput)
    34  	logger.Printf("Period index: %d\nAverage gain: %.2f\nAverage loss: %.2f\nRSI: %.2f", periods-1, avgGain, avgLoss, result)
    35  
    36  	// Use the remaining data to generate the RSI for each period.
    37  	for i := periods; i < len(avgGains); i++ {
    38  		avgGain = avgGains[i]
    39  		avgLoss = avgLosses[i]
    40  		result = r.Calculate(rsi.Input{
    41  			AverageGain: avgGain,
    42  			AverageLoss: avgLoss,
    43  		})
    44  	}
    45  	logger.Printf("Period index: %d\nAverage gain: %.2f\nAverage loss: %.2f\nRSI: %.2f", len(avgGains)-1, avgGain, avgLoss, result)
    46  }
    47  
    48  func avg(s []float64) (avg float64) {
    49  	for _, v := range s {
    50  		avg += v
    51  	}
    52  	avg /= float64(len(s))
    53  	return avg
    54  }
    55  
    56  func testData() (avgGains, avgLosses, results []float64) {
    57  	avgGains = []float64{
    58  		-0.6046602879796196,
    59  		0,
    60  		0,
    61  		0.30091186058528707,
    62  		0.21426387258237492,
    63  		0.4688898449024232,
    64  		-0.6790846759202163,
    65  		-0.360871416856906,
    66  		0,
    67  		0.2065826619136986,
    68  		-0.5238203060500009,
    69  		-0.6072534395455154,
    70  		0,
    71  		0,
    72  		0,
    73  		0,
    74  		-0.7886049150193449,
    75  		0,
    76  		-0.9769168685862624,
    77  		0,
    78  		0,
    79  		0.7302314772948083,
    80  		-0.8969919575618727,
    81  		-0.9222122589217269,
    82  		0.9269868035744142,
    83  		-0.6908388315056789,
    84  		0,
    85  		0.40380328579570035,
    86  		0.8963417453962161,
    87  		-0.6445397825093294,
    88  		-0.6227283173637045,
    89  		0,
    90  		0,
    91  		-0.41032284435628247,
    92  		0,
    93  		0.8305339189948062,
    94  		0,
    95  		0,
    96  		0,
    97  		-0.559392449071014,
    98  		0,
    99  		0.8458327872480417,
   100  		0,
   101  		-0.8143945509670211,
   102  		0.539210105890946,
   103  		0,
   104  		0,
   105  		-0.6278346050000227,
   106  		0,
   107  		0.9296116354490302,
   108  		-0.4117626883450162,
   109  		0,
   110  		0,
   111  		0,
   112  		-0.09838378898573259,
   113  		-0.15184340208190175,
   114  		-0.15965092146489504,
   115  		0.5390745170394794,
   116  		0,
   117  		0,
   118  		0.012825909106361078,
   119  		0,
   120  		0.3443150177263606,
   121  		0,
   122  		0,
   123  		0,
   124  		0.411540363220476,
   125  		-0.09211762444074219,
   126  		0.2507622754291802,
   127  		-0.21256094905031958,
   128  		0,
   129  		0,
   130  		0,
   131  		0.9498832061012532,
   132  		0.4004323171418129,
   133  		0.42868843006993296,
   134  		0,
   135  		0,
   136  		0.07244835679235131,
   137  		0,
   138  		0.24784452318699535,
   139  		0,
   140  		0,
   141  		-0.5838347418625311,
   142  		0.6491884165984236,
   143  		0.33205608571906026,
   144  		0.31051027622482125,
   145  		-0.8332418155281546,
   146  		-0.4173258421903824,
   147  		-0.8958032677441458,
   148  		0.7916723090820832,
   149  		0.43269824007906393,
   150  		-0.0429216421763342,
   151  		0,
   152  		-0.12436351859954159,
   153  		-0.3148047959559753,
   154  		-0.37026753645051064,
   155  		-0.7698890899830834,
   156  		0.34686388037925503,
   157  		0.3511342996652132,
   158  	}
   159  	avgLosses = []float64{
   160  		0,
   161  		-0.4377141871869802,
   162  		0.06563701921747622,
   163  		0,
   164  		0,
   165  		0,
   166  		0,
   167  		0,
   168  		-0.29311424455385804,
   169  		0,
   170  		0,
   171  		0,
   172  		-0.5948085976830626,
   173  		-0.30152268100656,
   174  		-0.544155573000885,
   175  		-0.5305857153507052,
   176  		0,
   177  		-0.2971122606397708,
   178  		0,
   179  		0.6810783123925709,
   180  		-0.932846428518434,
   181  		0,
   182  		0,
   183  		0,
   184  		0,
   185  		0,
   186  		0.6494894605929404,
   187  		0,
   188  		0,
   189  		0,
   190  		0,
   191  		0.5352818906344061,
   192  		0.6280981712183633,
   193  		0,
   194  		-0.5501469205077233,
   195  		0,
   196  		-0.39998376285699544,
   197  		-0.40961827788499267,
   198  		-0.0028430411748625642,
   199  		0,
   200  		0.4584424785756506,
   201  		0,
   202  		0.24746660783662855,
   203  		0,
   204  		0,
   205  		0.2940063127950149,
   206  		-0.35576726540923664,
   207  		0,
   208  		-0.02519395979489504,
   209  		0,
   210  		0,
   211  		-0.9579539135375136,
   212  		0.7830349733960021,
   213  		0.19003276633920804,
   214  		0,
   215  		0,
   216  		0,
   217  		0,
   218  		0.6841751300974551,
   219  		0.654270134424146,
   220  		0,
   221  		0.3691117091643448,
   222  		0,
   223  		0.5550021356347942,
   224  		0.16867966833433606,
   225  		-0.7002878731458151,
   226  		0,
   227  		0,
   228  		0,
   229  		0,
   230  		-0.09297015549992493,
   231  		-0.44846436394045647,
   232  		-0.6718291062346395,
   233  		0,
   234  		0,
   235  		0,
   236  		-0.23632747430436052,
   237  		0.7275772560415229,
   238  		0,
   239  		-0.9777634773577185,
   240  		0,
   241  		0.8351038011543529,
   242  		-0.6320034337887998,
   243  		0,
   244  		0,
   245  		0,
   246  		0,
   247  		0,
   248  		0,
   249  		0,
   250  		0,
   251  		0,
   252  		0,
   253  		0.5034867900486911,
   254  		0,
   255  		0,
   256  		0,
   257  		0,
   258  		0,
   259  		0,
   260  	}
   261  	results = []float64{
   262  		50.37372814979006,
   263  		42.46506760316381,
   264  		36.455074343328356,
   265  		48.19141056422313,
   266  		44.83183826881235,
   267  		55.75402991428148,
   268  		65.48845086614251,
   269  		52.076954832425926,
   270  		42.07698338873929,
   271  		54.6070966669469,
   272  		63.378465750456634,
   273  		53.692072030084134,
   274  		61.801030904080655,
   275  		75.11905942769799,
   276  		70.9237382460841,
   277  		51.289847633279685,
   278  		68.01512283852966,
   279  		76.43427216113786,
   280  		101.05867776981523,
   281  		170.44976443141798,
   282  		147.5025543564119,
   283  		100.32043640017389,
   284  		100.66763898515933,
   285  		64.4492758322958,
   286  		46.140995751088376,
   287  		46.043230662096285,
   288  		62.76192062871468,
   289  		86.38582878645303,
   290  		45.99829305988126,
   291  		704.430625812193,
   292  		111.6841364461389,
   293  		138.8495600143825,
   294  		-380.17885329730524,
   295  		98.20564701629775,
   296  		99.47091158198144,
   297  		96.52941068543409,
   298  		119.82433081203759,
   299  		90.99612399563593,
   300  		19.597066891868494,
   301  		63.3598555296549,
   302  		152.17608602794462,
   303  		129.2868718557359,
   304  		116.9371564551939,
   305  		111.4636377754057,
   306  		34.54439777560913,
   307  		3.396369035345714,
   308  		1.761056575962911,
   309  		2.7495938316288004,
   310  		2.0959460333819067,
   311  		20.96946935887337,
   312  		15.711724254181803,
   313  		14.520112354584882,
   314  		21.969737016580808,
   315  		41.09598649610068,
   316  		37.3970532079977,
   317  		47.13001378882817,
   318  		38.38541994784097,
   319  		41.62856720991248,
   320  		74.19151021942693,
   321  		-283.21016850672277,
   322  		160.4912184098133,
   323  		139.64945134065763,
   324  		128.37722956290588,
   325  		154.44495974399064,
   326  		92.30336997284398,
   327  		92.62171505950914,
   328  		232.22566829566225,
   329  		193.680855227925,
   330  		94.12119307931962,
   331  		161.98418317624737,
   332  		319.25770441319946,
   333  		154.2936541595806,
   334  		138.38531290124757,
   335  		129.63956633323778,
   336  		186.7752541101841,
   337  		-2083.6051319263383,
   338  		64.48372074758835,
   339  		-457.18970525464147,
   340  		172.87708240856972,
   341  		182.89002322956657,
   342  		66.85383721821556,
   343  		60.12399884284471,
   344  		10.695418395042864,
   345  		256.6490063935015,
   346  		121.85686796662169,
   347  		137.52227459653716,
   348  		271.6187142609139,
   349  	}
   350  	return avgGains, avgLosses, results
   351  }