Skip to content

Commit

Permalink
Make 0.1.0 (#4)
Browse files Browse the repository at this point in the history
* improve documentation
* codegen with useful parameter names
  • Loading branch information
Shawn Hsiao authored May 9, 2021
1 parent ea7b936 commit aca2b04
Show file tree
Hide file tree
Showing 110 changed files with 1,139 additions and 943 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,8 @@ jobs:
with:
go-version: 1.16

- name: Vet
run: go vet ./...

- name: Test
run: go test -v ./...
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ test:
@go test -race -cover ./...

codegen:
rm -rf tulipindicators
git clone https://github.com/TulipCharts/tulipindicators.git
(cd tulipindicators && git checkout cffa15e && rm -rf .git)
@go run tools/codegen/main.go
make fmt

Expand Down
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,11 @@

An attempt to wrap
[tulipindicators](https://github.com/TulipCharts/tulipindicators)
in go.
in go. Each indicator is wrapped in its auto-generated source file
under `indicators/`, with matching inputs, options, and outputs as
its underlying C function.

As go does not support `go get` with `git submodule`, the repository
include a checked out version `tulipindicators` source files.
The included files are from commit
[cffa15e](https://github.com/TulipCharts/tulipindicators/commit/cffa15e389b7a0c472588f22fa326a78bd734391).
17 changes: 9 additions & 8 deletions indicators/abs.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
// abs
// Vector Absolute Value
package indicators

//#include "../tulipindicators/indicators/abs.c"
import "C"
import "fmt"

func ABS(input1 []float64) (output1 []float64, err error) {
input_length := len(input1)
// ABS function wraps `abs' function that provides "Vector Absolute Value"
//
// Reference: https://tulipindicators.org/abs
func ABS(real []float64) (abs []float64, err error) {
input_length := len(real)
options := []float64{0}
start := 0

all_input_data := NewIndicatorData(input_length, 1)
all_input_data.Set([][]float64{input1})
all_input_data := newIndicatorData(input_length, 1)
all_input_data.Set([][]float64{real})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_abs(
(C.int)(input_length),
Expand All @@ -33,6 +34,6 @@ func ABS(input1 []float64) (output1 []float64, err error) {
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
abs = outputs[0]
return
}
17 changes: 9 additions & 8 deletions indicators/acos.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
// acos
// Vector Arccosine
package indicators

//#include "../tulipindicators/indicators/acos.c"
import "C"
import "fmt"

func ACOS(input1 []float64) (output1 []float64, err error) {
input_length := len(input1)
// ACOS function wraps `acos' function that provides "Vector Arccosine"
//
// Reference: https://tulipindicators.org/acos
func ACOS(real []float64) (acos []float64, err error) {
input_length := len(real)
options := []float64{0}
start := 0

all_input_data := NewIndicatorData(input_length, 1)
all_input_data.Set([][]float64{input1})
all_input_data := newIndicatorData(input_length, 1)
all_input_data.Set([][]float64{real})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_acos(
(C.int)(input_length),
Expand All @@ -33,6 +34,6 @@ func ACOS(input1 []float64) (output1 []float64, err error) {
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
acos = outputs[0]
return
}
17 changes: 9 additions & 8 deletions indicators/ad.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
// ad
// Accumulation/Distribution Line
package indicators

//#include "../tulipindicators/indicators/ad.c"
import "C"
import "fmt"

func AD(input1, input2, input3, input4 []float64) (output1 []float64, err error) {
input_length := len(input1)
// AD function wraps `ad' function that provides "Accumulation/Distribution Line"
//
// Reference: https://tulipindicators.org/ad
func AD(high, low, close, volume []float64) (ad []float64, err error) {
input_length := len(high)
options := []float64{0}
start := 0

all_input_data := NewIndicatorData(input_length, 4)
all_input_data.Set([][]float64{input1, input2, input3, input4})
all_input_data := newIndicatorData(input_length, 4)
all_input_data.Set([][]float64{high, low, close, volume})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_ad(
(C.int)(input_length),
Expand All @@ -33,6 +34,6 @@ func AD(input1, input2, input3, input4 []float64) (output1 []float64, err error)
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
ad = outputs[0]
return
}
17 changes: 9 additions & 8 deletions indicators/add.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
// add
// Vector Addition
package indicators

//#include "../tulipindicators/indicators/add.c"
import "C"
import "fmt"

func ADD(input1, input2 []float64) (output1 []float64, err error) {
input_length := len(input1)
// ADD function wraps `add' function that provides "Vector Addition"
//
// Reference: https://tulipindicators.org/add
func ADD(real1, real2 []float64) (add []float64, err error) {
input_length := len(real1)
options := []float64{0}
start := 0

all_input_data := NewIndicatorData(input_length, 2)
all_input_data.Set([][]float64{input1, input2})
all_input_data := newIndicatorData(input_length, 2)
all_input_data.Set([][]float64{real1, real2})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_add(
(C.int)(input_length),
Expand All @@ -33,6 +34,6 @@ func ADD(input1, input2 []float64) (output1 []float64, err error) {
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
add = outputs[0]
return
}
19 changes: 10 additions & 9 deletions indicators/adosc.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
// adosc
// Accumulation/Distribution Oscillator
package indicators

//#include "../tulipindicators/indicators/adosc.c"
import "C"
import "fmt"

func ADOSC(input1, input2, input3, input4 []float64, options1, options2 int) (output1 []float64, err error) {
input_length := len(input1)
options := []float64{float64(options1), float64(options2)}
// ADOSC function wraps `adosc' function that provides "Accumulation/Distribution Oscillator"
//
// Reference: https://tulipindicators.org/adosc
func ADOSC(high, low, close, volume []float64, short_period, long_period int) (adosc []float64, err error) {
input_length := len(high)
options := []float64{float64(short_period), float64(long_period)}
option_input := (*C.double)(&options[0])
start, err := C.ti_adosc_start(option_input)
if err != nil {
return
}

all_input_data := NewIndicatorData(input_length, 4)
all_input_data.Set([][]float64{input1, input2, input3, input4})
all_input_data := newIndicatorData(input_length, 4)
all_input_data.Set([][]float64{high, low, close, volume})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_adosc(
(C.int)(input_length),
Expand All @@ -37,6 +38,6 @@ func ADOSC(input1, input2, input3, input4 []float64, options1, options2 int) (ou
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
adosc = outputs[0]
return
}
19 changes: 10 additions & 9 deletions indicators/adx.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
// adx
// Average Directional Movement Index
package indicators

//#include "../tulipindicators/indicators/adx.c"
import "C"
import "fmt"

func ADX(input1, input2, input3 []float64, options1 int) (output1 []float64, err error) {
input_length := len(input1)
options := []float64{float64(options1)}
// ADX function wraps `adx' function that provides "Average Directional Movement Index"
//
// Reference: https://tulipindicators.org/adx
func ADX(high, low, close []float64, period int) (dx []float64, err error) {
input_length := len(high)
options := []float64{float64(period)}
option_input := (*C.double)(&options[0])
start, err := C.ti_adx_start(option_input)
if err != nil {
return
}

all_input_data := NewIndicatorData(input_length, 3)
all_input_data.Set([][]float64{input1, input2, input3})
all_input_data := newIndicatorData(input_length, 3)
all_input_data.Set([][]float64{high, low, close})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_adx(
(C.int)(input_length),
Expand All @@ -37,6 +38,6 @@ func ADX(input1, input2, input3 []float64, options1 int) (output1 []float64, err
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
dx = outputs[0]
return
}
19 changes: 10 additions & 9 deletions indicators/adxr.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
// adxr
// Average Directional Movement Rating
package indicators

//#include "../tulipindicators/indicators/adxr.c"
import "C"
import "fmt"

func ADXR(input1, input2, input3 []float64, options1 int) (output1 []float64, err error) {
input_length := len(input1)
options := []float64{float64(options1)}
// ADXR function wraps `adxr' function that provides "Average Directional Movement Rating"
//
// Reference: https://tulipindicators.org/adxr
func ADXR(high, low, close []float64, period int) (dx []float64, err error) {
input_length := len(high)
options := []float64{float64(period)}
option_input := (*C.double)(&options[0])
start, err := C.ti_adxr_start(option_input)
if err != nil {
return
}

all_input_data := NewIndicatorData(input_length, 3)
all_input_data.Set([][]float64{input1, input2, input3})
all_input_data := newIndicatorData(input_length, 3)
all_input_data.Set([][]float64{high, low, close})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_adxr(
(C.int)(input_length),
Expand All @@ -37,6 +38,6 @@ func ADXR(input1, input2, input3 []float64, options1 int) (output1 []float64, er
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
dx = outputs[0]
return
}
17 changes: 9 additions & 8 deletions indicators/ao.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
// ao
// Awesome Oscillator
package indicators

//#include "../tulipindicators/indicators/ao.c"
import "C"
import "fmt"

func AO(input1, input2 []float64) (output1 []float64, err error) {
input_length := len(input1)
// AO function wraps `ao' function that provides "Awesome Oscillator"
//
// Reference: https://tulipindicators.org/ao
func AO(high, low []float64) (ao []float64, err error) {
input_length := len(high)
options := []float64{0}
start := 0

all_input_data := NewIndicatorData(input_length, 2)
all_input_data.Set([][]float64{input1, input2})
all_input_data := newIndicatorData(input_length, 2)
all_input_data.Set([][]float64{high, low})
defer all_input_data.Destroy()

output_length := input_length - int(start)
all_output_data := NewIndicatorData(output_length, 1)
all_output_data := newIndicatorData(output_length, 1)
defer all_output_data.Destroy()
ret, err := C.ti_ao(
(C.int)(input_length),
Expand All @@ -33,6 +34,6 @@ func AO(input1, input2 []float64) (output1 []float64, err error) {
return
}
outputs := all_output_data.Get()
output1 = outputs[0]
ao = outputs[0]
return
}
Loading

0 comments on commit aca2b04

Please sign in to comment.