Map exchange wrapper function "SubmitExchangeOrder" to exchange implementations (#211)

* Sets up Alphapoint and ANX wrappers to use exchange implementations of submit orders
Creates const types for orderType and orderSides

* Changes wrapper func SubmitExchangeOrder return type to string to account for GUID order ID responses

* Adds binance and bitfinex new order wrapper support. Fixes alphapoint order wrapper.

* Adds bitflyer type for exchange order. Adds bithumb and bitmex wrapper support for SubmitExchangeOrder

* Fixes bitmex typo. Adds bitstamp, bittrex, coinbasePro, coinut SubmitExchangeOrder wrapper support

* Maps exchange wrapper function 'SubmitExchangeOrder' to exchange methods for exmo, gateio, gemini, hitbtc, huobi, huobihadax and itbit

* Maps exchange wrapper function 'SubmitExchangeOrder' to exchange methods for kraken, lakebtc, liqui, okcoin, okex, poloniex, wex, yobit and zb

* Updates interface, fixes wrapper type mismatch and fixes tests from changed parameters

* Adds generic support for SubmitExchangeOrder for localbitcoins_wrapper

* Updates wrappers tests and submit order implementations for anx, binance, bitfinex, bitflyer (cannot test), bitmex, bitstamp

* Fixes bitstamp tests

* Adds tests for submitting orders with bittrex, btcmarkets, coinbasepro and coinut

* Adds tests for exmo, gatio, gemini and hitbtc
Makes adjustments where necessary

* Adds tests and updates order implementations for huobi, huobiHadax, itbit, kraken, lakebtc, liqui, okcoin, okex, poloniex, wex, yobit and zb. Not all have been verified due to exchange issues

* Fixes variable names and symbol usages

* Fixes HitBTC order API implementation

* Removes formatting code. Adds error handling for unsupported order types. Fixes typo

* Fixes missed replace for new ToString function. Removes unused functions

* Changes report of unknown withdrawal type with bitshift approximation.
Improved code cov

* Updates wrapper SubmitExchangeOrder return to use a fancy new SubmitOrderResponse struct type to clarify if an order submission is successful or not
This commit is contained in:
Scott
2018-11-22 17:28:29 +11:00
committed by Adrian Gallagher
parent a78f3c21a5
commit c41f611d96
74 changed files with 1663 additions and 251 deletions

View File

@@ -1,15 +1,18 @@
package exmo
import (
"fmt"
"testing"
"github.com/thrasher-/gocryptotrader/currency/pair"
"github.com/thrasher-/gocryptotrader/currency/symbol"
exchange "github.com/thrasher-/gocryptotrader/exchanges"
)
const (
APIKey = ""
APISecret = ""
APIKey = ""
APISecret = ""
canPlaceOrders = false
)
var (
@@ -245,3 +248,26 @@ func TestFormatWithdrawPermissions(t *testing.T) {
t.Errorf("Expected: %s, Recieved: %s", expectedResult, withdrawPermissions)
}
}
// This will really really use the API to place an order
// If you're going to test this, make sure you're willing to place real orders on the exchange
func TestSubmitOrder(t *testing.T) {
e.SetDefaults()
TestSetup(t)
e.Verbose = true
if e.APISecret == "" ||
e.APISecret == "Secret" ||
!canPlaceOrders {
t.Skip(fmt.Sprintf("ApiKey: %s. Can place orders: %v", e.APIKey, canPlaceOrders))
}
var p = pair.CurrencyPair{
Delimiter: "_",
FirstCurrency: symbol.BTC,
SecondCurrency: symbol.USD,
}
response, err := e.SubmitExchangeOrder(p, exchange.Buy, exchange.Market, 1, 10, "1234234")
if err != nil || !response.IsOrderPlaced {
t.Errorf("Order failed to be placed: %v", err)
}
}

View File

@@ -2,6 +2,7 @@ package exmo
import (
"errors"
"fmt"
"log"
"strconv"
"sync"
@@ -176,8 +177,32 @@ func (e *EXMO) GetExchangeHistory(p pair.CurrencyPair, assetType string) ([]exch
}
// SubmitExchangeOrder submits a new order
func (e *EXMO) SubmitExchangeOrder(p pair.CurrencyPair, side exchange.OrderSide, orderType exchange.OrderType, amount, price float64, clientID string) (int64, error) {
return 0, errors.New("not yet implemented")
func (e *EXMO) SubmitExchangeOrder(p pair.CurrencyPair, side exchange.OrderSide, orderType exchange.OrderType, amount, price float64, clientID string) (exchange.SubmitOrderResponse, error) {
var submitOrderResponse exchange.SubmitOrderResponse
var oT string
if orderType == exchange.Limit {
return submitOrderResponse, errors.New("Unsupported order type")
} else if orderType == exchange.Market {
if side == exchange.Buy {
oT = "market_buy"
} else {
oT = "market_sell"
}
} else {
return submitOrderResponse, errors.New("Unsupported order type")
}
response, err := e.CreateOrder(p.Pair().String(), oT, price, amount)
if response > 0 {
submitOrderResponse.OrderID = fmt.Sprintf("%v", response)
}
if err == nil {
submitOrderResponse.IsOrderPlaced = true
}
return submitOrderResponse, err
}
// ModifyExchangeOrder will allow of changing orderbook placement and limit to