github.com/MicahParks/go-chaikin@v0.2.3/chaikin_test.go (about) 1 package chaikin_test 2 3 import ( 4 "testing" 5 6 "github.com/MicahParks/go-ad" 7 8 "github.com/MicahParks/go-chaikin" 9 ) 10 11 const ( 12 badBuySignal = "The buy signal was incorrect." 13 badNumericResult = "The numeric result was incorrect." 14 ) 15 16 func BenchmarkChaikin_Calculate(b *testing.B) { 17 initial := [chaikin.LongEMA]ad.Input{} 18 for i := 0; i < chaikin.LongEMA; i++ { 19 initial[i] = ad.Input{ 20 Close: closePrices[i], 21 Low: low[i], 22 High: high[i], 23 Volume: volume[i], 24 } 25 } 26 27 cha, _ := chaikin.New(initial) 28 29 for i := range open[chaikin.LongEMA:] { 30 i += chaikin.LongEMA 31 32 cha.Calculate(ad.Input{ 33 Close: closePrices[i], 34 Low: low[i], 35 High: high[i], 36 Volume: volume[i], 37 }) 38 } 39 } 40 41 func BenchmarkBigChaikin_Calculate(b *testing.B) { 42 initial := [chaikin.LongEMA]ad.BigInput{} 43 for i := 0; i < chaikin.LongEMA; i++ { 44 initial[i] = ad.BigInput{ 45 Close: bigClose[i], 46 Low: bigLow[i], 47 High: bigHigh[i], 48 Volume: bigVolume[i], 49 } 50 } 51 52 cha, _ := chaikin.NewBig(initial) 53 54 for i := range bigOpen[chaikin.LongEMA:] { 55 i += chaikin.LongEMA 56 57 cha.Calculate(ad.BigInput{ 58 Close: bigClose[i], 59 Low: bigLow[i], 60 High: bigHigh[i], 61 Volume: bigVolume[i], 62 }) 63 } 64 } 65 66 func TestChaikin_Calculate(t *testing.T) { 67 initial := [chaikin.LongEMA]ad.Input{} 68 for i := 0; i < chaikin.LongEMA; i++ { 69 initial[i] = ad.Input{ 70 Close: closePrices[i], 71 Low: low[i], 72 High: high[i], 73 Volume: volume[i], 74 } 75 } 76 77 cha, result := chaikin.New(initial) 78 if result.ChaikinLine != chaikinResults[0] { 79 t.FailNow() 80 } 81 82 for i := range open[chaikin.LongEMA:] { 83 i += chaikin.LongEMA 84 85 result = cha.Calculate(ad.Input{ 86 Close: closePrices[i], 87 Low: low[i], 88 High: high[i], 89 Volume: volume[i], 90 }) 91 92 if result.ChaikinLine != chaikinResults[i-chaikin.LongEMA+1] { 93 t.Errorf(badNumericResult) 94 t.FailNow() 95 } 96 97 expected := buySignals[i-chaikin.LongEMA] 98 if result.BuySignal == nil && expected == nil { 99 continue 100 } 101 if result.BuySignal == nil || expected == nil || *result.BuySignal != *expected { 102 t.Errorf(badBuySignal) 103 t.FailNow() 104 } 105 } 106 } 107 108 func TestBigChaikin_Calculate(t *testing.T) { 109 initial := [chaikin.LongEMA]ad.BigInput{} 110 for i := 0; i < chaikin.LongEMA; i++ { 111 initial[i] = ad.BigInput{ 112 Close: bigClose[i], 113 Low: bigLow[i], 114 High: bigHigh[i], 115 Volume: bigVolume[i], 116 } 117 } 118 119 cha, result := chaikin.NewBig(initial) 120 if result.ChaikinLine.Cmp(bigChaikinResults[0]) != 0 { 121 t.FailNow() 122 } 123 124 for i := range bigOpen[chaikin.LongEMA:] { 125 i += chaikin.LongEMA 126 127 result = cha.Calculate(ad.BigInput{ 128 Close: bigClose[i], 129 Low: bigLow[i], 130 High: bigHigh[i], 131 Volume: bigVolume[i], 132 }) 133 134 if result.ChaikinLine.Cmp(bigChaikinResults[i-chaikin.LongEMA+1]) != 0 { 135 t.Errorf(badNumericResult) 136 t.FailNow() 137 } 138 139 expected := buySignals[i-chaikin.LongEMA] 140 if result.BuySignal == nil && expected == nil { 141 continue 142 } 143 if result.BuySignal == nil || expected == nil || *result.BuySignal != *expected { 144 t.Errorf(badBuySignal) 145 t.FailNow() 146 } 147 } 148 }