BCH Liquid Error #75
Labels
No labels
blocked
breaking
bug
dependencies
duplicate
enhancement
good first issue
help wanted
question
tech debt
testing
wontfix
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set.
Reference
scion/arbitrader#75
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
I catch this bug:
arbitrader_1 | 2019-04-17 00:00:00.752 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Summary: [Long/Short Exchanges] [Pair] [Current Spread] -> [Entry Spread Target]
arbitrader_1 | 2019-04-17 00:00:00.898 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Quoine/Kraken BTC/USD 0.00001 -> 0.0071
arbitrader_1 | 2019-04-17 00:12:14.742 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : ***** ENTRY *****
arbitrader_1 | 2019-04-17 00:12:16.232 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Updated account balances: Quoine $100.02 + Kraken $43.31 = $143.33
arbitrader_1 | 2019-04-17 00:12:16.380 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Entry spread: 0.007233
arbitrader_1 | 2019-04-17 00:12:16.526 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Exit spread target: -0.004967
arbitrader_1 | 2019-04-17 00:12:16.674 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Long entry: Quoine BCH/USD 0.09119497 @ 318.00000 (0.00000 slip) = $29.0000004600000
arbitrader_1 | 2019-04-17 00:12:16.820 INFO 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Short entry: Kraken BCH/USD 0.09054012 @ 320.300000 (0.000000 slip) = $29.00000043600000
arbitrader_1 | 2019-04-17 00:12:17.496 ERROR 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Exchange returned an error executing trade!
arbitrader_1 |
arbitrader_1 | org.knowm.xchange.exceptions.ExchangeException: {"errors":{"order":["product_disabled"]}}
arbitrader_1 | at org.knowm.xchange.quoine.service.QuoineBaseService.handleHttpError(QuoineBaseService.java:51)
arbitrader_1 | at org.knowm.xchange.quoine.service.QuoineTradeServiceRaw.placeLimitOrder(QuoineTradeServiceRaw.java:71)
arbitrader_1 | at org.knowm.xchange.quoine.service.QuoineTradeService.placeLimitOrder(QuoineTradeService.java:64)
arbitrader_1 | at com.r307.arbitrader.service.TradingService.executeOrderPair(TradingService.java:642)
arbitrader_1 | at com.r307.arbitrader.service.TradingService.lambda$null$14(TradingService.java:390)
arbitrader_1 | at java.util.ArrayList.forEach(ArrayList.java:1257)
arbitrader_1 | at com.r307.arbitrader.service.TradingService.lambda$null$15(TradingService.java:292)
arbitrader_1 | at java.util.ArrayList.forEach(ArrayList.java:1257)
arbitrader_1 | at com.r307.arbitrader.service.TradingService.lambda$tick$16(TradingService.java:284)
arbitrader_1 | at java.util.ArrayList.forEach(ArrayList.java:1257)
arbitrader_1 | at com.r307.arbitrader.service.TradingService.tick(TradingService.java:284)
arbitrader_1 | at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
arbitrader_1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
arbitrader_1 | at java.lang.reflect.Method.invoke(Method.java:498)
arbitrader_1 | at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
arbitrader_1 | at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
arbitrader_1 | at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
arbitrader_1 | at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
arbitrader_1 | at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
arbitrader_1 | at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
arbitrader_1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
arbitrader_1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
arbitrader_1 | at java.lang.Thread.run(Thread.java:748)
arbitrader_1 | Caused by: si.mazi.rescu.HttpStatusIOException: HTTP status code was not OK: 422
arbitrader_1 | at si.mazi.rescu.ResponseReader.read(ResponseReader.java:104)
arbitrader_1 | at si.mazi.rescu.RestInvocationHandler.mapInvocationResult(RestInvocationHandler.java:175)
arbitrader_1 | at si.mazi.rescu.RestInvocationHandler.receiveAndMap(RestInvocationHandler.java:163)
arbitrader_1 | at si.mazi.rescu.RestInvocationHandler.invoke(RestInvocationHandler.java:119)
arbitrader_1 | at com.sun.proxy.$Proxy47.placeOrder(Unknown Source)
arbitrader_1 | at org.knowm.xchange.quoine.service.QuoineTradeServiceRaw.placeLimitOrder(QuoineTradeServiceRaw.java:65)
arbitrader_1 | ... 21 common frames omitted
arbitrader_1 |
arbitrader_1 | 2019-04-17 00:12:17.705 WARN 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Polling exchanges took 7865 ms
arbitrader_1 | 2019-04-17 00:12:17.867 ERROR 1 --- [ scheduling-1] c.r.arbitrader.service.TradingService : Exiting immediately to avoid erroneous trades.
arbitrader_arbitrader_1 exited with code 1
I think that quoine/liquid returns "product_disabled" when some pair does not work for trading.
I am not 100% sure but if we can test this, we can check somehow if BCH is disabled before trading. On my log actually no trade happened. Both kaken / liquid does not enter trade.
Only file was created in the directory and programme exited.
"$ cat .arbitrader/arbitrader-state.json
{"longTrade":{"exchange":"Quoine","orderId":null,"volume":0.09119497,"entry":318.00000},"shortTrade":{"exchange":"Kraken","orderId":null,"volume":0.09054012,"entry":320.300000},"currencyPair":"BCH/USD","exitTarget":-0.004967}"
This is a duplicate of #51 . I'm trying to work out a good way to solve this problem but it's tricky.
just FYI, for liquid, they have a daily maintenance period where the APIs for trading returns
product_disabled.You might be able to check the time and make sure its not going under maintenance
https://help.liquid.com/en/articles/2531810-liquid-daily-scheduled-maintenance
@yoheioka It would be fairly easy to add a configuration option to just black out trading for an exchange during a period of time, although it would be very important to make sure your clock is accurate! Thanks for the suggestion.