BCH Liquid Error #75

Closed
opened 2019-04-17 00:26:15 -07:00 by sanitariu · 3 comments
sanitariu commented 2019-04-17 00:26:15 -07:00 (Migrated from github.com)

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}"

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}"
scionaltera commented 2019-04-17 09:43:44 -07:00 (Migrated from github.com)

This is a duplicate of #51 . I'm trying to work out a good way to solve this problem but it's tricky.

This is a duplicate of #51 . I'm trying to work out a good way to solve this problem but it's tricky.
yoheioka commented 2019-08-06 01:38:05 -07:00 (Migrated from github.com)

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

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
scionaltera commented 2019-08-07 00:40:16 -07:00 (Migrated from github.com)

@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.

@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.
Commenting is not possible because the repository is archived.
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
scion/arbitrader#75
No description provided.