Skip to content

Commit b829e43

Browse files
committed
bfx wip
1 parent 3ddbbe5 commit b829e43

File tree

2 files changed

+38
-31
lines changed

2 files changed

+38
-31
lines changed

pub/bfx/src/Bfx.hs

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ module Bfx
2626
candlesLast,
2727
candlesHist,
2828
tickers,
29-
MinOrderArgs (..),
30-
mkMinOrder,
29+
MkOrder (..),
30+
mkOrder,
3131
module X,
3232
)
3333
where
@@ -580,10 +580,11 @@ tickers =
580580
]
581581
emptyReq
582582

583-
data MinOrderArgs = MinOrderArgs
584-
{ minOrderArgsFee :: FeeRate,
585-
minOrderArgsBuyOrSell :: BuyOrSell,
586-
minOrderArgsCurrencyPair :: CurrencyPair
583+
data MkOrder = MkOrder
584+
{ mkOrderFee :: FeeRate,
585+
mkOrderBuyOrSell :: BuyOrSell,
586+
mkOrderNetBaseAmt :: Maybe MoneyAmount,
587+
mkOrderCurrencyPair :: CurrencyPair
587588
}
588589
deriving stock
589590
( Eq,
@@ -594,43 +595,48 @@ data MinOrderArgs = MinOrderArgs
594595
Generic
595596
)
596597

597-
mkMinOrder ::
598+
mkOrder ::
598599
( MonadThrow m,
599600
MonadUnliftIO m
600601
) =>
601-
MinOrderArgs ->
602+
MkOrder ->
602603
m SubmitOrder.Request
603-
mkMinOrder args = do
604-
syms <- symbolsDetails
605-
minBaseAmt <-
604+
mkOrder args = do
605+
netBaseAmt <-
606606
maybe
607-
(throwString $ inspect @Text sym <> " is missing!")
608-
(pure . currencyPairMinOrderBaseAmt)
609-
$ Map.lookup sym syms
610-
baseAmt <-
607+
( do
608+
syms <- symbolsDetails
609+
maybe
610+
(throwString $ inspect @Text sym <> " is missing!")
611+
(pure . currencyPairMinOrderBaseAmt)
612+
$ Map.lookup sym syms
613+
)
614+
pure
615+
$ mkOrderNetBaseAmt args
616+
grossBaseAmt <-
611617
case bos of
612618
Buy ->
613619
tweakMoneyAmount Buy
614620
. MoneyAmount
615-
$ unMoneyAmount minBaseAmt
616-
/ (1 - unFeeRate (minOrderArgsFee args))
621+
$ unMoneyAmount netBaseAmt
622+
/ (1 - unFeeRate (mkOrderFee args))
617623
Sell ->
618-
pure minBaseAmt
624+
pure netBaseAmt
619625
price <-
620626
Bfx.marketAveragePrice
621627
MarketAveragePrice.Request
622628
{ MarketAveragePrice.buyOrSell = bos,
623-
MarketAveragePrice.baseAmount = baseAmt,
629+
MarketAveragePrice.baseAmount = grossBaseAmt,
624630
MarketAveragePrice.symbol = sym
625631
}
626632
pure
627633
SubmitOrder.Request
628634
{ SubmitOrder.buyOrSell = bos,
629-
SubmitOrder.baseAmount = baseAmt,
635+
SubmitOrder.baseAmount = grossBaseAmt,
630636
SubmitOrder.symbol = sym,
631637
SubmitOrder.rate = price,
632638
SubmitOrder.options = SubmitOrder.optsDef
633639
}
634640
where
635-
bos = minOrderArgsBuyOrSell args
636-
sym = minOrderArgsCurrencyPair args
641+
bos = mkOrderBuyOrSell args
642+
sym = mkOrderCurrencyPair args

pub/bfx/test/BfxSpec.hs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -125,17 +125,18 @@ spec = before sysEnv $ do
125125
it "candlesHist succeeds" . const $ do
126126
res <- tryAny $ Bfx.candlesHist Ctf1h adaBtc Candles.optsDef
127127
res `shouldSatisfy` isRight
128-
it "mkMinOrder" . const $ do
128+
it "mkOrder" . const $ do
129129
let req =
130-
Bfx.MinOrderArgs
131-
{ Bfx.minOrderArgsFee = FeeRate 0.001,
132-
Bfx.minOrderArgsBuyOrSell = Buy,
133-
Bfx.minOrderArgsCurrencyPair = adaBtc
130+
Bfx.MkOrder
131+
{ Bfx.mkOrderFee = FeeRate 0.001,
132+
Bfx.mkOrderBuyOrSell = Buy,
133+
Bfx.mkOrderNetBaseAmt = Nothing,
134+
Bfx.mkOrderCurrencyPair = adaBtc
134135
}
135-
buyRes <- Bfx.mkMinOrder req
136-
SubmitOrder.baseAmount buyRes `shouldBe` MoneyAmount 4.00400401
137-
sellRes <- Bfx.mkMinOrder req {Bfx.minOrderArgsBuyOrSell = Sell}
138-
SubmitOrder.baseAmount sellRes `shouldBe` MoneyAmount 4
136+
buy <- Bfx.mkOrder req
137+
SubmitOrder.baseAmount buy `shouldBe` MoneyAmount 4.00400401
138+
sell <- Bfx.mkOrder req {Bfx.mkOrderBuyOrSell = Sell}
139+
SubmitOrder.baseAmount sell `shouldBe` MoneyAmount 4
139140

140141
-- describe "End2End" $ do
141142
-- itRight "submitOrderMaker" $ \env -> do

0 commit comments

Comments
 (0)