mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-29 15:10:37 +00:00
Feature: Implement funding rates, futures and coin margin (exchange API coverage) (#530)
* ALMOST THERE * more api wips * more api thingz * testing n more api wipz * more apiz * more wips * what is goin on * more wips * whip n testing * testing * testing no keys * remove log * kraken is broken ugh * still broken * fixing auth funcs + usdtm api docs * wip * api stuffs * whip * more wips * whip * more wip * api wip n testing * wip * wip * unsaved * wip n testing * wip * wip * wip * wip * wip * wip * wip * wip * wip * whip * wrapper authenticated functions * adding asset type and fixing dependencies * wip * binance auth wrapper start * wrapper functionality * wip * wip * wip * wrapper cancel functions * order submission for wrappers * wip * more error fixing and nits * websocket beginning n error fix * wip * WOW * glorious n shazzy nits * useless nits * wip * fixing things * merge stuffs * crapveyor * crapveyor rebuild * probably broke more things than he fixed * rm lns n other thangs * hope * please * stop it * done * ofcourse * rm vb * fix lbank * appveyor please * float lev * DONT ASK RYAN FOR HELP EVER * wip * wip * endpoint upgrades continued * path upgrade * NeeeNeeeNeeeNeeeNING * fix stuffs * fixing time issue * fixing broken funcs * glorious nits * shaz changes * fixing errors for fundmon * more error fixing for fundmon * test running past 30s * basic changes * THX AGAIN SHAZBERT * path system upgrade * config upgrade * unsaved stuffs * broken wip config upgrade * path system upgrade contd. * path system upgrade contd * path upgrade ready for review * testing verbose removed * linter stuffs * appveyor stuffs * appveyor stuff * fixed? * bugfix * wip * broken stuff * fix test * wierd hack fix * appveyor pls stop * error found * more useless nits * bitmex err * broken wip * broken wip path upgrade change to uint32 * changed url lookups to uint * WOW * ready4review * config fixed HOPEFULLY * config fix and glorious changes * efficient way of getting orders and open orders * binance wrapper logic fixing * testing, adding tests and fixing lot of errrrrs * merge master * appveyor stuffs * appveyor stuffs * fmt * test * octalLiteral issue fix? * octalLiteral fix? * rm vb * prnt ln to restart * adding testz * test fixzzz * READY FOR REVIEW * Actually ready now * FORMATTING * addressing shazzy n glorious nits * crapveyor * rm vb * small change * fixing err * shazbert nits * review changes * requested changes * more requested changes * noo * last nit fixes * restart appveyor * improving test cov * Update .golangci.yml * shazbert changes * moving pair formatting * format pair update wip * path upgrade complete * error fix * appveyor linters * more linters * remove testexch * more formatting changes * changes * shazbert changes * checking older requested changes to ensure completion * wip * fixing broken code * error fix * all fixed * additional changes * more changes * remove commented code * ftx margin api * appveyor fixes * more appveyor issues + test addition * more appveyor issues + test addition * remove unnecessary * testing * testing, fixing okex api, error fix * git merge fix * go sum * glorious changes and error fix * rm vb * more glorious changes and go mod tidy * fixed now * okex testing upgrade * old config migration and batch fetching fix * added test * glorious requested changes WIP * tested and fixed * go fmted * go fmt and test fix * additional funcs and tests for fundingRates * OKEX tested and fixed * appveyor fixes * ineff assign * 1 glorious change * error fix * typo * shazbert changes * glorious code changes and path fixing huobi WIP * adding assetType to accountinfo functions * fixing panic * panic fix and updating account info wrappers WIP * updateaccountinfo updated * testing WIP binance USDT n Coin Margined and Kraken Futures * auth functions tested and fixed * added test * config reverted * shazbert and glorious changes * shazbert and glorious changes * latest changes and portfolio update * go fmt change: * remove commented codes * improved error checking * index out of range fix * rm ln * critical nit * glorious latest changes * appveyor changes * shazbert change * easier readability * latest glorious changes * shadow dec * assetstore updated * last change * another last change * merge changes * go mod tidy * thrasher requested changes wip * improving struct layouts * appveyor go fmt * remove unnecessary code * shazbert changes * small change * oopsie * tidy * configtest reverted * error fix * oopsie * for what * test patch fix * insecurities * fixing tests * fix config
This commit is contained in:
@@ -506,6 +506,9 @@ var stringsToOrderType = []struct {
|
||||
{"any", AnyType, nil},
|
||||
{"ANY", AnyType, nil},
|
||||
{"aNy", AnyType, nil},
|
||||
{"trigger", Trigger, nil},
|
||||
{"TRIGGER", Trigger, nil},
|
||||
{"tRiGgEr", Trigger, nil},
|
||||
{"woahMan", UnknownType, errors.New("woahMan not recognised as order type")},
|
||||
}
|
||||
|
||||
@@ -595,7 +598,7 @@ func TestUpdateOrderFromModify(t *testing.T) {
|
||||
HiddenOrder: false,
|
||||
FillOrKill: false,
|
||||
PostOnly: false,
|
||||
Leverage: "",
|
||||
Leverage: 0,
|
||||
Price: 0,
|
||||
Amount: 0,
|
||||
LimitPriceUpper: 0,
|
||||
@@ -631,7 +634,7 @@ func TestUpdateOrderFromModify(t *testing.T) {
|
||||
HiddenOrder: true,
|
||||
FillOrKill: true,
|
||||
PostOnly: true,
|
||||
Leverage: "1",
|
||||
Leverage: 1.0,
|
||||
Price: 1,
|
||||
Amount: 1,
|
||||
LimitPriceUpper: 1,
|
||||
@@ -672,7 +675,7 @@ func TestUpdateOrderFromModify(t *testing.T) {
|
||||
if !od.PostOnly {
|
||||
t.Error("Failed to update")
|
||||
}
|
||||
if od.Leverage != "1" {
|
||||
if od.Leverage != 1 {
|
||||
t.Error("Failed to update")
|
||||
}
|
||||
if od.Price != 1 {
|
||||
@@ -787,7 +790,7 @@ func TestUpdateOrderFromDetail(t *testing.T) {
|
||||
HiddenOrder: false,
|
||||
FillOrKill: false,
|
||||
PostOnly: false,
|
||||
Leverage: "",
|
||||
Leverage: 0,
|
||||
Price: 0,
|
||||
Amount: 0,
|
||||
LimitPriceUpper: 0,
|
||||
@@ -823,7 +826,7 @@ func TestUpdateOrderFromDetail(t *testing.T) {
|
||||
HiddenOrder: true,
|
||||
FillOrKill: true,
|
||||
PostOnly: true,
|
||||
Leverage: "1",
|
||||
Leverage: 1,
|
||||
Price: 1,
|
||||
Amount: 1,
|
||||
LimitPriceUpper: 1,
|
||||
@@ -864,7 +867,7 @@ func TestUpdateOrderFromDetail(t *testing.T) {
|
||||
if !od.PostOnly {
|
||||
t.Error("Failed to update")
|
||||
}
|
||||
if od.Leverage != "1" {
|
||||
if od.Leverage != 1 {
|
||||
t.Error("Failed to update")
|
||||
}
|
||||
if od.Price != 1 {
|
||||
@@ -1024,8 +1027,8 @@ func TestValidationOnOrderTypes(t *testing.T) {
|
||||
}
|
||||
|
||||
getOrders = new(GetOrdersRequest)
|
||||
if getOrders.Validate() != nil {
|
||||
t.Fatal("should not error")
|
||||
if getOrders.Validate() == nil {
|
||||
t.Fatal("should error since assetType hasn't been provided")
|
||||
}
|
||||
|
||||
if getOrders.Validate(validate.Check(func() error {
|
||||
@@ -1036,8 +1039,8 @@ func TestValidationOnOrderTypes(t *testing.T) {
|
||||
|
||||
if getOrders.Validate(validate.Check(func() error {
|
||||
return nil
|
||||
})) != nil {
|
||||
t.Fatal("unexpected error")
|
||||
})) == nil {
|
||||
t.Fatal("should output an error since assetType isn't provided")
|
||||
}
|
||||
|
||||
var modifyOrder *Modify
|
||||
|
||||
@@ -32,9 +32,11 @@ type Submit struct {
|
||||
HiddenOrder bool
|
||||
FillOrKill bool
|
||||
PostOnly bool
|
||||
Leverage string
|
||||
ReduceOnly bool
|
||||
Leverage float64
|
||||
Price float64
|
||||
Amount float64
|
||||
StopPrice float64
|
||||
LimitPriceUpper float64
|
||||
LimitPriceLower float64
|
||||
TriggerPrice float64
|
||||
@@ -49,6 +51,7 @@ type Submit struct {
|
||||
ClientID string
|
||||
ClientOrderID string
|
||||
WalletAddress string
|
||||
Offset string
|
||||
Type Type
|
||||
Side Side
|
||||
Status Status
|
||||
@@ -79,7 +82,7 @@ type Modify struct {
|
||||
HiddenOrder bool
|
||||
FillOrKill bool
|
||||
PostOnly bool
|
||||
Leverage string
|
||||
Leverage float64
|
||||
Price float64
|
||||
Amount float64
|
||||
LimitPriceUpper float64
|
||||
@@ -119,7 +122,7 @@ type Detail struct {
|
||||
HiddenOrder bool
|
||||
FillOrKill bool
|
||||
PostOnly bool
|
||||
Leverage string
|
||||
Leverage float64
|
||||
Price float64
|
||||
Amount float64
|
||||
LimitPriceUpper float64
|
||||
@@ -167,6 +170,7 @@ type Cancel struct {
|
||||
AssetType asset.Item
|
||||
Date time.Time
|
||||
Pair currency.Pair
|
||||
Symbol string
|
||||
Trades []TradeHistory
|
||||
}
|
||||
|
||||
@@ -208,7 +212,7 @@ type GetOrdersRequest struct {
|
||||
OrderID string
|
||||
// Currencies Empty array = all currencies. Some endpoints only support
|
||||
// singular currency enquiries
|
||||
Pairs []currency.Pair
|
||||
Pairs currency.Pairs
|
||||
AssetType asset.Item
|
||||
}
|
||||
|
||||
@@ -232,6 +236,7 @@ const (
|
||||
Hidden Status = "HIDDEN"
|
||||
UnknownStatus Status = "UNKNOWN"
|
||||
Open Status = "OPEN"
|
||||
AutoDeleverage Status = "ADL"
|
||||
Closed Status = "CLOSED"
|
||||
)
|
||||
|
||||
@@ -247,10 +252,15 @@ const (
|
||||
ImmediateOrCancel Type = "IMMEDIATE_OR_CANCEL"
|
||||
Stop Type = "STOP"
|
||||
StopLimit Type = "STOP LIMIT"
|
||||
StopMarket Type = "STOP MARKET"
|
||||
TakeProfit Type = "TAKE PROFIT"
|
||||
TakeProfitMarket Type = "TAKE PROFIT MARKET"
|
||||
TrailingStop Type = "TRAILING_STOP"
|
||||
FillOrKill Type = "FOK"
|
||||
IOS Type = "IOS"
|
||||
UnknownType Type = "UNKNOWN"
|
||||
Liquidation Type = "LIQUIDATION"
|
||||
Trigger Type = "TRIGGER"
|
||||
)
|
||||
|
||||
// Side enforces a standard for order sides across the code base
|
||||
|
||||
@@ -120,7 +120,7 @@ func (d *Detail) UpdateOrderFromDetail(m *Detail) {
|
||||
d.Pair = m.Pair
|
||||
updated = true
|
||||
}
|
||||
if m.Leverage != "" && m.Leverage != d.Leverage {
|
||||
if m.Leverage != 0 && m.Leverage != d.Leverage {
|
||||
d.Leverage = m.Leverage
|
||||
updated = true
|
||||
}
|
||||
@@ -269,7 +269,7 @@ func (d *Detail) UpdateOrderFromModify(m *Modify) {
|
||||
d.Pair = m.Pair
|
||||
updated = true
|
||||
}
|
||||
if m.Leverage != "" && m.Leverage != d.Leverage {
|
||||
if m.Leverage != 0 && m.Leverage != d.Leverage {
|
||||
d.Leverage = m.Leverage
|
||||
updated = true
|
||||
}
|
||||
@@ -633,6 +633,8 @@ func StringToOrderType(oType string) (Type, error) {
|
||||
return PostOnly, nil
|
||||
case strings.EqualFold(oType, AnyType.String()):
|
||||
return AnyType, nil
|
||||
case strings.EqualFold(oType, Trigger.String()):
|
||||
return Trigger, nil
|
||||
default:
|
||||
return UnknownType, errors.New(oType + " not recognised as order type")
|
||||
}
|
||||
@@ -743,6 +745,9 @@ func (g *GetOrdersRequest) Validate(opt ...validate.Checker) error {
|
||||
if g == nil {
|
||||
return ErrGetOrdersRequestIsNil
|
||||
}
|
||||
if !g.AssetType.IsValid() {
|
||||
return fmt.Errorf("assetType %v not supported", g.AssetType)
|
||||
}
|
||||
var errs common.Errors
|
||||
for _, o := range opt {
|
||||
err := o.Check()
|
||||
|
||||
Reference in New Issue
Block a user