ccxt 4.4.48__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +1 -1
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bingx.py +73 -29
- ccxt/async_support/bitget.py +12 -10
- ccxt/async_support/coinsph.py +17 -8
- ccxt/async_support/deribit.py +82 -0
- ccxt/async_support/digifinex.py +125 -10
- ccxt/async_support/ellipx.py +61 -0
- ccxt/async_support/exmo.py +58 -0
- ccxt/async_support/hitbtc.py +99 -0
- ccxt/async_support/hollaex.py +73 -0
- ccxt/async_support/huobijp.py +73 -0
- ccxt/async_support/hyperliquid.py +22 -1
- ccxt/async_support/idex.py +71 -0
- ccxt/async_support/independentreserve.py +64 -0
- ccxt/async_support/indodax.py +61 -0
- ccxt/async_support/kuna.py +60 -1
- ccxt/async_support/latoken.py +64 -0
- ccxt/async_support/lbank.py +70 -0
- ccxt/async_support/luno.py +73 -0
- ccxt/async_support/lykke.py +64 -0
- ccxt/async_support/mercado.py +65 -0
- ccxt/async_support/mexc.py +1 -1
- ccxt/async_support/myokx.py +10 -0
- ccxt/async_support/ndax.py +71 -0
- ccxt/async_support/novadax.py +74 -0
- ccxt/async_support/oceanex.py +69 -0
- ccxt/async_support/okcoin.py +79 -2
- ccxt/async_support/onetrading.py +66 -0
- ccxt/async_support/oxfun.py +66 -0
- ccxt/async_support/p2b.py +63 -1
- ccxt/async_support/paradex.py +68 -0
- ccxt/base/exchange.py +1 -1
- ccxt/bingx.py +73 -29
- ccxt/bitget.py +12 -10
- ccxt/coinsph.py +17 -8
- ccxt/deribit.py +82 -0
- ccxt/digifinex.py +125 -10
- ccxt/ellipx.py +61 -0
- ccxt/exmo.py +58 -0
- ccxt/hitbtc.py +99 -0
- ccxt/hollaex.py +73 -0
- ccxt/huobijp.py +73 -0
- ccxt/hyperliquid.py +22 -1
- ccxt/idex.py +71 -0
- ccxt/independentreserve.py +64 -0
- ccxt/indodax.py +61 -0
- ccxt/kuna.py +60 -1
- ccxt/latoken.py +64 -0
- ccxt/lbank.py +70 -0
- ccxt/luno.py +73 -0
- ccxt/lykke.py +64 -0
- ccxt/mercado.py +65 -0
- ccxt/mexc.py +1 -1
- ccxt/myokx.py +10 -0
- ccxt/ndax.py +71 -0
- ccxt/novadax.py +74 -0
- ccxt/oceanex.py +69 -0
- ccxt/okcoin.py +79 -2
- ccxt/onetrading.py +66 -0
- ccxt/oxfun.py +66 -0
- ccxt/p2b.py +63 -1
- ccxt/paradex.py +68 -0
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/bitmart.py +5 -0
- {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/METADATA +4 -4
- {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/RECORD +71 -71
- {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/WHEEL +0 -0
- {ccxt-4.4.48.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/lykke.py
CHANGED
@@ -192,6 +192,70 @@ class lykke(Exchange, ImplicitAPI):
|
|
192
192
|
},
|
193
193
|
'commonCurrencies': {
|
194
194
|
},
|
195
|
+
'features': {
|
196
|
+
'spot': {
|
197
|
+
'sandbox': False,
|
198
|
+
'createOrder': {
|
199
|
+
'marginMode': False,
|
200
|
+
'triggerPrice': False,
|
201
|
+
'triggerPriceType': None,
|
202
|
+
'triggerDirection': False,
|
203
|
+
'stopLossPrice': False,
|
204
|
+
'takeProfitPrice': False,
|
205
|
+
'attachedStopLossTakeProfit': None,
|
206
|
+
'timeInForce': {
|
207
|
+
'IOC': False,
|
208
|
+
'FOK': False,
|
209
|
+
'PO': False,
|
210
|
+
'GTD': False,
|
211
|
+
},
|
212
|
+
'hedged': False,
|
213
|
+
'trailing': False,
|
214
|
+
'leverage': False,
|
215
|
+
'marketBuyByCost': False,
|
216
|
+
'marketBuyRequiresPrice': False,
|
217
|
+
'selfTradePrevention': False,
|
218
|
+
'iceberg': False,
|
219
|
+
},
|
220
|
+
'createOrders': None,
|
221
|
+
'fetchMyTrades': {
|
222
|
+
'marginMode': False,
|
223
|
+
'limit': 1000,
|
224
|
+
'daysBack': 100000, # todo
|
225
|
+
'untilDays': 100000, # todo
|
226
|
+
},
|
227
|
+
'fetchOrder': {
|
228
|
+
'marginMode': False,
|
229
|
+
'trigger': False,
|
230
|
+
'trailing': False,
|
231
|
+
},
|
232
|
+
'fetchOpenOrders': {
|
233
|
+
'marginMode': False,
|
234
|
+
'limit': 1000,
|
235
|
+
'trigger': False,
|
236
|
+
'trailing': False,
|
237
|
+
},
|
238
|
+
'fetchOrders': None,
|
239
|
+
'fetchClosedOrders': {
|
240
|
+
'marginMode': False,
|
241
|
+
'limit': 1000,
|
242
|
+
'daysBack': None,
|
243
|
+
'daysBackCanceled': None,
|
244
|
+
'untilDays': None,
|
245
|
+
'trigger': False,
|
246
|
+
'trailing': False,
|
247
|
+
},
|
248
|
+
'fetchOHLCV': None,
|
249
|
+
},
|
250
|
+
'swap': {
|
251
|
+
'linear': None,
|
252
|
+
'inverse': None,
|
253
|
+
},
|
254
|
+
'future': {
|
255
|
+
'linear': None,
|
256
|
+
'inverse': None,
|
257
|
+
},
|
258
|
+
},
|
195
259
|
})
|
196
260
|
|
197
261
|
def fetch_currencies(self, params={}) -> Currencies:
|
ccxt/mercado.py
CHANGED
@@ -162,6 +162,71 @@ class mercado(Exchange, ImplicitAPI):
|
|
162
162
|
'XRP': 0.1,
|
163
163
|
},
|
164
164
|
},
|
165
|
+
'features': {
|
166
|
+
'spot': {
|
167
|
+
'sandbox': False,
|
168
|
+
'createOrder': {
|
169
|
+
'marginMode': False,
|
170
|
+
'triggerPrice': False,
|
171
|
+
'triggerPriceType': None,
|
172
|
+
'triggerDirection': False,
|
173
|
+
'stopLossPrice': False,
|
174
|
+
'takeProfitPrice': False,
|
175
|
+
'attachedStopLossTakeProfit': None,
|
176
|
+
'timeInForce': {
|
177
|
+
'IOC': False,
|
178
|
+
'FOK': False,
|
179
|
+
'PO': True, # todo
|
180
|
+
'GTD': False,
|
181
|
+
},
|
182
|
+
'hedged': False,
|
183
|
+
'trailing': False,
|
184
|
+
'leverage': False,
|
185
|
+
'marketBuyByCost': True, # todo
|
186
|
+
'marketBuyRequiresPrice': True,
|
187
|
+
'selfTradePrevention': False,
|
188
|
+
'iceberg': False,
|
189
|
+
},
|
190
|
+
'createOrders': None,
|
191
|
+
'fetchMyTrades': {
|
192
|
+
'marginMode': False,
|
193
|
+
'limit': None, # todo
|
194
|
+
'daysBack': 100000, # todo
|
195
|
+
'untilDays': 100000, # todo
|
196
|
+
},
|
197
|
+
'fetchOrder': {
|
198
|
+
'marginMode': False,
|
199
|
+
'trigger': False,
|
200
|
+
'trailing': False,
|
201
|
+
},
|
202
|
+
'fetchOpenOrders': {
|
203
|
+
'marginMode': False,
|
204
|
+
'limit': None,
|
205
|
+
'trigger': False,
|
206
|
+
'trailing': False,
|
207
|
+
},
|
208
|
+
'fetchOrders': {
|
209
|
+
'marginMode': False,
|
210
|
+
'limit': 500,
|
211
|
+
'daysBack': 100000,
|
212
|
+
'untilDays': 100000,
|
213
|
+
'trigger': False,
|
214
|
+
'trailing': False,
|
215
|
+
},
|
216
|
+
'fetchClosedOrders': None,
|
217
|
+
'fetchOHLCV': {
|
218
|
+
'limit': 1000,
|
219
|
+
},
|
220
|
+
},
|
221
|
+
'swap': {
|
222
|
+
'linear': None,
|
223
|
+
'inverse': None,
|
224
|
+
},
|
225
|
+
'future': {
|
226
|
+
'linear': None,
|
227
|
+
'inverse': None,
|
228
|
+
},
|
229
|
+
},
|
165
230
|
'precisionMode': TICK_SIZE,
|
166
231
|
})
|
167
232
|
|
ccxt/mexc.py
CHANGED
@@ -4474,7 +4474,7 @@ class mexc(Exchange, ImplicitAPI):
|
|
4474
4474
|
return {
|
4475
4475
|
'info': depositAddress,
|
4476
4476
|
'currency': self.safe_currency_code(currencyId, currency),
|
4477
|
-
'network': self.network_id_to_code(networkId),
|
4477
|
+
'network': self.network_id_to_code(networkId, currencyId),
|
4478
4478
|
'address': address,
|
4479
4479
|
'tag': self.safe_string(depositAddress, 'memo'),
|
4480
4480
|
}
|
ccxt/myokx.py
CHANGED
ccxt/ndax.py
CHANGED
@@ -264,6 +264,77 @@ class ndax(Exchange, ImplicitAPI):
|
|
264
264
|
},
|
265
265
|
},
|
266
266
|
},
|
267
|
+
'features': {
|
268
|
+
'spot': {
|
269
|
+
'sandbox': True,
|
270
|
+
'createOrder': {
|
271
|
+
'marginMode': False,
|
272
|
+
'triggerPrice': True,
|
273
|
+
'triggerDirection': False,
|
274
|
+
'triggerPriceType': {
|
275
|
+
'last': True,
|
276
|
+
'mark': False,
|
277
|
+
'index': False,
|
278
|
+
# bid & ask
|
279
|
+
},
|
280
|
+
'stopLossPrice': False, # todo
|
281
|
+
'takeProfitPrice': False, # todo
|
282
|
+
'attachedStopLossTakeProfit': None,
|
283
|
+
# todo
|
284
|
+
'timeInForce': {
|
285
|
+
'IOC': True,
|
286
|
+
'FOK': True,
|
287
|
+
'PO': True,
|
288
|
+
'GTD': False,
|
289
|
+
},
|
290
|
+
'hedged': False,
|
291
|
+
'trailing': False,
|
292
|
+
'leverage': False,
|
293
|
+
'marketBuyByCost': False,
|
294
|
+
'marketBuyRequiresPrice': False,
|
295
|
+
'selfTradePrevention': False,
|
296
|
+
'iceberg': True, # todo
|
297
|
+
},
|
298
|
+
'createOrders': None,
|
299
|
+
'fetchMyTrades': {
|
300
|
+
'marginMode': False,
|
301
|
+
'limit': 100, # todo
|
302
|
+
'daysBack': 100000, # todo
|
303
|
+
'untilDays': 100000, # todo
|
304
|
+
},
|
305
|
+
'fetchOrder': {
|
306
|
+
'marginMode': False,
|
307
|
+
'trigger': False,
|
308
|
+
'trailing': False,
|
309
|
+
},
|
310
|
+
'fetchOpenOrders': {
|
311
|
+
'marginMode': False,
|
312
|
+
'limit': None,
|
313
|
+
'trigger': False,
|
314
|
+
'trailing': False,
|
315
|
+
},
|
316
|
+
'fetchOrders': {
|
317
|
+
'marginMode': False,
|
318
|
+
'limit': None,
|
319
|
+
'daysBack': None,
|
320
|
+
'untilDays': None,
|
321
|
+
'trigger': False,
|
322
|
+
'trailing': False,
|
323
|
+
},
|
324
|
+
'fetchClosedOrders': None,
|
325
|
+
'fetchOHLCV': {
|
326
|
+
'limit': None,
|
327
|
+
},
|
328
|
+
},
|
329
|
+
'swap': {
|
330
|
+
'linear': None,
|
331
|
+
'inverse': None,
|
332
|
+
},
|
333
|
+
'future': {
|
334
|
+
'linear': None,
|
335
|
+
'inverse': None,
|
336
|
+
},
|
337
|
+
},
|
267
338
|
'fees': {
|
268
339
|
'trading': {
|
269
340
|
'tierBased': False,
|
ccxt/novadax.py
CHANGED
@@ -223,6 +223,80 @@ class novadax(Exchange, ImplicitAPI):
|
|
223
223
|
'fillResponseFromRequest': True,
|
224
224
|
},
|
225
225
|
},
|
226
|
+
'features': {
|
227
|
+
'spot': {
|
228
|
+
'sandbox': False,
|
229
|
+
'createOrder': {
|
230
|
+
'marginMode': False,
|
231
|
+
'triggerPrice': True,
|
232
|
+
'triggerDirection': True, # todo
|
233
|
+
'triggerPriceType': None,
|
234
|
+
'stopLossPrice': False, # todo
|
235
|
+
'takeProfitPrice': False, # todo
|
236
|
+
'attachedStopLossTakeProfit': None,
|
237
|
+
# todo
|
238
|
+
'timeInForce': {
|
239
|
+
'IOC': False,
|
240
|
+
'FOK': False,
|
241
|
+
'PO': False,
|
242
|
+
'GTD': False,
|
243
|
+
},
|
244
|
+
'hedged': False,
|
245
|
+
'trailing': False,
|
246
|
+
'leverage': False,
|
247
|
+
'marketBuyByCost': True,
|
248
|
+
'marketBuyRequiresPrice': False,
|
249
|
+
'selfTradePrevention': False,
|
250
|
+
'iceberg': True, # todo
|
251
|
+
},
|
252
|
+
'createOrders': None, # todo: add implementation
|
253
|
+
'fetchMyTrades': {
|
254
|
+
'marginMode': False,
|
255
|
+
'limit': 100,
|
256
|
+
'daysBack': 100000, # todo
|
257
|
+
'untilDays': 100000, # todo
|
258
|
+
},
|
259
|
+
'fetchOrder': {
|
260
|
+
'marginMode': False,
|
261
|
+
'trigger': False,
|
262
|
+
'trailing': False,
|
263
|
+
},
|
264
|
+
'fetchOpenOrders': {
|
265
|
+
'marginMode': False,
|
266
|
+
'limit': None,
|
267
|
+
'trigger': False,
|
268
|
+
'trailing': False,
|
269
|
+
},
|
270
|
+
'fetchOrders': {
|
271
|
+
'marginMode': False,
|
272
|
+
'limit': 100,
|
273
|
+
'daysBack': 100000, # todo
|
274
|
+
'untilDays': 100000, # todo
|
275
|
+
'trigger': False,
|
276
|
+
'trailing': False,
|
277
|
+
},
|
278
|
+
'fetchClosedOrders': {
|
279
|
+
'marginMode': False,
|
280
|
+
'limit': 100,
|
281
|
+
'daysBack': 100000, # todo
|
282
|
+
'daysBackCanceled': 1, # todo
|
283
|
+
'untilDays': 100000, # todo
|
284
|
+
'trigger': False,
|
285
|
+
'trailing': False,
|
286
|
+
},
|
287
|
+
'fetchOHLCV': {
|
288
|
+
'limit': None, # todo max 3000
|
289
|
+
},
|
290
|
+
},
|
291
|
+
'swap': {
|
292
|
+
'linear': None,
|
293
|
+
'inverse': None,
|
294
|
+
},
|
295
|
+
'future': {
|
296
|
+
'linear': None,
|
297
|
+
'inverse': None,
|
298
|
+
},
|
299
|
+
},
|
226
300
|
})
|
227
301
|
|
228
302
|
def fetch_time(self, params={}):
|
ccxt/oceanex.py
CHANGED
@@ -139,6 +139,75 @@ class oceanex(Exchange, ImplicitAPI):
|
|
139
139
|
'PLA': 'Plair',
|
140
140
|
},
|
141
141
|
'precisionMode': TICK_SIZE,
|
142
|
+
'features': {
|
143
|
+
'spot': {
|
144
|
+
'sandbox': False,
|
145
|
+
'createOrder': {
|
146
|
+
'marginMode': False,
|
147
|
+
'triggerPrice': True, # todo
|
148
|
+
'triggerDirection': True, # todo
|
149
|
+
'triggerPriceType': None,
|
150
|
+
'stopLossPrice': False, # todo
|
151
|
+
'takeProfitPrice': False, # todo
|
152
|
+
'attachedStopLossTakeProfit': None,
|
153
|
+
'timeInForce': {
|
154
|
+
'IOC': False,
|
155
|
+
'FOK': False,
|
156
|
+
'PO': False,
|
157
|
+
'GTD': False,
|
158
|
+
},
|
159
|
+
'hedged': False,
|
160
|
+
'trailing': False,
|
161
|
+
'leverage': False,
|
162
|
+
'marketBuyByCost': False,
|
163
|
+
'marketBuyRequiresPrice': False,
|
164
|
+
'selfTradePrevention': False,
|
165
|
+
'iceberg': False,
|
166
|
+
},
|
167
|
+
'createOrders': None,
|
168
|
+
'fetchMyTrades': None,
|
169
|
+
'fetchOrder': {
|
170
|
+
'marginMode': False,
|
171
|
+
'trigger': False,
|
172
|
+
'trailing': False,
|
173
|
+
},
|
174
|
+
'fetchOpenOrders': {
|
175
|
+
'marginMode': False,
|
176
|
+
'limit': 100, # todo: max unknown
|
177
|
+
'trigger': False,
|
178
|
+
'trailing': False,
|
179
|
+
},
|
180
|
+
'fetchOrders': {
|
181
|
+
'marginMode': False,
|
182
|
+
'limit': 100,
|
183
|
+
'daysBack': 100000, # todo
|
184
|
+
'untilDays': 100000, # todo
|
185
|
+
'trigger': False,
|
186
|
+
'trailing': False,
|
187
|
+
},
|
188
|
+
'fetchClosedOrders': {
|
189
|
+
'marginMode': False,
|
190
|
+
'limit': 100,
|
191
|
+
'daysBack': 100000, # todo
|
192
|
+
'daysBackCanceled': 1, # todo
|
193
|
+
'untilDays': 100000, # todo
|
194
|
+
'trigger': False,
|
195
|
+
'trailing': False,
|
196
|
+
},
|
197
|
+
'fetchOHLCV': {
|
198
|
+
'limit': 100,
|
199
|
+
},
|
200
|
+
},
|
201
|
+
# todo implement swap
|
202
|
+
'swap': {
|
203
|
+
'linear': None,
|
204
|
+
'inverse': None,
|
205
|
+
},
|
206
|
+
'future': {
|
207
|
+
'linear': None,
|
208
|
+
'inverse': None,
|
209
|
+
},
|
210
|
+
},
|
142
211
|
'exceptions': {
|
143
212
|
'codes': {
|
144
213
|
'-1': BadRequest,
|
ccxt/okcoin.py
CHANGED
@@ -222,6 +222,83 @@ class okcoin(Exchange, ImplicitAPI):
|
|
222
222
|
},
|
223
223
|
},
|
224
224
|
},
|
225
|
+
'features': {
|
226
|
+
'spot': {
|
227
|
+
'sandbox': False,
|
228
|
+
'createOrder': {
|
229
|
+
'marginMode': True,
|
230
|
+
'triggerPrice': True,
|
231
|
+
'triggerDirection': True, # todo
|
232
|
+
'triggerPriceType': {
|
233
|
+
'last': True,
|
234
|
+
'mark': False,
|
235
|
+
'index': False,
|
236
|
+
},
|
237
|
+
'stopLossPrice': True, # todo revise trigger
|
238
|
+
'takeProfitPrice': True, # todo revise trigger
|
239
|
+
'attachedStopLossTakeProfit': {
|
240
|
+
'triggerPriceType': {
|
241
|
+
'last': True,
|
242
|
+
'mark': False,
|
243
|
+
'index': False,
|
244
|
+
},
|
245
|
+
'price': True,
|
246
|
+
},
|
247
|
+
'timeInForce': {
|
248
|
+
'IOC': True,
|
249
|
+
'FOK': True,
|
250
|
+
'PO': True,
|
251
|
+
'GTD': False,
|
252
|
+
},
|
253
|
+
'hedged': False,
|
254
|
+
'trailing': True, # todo
|
255
|
+
'leverage': False,
|
256
|
+
'marketBuyByCost': True,
|
257
|
+
'marketBuyRequiresPrice': True,
|
258
|
+
'selfTradePrevention': False,
|
259
|
+
'iceberg': True, # todo
|
260
|
+
},
|
261
|
+
'createOrders': None, # todo
|
262
|
+
'fetchMyTrades': {
|
263
|
+
'marginMode': False,
|
264
|
+
'limit': 100,
|
265
|
+
'daysBack': 90,
|
266
|
+
'untilDays': 90, # todo
|
267
|
+
},
|
268
|
+
'fetchOrder': {
|
269
|
+
'marginMode': False,
|
270
|
+
'trigger': True,
|
271
|
+
'trailing': True, # todo
|
272
|
+
},
|
273
|
+
'fetchOpenOrders': {
|
274
|
+
'marginMode': False,
|
275
|
+
'limit': 100,
|
276
|
+
'trigger': True,
|
277
|
+
'trailing': True,
|
278
|
+
},
|
279
|
+
'fetchOrders': None,
|
280
|
+
'fetchClosedOrders': {
|
281
|
+
'marginMode': False,
|
282
|
+
'limit': 100,
|
283
|
+
'daysBack': 90, # todo
|
284
|
+
'daysBackCanceled': 1 / 12, # todo: possible more with history endpoint
|
285
|
+
'untilDays': 90, # todo
|
286
|
+
'trigger': True,
|
287
|
+
'trailing': True,
|
288
|
+
},
|
289
|
+
'fetchOHLCV': {
|
290
|
+
'limit': 100, # 300 is only possible for 'recent' 1440 candles, which does not make much sense
|
291
|
+
},
|
292
|
+
},
|
293
|
+
'swap': {
|
294
|
+
'linear': None,
|
295
|
+
'inverse': None,
|
296
|
+
},
|
297
|
+
'future': {
|
298
|
+
'linear': None,
|
299
|
+
'inverse': None,
|
300
|
+
},
|
301
|
+
},
|
225
302
|
'fees': {
|
226
303
|
'trading': {
|
227
304
|
'taker': 0.002,
|
@@ -1470,7 +1547,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1470
1547
|
if stopLossDefined:
|
1471
1548
|
stopLossTriggerPrice = self.safe_value_n(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx'])
|
1472
1549
|
if stopLossTriggerPrice is None:
|
1473
|
-
raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"]
|
1550
|
+
raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order')
|
1474
1551
|
request['slTriggerPx'] = self.price_to_precision(symbol, stopLossTriggerPrice)
|
1475
1552
|
stopLossLimitPrice = self.safe_value_n(stopLoss, ['price', 'stopLossPrice', 'slOrdPx'])
|
1476
1553
|
stopLossOrderType = self.safe_string(stopLoss, 'type')
|
@@ -1481,7 +1558,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1481
1558
|
raise InvalidOrder(self.id + ' createOrder() params["stopLoss"]["type"] must be either "limit" or "market"')
|
1482
1559
|
elif stopLossLimitOrderType:
|
1483
1560
|
if stopLossLimitPrice is None:
|
1484
|
-
raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"]
|
1561
|
+
raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order')
|
1485
1562
|
else:
|
1486
1563
|
request['slOrdPx'] = self.price_to_precision(symbol, stopLossLimitPrice)
|
1487
1564
|
elif stopLossOrderType == 'market':
|
ccxt/onetrading.py
CHANGED
@@ -302,6 +302,72 @@ class onetrading(Exchange, ImplicitAPI):
|
|
302
302
|
},
|
303
303
|
'fiat': ['EUR', 'CHF'],
|
304
304
|
},
|
305
|
+
'features': {
|
306
|
+
'spot': {
|
307
|
+
'sandbox': False,
|
308
|
+
'createOrder': {
|
309
|
+
'marginMode': False,
|
310
|
+
'triggerPrice': False,
|
311
|
+
'triggerDirection': False,
|
312
|
+
'triggerPriceType': None,
|
313
|
+
'stopLossPrice': False,
|
314
|
+
'takeProfitPrice': False,
|
315
|
+
'attachedStopLossTakeProfit': None,
|
316
|
+
'timeInForce': {
|
317
|
+
'IOC': True,
|
318
|
+
'FOK': True,
|
319
|
+
'PO': True,
|
320
|
+
'GTD': False,
|
321
|
+
},
|
322
|
+
'hedged': False,
|
323
|
+
'trailing': False,
|
324
|
+
'leverage': False,
|
325
|
+
'marketBuyByCost': False,
|
326
|
+
'marketBuyRequiresPrice': False,
|
327
|
+
'selfTradePrevention': False,
|
328
|
+
'iceberg': False,
|
329
|
+
},
|
330
|
+
'createOrders': None,
|
331
|
+
'fetchMyTrades': {
|
332
|
+
'marginMode': False,
|
333
|
+
'limit': 100,
|
334
|
+
'daysBack': 100000, # todo
|
335
|
+
'untilDays': 100000, # todo
|
336
|
+
},
|
337
|
+
'fetchOrder': {
|
338
|
+
'marginMode': False,
|
339
|
+
'trigger': False,
|
340
|
+
'trailing': False,
|
341
|
+
},
|
342
|
+
'fetchOpenOrders': {
|
343
|
+
'marginMode': False,
|
344
|
+
'limit': 100,
|
345
|
+
'trigger': False,
|
346
|
+
'trailing': False,
|
347
|
+
},
|
348
|
+
'fetchOrders': None, # todo
|
349
|
+
'fetchClosedOrders': {
|
350
|
+
'marginMode': False,
|
351
|
+
'limit': 100,
|
352
|
+
'daysBack': 100000, # todo
|
353
|
+
'daysBackCanceled': 1 / 12, # todo
|
354
|
+
'untilDays': 100000, # todo
|
355
|
+
'trigger': False,
|
356
|
+
'trailing': False,
|
357
|
+
},
|
358
|
+
'fetchOHLCV': {
|
359
|
+
'limit': 5000,
|
360
|
+
},
|
361
|
+
},
|
362
|
+
'swap': {
|
363
|
+
'linear': None,
|
364
|
+
'inverse': None,
|
365
|
+
},
|
366
|
+
'future': {
|
367
|
+
'linear': None,
|
368
|
+
'inverse': None,
|
369
|
+
},
|
370
|
+
},
|
305
371
|
})
|
306
372
|
|
307
373
|
def fetch_time(self, params={}):
|
ccxt/oxfun.py
CHANGED
@@ -132,6 +132,7 @@ class oxfun(Exchange, ImplicitAPI):
|
|
132
132
|
'reduceMargin': False,
|
133
133
|
'repayCrossMargin': False,
|
134
134
|
'repayIsolatedMargin': False,
|
135
|
+
'sandbox': True,
|
135
136
|
'setLeverage': False,
|
136
137
|
'setMargin': False,
|
137
138
|
'setMarginMode': False,
|
@@ -258,6 +259,71 @@ class oxfun(Exchange, ImplicitAPI):
|
|
258
259
|
'Optimism': 'OPTIMISM',
|
259
260
|
},
|
260
261
|
},
|
262
|
+
'features': {
|
263
|
+
'default': {
|
264
|
+
'sandbox': True,
|
265
|
+
'createOrder': {
|
266
|
+
'marginMode': False,
|
267
|
+
'triggerPrice': True,
|
268
|
+
'triggerDirection': False,
|
269
|
+
'triggerPriceType': None,
|
270
|
+
'stopLossPrice': False, # todo
|
271
|
+
'takeProfitPrice': False, # todo
|
272
|
+
'attachedStopLossTakeProfit': None,
|
273
|
+
'timeInForce': {
|
274
|
+
'IOC': True,
|
275
|
+
'FOK': True,
|
276
|
+
'PO': True,
|
277
|
+
'GTD': False,
|
278
|
+
},
|
279
|
+
'hedged': False,
|
280
|
+
'trailing': False,
|
281
|
+
'leverage': False,
|
282
|
+
'marketBuyByCost': True,
|
283
|
+
'marketBuyRequiresPrice': False,
|
284
|
+
'selfTradePrevention': True, # todo
|
285
|
+
'iceberg': True, # todo
|
286
|
+
},
|
287
|
+
'createOrders': {
|
288
|
+
'max': 10, # todo
|
289
|
+
},
|
290
|
+
'fetchMyTrades': {
|
291
|
+
'marginMode': False,
|
292
|
+
'limit': 500,
|
293
|
+
'daysBack': 100000, # todo
|
294
|
+
'untilDays': 7,
|
295
|
+
},
|
296
|
+
'fetchOrder': {
|
297
|
+
'marginMode': False,
|
298
|
+
'trigger': False,
|
299
|
+
'trailing': False,
|
300
|
+
},
|
301
|
+
'fetchOpenOrders': {
|
302
|
+
'marginMode': False,
|
303
|
+
'limit': None,
|
304
|
+
'trigger': False,
|
305
|
+
'trailing': False,
|
306
|
+
},
|
307
|
+
'fetchOrders': None,
|
308
|
+
'fetchClosedOrders': None, # todo?
|
309
|
+
'fetchOHLCV': {
|
310
|
+
'limit': 500,
|
311
|
+
},
|
312
|
+
},
|
313
|
+
'spot': {
|
314
|
+
'extends': 'default',
|
315
|
+
},
|
316
|
+
'swap': {
|
317
|
+
'linear': {
|
318
|
+
'extends': 'default',
|
319
|
+
},
|
320
|
+
'inverse': None,
|
321
|
+
},
|
322
|
+
'future': {
|
323
|
+
'linear': None,
|
324
|
+
'inverse': None,
|
325
|
+
},
|
326
|
+
},
|
261
327
|
'exceptions': {
|
262
328
|
'exact': {
|
263
329
|
'-0010': OperationFailed, # {"event":null,"success":false,"message":"Validation failed","code":"0010","data":null} - failed transfer
|