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  }