Skip to content

Commit e848025

Browse files
committed
configurable mkOrder and mkCounterOrder
1 parent 3514287 commit e848025

File tree

3 files changed

+29
-40
lines changed

3 files changed

+29
-40
lines changed

pub/bfx/src/Bfx.hs

Lines changed: 20 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -515,36 +515,26 @@ tickers =
515515
]
516516
emptyReq
517517

518-
data MkOrder = MkOrder
518+
data MkOrder m = MkOrder
519519
{ mkOrderFee :: FeeRate,
520520
mkOrderBuyOrSell :: BuyOrSell,
521521
--
522522
-- NOTE : base amt has higher priority!
523523
--
524524
mkOrderNetBaseAmt :: Maybe MoneyAmount,
525525
mkOrderNetQuoteAmt :: Maybe MoneyAmount,
526-
mkOrderCurrencyPair :: CurrencyPair
526+
mkOrderCurrencyPair :: CurrencyPair,
527+
mkOrderSymbolsDetails :: m (Map CurrencyPair CurrencyPairConf),
528+
mkOrderMarketAveragePrice :: MarketAveragePrice.Request -> m QuotePerBase
527529
}
528-
deriving stock
529-
( Eq,
530-
Ord,
531-
Show,
532-
Read,
533-
Data,
534-
Generic
535-
)
530+
deriving stock (Generic)
536531

537-
mkOrder ::
538-
( MonadThrow m,
539-
MonadUnliftIO m
540-
) =>
541-
MkOrder ->
542-
m SubmitOrder.Request
532+
mkOrder :: (MonadThrow m) => MkOrder m -> m SubmitOrder.Request
543533
mkOrder args = do
544534
netBaseAmt <-
545535
maybe
546536
( do
547-
syms <- symbolsDetails
537+
syms <- mkOrderSymbolsDetails args
548538
minBase <-
549539
maybe
550540
(throwString $ inspect @Text sym <> " is missing!")
@@ -554,7 +544,8 @@ mkOrder args = do
554544
(pure minBase)
555545
( \netQuoteAmt -> do
556546
price <-
557-
Bfx.marketAveragePrice
547+
mkOrderMarketAveragePrice
548+
args
558549
MarketAveragePrice.Request
559550
{ MarketAveragePrice.buyOrSell = bos,
560551
MarketAveragePrice.baseAmount = minBase,
@@ -580,7 +571,8 @@ mkOrder args = do
580571
Sell ->
581572
pure netBaseAmt
582573
price <-
583-
Bfx.marketAveragePrice
574+
mkOrderMarketAveragePrice
575+
args
584576
MarketAveragePrice.Request
585577
{ MarketAveragePrice.buyOrSell = bos,
586578
MarketAveragePrice.baseAmount = grossBaseAmt,
@@ -598,30 +590,21 @@ mkOrder args = do
598590
bos = mkOrderBuyOrSell args
599591
sym = mkOrderCurrencyPair args
600592

601-
data MkCounterOrder = MkCounterOrder
593+
data MkCounterOrder m = MkCounterOrder
602594
{ mkCounterOrderEnterBuyOrSell :: BuyOrSell,
603595
mkCounterOrderEnterGrossBase :: MoneyAmount,
604596
mkCounterOrderEnterQuotePerBase :: QuotePerBase,
605597
mkCounterOrderCurrencyPair :: CurrencyPair,
606598
mkCounterOrderEnterFee :: FeeRate,
607599
mkCounterOrderExitFee :: FeeRate,
608-
mkCounterOrderProfit :: ProfitRate
600+
mkCounterOrderProfit :: ProfitRate,
601+
mkCounterOrderMarketAveragePrice ::
602+
MarketAveragePrice.Request ->
603+
m QuotePerBase
609604
}
610-
deriving stock
611-
( Eq,
612-
Ord,
613-
Show,
614-
Read,
615-
Data,
616-
Generic
617-
)
605+
deriving stock (Generic)
618606

619-
mkCounterOrder ::
620-
( MonadThrow m,
621-
MonadUnliftIO m
622-
) =>
623-
MkCounterOrder ->
624-
m SubmitOrder.Request
607+
mkCounterOrder :: (MonadThrow m) => MkCounterOrder m -> m SubmitOrder.Request
625608
mkCounterOrder args = do
626609
exitBase <-
627610
tweakMoneyAmount exitBos exitGrossBase
@@ -631,7 +614,8 @@ mkCounterOrder args = do
631614
$ unMoneyAmount exitGrossQuote
632615
/ unMoneyAmount exitBase
633616
currentRate <-
634-
marketAveragePrice
617+
mkCounterOrderMarketAveragePrice
618+
args
635619
MarketAveragePrice.Request
636620
{ MarketAveragePrice.buyOrSell = exitBos,
637621
MarketAveragePrice.baseAmount = exitBase,

pub/bfx/test/Bfx/MathSpec.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ spec = do
2424
mkCounterOrderCurrencyPair = adaBtc,
2525
mkCounterOrderEnterFee = FeeRate 0.001,
2626
mkCounterOrderExitFee = FeeRate 0.001,
27-
mkCounterOrderProfit = ProfitRate 0.01
27+
mkCounterOrderProfit = ProfitRate 0.01,
28+
mkCounterOrderMarketAveragePrice = Bfx.marketAveragePrice @IO
2829
}
2930
exit <- mkCounterOrder args
3031
exit
@@ -49,7 +50,8 @@ spec = do
4950
mkCounterOrderCurrencyPair = btcUsd,
5051
mkCounterOrderEnterFee = FeeRate 0.001,
5152
mkCounterOrderExitFee = FeeRate 0.001,
52-
mkCounterOrderProfit = ProfitRate 0.01
53+
mkCounterOrderProfit = ProfitRate 0.01,
54+
mkCounterOrderMarketAveragePrice = Bfx.marketAveragePrice @IO
5355
}
5456
exit <- mkCounterOrder args
5557
exit

pub/bfx/test/BfxSpec.hs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ module BfxSpec
55
)
66
where
77

8-
import Bfx
8+
import Bfx hiding (mkOrder)
9+
import qualified Bfx
910
import qualified Bfx.Data.Candles as Candles
1011
import qualified Bfx.Data.GetOrders as GetOrders
1112
import qualified Bfx.Data.MarketAveragePrice as MarketAveragePrice
@@ -132,7 +133,9 @@ spec = before sysEnv $ do
132133
Bfx.mkOrderBuyOrSell = Buy,
133134
Bfx.mkOrderNetBaseAmt = Nothing,
134135
Bfx.mkOrderNetQuoteAmt = Nothing,
135-
Bfx.mkOrderCurrencyPair = adaBtc
136+
Bfx.mkOrderCurrencyPair = adaBtc,
137+
Bfx.mkOrderSymbolsDetails = Bfx.symbolsDetails @IO,
138+
Bfx.mkOrderMarketAveragePrice = Bfx.marketAveragePrice
136139
}
137140
-- let reqQuote = req {Bfx.mkOrderNetQuoteAmt = Just $ MoneyAmount 1}
138141
-- buyQuote <- Bfx.mkOrder reqQuote

0 commit comments

Comments
 (0)