mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-19 07:26:49 +00:00
committed by
Adrian Gallagher
parent
242b02c382
commit
63a9e9fcb1
@@ -37,12 +37,18 @@ func (a *databaseManager) Start() (err error) {
|
||||
|
||||
if Bot.Config.Database.Enabled {
|
||||
if Bot.Config.Database.Driver == database.DBPostgreSQL {
|
||||
log.Debugf(log.DatabaseMgr, "Attempting to establish database connection to host %s/%s utilising %s driver\n",
|
||||
Bot.Config.Database.Host, Bot.Config.Database.Database, Bot.Config.Database.Driver)
|
||||
log.Debugf(log.DatabaseMgr,
|
||||
"Attempting to establish database connection to host %s/%s utilising %s driver\n",
|
||||
Bot.Config.Database.Host,
|
||||
Bot.Config.Database.Database,
|
||||
Bot.Config.Database.Driver)
|
||||
dbConn, err = dbpsql.Connect()
|
||||
} else if Bot.Config.Database.Driver == database.DBSQLite || Bot.Config.Database.Driver == database.DBSQLite3 {
|
||||
log.Debugf(log.DatabaseMgr, "Attempting to establish database connection to %s utilising %s driver\n",
|
||||
Bot.Config.Database.Database, Bot.Config.Database.Driver)
|
||||
} else if Bot.Config.Database.Driver == database.DBSQLite ||
|
||||
Bot.Config.Database.Driver == database.DBSQLite3 {
|
||||
log.Debugf(log.DatabaseMgr,
|
||||
"Attempting to establish database connection to %s utilising %s driver\n",
|
||||
Bot.Config.Database.Database,
|
||||
Bot.Config.Database.Driver)
|
||||
dbConn, err = dbsqlite3.Connect()
|
||||
}
|
||||
if err != nil {
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
"github.com/thrasher-corp/gocryptotrader/common"
|
||||
"github.com/thrasher-corp/gocryptotrader/communications/base"
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
log "github.com/thrasher-corp/gocryptotrader/logger"
|
||||
)
|
||||
|
||||
@@ -18,13 +18,13 @@ var (
|
||||
ErrOrdersAlreadyExists = errors.New("order already exists")
|
||||
)
|
||||
|
||||
func (o *orderStore) Get() map[string][]exchange.OrderDetail {
|
||||
func (o *orderStore) Get() map[string][]order.Detail {
|
||||
o.m.Lock()
|
||||
defer o.m.Unlock()
|
||||
return o.Orders
|
||||
}
|
||||
|
||||
func (o *orderStore) exists(order *exchange.OrderDetail) bool {
|
||||
func (o *orderStore) exists(order *order.Detail) bool {
|
||||
r, ok := o.Orders[order.Exchange]
|
||||
if !ok {
|
||||
return false
|
||||
@@ -39,7 +39,7 @@ func (o *orderStore) exists(order *exchange.OrderDetail) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (o *orderStore) Add(order *exchange.OrderDetail) error {
|
||||
func (o *orderStore) Add(order *order.Detail) error {
|
||||
o.m.Lock()
|
||||
defer o.m.Unlock()
|
||||
|
||||
@@ -65,7 +65,7 @@ func (o *orderManager) Start() error {
|
||||
log.Debugln(log.OrderBook, "Order manager starting...")
|
||||
|
||||
o.shutdown = make(chan struct{})
|
||||
o.orderStore.Orders = make(map[string][]exchange.OrderDetail)
|
||||
o.orderStore.Orders = make(map[string][]order.Detail)
|
||||
go o.run()
|
||||
return nil
|
||||
}
|
||||
@@ -100,7 +100,7 @@ func (o *orderManager) gracefulShutdown() {
|
||||
for y := range v {
|
||||
log.Debugf(log.OrderMgr, "order manager: Cancelling order ID %v [%v]",
|
||||
v[y].ID, v[y])
|
||||
err := o.Cancel(k, &exchange.OrderCancellation{
|
||||
err := o.Cancel(k, &order.Cancel{
|
||||
OrderID: v[y].ID,
|
||||
})
|
||||
if err != nil {
|
||||
@@ -149,16 +149,16 @@ func (o *orderManager) run() {
|
||||
|
||||
func (o *orderManager) CancelAllOrders() {}
|
||||
|
||||
func (o *orderManager) Cancel(exchName string, order *exchange.OrderCancellation) error {
|
||||
func (o *orderManager) Cancel(exchName string, cancel *order.Cancel) error {
|
||||
if exchName == "" {
|
||||
return errors.New("order exchange name is empty")
|
||||
}
|
||||
|
||||
if order == nil {
|
||||
if cancel == nil {
|
||||
return errors.New("order cancel param is nil")
|
||||
}
|
||||
|
||||
if order.OrderID == "" {
|
||||
if cancel.OrderID == "" {
|
||||
return errors.New("order id is empty")
|
||||
}
|
||||
|
||||
@@ -167,32 +167,28 @@ func (o *orderManager) Cancel(exchName string, order *exchange.OrderCancellation
|
||||
return errors.New("unable to get exchange by name")
|
||||
}
|
||||
|
||||
if order.AssetType.String() != "" && !exch.GetAssetTypes().Contains(order.AssetType) {
|
||||
if cancel.AssetType.String() != "" && !exch.GetAssetTypes().Contains(cancel.AssetType) {
|
||||
return errors.New("order asset type not supported by exchange")
|
||||
}
|
||||
|
||||
return exch.CancelOrder(order)
|
||||
return exch.CancelOrder(cancel)
|
||||
}
|
||||
|
||||
func (o *orderManager) Submit(exchName string, order *exchange.OrderSubmission) (*orderSubmitResponse, error) {
|
||||
func (o *orderManager) Submit(exchName string, newOrder *order.Submit) (*orderSubmitResponse, error) {
|
||||
if exchName == "" {
|
||||
return nil, errors.New("order exchange name must be specified")
|
||||
}
|
||||
|
||||
if order == nil {
|
||||
return nil, exchange.ErrOrderSubmissionIsNil
|
||||
}
|
||||
|
||||
if err := order.Validate(); err != nil {
|
||||
if err := newOrder.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if o.cfg.EnforceLimitConfig {
|
||||
if !o.cfg.AllowMarketOrders && order.OrderType == exchange.MarketOrderType {
|
||||
if !o.cfg.AllowMarketOrders && newOrder.OrderType == order.Market {
|
||||
return nil, errors.New("order market type is not allowed")
|
||||
}
|
||||
|
||||
if o.cfg.LimitAmount > 0 && order.Amount > o.cfg.LimitAmount {
|
||||
if o.cfg.LimitAmount > 0 && newOrder.Amount > o.cfg.LimitAmount {
|
||||
return nil, errors.New("order limit exceeds allowed limit")
|
||||
}
|
||||
|
||||
@@ -201,7 +197,7 @@ func (o *orderManager) Submit(exchName string, order *exchange.OrderSubmission)
|
||||
return nil, errors.New("order exchange not found in allowed list")
|
||||
}
|
||||
|
||||
if len(o.cfg.AllowedPairs) > 0 && !o.cfg.AllowedPairs.Contains(order.Pair, true) {
|
||||
if len(o.cfg.AllowedPairs) > 0 && !o.cfg.AllowedPairs.Contains(newOrder.Pair, true) {
|
||||
return nil, errors.New("order pair not found in allowed list")
|
||||
}
|
||||
}
|
||||
@@ -213,10 +209,12 @@ func (o *orderManager) Submit(exchName string, order *exchange.OrderSubmission)
|
||||
|
||||
id, err := common.GetV4UUID()
|
||||
if err != nil {
|
||||
log.Warnf(log.OrderMgr, "Order manager: Unable to generate UUID. Err: %s\n", err)
|
||||
log.Warnf(log.OrderMgr,
|
||||
"Order manager: Unable to generate UUID. Err: %s\n",
|
||||
err)
|
||||
}
|
||||
|
||||
result, err := exch.SubmitOrder(order)
|
||||
result, err := exch.SubmitOrder(newOrder)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -226,7 +224,15 @@ func (o *orderManager) Submit(exchName string, order *exchange.OrderSubmission)
|
||||
}
|
||||
|
||||
msg := fmt.Sprintf("Order manager: Exchange %s submitted order ID=%v [Ours: %v] pair=%v price=%v amount=%v side=%v type=%v.",
|
||||
exchName, result.OrderID, id.String(), order.Pair, order.Price, order.Amount, order.OrderSide, order.OrderType)
|
||||
exchName,
|
||||
result.OrderID,
|
||||
id.String(),
|
||||
newOrder.Pair,
|
||||
newOrder.Price,
|
||||
newOrder.Amount,
|
||||
newOrder.OrderSide,
|
||||
newOrder.OrderType)
|
||||
|
||||
log.Debugln(log.OrderMgr, msg)
|
||||
Bot.CommsManager.PushEvent(base.Event{
|
||||
Type: "order",
|
||||
@@ -234,7 +240,7 @@ func (o *orderManager) Submit(exchName string, order *exchange.OrderSubmission)
|
||||
})
|
||||
|
||||
return &orderSubmitResponse{
|
||||
SubmitOrderResponse: exchange.SubmitOrderResponse{
|
||||
SubmitResponse: order.SubmitResponse{
|
||||
OrderID: result.OrderID,
|
||||
},
|
||||
OurOrderID: id.String(),
|
||||
@@ -246,9 +252,9 @@ func (o *orderManager) processOrders() {
|
||||
for x := range authExchanges {
|
||||
log.Debugf(log.OrderMgr, "Order manager: Procesing orders for exchange %v.\n", authExchanges[x])
|
||||
exch := GetExchangeByName(authExchanges[x])
|
||||
req := exchange.GetOrdersRequest{
|
||||
OrderSide: exchange.AnyOrderSide,
|
||||
OrderType: exchange.AnyOrderType,
|
||||
req := order.GetOrdersRequest{
|
||||
OrderSide: order.AnySide,
|
||||
OrderType: order.AnyType,
|
||||
}
|
||||
result, err := exch.GetActiveOrders(&req)
|
||||
if err != nil {
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
)
|
||||
|
||||
type orderManagerConfig struct {
|
||||
@@ -19,7 +19,7 @@ type orderManagerConfig struct {
|
||||
|
||||
type orderStore struct {
|
||||
m sync.Mutex
|
||||
Orders map[string][]exchange.OrderDetail
|
||||
Orders map[string][]order.Detail
|
||||
}
|
||||
|
||||
type orderManager struct {
|
||||
@@ -31,6 +31,6 @@ type orderManager struct {
|
||||
}
|
||||
|
||||
type orderSubmitResponse struct {
|
||||
exchange.SubmitOrderResponse
|
||||
order.SubmitResponse
|
||||
OurOrderID string
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ import (
|
||||
"github.com/thrasher-corp/gocryptotrader/database/models/postgres"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/models/sqlite3"
|
||||
"github.com/thrasher-corp/gocryptotrader/database/repository/audit"
|
||||
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
|
||||
"github.com/thrasher-corp/gocryptotrader/gctrpc"
|
||||
@@ -621,7 +621,7 @@ func (s *RPCServer) GetOrders(ctx context.Context, r *gctrpc.GetOrdersRequest) (
|
||||
return nil, errors.New("exchange is not loaded/doesn't exist")
|
||||
}
|
||||
|
||||
resp, err := exch.GetActiveOrders(&exchange.GetOrdersRequest{})
|
||||
resp, err := exch.GetActiveOrders(&order.GetOrdersRequest{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -634,10 +634,10 @@ func (s *RPCServer) GetOrders(ctx context.Context, r *gctrpc.GetOrdersRequest) (
|
||||
BaseCurrency: resp[x].CurrencyPair.Base.String(),
|
||||
QuoteCurrency: resp[x].CurrencyPair.Quote.String(),
|
||||
AssetType: asset.Spot.String(),
|
||||
OrderType: resp[x].OrderType.ToString(),
|
||||
OrderSide: resp[x].OrderSide.ToString(),
|
||||
OrderType: resp[x].OrderType.String(),
|
||||
OrderSide: resp[x].OrderSide.String(),
|
||||
CreationTime: resp[x].OrderDate.Unix(),
|
||||
Status: resp[x].Status,
|
||||
Status: resp[x].Status.String(),
|
||||
Price: resp[x].Price,
|
||||
Amount: resp[x].Amount,
|
||||
})
|
||||
@@ -660,10 +660,10 @@ func (s *RPCServer) SubmitOrder(ctx context.Context, r *gctrpc.SubmitOrderReques
|
||||
}
|
||||
|
||||
p := currency.NewPairFromStrings(r.Pair.Base, r.Pair.Quote)
|
||||
submission := &exchange.OrderSubmission{
|
||||
submission := &order.Submit{
|
||||
Pair: p,
|
||||
OrderSide: exchange.OrderSide(r.Side),
|
||||
OrderType: exchange.OrderType(r.OrderType),
|
||||
OrderSide: order.Side(r.Side),
|
||||
OrderType: order.Type(r.OrderType),
|
||||
Amount: r.Amount,
|
||||
Price: r.Price,
|
||||
ClientID: r.ClientId,
|
||||
@@ -690,8 +690,8 @@ func (s *RPCServer) SimulateOrder(ctx context.Context, r *gctrpc.SimulateOrderRe
|
||||
}
|
||||
|
||||
var buy = true
|
||||
if !strings.EqualFold(r.Side, exchange.BuyOrderSide.ToString()) &&
|
||||
!strings.EqualFold(r.Side, exchange.BidOrderSide.ToString()) {
|
||||
if !strings.EqualFold(r.Side, order.Buy.String()) &&
|
||||
!strings.EqualFold(r.Side, order.Bid.String()) {
|
||||
buy = false
|
||||
}
|
||||
|
||||
@@ -727,8 +727,8 @@ func (s *RPCServer) WhaleBomb(ctx context.Context, r *gctrpc.WhaleBombRequest) (
|
||||
}
|
||||
|
||||
var buy = true
|
||||
if !strings.EqualFold(r.Side, exchange.BuyOrderSide.ToString()) &&
|
||||
!strings.EqualFold(r.Side, exchange.BidOrderSide.ToString()) {
|
||||
if !strings.EqualFold(r.Side, order.Buy.String()) &&
|
||||
!strings.EqualFold(r.Side, order.Bid.String()) {
|
||||
buy = false
|
||||
}
|
||||
|
||||
@@ -757,10 +757,10 @@ func (s *RPCServer) CancelOrder(ctx context.Context, r *gctrpc.CancelOrderReques
|
||||
return nil, errors.New("exchange is not loaded/doesn't exist")
|
||||
}
|
||||
|
||||
err := exch.CancelOrder(&exchange.OrderCancellation{
|
||||
err := exch.CancelOrder(&order.Cancel{
|
||||
AccountID: r.AccountId,
|
||||
OrderID: r.OrderId,
|
||||
Side: exchange.OrderSide(r.Side),
|
||||
Side: order.Side(r.Side),
|
||||
WalletAddress: r.WalletAddress,
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user