sthewissen / Mynt

An Azure Functions-based crypto currency trading bot; featuring 10 exchanges, 25 indicators, custom strategy support, backtester and more
BSD 3-Clause "New" or "Revised" License
237 stars 129 forks source link

Exception thrown when placing an order #74

Closed mehtadone closed 6 years ago

mehtadone commented 6 years ago

I'm getting this exception thrown when an order is about to be placed. Any thoughts? I am assuming user error but my AmountToInvestPerTrader is 0.02

2018-05-26T08:19:43.164 [Error] ExchangeSharp.APIException : {"code":-1100,"msg":"Illegal characters found in parameter 'quantity'; legal range is '^([0-9]{1,20})(\\.[0-9]{1,20})?$'."}
   at ExchangeSharp.BaseAPI.MakeRequest(String url,String baseUrl,Dictionary`2 payload,String method)
   at ExchangeSharp.ExchangeBinanceAPI.PlaceOrder(ExchangeOrderRequest order)
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Mynt.Core.Exchanges.BaseExchange.Buy(String market,Decimal quantity,Decimal rate)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Mynt.Core.TradeManagers.LiveTradeManager.CreateBuyOrder(Trader freeTrader,String pair,Candle signalCandle)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Mynt.Core.TradeManagers.LiveTradeManager.CreateNewTrade(Trader freeTrader,TradeSignal signal)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Mynt.Core.TradeManagers.LiveTradeManager.LookForNewTrades()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Mynt.Functions.BuyTimer.Run(TimerInfo buyTimer,TraceWriter log)
sthewissen commented 6 years ago

This problem may be related to something culture related where the decimal separator is a comma which may cause ExchangeSharp to not be able to accurately create a request?

mehtadone commented 6 years ago

Maybe. This is running on Azure functions and I can't seem to find a culture setting. I'll keep digging and if I figure it out, will update on here for future reference.

mehtadone commented 6 years ago

I think there is something wrong in the ExchangeSharp library. I updated to the latest version and forced culture in code to US. I get another error on GetOrder, with a similar error message. I logged the orderid just before the error:

2018-05-28T10:44:55.144 [Info] 2018-05-28 10:44:55.144 +00:00 [Information] GetOrder(13561326, CMTBTC)
2018-05-28T10:44:55.220 [Info] 2018-05-28 10:44:55.220 +00:00 [Information] CancelOrder(13561326, CMTBTC)
2018-05-28T10:44:55.470 [Error] 2018-05-28 10:44:55.299 +00:00 [Error] Error on BuyTimer
ExchangeSharp.APIException: {"code":-1100,"msg":"Illegal characters found in parameter 'orderId'; legal range is '^[0-9]{1,20}$'."}
   at ExchangeSharp.APIRequestMaker.<MakeRequestAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

You can see the orderID is valid, but it feels like the library may be converted to scientific notation.

mehtadone commented 6 years ago

Think this is all related to exchangesharp. Closing on here as its not really Mynt issue per say