diff --git a/client/mm/config.go b/client/mm/config.go
index 840f5563d1..ea11a2c2dd 100644
--- a/client/mm/config.go
+++ b/client/mm/config.go
@@ -120,10 +120,7 @@ type BotConfig struct {
}
func (c *BotConfig) requiresPriceOracle() bool {
- if c.BasicMMConfig != nil {
- return c.BasicMMConfig.OracleWeighting != nil && *c.BasicMMConfig.OracleWeighting > 0
- }
- return false
+ return c.BasicMMConfig != nil
}
func (c *BotConfig) requiresCEX() bool {
diff --git a/client/mm/mm_basic.go b/client/mm/mm_basic.go
index 6e73e94768..ddf3a04ada 100644
--- a/client/mm/mm_basic.go
+++ b/client/mm/mm_basic.go
@@ -12,21 +12,10 @@ import (
"sync/atomic"
"decred.org/dcrdex/client/core"
- "decred.org/dcrdex/client/orderbook"
"decred.org/dcrdex/dex"
"decred.org/dcrdex/dex/calc"
)
-const (
- // Our mid-gap rate derived from the local DEX order book is converted to an
- // effective mid-gap that can only vary by up to 3% from the oracle rate.
- // This is to prevent someone from taking advantage of a sparse market to
- // force a bot into giving a favorable price. In reality a market maker on
- // an empty market should use a high oracle bias anyway, but this should
- // prevent catastrophe.
- maxOracleMismatch = 0.03
-)
-
// GapStrategy is a specifier for an algorithm to choose the maker bot's target
// spread.
type GapStrategy string
@@ -81,22 +70,6 @@ type BasicMarketMakingConfig struct {
// before they are replaced (units: ratio of price). Default: 0.1%.
// 0 <= x <= 0.01.
DriftTolerance float64 `json:"driftTolerance"`
-
- // OracleWeighting affects how the target price is derived based on external
- // market data. OracleWeighting, r, determines the target price with the
- // formula:
- // target_price = dex_mid_gap_price * (1 - r) + oracle_price * r
- // OracleWeighting is limited to 0 <= x <= 1.0.
- // Fetching of price data is disabled if OracleWeighting = 0.
- OracleWeighting *float64 `json:"oracleWeighting"`
-
- // OracleBias applies a bias in the positive (higher price) or negative
- // (lower price) direction. -0.05 <= x <= 0.05.
- OracleBias float64 `json:"oracleBias"`
-
- // EmptyMarketRate can be set if there is no market data available, and is
- // ignored if there is market data available.
- EmptyMarketRate float64 `json:"emptyMarketRate"`
}
func needBreakEvenHalfSpread(strat GapStrategy) bool {
@@ -104,16 +77,6 @@ func needBreakEvenHalfSpread(strat GapStrategy) bool {
}
func (c *BasicMarketMakingConfig) Validate() error {
- if c.OracleBias < -0.05 || c.OracleBias > 0.05 {
- return fmt.Errorf("bias %f out of bounds", c.OracleBias)
- }
- if c.OracleWeighting != nil {
- w := *c.OracleWeighting
- if w < 0 || w > 1 {
- return fmt.Errorf("oracle weighting %f out of bounds", w)
- }
- }
-
if c.DriftTolerance == 0 {
c.DriftTolerance = 0.001
}
@@ -182,7 +145,6 @@ type basicMMCalculator interface {
type basicMMCalculatorImpl struct {
*market
- book dexOrderBook
oracle oracle
core botCoreAdaptor
cfg *BasicMarketMakingConfig
@@ -200,67 +162,19 @@ type basicMMCalculatorImpl struct {
// If there is no fiat rate available, the empty market rate in the
// configuration is used.
func (b *basicMMCalculatorImpl) basisPrice() uint64 {
- midGap, err := b.book.MidGap()
- if err != nil && !errors.Is(err, orderbook.ErrEmptyOrderbook) {
- b.log.Errorf("MidGap error: %v", err)
- return 0
- }
-
- basisPrice := float64(midGap) // float64 message-rate units
-
- var oracleWeighting, oraclePrice float64
- if b.cfg.OracleWeighting != nil && *b.cfg.OracleWeighting > 0 {
- oracleWeighting = *b.cfg.OracleWeighting
- oraclePrice = b.oracle.getMarketPrice(b.baseID, b.quoteID)
- if oraclePrice == 0 {
- b.log.Warnf("no oracle price available for %s bot", b.name)
- }
- }
-
- if oraclePrice > 0 {
- msgOracleRate := float64(b.msgRate(oraclePrice))
-
- // Apply the oracle mismatch filter.
- if basisPrice > 0 {
- low, high := msgOracleRate*(1-maxOracleMismatch), msgOracleRate*(1+maxOracleMismatch)
- if basisPrice < low {
- b.log.Debugf("local mid-gap is below safe range. Using effective mid-gap of %.2f below the oracle rate.", maxOracleMismatch*100)
- basisPrice = low
- } else if basisPrice > high {
- b.log.Debugf("local mid-gap is above safe range. Using effective mid-gap of %.2f above the oracle rate.", maxOracleMismatch*100)
- basisPrice = high
- }
- }
+ oracleRate := b.msgRate(b.oracle.getMarketPrice(b.baseID, b.quoteID))
+ b.log.Tracef("oracle rate = %s", b.fmtRate(oracleRate))
- if b.cfg.OracleBias != 0 {
- msgOracleRate *= 1 + b.cfg.OracleBias
+ if oracleRate == 0 {
+ oracleRate = b.core.ExchangeRateFromFiatSources()
+ if oracleRate == 0 {
+ return 0
}
- if basisPrice == 0 { // no mid-gap available. Use the oracle price.
- basisPrice = msgOracleRate
- b.log.Tracef("basisPrice: using basis price %s from oracle because no mid-gap was found in order book", b.fmtRate(uint64(msgOracleRate)))
- } else {
- basisPrice = msgOracleRate*oracleWeighting + basisPrice*(1-oracleWeighting)
- b.log.Tracef("basisPrice: oracle-weighted basis price = %s", b.fmtRate(uint64(msgOracleRate)))
- }
- }
-
- if basisPrice > 0 {
- return steppedRate(uint64(basisPrice), b.rateStep)
+ b.log.Tracef("using fiat rate = %s", b.fmtRate(oracleRate))
}
- // TODO: add a configuration to turn off use of fiat rate?
- fiatRate := b.core.ExchangeRateFromFiatSources()
- if fiatRate > 0 {
- return steppedRate(fiatRate, b.rateStep)
- }
-
- if b.cfg.EmptyMarketRate > 0 {
- emptyMsgRate := b.msgRate(b.cfg.EmptyMarketRate)
- return steppedRate(emptyMsgRate, b.rateStep)
- }
-
- return 0
+ return steppedRate(oracleRate, b.rateStep)
}
// halfSpread calculates the distance from the mid-gap where if you sell a lot
@@ -419,10 +333,11 @@ func (m *basicMarketMaker) rebalance(newEpoch uint64) {
return
}
defer m.rebalanceRunning.Store(false)
+
m.log.Tracef("rebalance: epoch %d", newEpoch)
basisPrice := m.calculator.basisPrice()
if basisPrice == 0 {
- m.log.Errorf("No basis price available and no empty-market rate set")
+ m.log.Errorf("No basis price available")
return
}
@@ -431,6 +346,7 @@ func (m *basicMarketMaker) rebalance(newEpoch uint64) {
m.log.Errorf("Could not calculate fee-gap stats: %v", err)
return
}
+
m.registerFeeGap(feeGap)
var feeAdj uint64
if needBreakEvenHalfSpread(m.cfg().GapStrategy) {
@@ -448,14 +364,13 @@ func (m *basicMarketMaker) rebalance(newEpoch uint64) {
}
func (m *basicMarketMaker) botLoop(ctx context.Context) (*sync.WaitGroup, error) {
- book, bookFeed, err := m.core.SyncBook(m.host, m.baseID, m.quoteID)
+ _, bookFeed, err := m.core.SyncBook(m.host, m.baseID, m.quoteID)
if err != nil {
return nil, fmt.Errorf("failed to sync book: %v", err)
}
m.calculator = &basicMMCalculatorImpl{
market: m.market,
- book: book,
oracle: m.oracle,
core: m.core,
cfg: m.cfg(),
diff --git a/client/mm/mm_basic_test.go b/client/mm/mm_basic_test.go
index ab64ad6341..1e7f9ceba1 100644
--- a/client/mm/mm_basic_test.go
+++ b/client/mm/mm_basic_test.go
@@ -37,63 +37,28 @@ func TestBasisPrice(t *testing.T) {
}
tests := []*struct {
- name string
- midGap uint64
- oraclePrice uint64
- oracleBias float64
- oracleWeight float64
- conversions map[uint32]float64
- fiatRate uint64
- exp uint64
+ name string
+ oraclePrice uint64
+ fiatRate uint64
+ exp uint64
}{
{
- name: "just mid-gap is enough",
- midGap: 123e5,
- exp: 123e5,
+ name: "oracle price",
+ oraclePrice: 2000,
+ fiatRate: 1000,
+ exp: 2000,
},
{
- name: "mid-gap + oracle weight",
- midGap: 1950,
- oraclePrice: 2000,
- oracleWeight: 0.5,
- exp: 1975,
+ name: "no oracle price",
+ oraclePrice: 0,
+ fiatRate: 1000,
+ exp: 1000,
},
{
- name: "adjusted mid-gap + oracle weight",
- midGap: 1000, // adjusted to 1940
- oraclePrice: 2000,
- oracleWeight: 0.5,
- exp: 1970,
- },
- {
- name: "no mid-gap effectively sets oracle weight to 100%",
- midGap: 0,
- oraclePrice: 2000,
- oracleWeight: 0.5,
- exp: 2000,
- },
- {
- name: "mid-gap + oracle weight + oracle bias",
- midGap: 1950,
- oraclePrice: 2000,
- oracleBias: -0.01, // minus 20
- oracleWeight: 0.75,
- exp: 1972, // 0.25 * 1950 + 0.75 * (2000 - 20) = 1972
- },
- {
- name: "no mid-gap and no oracle weight fails to produce result",
- midGap: 0,
- oraclePrice: 0,
- oracleWeight: 0.75,
- exp: 0,
- },
- {
- name: "no mid-gap and no oracle weight, but fiat rate is set",
- midGap: 0,
- oraclePrice: 0,
- oracleWeight: 0.75,
- fiatRate: 1200,
- exp: 1200,
+ name: "no oracle price or fiat rate",
+ oraclePrice: 0,
+ fiatRate: 0,
+ exp: 0,
},
}
@@ -101,13 +66,6 @@ func TestBasisPrice(t *testing.T) {
oracle := &tOracle{
marketPrice: mkt.MsgRateToConventional(tt.oraclePrice),
}
- ob := &tOrderBook{
- midGap: tt.midGap,
- }
- cfg := &BasicMarketMakingConfig{
- OracleWeighting: &tt.oracleWeight,
- OracleBias: tt.oracleBias,
- }
tCore := newTCore()
adaptor := newTBotCoreAdaptor(tCore)
@@ -115,9 +73,8 @@ func TestBasisPrice(t *testing.T) {
calculator := &basicMMCalculatorImpl{
market: mustParseMarket(mkt),
- book: ob,
oracle: oracle,
- cfg: cfg,
+ cfg: &BasicMarketMakingConfig{},
log: tLogger,
core: adaptor,
}
diff --git a/client/webserver/live_test.go b/client/webserver/live_test.go
index 447c8acf94..a20852143e 100644
--- a/client/webserver/live_test.go
+++ b/client/webserver/live_test.go
@@ -2386,13 +2386,9 @@ func randomBotConfig(mkt *mm.MarketWithHost) *mm.BotConfig {
switch {
case typeRoll < 0.33: // basic MM
gapStrategy := gapStrategies[rand.Intn(len(gapStrategies))]
- oracleWeight := rand.Float64()
- oracleBias := rand.Float64()
basicCfg := &mm.BasicMarketMakingConfig{
- GapStrategy: gapStrategies[rand.Intn(len(gapStrategies))],
- DriftTolerance: rand.Float64() * 0.01,
- OracleWeighting: &oracleWeight,
- OracleBias: oracleBias,
+ GapStrategy: gapStrategies[rand.Intn(len(gapStrategies))],
+ DriftTolerance: rand.Float64() * 0.01,
}
cfg.BasicMMConfig = basicCfg
lots, gapFactors := newPlacements(gapStrategy)
diff --git a/client/webserver/site/src/html/mmsettings.tmpl b/client/webserver/site/src/html/mmsettings.tmpl
index 8609149770..1c83fdeaa1 100644
--- a/client/webserver/site/src/html/mmsettings.tmpl
+++ b/client/webserver/site/src/html/mmsettings.tmpl
@@ -685,64 +685,6 @@
epochs
-
- {{- /* EMPTY MARKET RATE */ -}}
-
-
-
-
-
-
- /
-
-
-
-
-
-
- {{- /* ORACLE SETTINGS */ -}}
-
- {{- /* USE ORACLE CHECKBOX */ -}}
-
-
- {{- /* ORACLE WEIGHTING */ -}}
-
-
- [[[Oracle weight]]]
-
-
-
-
-
- {{- /* ORACLE BIAS */ -}}
-
-
- [[[Oracle bias]]]
-
-
-
-
-
diff --git a/client/webserver/site/src/js/mmsettings.ts b/client/webserver/site/src/js/mmsettings.ts
index 8632e9baf9..a358542c5c 100644
--- a/client/webserver/site/src/js/mmsettings.ts
+++ b/client/webserver/site/src/js/mmsettings.ts
@@ -104,20 +104,6 @@ const defaultOrderPersistence = {
range: 40,
prec: 0
}
-const defaultOracleBias = {
- value: 0,
- minV: -0.01,
- maxV: 0.01,
- range: 0.02,
- prec: 4
-}
-const defaultOracleWeighting = {
- value: 1,
- minV: 0,
- maxV: 1,
- range: 1,
- prec: 4
-}
const defaultProfit = {
prec: 3,
value: 0.01,
@@ -160,9 +146,6 @@ const defaultMarketMakingConfig: ConfigState = {
sellPlacements: [],
buyPlacements: [],
driftTolerance: defaultDriftTolerance.value,
- oracleWeighting: 0.1,
- oracleBias: 0,
- emptyMarketRate: 0,
profit: 0.02,
orderPersistence: defaultOrderPersistence.value,
cexRebalance: true,
@@ -192,14 +175,9 @@ interface cexButton {
*/
interface ConfigState {
gapStrategy: string
- useOracles: boolean
profit: number
- useEmptyMarketRate: boolean
- emptyMarketRate: number
driftTolerance: number
orderPersistence: number // epochs
- oracleWeighting: number
- oracleBias: number
cexRebalance: boolean
disabled: boolean
buyPlacements: OrderPlacement[]
@@ -273,10 +251,6 @@ export default class MarketMakerSettingsPage extends BasePage {
driftToleranceSlider: MiniSlider
orderPersistence: NumberInput
orderPersistenceSlider: MiniSlider
- oracleBias: NumberInput
- oracleBiasSlider: MiniSlider
- oracleWeighting: NumberInput
- oracleWeightingSlider: MiniSlider
constructor (main: HTMLElement, specs: BotSpecs) {
super()
@@ -390,42 +364,6 @@ export default class MarketMakerSettingsPage extends BasePage {
this.orderPersistence.setValue(v)
})
- this.oracleBias = new NumberInput(page.oracleBias, {
- prec: defaultOracleBias.prec - 2,
- min: defaultOracleBias.minV * 100,
- changed: (rawV: number) => {
- const { minV, range, prec } = defaultOracleBias
- const [v] = toFourSigFigs(rawV / 100, prec)
- this.oracleBiasSlider.setValue((v - minV) / range)
- this.updatedConfig.oracleBias = v
- }
- })
-
- this.oracleBiasSlider = new MiniSlider(page.oracleBiasSlider, (r: number) => {
- const { minV, range, prec } = defaultOracleBias
- const [v] = toFourSigFigs(minV + r * range, prec)
- this.oracleBias.setValue(v * 100)
- this.updatedConfig.oracleBias = v
- })
-
- this.oracleWeighting = new NumberInput(page.oracleWeighting, {
- prec: defaultOracleWeighting.prec - 2,
- min: defaultOracleWeighting.minV * 100,
- changed: (rawV: number) => {
- const { minV, range, prec } = defaultOracleWeighting
- const [v] = toFourSigFigs(rawV / 100, prec)
- this.oracleWeightingSlider.setValue((v - minV) / range)
- this.updatedConfig.oracleWeighting = v / 100
- }
- })
-
- this.oracleWeightingSlider = new MiniSlider(page.oracleWeightingSlider, (r: number) => {
- const { minV, range, prec } = defaultOracleWeighting
- const [v] = toFourSigFigs(minV + r * range, prec)
- this.oracleWeighting.setValue(v * 100)
- this.updatedConfig.oracleWeighting = v
- })
-
this.qcProfit = new NumberInput(page.qcProfit, {
prec: defaultProfit.prec - 2, // converting to percent
sigFigs: true,
@@ -561,26 +499,6 @@ export default class MarketMakerSettingsPage extends BasePage {
this.updateModifiedMarkers()
})
- Doc.bind(page.useOracleCheckbox, 'change', () => {
- this.useOraclesChanged()
- this.updateModifiedMarkers()
- })
-
- Doc.bind(page.emptyMarketRateCheckbox, 'change', () => {
- this.useEmptyMarketRateChanged()
- this.updateModifiedMarkers()
- })
-
- Doc.bind(page.emptyMarketRateInput, 'change', () => {
- Doc.hide(page.emptyMarketRateErr)
- this.updatedConfig.emptyMarketRate = parseFloatDefault(page.emptyMarketRateInput.value, 0)
- this.updateModifiedMarkers()
- if (this.updatedConfig.emptyMarketRate === 0) {
- Doc.show(page.emptyMarketRateErr)
- page.emptyMarketRateErr.textContent = intl.prep(intl.ID_NO_ZERO)
- }
- })
-
this.botTypeSelectors = Doc.applySelector(page.botTypeForm, '[data-bot-type]')
for (const div of this.botTypeSelectors) {
Doc.bind(div, 'click', () => {
@@ -659,12 +577,9 @@ export default class MarketMakerSettingsPage extends BasePage {
const oldBotType = botCfg.arbMarketMakingConfig ? botTypeArbMM : botCfg.basicMarketMakingConfig ? botTypeBasicMM : botTypeBasicArb
if (oldBotType !== botType) botCfg = undefined
}
- const dmm = defaultMarketMakingConfig
Doc.setVis(botCfg, page.deleteBttnBox)
const oldCfg = this.originalConfig = Object.assign({}, defaultMarketMakingConfig, {
- useOracles: dmm.oracleWeighting > 0,
- useEmptyMarketRate: dmm.emptyMarketRate > 0,
disabled: viewOnly,
baseOptions: this.defaultWalletOptions(baseID),
quoteOptions: this.defaultWalletOptions(quoteID),
@@ -693,9 +608,6 @@ export default class MarketMakerSettingsPage extends BasePage {
oldCfg.sellPlacements = mmCfg.sellPlacements
oldCfg.driftTolerance = mmCfg.driftTolerance
oldCfg.gapStrategy = mmCfg.gapStrategy
- oldCfg.oracleWeighting = mmCfg.oracleWeighting
- oldCfg.oracleBias = mmCfg.oracleBias
- oldCfg.emptyMarketRate = mmCfg.emptyMarketRate
} else if (arbMMCfg) {
const { buyPlacements, sellPlacements } = arbMMCfg
oldCfg.buyPlacements = Array.from(buyPlacements, (p: ArbMarketMakingPlacement) => { return { lots: p.lots, gapFactor: p.multiplier } })
@@ -730,7 +642,6 @@ export default class MarketMakerSettingsPage extends BasePage {
}
setMarketElements(document.body, baseID, quoteID, host)
- Doc.setVis(botType === botTypeBasicMM, page.emptyMarketRateBox)
Doc.setVis(botType !== botTypeBasicArb, page.driftToleranceBox, page.switchToAdvanced)
Doc.setVis(Boolean(cexName), ...Doc.applySelector(document.body, '[data-cex-show]'))
@@ -1408,9 +1319,6 @@ export default class MarketMakerSettingsPage extends BasePage {
}
}
page.sellPlacementsTableWrapper.classList.toggle('modified', sellPlacementsModified)
- page.useOracleCheckbox.classList.toggle('modified', oldCfg.useOracles !== newCfg.useOracles)
- page.emptyMarketRateInput.classList.toggle('modified', oldCfg.emptyMarketRate !== newCfg.emptyMarketRate)
- page.emptyMarketRateCheckbox.classList.toggle('modified', oldCfg.useEmptyMarketRate !== newCfg.useEmptyMarketRate)
}
/*
@@ -1674,34 +1582,6 @@ export default class MarketMakerSettingsPage extends BasePage {
for (const p of cfg.sellPlacements) this.addPlacement(false, p, gapStrategy)
}
- useOraclesChanged () {
- const { page, updatedConfig: cfg } = this
- if (page.useOracleCheckbox.checked) {
- Doc.show(page.oracleBiasBox, page.oracleWeightingBox)
- cfg.useOracles = true
- this.oracleWeighting.setValue((cfg.oracleWeighting || defaultMarketMakingConfig.oracleWeighting) * 100)
- this.oracleBias.setValue((cfg.oracleBias || defaultMarketMakingConfig.oracleBias) * 100)
- } else {
- Doc.hide(page.oracleBiasBox, page.oracleWeightingBox)
- cfg.useOracles = false
- }
- }
-
- useEmptyMarketRateChanged () {
- const { page, updatedConfig: cfg } = this
- if (page.emptyMarketRateCheckbox.checked) {
- cfg.useEmptyMarketRate = true
- const r = cfg.emptyMarketRate ?? this.originalConfig.emptyMarketRate ?? 0
- page.emptyMarketRateInput.value = String(r)
- cfg.emptyMarketRate = r
- Doc.show(page.emptyMarketRateInputBox)
- this.updateModifiedMarkers()
- } else {
- cfg.useEmptyMarketRate = false
- Doc.hide(page.emptyMarketRateInputBox)
- }
- }
-
/*
* setOriginalValues sets the updatedConfig field to be equal to the
* and sets the values displayed buy each field input to be equal
@@ -1733,24 +1613,11 @@ export default class MarketMakerSettingsPage extends BasePage {
this.orderPersistence.setValue(persist)
this.orderPersistenceSlider.setValue(persist / defaultOrderPersistence.maxV)
- const oracleBias = cfg.oracleBias ?? defaultOracleBias.value
- this.oracleBias.setValue(oracleBias * 100)
- this.oracleBiasSlider.setValue((oracleBias - defaultOracleBias.minV) / defaultOracleBias.range)
-
- const oracleWeight = cfg.oracleWeighting ?? defaultOracleWeighting.value
- this.oracleWeighting.setValue(oracleWeight * 100)
- this.oracleWeightingSlider.setValue((oracleWeight - defaultOracleWeighting.minV) / defaultOracleWeighting.range)
-
const profit = cfg.profit ?? defaultProfit.value
page.profitInput.value = String(profit * 100)
this.qcProfit.setValue(profit * 100)
this.qcProfitSlider.setValue((profit - defaultProfit.minV) / defaultProfit.range)
- page.useOracleCheckbox.checked = cfg.useOracles && oldCfg.oracleWeighting > 0
- this.useOraclesChanged()
- page.emptyMarketRateCheckbox.checked = cfg.useEmptyMarketRate && cfg.emptyMarketRate > 0
- this.useEmptyMarketRateChanged()
-
if (cexName) {
page.cexRebalanceCheckbox.checked = cfg.cexRebalance
this.autoRebalanceChanged()
@@ -1762,11 +1629,11 @@ export default class MarketMakerSettingsPage extends BasePage {
this.setGapFactorLabels(cfg.gapStrategy)
if (botType === botTypeBasicMM) {
- Doc.show(page.gapStrategyBox, page.oraclesSettingBox)
+ Doc.show(page.gapStrategyBox)
Doc.hide(page.profitSelectorBox, page.orderPersistenceBox)
this.setGapFactorLabels(page.gapStrategySelect.value || '')
} else if (cexName && app().mmStatus.cexes[cexName]) {
- Doc.hide(page.gapStrategyBox, page.oraclesSettingBox)
+ Doc.hide(page.gapStrategyBox)
Doc.show(page.profitSelectorBox, page.orderPersistenceBox)
this.setArbMMLabels()
}
@@ -1790,7 +1657,7 @@ export default class MarketMakerSettingsPage extends BasePage {
let ok = true
const {
page, specs: { botType },
- updatedConfig: { sellPlacements, buyPlacements, profit, useEmptyMarketRate, emptyMarketRate }
+ updatedConfig: { sellPlacements, buyPlacements, profit }
} = this
const setError = (errEl: PageElement, errID: string) => {
ok = false
@@ -1800,7 +1667,7 @@ export default class MarketMakerSettingsPage extends BasePage {
}
if (showErrors) {
Doc.hide(
- page.buyPlacementsErr, page.sellPlacementsErr, page.profitInputErr, page.emptyMarketRateErr
+ page.buyPlacementsErr, page.sellPlacementsErr, page.profitInputErr
)
}
if (botType !== botTypeBasicArb && buyPlacements.length + sellPlacements.length === 0) {
@@ -1810,10 +1677,6 @@ export default class MarketMakerSettingsPage extends BasePage {
if (botType !== botTypeBasicMM) {
if (isNaN(profit)) setError(page.profitInputErr, intl.ID_INVALID_VALUE)
else if (profit === 0) setError(page.profitInputErr, intl.ID_NO_ZERO)
- } else { // basic mm
- // TODO: Should we enforce an empty market rate if there are no
- // oracles?
- if (useEmptyMarketRate && emptyMarketRate === 0) setError(page.emptyMarketRateErr, intl.ID_NO_ZERO)
}
return ok
}
@@ -1921,10 +1784,7 @@ export default class MarketMakerSettingsPage extends BasePage {
gapStrategy: cfg.gapStrategy,
sellPlacements: cfg.sellPlacements,
buyPlacements: cfg.buyPlacements,
- driftTolerance: cfg.driftTolerance,
- oracleWeighting: cfg.useOracles ? cfg.oracleWeighting : 0,
- oracleBias: cfg.useOracles ? cfg.oracleBias : 0,
- emptyMarketRate: cfg.useEmptyMarketRate ? cfg.emptyMarketRate : 0
+ driftTolerance: cfg.driftTolerance
}
return mmCfg
}
diff --git a/client/webserver/site/src/js/registry.ts b/client/webserver/site/src/js/registry.ts
index 2992a7ef41..b88f93d15e 100644
--- a/client/webserver/site/src/js/registry.ts
+++ b/client/webserver/site/src/js/registry.ts
@@ -749,9 +749,6 @@ export interface BasicMarketMakingConfig {
sellPlacements: OrderPlacement[]
buyPlacements: OrderPlacement[]
driftTolerance: number
- oracleWeighting: number
- oracleBias: number
- emptyMarketRate: number
}
export interface ArbMarketMakingPlacement {