@@ -230,21 +230,9 @@ submitOrder ::
230
230
MonadUnliftIO m
231
231
) =>
232
232
Env ->
233
- BuyOrSell ->
234
- MoneyAmount ->
235
- CurrencyPair ->
236
- QuotePerBase ->
237
- SubmitOrder. Options ->
233
+ SubmitOrder. Request ->
238
234
m Order
239
- submitOrder env bos baseAmt sym rate opts = do
240
- let req =
241
- SubmitOrder. Request
242
- { SubmitOrder. baseAmount = baseAmt,
243
- SubmitOrder. symbol = sym,
244
- SubmitOrder. rate = rate,
245
- SubmitOrder. options = opts,
246
- SubmitOrder. buyOrSell = bos
247
- }
235
+ submitOrder env req = do
248
236
order <- Generic. prv @ 'SubmitOrder env req
249
237
verifyOrder env (orderId order) req
250
238
@@ -253,41 +241,28 @@ submitOrderMaker ::
253
241
MonadUnliftIO m
254
242
) =>
255
243
Env ->
256
- BuyOrSell ->
257
- MoneyAmount ->
258
- CurrencyPair ->
259
- QuotePerBase ->
260
- SubmitOrder. Options ->
244
+ SubmitOrder. Request ->
261
245
m Order
262
- submitOrderMaker env bos baseAmt sym rate0 opts0 =
263
- submitOrderMakerRec env bos baseAmt sym 0 rate0 opts
264
- where
265
- opts =
266
- opts0
267
- { SubmitOrder. flags =
268
- Set. insert PostOnly $ SubmitOrder. flags opts0
269
- }
246
+ submitOrderMaker env =
247
+ submitOrderMakerRec 0 env
248
+ . (# options . # flags %~ Set. insert PostOnly )
270
249
271
250
submitOrderMakerRec ::
272
251
( MonadThrow m ,
273
252
MonadUnliftIO m
274
253
) =>
275
- Env ->
276
- BuyOrSell ->
277
- MoneyAmount ->
278
- CurrencyPair ->
279
254
Int ->
280
- QuotePerBase ->
281
- SubmitOrder. Options ->
255
+ Env ->
256
+ SubmitOrder. Request ->
282
257
m Order
283
- submitOrderMakerRec env bos baseAmt sym attempt rate opts = do
284
- order <- submitOrder env bos baseAmt sym rate opts
258
+ submitOrderMakerRec attempt env req = do
259
+ order <- submitOrder env req
285
260
if orderStatus order /= PostOnlyCancelled
286
261
then pure order
287
262
else do
288
263
when (attempt >= 10 ) . throw $ ErrorRemoteOrderState order
289
- newRate <- Math. tweakMakerRate bos rate
290
- submitOrderMakerRec env bos baseAmt sym (attempt + 1 ) newRate opts
264
+ next <- Math. tweakMakerRate (req ^. # buyOrSell) (req ^. # rate)
265
+ submitOrderMakerRec (attempt + 1 ) env $ req & # rate .~ next
291
266
292
267
cancelOrderMulti ::
293
268
( MonadThrow m ,
@@ -316,8 +291,8 @@ cancelOrderById env id0 = do
316
291
maybe (throw $ ErrorMissingOrder id0) pure mOrder
317
292
318
293
cancelOrderByClientId ::
319
- ( MonadUnliftIO m ,
320
- MonadThrow m
294
+ ( MonadThrow m ,
295
+ MonadUnliftIO m
321
296
) =>
322
297
Env ->
323
298
OrderClientId ->
@@ -333,8 +308,8 @@ cancelOrderByClientId env cid utc =
333
308
)
334
309
335
310
cancelOrderByGroupId ::
336
- ( MonadUnliftIO m ,
337
- MonadThrow m
311
+ ( MonadThrow m ,
312
+ MonadUnliftIO m
338
313
) =>
339
314
Env ->
340
315
OrderGroupId ->
@@ -345,58 +320,55 @@ cancelOrderByGroupId env gid = do
345
320
$ Set. singleton gid
346
321
347
322
submitCounterOrder ::
348
- ( MonadUnliftIO m ,
349
- MonadThrow m
323
+ ( MonadThrow m ,
324
+ MonadUnliftIO m
350
325
) =>
351
326
Env ->
352
327
OrderId ->
353
- (MoneyAmount -> QuotePerBase -> Math. CounterArgs ) ->
354
- -- Money (Tags 'Unsigned |+| 'FeeRate |+| 'Base) ->
355
- -- Money (Tags 'Unsigned |+| 'FeeRate |+| 'Quote) ->
356
- -- Money (Tags 'Unsigned |+| 'ProfitRate) ->
328
+ CounterRates ->
357
329
SubmitOrder. Options ->
358
330
m Order
359
331
submitCounterOrder =
360
- submitCounterOrder' submitOrder
332
+ mkSubmitCounterOrder submitOrder
361
333
362
334
submitCounterOrderMaker ::
363
- ( MonadUnliftIO m ,
364
- MonadThrow m
335
+ ( MonadThrow m ,
336
+ MonadUnliftIO m
365
337
) =>
366
338
Env ->
367
339
OrderId ->
368
- ( MoneyAmount -> QuotePerBase -> Math. CounterArgs ) ->
340
+ CounterRates ->
369
341
SubmitOrder. Options ->
370
342
m Order
371
343
submitCounterOrderMaker =
372
- submitCounterOrder' submitOrderMaker
344
+ mkSubmitCounterOrder submitOrderMaker
373
345
374
- submitCounterOrder' ::
375
- ( MonadUnliftIO m ,
376
- MonadThrow m
346
+ mkSubmitCounterOrder ::
347
+ ( MonadThrow m ,
348
+ MonadUnliftIO m
377
349
) =>
378
- ( Env ->
379
- BuyOrSell ->
380
- MoneyAmount ->
381
- CurrencyPair ->
382
- QuotePerBase ->
383
- SubmitOrder. Options ->
384
- m Order
350
+ ( Env -> SubmitOrder. Request -> m Order
385
351
) ->
386
352
Env ->
387
353
OrderId ->
388
- ( MoneyAmount -> QuotePerBase -> Math. CounterArgs ) ->
354
+ CounterRates ->
389
355
SubmitOrder. Options ->
390
356
m Order
391
- submitCounterOrder' submit env id0 mkCounter opts = do
357
+ mkSubmitCounterOrder submit env id0 rates opts = do
392
358
remOrder <- getOrder env id0
393
359
let sym = orderSymbol remOrder
394
360
case orderBuyOrSell remOrder of
395
361
Buy | orderStatus remOrder == Executed -> do
396
362
counter <-
397
- Math. newCounterOrder
398
- . mkCounter (orderBaseAmount remOrder)
399
- $ orderRate remOrder
363
+ newCounterOrder
364
+ CounterArgs
365
+ { counterArgsEnterGrossBaseGain =
366
+ orderBaseAmount remOrder,
367
+ counterArgsEnterQuotePerBase =
368
+ orderRate remOrder,
369
+ counterArgsRates =
370
+ rates
371
+ }
400
372
let exitAmt = Math. counterExitNetBaseLoss counter
401
373
let exitRate = Math. counterExitQuotePerBase counter
402
374
currentRate <-
@@ -408,32 +380,28 @@ submitCounterOrder' submit env id0 mkCounter opts = do
408
380
}
409
381
submit
410
382
env
411
- Sell
412
- exitAmt
413
- sym
414
- (max exitRate currentRate)
415
- opts
383
+ SubmitOrder. Request
384
+ { SubmitOrder. buyOrSell = Sell ,
385
+ SubmitOrder. baseAmount = exitAmt,
386
+ SubmitOrder. symbol = sym,
387
+ SubmitOrder. rate = max exitRate currentRate,
388
+ SubmitOrder. options = opts
389
+ }
416
390
_ ->
417
391
throw
418
392
$ ErrorRemoteOrderState remOrder
419
393
420
- dumpIntoQuote' ::
421
- ( MonadUnliftIO m ,
422
- MonadThrow m
394
+ mkDumpIntoQuote ::
395
+ ( MonadThrow m ,
396
+ MonadUnliftIO m
423
397
) =>
424
- ( Env ->
425
- BuyOrSell ->
426
- MoneyAmount ->
427
- CurrencyPair ->
428
- QuotePerBase ->
429
- SubmitOrder. Options ->
430
- m Order
398
+ ( Env -> SubmitOrder. Request -> m Order
431
399
) ->
432
400
Env ->
433
401
CurrencyPair ->
434
402
SubmitOrder. Options ->
435
403
m Order
436
- dumpIntoQuote' submit env sym opts = do
404
+ mkDumpIntoQuote submit env sym opts = do
437
405
amt <- spendableExchangeBalance env (currencyPairBase sym)
438
406
rate <-
439
407
marketAveragePrice
@@ -442,38 +410,46 @@ dumpIntoQuote' submit env sym opts = do
442
410
MarketAveragePrice. baseAmount = amt,
443
411
MarketAveragePrice. symbol = sym
444
412
}
445
- catchAny
446
- (submit env Sell amt sym rate opts)
413
+ let mkSubmit baseAmount =
414
+ submit
415
+ env
416
+ SubmitOrder. Request
417
+ { SubmitOrder. buyOrSell = Sell ,
418
+ SubmitOrder. baseAmount = baseAmount,
419
+ SubmitOrder. symbol = sym,
420
+ SubmitOrder. rate = rate,
421
+ SubmitOrder. options = opts
422
+ }
423
+ catchAny (mkSubmit amt)
447
424
. const
448
- $ do
449
- newAmt <- Math. tweakMoneyPip Sell amt
450
- submit env Sell newAmt sym rate opts
425
+ $ Math. tweakMoneyPip Sell amt
426
+ >>= mkSubmit
451
427
452
428
dumpIntoQuote ::
453
- ( MonadUnliftIO m ,
454
- MonadThrow m
429
+ ( MonadThrow m ,
430
+ MonadUnliftIO m
455
431
) =>
456
432
Env ->
457
433
CurrencyPair ->
458
434
SubmitOrder. Options ->
459
435
m Order
460
436
dumpIntoQuote =
461
- dumpIntoQuote' submitOrder
437
+ mkDumpIntoQuote submitOrder
462
438
463
439
dumpIntoQuoteMaker ::
464
- ( MonadUnliftIO m ,
465
- MonadThrow m
440
+ ( MonadThrow m ,
441
+ MonadUnliftIO m
466
442
) =>
467
443
Env ->
468
444
CurrencyPair ->
469
445
SubmitOrder. Options ->
470
446
m Order
471
447
dumpIntoQuoteMaker =
472
- dumpIntoQuote' submitOrderMaker
448
+ mkDumpIntoQuote submitOrderMaker
473
449
474
450
netWorth ::
475
- ( MonadUnliftIO m ,
476
- MonadThrow m
451
+ ( MonadThrow m ,
452
+ MonadUnliftIO m
477
453
) =>
478
454
Env ->
479
455
CurrencyCode ->
@@ -532,8 +508,8 @@ netWorth env ccq = do
532
508
roundMoneyAmount $ MoneyAmount res
533
509
534
510
candlesLast ::
535
- ( MonadUnliftIO m ,
536
- MonadThrow m
511
+ ( MonadThrow m ,
512
+ MonadUnliftIO m
537
513
) =>
538
514
CandleTimeFrame ->
539
515
CurrencyPair ->
@@ -556,8 +532,8 @@ candlesLast tf sym opts =
556
532
}
557
533
558
534
candlesHist ::
559
- ( MonadUnliftIO m ,
560
- MonadThrow m
535
+ ( MonadThrow m ,
536
+ MonadUnliftIO m
561
537
) =>
562
538
CandleTimeFrame ->
563
539
CurrencyPair ->
@@ -580,12 +556,12 @@ candlesHist tf sym opts =
580
556
}
581
557
582
558
tickers ::
583
- ( MonadUnliftIO m ,
584
- MonadThrow m
559
+ ( MonadThrow m ,
560
+ MonadUnliftIO m
585
561
) =>
586
562
m (Map CurrencyPair Ticker )
587
563
tickers =
588
564
Generic. pub @ 'Tickers
589
565
[ SomeQueryParam " symbols" (" ALL" :: Text )
590
566
]
591
- ()
567
+ emptyReq
0 commit comments