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 }