@@ -515,36 +515,26 @@ tickers =
515
515
]
516
516
emptyReq
517
517
518
- data MkOrder = MkOrder
518
+ data MkOrder m = MkOrder
519
519
{ mkOrderFee :: FeeRate ,
520
520
mkOrderBuyOrSell :: BuyOrSell ,
521
521
--
522
522
-- NOTE : base amt has higher priority!
523
523
--
524
524
mkOrderNetBaseAmt :: Maybe MoneyAmount ,
525
525
mkOrderNetQuoteAmt :: Maybe MoneyAmount ,
526
- mkOrderCurrencyPair :: CurrencyPair
526
+ mkOrderCurrencyPair :: CurrencyPair ,
527
+ mkOrderSymbolsDetails :: m (Map CurrencyPair CurrencyPairConf ),
528
+ mkOrderMarketAveragePrice :: MarketAveragePrice. Request -> m QuotePerBase
527
529
}
528
- deriving stock
529
- ( Eq ,
530
- Ord ,
531
- Show ,
532
- Read ,
533
- Data ,
534
- Generic
535
- )
530
+ deriving stock (Generic )
536
531
537
- mkOrder ::
538
- ( MonadThrow m ,
539
- MonadUnliftIO m
540
- ) =>
541
- MkOrder ->
542
- m SubmitOrder. Request
532
+ mkOrder :: (MonadThrow m ) => MkOrder m -> m SubmitOrder. Request
543
533
mkOrder args = do
544
534
netBaseAmt <-
545
535
maybe
546
536
( do
547
- syms <- symbolsDetails
537
+ syms <- mkOrderSymbolsDetails args
548
538
minBase <-
549
539
maybe
550
540
(throwString $ inspect @ Text sym <> " is missing!" )
@@ -554,7 +544,8 @@ mkOrder args = do
554
544
(pure minBase)
555
545
( \ netQuoteAmt -> do
556
546
price <-
557
- Bfx. marketAveragePrice
547
+ mkOrderMarketAveragePrice
548
+ args
558
549
MarketAveragePrice. Request
559
550
{ MarketAveragePrice. buyOrSell = bos,
560
551
MarketAveragePrice. baseAmount = minBase,
@@ -580,7 +571,8 @@ mkOrder args = do
580
571
Sell ->
581
572
pure netBaseAmt
582
573
price <-
583
- Bfx. marketAveragePrice
574
+ mkOrderMarketAveragePrice
575
+ args
584
576
MarketAveragePrice. Request
585
577
{ MarketAveragePrice. buyOrSell = bos,
586
578
MarketAveragePrice. baseAmount = grossBaseAmt,
@@ -598,30 +590,21 @@ mkOrder args = do
598
590
bos = mkOrderBuyOrSell args
599
591
sym = mkOrderCurrencyPair args
600
592
601
- data MkCounterOrder = MkCounterOrder
593
+ data MkCounterOrder m = MkCounterOrder
602
594
{ mkCounterOrderEnterBuyOrSell :: BuyOrSell ,
603
595
mkCounterOrderEnterGrossBase :: MoneyAmount ,
604
596
mkCounterOrderEnterQuotePerBase :: QuotePerBase ,
605
597
mkCounterOrderCurrencyPair :: CurrencyPair ,
606
598
mkCounterOrderEnterFee :: FeeRate ,
607
599
mkCounterOrderExitFee :: FeeRate ,
608
- mkCounterOrderProfit :: ProfitRate
600
+ mkCounterOrderProfit :: ProfitRate ,
601
+ mkCounterOrderMarketAveragePrice ::
602
+ MarketAveragePrice. Request ->
603
+ m QuotePerBase
609
604
}
610
- deriving stock
611
- ( Eq ,
612
- Ord ,
613
- Show ,
614
- Read ,
615
- Data ,
616
- Generic
617
- )
605
+ deriving stock (Generic )
618
606
619
- mkCounterOrder ::
620
- ( MonadThrow m ,
621
- MonadUnliftIO m
622
- ) =>
623
- MkCounterOrder ->
624
- m SubmitOrder. Request
607
+ mkCounterOrder :: (MonadThrow m ) => MkCounterOrder m -> m SubmitOrder. Request
625
608
mkCounterOrder args = do
626
609
exitBase <-
627
610
tweakMoneyAmount exitBos exitGrossBase
@@ -631,7 +614,8 @@ mkCounterOrder args = do
631
614
$ unMoneyAmount exitGrossQuote
632
615
/ unMoneyAmount exitBase
633
616
currentRate <-
634
- marketAveragePrice
617
+ mkCounterOrderMarketAveragePrice
618
+ args
635
619
MarketAveragePrice. Request
636
620
{ MarketAveragePrice. buyOrSell = exitBos,
637
621
MarketAveragePrice. baseAmount = exitBase,
0 commit comments