-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathinsider_trading.go
More file actions
134 lines (106 loc) · 3.25 KB
/
insider_trading.go
File metadata and controls
134 lines (106 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package fmpcloud
import (
"fmt"
"strings"
jsoniter "github.com/json-iterator/go"
"github.com/spacecodewor/fmpcloud-go/objects"
)
// Url const for request
const (
urlAPIInsiderTrading = "/v4/insider-trading"
urlAPIInsiderTradingTransactionType = "/v4/insider-trading-transaction-type"
urlAPIInsiderTradingRSSFeed = "/v4/insider-trading-rss-feed"
urlAPIInsiderTradingMapperCikName = "/v4/mapper-cik-name"
urlAPIInsiderTradingMapperCikCompany = "/v4/mapper-cik-company/%s"
)
// InsiderTrading client
type InsiderTrading struct {
Client *HTTPClient
}
// The federal securities laws require certain individuals
// (such as officers, directors, and those that hold more than 10% of any class of a company’s securities, together we’ll call, “insiders”)
// to report purchases, sales, and holdings of their company’s securities by filing Forms 3, 4, and 5.
// List - Stock insider trading list
func (i *InsiderTrading) List(req objects.RequestInsiderTrading) (iList []objects.InsiderTrading, err error) {
if req.Limit == 0 {
req.Limit = 100
}
reqData := map[string]string{"limit": fmt.Sprint(req.Limit)}
if len(req.Symbol) != 0 {
reqData["symbol"] = req.Symbol
}
if len(req.CompanyCik) != 0 {
reqData["companyCik"] = req.CompanyCik
}
if len(req.ReportingCik) != 0 {
reqData["reportingCik"] = req.ReportingCik
}
if len(req.TransactionType) != 0 {
reqData["transactionType"] = strings.Join(req.TransactionType, ",")
}
reqData["page"] = fmt.Sprint(req.Page)
data, err := i.Client.Get(urlAPIInsiderTrading, reqData)
if err != nil {
return nil, err
}
err = jsoniter.Unmarshal(data.Body(), &iList)
if err != nil {
return nil, err
}
return iList, nil
}
// RSSFeed - RSS Feed of form 3,4 and 5
func (i *InsiderTrading) RSSFeed(limit int64) (iList []objects.InsiderTradingRSSFeed, err error) {
if limit == 0 {
limit = 100
}
data, err := i.Client.Get(urlAPIInsiderTradingRSSFeed, map[string]string{"limit": fmt.Sprint(limit)})
if err != nil {
return nil, err
}
err = jsoniter.Unmarshal(data.Body(), &iList)
if err != nil {
return nil, err
}
return iList, nil
}
// TransactionType - list
func (i *InsiderTrading) TransactionType() (tList []string, err error) {
data, err := i.Client.Get(urlAPIInsiderTradingTransactionType, nil)
if err != nil {
return nil, err
}
err = jsoniter.Unmarshal(data.Body(), &tList)
if err != nil {
return nil, err
}
return tList, nil
}
// MapperCikCompany - Company CIK mapper
func (i *InsiderTrading) MapperCikCompany(symbol string) (iList []objects.InsiderTradingMapperCikCompany, err error) {
data, err := i.Client.Get(fmt.Sprintf(urlAPIInsiderTradingMapperCikCompany, symbol), nil)
if err != nil {
return nil, err
}
err = jsoniter.Unmarshal(data.Body(), &iList)
if err != nil {
return nil, err
}
return iList, nil
}
// MapperCikName - List with names and their CIK
func (i *InsiderTrading) MapperCikName(name *string) (iList []objects.InsiderTradingMapperCikName, err error) {
reqData := map[string]string{}
if name != nil {
reqData["name"] = *name
}
data, err := i.Client.Get(urlAPIInsiderTradingMapperCikName, reqData)
if err != nil {
return nil, err
}
err = jsoniter.Unmarshal(data.Body(), &iList)
if err != nil {
return nil, err
}
return iList, nil
}