[Add] SpreadData supports inverse contract leg

This commit is contained in:
vn.py 2019-10-22 11:40:47 +08:00
parent 9e92d989d7
commit b5892b9607
3 changed files with 25 additions and 6 deletions

View File

@ -78,7 +78,8 @@ class SpreadData:
legs: List[LegData], legs: List[LegData],
price_multipliers: Dict[str, int], price_multipliers: Dict[str, int],
trading_multipliers: Dict[str, int], trading_multipliers: Dict[str, int],
active_symbol: str active_symbol: str,
inverse_contracts: Dict[str, bool]
): ):
"""""" """"""
self.name: str = name self.name: str = name
@ -88,10 +89,13 @@ class SpreadData:
self.passive_legs: List[LegData] = [] self.passive_legs: List[LegData] = []
# For calculating spread price # For calculating spread price
self.price_multipliers: Dict[str: int] = price_multipliers self.price_multipliers: Dict[str, int] = price_multipliers
# For calculating spread pos and sending orders # For calculating spread pos and sending orders
self.trading_multipliers: Dict[str: int] = trading_multipliers self.trading_multipliers: Dict[str, int] = trading_multipliers
# For inverse derivative contracts of crypto market
self.inverse_contracts: Dict[str, bool] = inverse_contracts
self.price_formula: str = "" self.price_formula: str = ""
self.trading_formula: str = "" self.trading_formula: str = ""

View File

@ -253,6 +253,7 @@ class SpreadDataEngine:
legs: List[LegData] = [] legs: List[LegData] = []
price_multipliers: Dict[str, int] = {} price_multipliers: Dict[str, int] = {}
trading_multipliers: Dict[str, int] = {} trading_multipliers: Dict[str, int] = {}
inverse_contracts: Dict[str, bool] = {}
for leg_setting in leg_settings: for leg_setting in leg_settings:
vt_symbol = leg_setting["vt_symbol"] vt_symbol = leg_setting["vt_symbol"]
@ -261,13 +262,15 @@ class SpreadDataEngine:
legs.append(leg) legs.append(leg)
price_multipliers[vt_symbol] = leg_setting["price_multiplier"] price_multipliers[vt_symbol] = leg_setting["price_multiplier"]
trading_multipliers[vt_symbol] = leg_setting["trading_multiplier"] trading_multipliers[vt_symbol] = leg_setting["trading_multiplier"]
inverse_contracts[vt_symbol] = leg_setting.get("inverse_contracts", False)
spread = SpreadData( spread = SpreadData(
name, name,
legs, legs,
price_multipliers, price_multipliers,
trading_multipliers, trading_multipliers,
active_symbol active_symbol,
inverse_contracts
) )
self.spreads[name] = spread self.spreads[name] = spread

View File

@ -392,6 +392,7 @@ class SpreadDataDialog(QtWidgets.QDialog):
grid.addWidget(Label("本地代码"), 3, 1) grid.addWidget(Label("本地代码"), 3, 1)
grid.addWidget(Label("价格乘数"), 3, 2) grid.addWidget(Label("价格乘数"), 3, 2)
grid.addWidget(Label("交易乘数"), 3, 3) grid.addWidget(Label("交易乘数"), 3, 3)
grid.addWidget(Label("合约模式"), 3, 4)
int_validator = QtGui.QIntValidator() int_validator = QtGui.QIntValidator()
@ -405,15 +406,20 @@ class SpreadDataDialog(QtWidgets.QDialog):
trading_line = QtWidgets.QLineEdit() trading_line = QtWidgets.QLineEdit()
trading_line.setValidator(int_validator) trading_line.setValidator(int_validator)
inverse_combo = QtWidgets.QComboBox()
inverse_combo.addItems(["正向", "反向"])
grid.addWidget(Label("{}".format(i + 1)), 4 + i, 0) grid.addWidget(Label("{}".format(i + 1)), 4 + i, 0)
grid.addWidget(symbol_line, 4 + i, 1) grid.addWidget(symbol_line, 4 + i, 1)
grid.addWidget(price_line, 4 + i, 2) grid.addWidget(price_line, 4 + i, 2)
grid.addWidget(trading_line, 4 + i, 3) grid.addWidget(trading_line, 4 + i, 3)
grid.addWidget(inverse_combo, 4 + i, 4)
d = { d = {
"symbol": symbol_line, "symbol": symbol_line,
"price": price_line, "price": price_line,
"trading": trading_line "trading": trading_line,
"inverse": inverse_combo
} }
self.leg_widgets.append(d) self.leg_widgets.append(d)
@ -443,10 +449,16 @@ class SpreadDataDialog(QtWidgets.QDialog):
price_multiplier = int(d["price"].text()) price_multiplier = int(d["price"].text())
trading_multiplier = int(d["trading"].text()) trading_multiplier = int(d["trading"].text())
if d["inverse"].currentText() == "正向":
inverse_contract = False
else:
inverse_contract = True
leg_settings[vt_symbol] = { leg_settings[vt_symbol] = {
"vt_symbol": vt_symbol, "vt_symbol": vt_symbol,
"price_multiplier": price_multiplier, "price_multiplier": price_multiplier,
"trading_multiplier": trading_multiplier "trading_multiplier": trading_multiplier,
"inverse_contract": inverse_contract
} }
except ValueError: except ValueError:
pass pass