Skip to content

Commit cc793cb

Browse files
committed
simple bfx wip
1 parent 5e3762a commit cc793cb

File tree

11 files changed

+140
-160
lines changed

11 files changed

+140
-160
lines changed

nix/configuration.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
}: let
77
vi = import ./../pub/vi/nix/default.nix {};
88
# xkb = pkgs.writeText "xkb-layout" (builtins.readFile ./../cfg/.Xmodmap);
9-
yewtube = import ./yewtube.nix;
9+
# yewtube = import ./yewtube.nix;
1010
qmk-setup = import ./qmk-setup.nix;
1111
lockCmd = "${pkgs.swaylock}/bin/swaylock --color=000000";
1212
home-manager = builtins.fetchTarball {

pub/bfx/bfx.cabal

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ library
128128
Bfx.Data.GetOrders
129129
Bfx.Data.Kind
130130
Bfx.Data.MarketAveragePrice
131-
Bfx.Data.Metro
132131
Bfx.Data.SubmitOrder
133132
Bfx.Data.Type
134133
Bfx.Data.Wallets
@@ -180,7 +179,6 @@ test-suite bfx-test
180179
Bfx.Data.GetOrders
181180
Bfx.Data.Kind
182181
Bfx.Data.MarketAveragePrice
183-
Bfx.Data.Metro
184182
Bfx.Data.SubmitOrder
185183
Bfx.Data.Type
186184
Bfx.Data.Wallets

pub/bfx/src/Bfx.hs

Lines changed: 79 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -230,21 +230,9 @@ submitOrder ::
230230
MonadUnliftIO m
231231
) =>
232232
Env ->
233-
BuyOrSell ->
234-
MoneyAmount ->
235-
CurrencyPair ->
236-
QuotePerBase ->
237-
SubmitOrder.Options ->
233+
SubmitOrder.Request ->
238234
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
248236
order <- Generic.prv @'SubmitOrder env req
249237
verifyOrder env (orderId order) req
250238

@@ -253,41 +241,28 @@ submitOrderMaker ::
253241
MonadUnliftIO m
254242
) =>
255243
Env ->
256-
BuyOrSell ->
257-
MoneyAmount ->
258-
CurrencyPair ->
259-
QuotePerBase ->
260-
SubmitOrder.Options ->
244+
SubmitOrder.Request ->
261245
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)
270249

271250
submitOrderMakerRec ::
272251
( MonadThrow m,
273252
MonadUnliftIO m
274253
) =>
275-
Env ->
276-
BuyOrSell ->
277-
MoneyAmount ->
278-
CurrencyPair ->
279254
Int ->
280-
QuotePerBase ->
281-
SubmitOrder.Options ->
255+
Env ->
256+
SubmitOrder.Request ->
282257
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
285260
if orderStatus order /= PostOnlyCancelled
286261
then pure order
287262
else do
288263
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
291266

292267
cancelOrderMulti ::
293268
( MonadThrow m,
@@ -316,8 +291,8 @@ cancelOrderById env id0 = do
316291
maybe (throw $ ErrorMissingOrder id0) pure mOrder
317292

318293
cancelOrderByClientId ::
319-
( MonadUnliftIO m,
320-
MonadThrow m
294+
( MonadThrow m,
295+
MonadUnliftIO m
321296
) =>
322297
Env ->
323298
OrderClientId ->
@@ -333,8 +308,8 @@ cancelOrderByClientId env cid utc =
333308
)
334309

335310
cancelOrderByGroupId ::
336-
( MonadUnliftIO m,
337-
MonadThrow m
311+
( MonadThrow m,
312+
MonadUnliftIO m
338313
) =>
339314
Env ->
340315
OrderGroupId ->
@@ -345,58 +320,55 @@ cancelOrderByGroupId env gid = do
345320
$ Set.singleton gid
346321

347322
submitCounterOrder ::
348-
( MonadUnliftIO m,
349-
MonadThrow m
323+
( MonadThrow m,
324+
MonadUnliftIO m
350325
) =>
351326
Env ->
352327
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 ->
357329
SubmitOrder.Options ->
358330
m Order
359331
submitCounterOrder =
360-
submitCounterOrder' submitOrder
332+
mkSubmitCounterOrder submitOrder
361333

362334
submitCounterOrderMaker ::
363-
( MonadUnliftIO m,
364-
MonadThrow m
335+
( MonadThrow m,
336+
MonadUnliftIO m
365337
) =>
366338
Env ->
367339
OrderId ->
368-
(MoneyAmount -> QuotePerBase -> Math.CounterArgs) ->
340+
CounterRates ->
369341
SubmitOrder.Options ->
370342
m Order
371343
submitCounterOrderMaker =
372-
submitCounterOrder' submitOrderMaker
344+
mkSubmitCounterOrder submitOrderMaker
373345

374-
submitCounterOrder' ::
375-
( MonadUnliftIO m,
376-
MonadThrow m
346+
mkSubmitCounterOrder ::
347+
( MonadThrow m,
348+
MonadUnliftIO m
377349
) =>
378-
( Env ->
379-
BuyOrSell ->
380-
MoneyAmount ->
381-
CurrencyPair ->
382-
QuotePerBase ->
383-
SubmitOrder.Options ->
384-
m Order
350+
( Env -> SubmitOrder.Request -> m Order
385351
) ->
386352
Env ->
387353
OrderId ->
388-
(MoneyAmount -> QuotePerBase -> Math.CounterArgs) ->
354+
CounterRates ->
389355
SubmitOrder.Options ->
390356
m Order
391-
submitCounterOrder' submit env id0 mkCounter opts = do
357+
mkSubmitCounterOrder submit env id0 rates opts = do
392358
remOrder <- getOrder env id0
393359
let sym = orderSymbol remOrder
394360
case orderBuyOrSell remOrder of
395361
Buy | orderStatus remOrder == Executed -> do
396362
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+
}
400372
let exitAmt = Math.counterExitNetBaseLoss counter
401373
let exitRate = Math.counterExitQuotePerBase counter
402374
currentRate <-
@@ -408,32 +380,28 @@ submitCounterOrder' submit env id0 mkCounter opts = do
408380
}
409381
submit
410382
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+
}
416390
_ ->
417391
throw
418392
$ ErrorRemoteOrderState remOrder
419393

420-
dumpIntoQuote' ::
421-
( MonadUnliftIO m,
422-
MonadThrow m
394+
mkDumpIntoQuote ::
395+
( MonadThrow m,
396+
MonadUnliftIO m
423397
) =>
424-
( Env ->
425-
BuyOrSell ->
426-
MoneyAmount ->
427-
CurrencyPair ->
428-
QuotePerBase ->
429-
SubmitOrder.Options ->
430-
m Order
398+
( Env -> SubmitOrder.Request -> m Order
431399
) ->
432400
Env ->
433401
CurrencyPair ->
434402
SubmitOrder.Options ->
435403
m Order
436-
dumpIntoQuote' submit env sym opts = do
404+
mkDumpIntoQuote submit env sym opts = do
437405
amt <- spendableExchangeBalance env (currencyPairBase sym)
438406
rate <-
439407
marketAveragePrice
@@ -442,38 +410,46 @@ dumpIntoQuote' submit env sym opts = do
442410
MarketAveragePrice.baseAmount = amt,
443411
MarketAveragePrice.symbol = sym
444412
}
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)
447424
. const
448-
$ do
449-
newAmt <- Math.tweakMoneyPip Sell amt
450-
submit env Sell newAmt sym rate opts
425+
$ Math.tweakMoneyPip Sell amt
426+
>>= mkSubmit
451427

452428
dumpIntoQuote ::
453-
( MonadUnliftIO m,
454-
MonadThrow m
429+
( MonadThrow m,
430+
MonadUnliftIO m
455431
) =>
456432
Env ->
457433
CurrencyPair ->
458434
SubmitOrder.Options ->
459435
m Order
460436
dumpIntoQuote =
461-
dumpIntoQuote' submitOrder
437+
mkDumpIntoQuote submitOrder
462438

463439
dumpIntoQuoteMaker ::
464-
( MonadUnliftIO m,
465-
MonadThrow m
440+
( MonadThrow m,
441+
MonadUnliftIO m
466442
) =>
467443
Env ->
468444
CurrencyPair ->
469445
SubmitOrder.Options ->
470446
m Order
471447
dumpIntoQuoteMaker =
472-
dumpIntoQuote' submitOrderMaker
448+
mkDumpIntoQuote submitOrderMaker
473449

474450
netWorth ::
475-
( MonadUnliftIO m,
476-
MonadThrow m
451+
( MonadThrow m,
452+
MonadUnliftIO m
477453
) =>
478454
Env ->
479455
CurrencyCode ->
@@ -532,8 +508,8 @@ netWorth env ccq = do
532508
roundMoneyAmount $ MoneyAmount res
533509

534510
candlesLast ::
535-
( MonadUnliftIO m,
536-
MonadThrow m
511+
( MonadThrow m,
512+
MonadUnliftIO m
537513
) =>
538514
CandleTimeFrame ->
539515
CurrencyPair ->
@@ -556,8 +532,8 @@ candlesLast tf sym opts =
556532
}
557533

558534
candlesHist ::
559-
( MonadUnliftIO m,
560-
MonadThrow m
535+
( MonadThrow m,
536+
MonadUnliftIO m
561537
) =>
562538
CandleTimeFrame ->
563539
CurrencyPair ->
@@ -580,12 +556,12 @@ candlesHist tf sym opts =
580556
}
581557

582558
tickers ::
583-
( MonadUnliftIO m,
584-
MonadThrow m
559+
( MonadThrow m,
560+
MonadUnliftIO m
585561
) =>
586562
m (Map CurrencyPair Ticker)
587563
tickers =
588564
Generic.pub @'Tickers
589565
[ SomeQueryParam "symbols" ("ALL" :: Text)
590566
]
591-
()
567+
emptyReq

pub/bfx/src/Bfx/Class/FromRpc.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ where
99

1010
import qualified Bfx.Data.FeeSummary as FeeSummary
1111
import Bfx.Data.Kind
12-
import Bfx.Data.Metro
1312
import Bfx.Data.Type
1413
import qualified Bfx.Data.Wallets as Wallets
1514
import Bfx.Data.Web
1615
import Bfx.Import.External
16+
import Bfx.Math
1717
import Bfx.Parser
1818
import Data.Aeson.Lens
1919
import qualified Data.Map as Map

pub/bfx/src/Bfx/Class/ToPathPieces.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ candlesPathPieces x =
101101
<> ":"
102102
<> toTextParam (Candles.symbol x)
103103

104-
instance ToPathPieces 'Tickers () where
104+
instance ToPathPieces 'Tickers req where
105105
toPathPieces =
106106
const
107107
[ "v2",

0 commit comments

Comments
 (0)