from vnpy.app.position_manager.tools.position_operator.position_operator import PositionModel
class SymbolOperator:
@classmethod
def tqz_get_strategy_position(cls, market_vt_symbol, strategy_data):
if market_vt_symbol in cls.__get_strategy_vt_symbols(strategy_symbols=strategy_data.keys()):
market_vt_symbol = cls.__find_strategy_symbol_with_vt_symbol(strategy_symbols=strategy_data.keys(), vt_symbol=market_vt_symbol)
strategy_position = strategy_data[market_vt_symbol][PositionModel.position_key()]
else:
strategy_position = 0
return strategy_position
@classmethod
def tqz_synchronization_hint(cls, strategy_data, real_data, fail_vt_symbol):
if cls.__strategyData_is_realData(strategy_data=strategy_data, real_data=real_data):
hint = "持仓已同步完成"
else:
hint = "品种: " + str(fail_vt_symbol) + " 同步失败"
return hint
# --- private part ---
@classmethod
def __strategyData_is_realData(cls, strategy_data, real_data):
all_symbols_is_same = None
for vt_symbol in real_data.keys():
strategy_position_temp = cls.tqz_get_strategy_position(market_vt_symbol=vt_symbol, strategy_data=strategy_data)
if strategy_position_temp is real_data[vt_symbol]:
all_symbols_is_same = strategy_position_temp is real_data[vt_symbol]
continue
else:
all_symbols_is_same = strategy_position_temp is real_data[vt_symbol]
break
return all_symbols_is_same
@classmethod
def __marketVtSymbol_exsit_in_strategyData(cls, market_vt_symbol, strategy_data):
return market_vt_symbol in cls.__get_strategy_vt_symbols(strategy_symbols=strategy_data.keys())
@classmethod
def __marketVtSymbol_not_in_strategyData(cls, market_vt_symbol, strategy_data):
return not cls.__marketVtSymbol_exsit_in_strategyData(
market_vt_symbol=market_vt_symbol,
strategy_data=strategy_data.keys()
)
@staticmethod
def __get_vt_symbol(strategy_symbol):
return strategy_symbol.split(".")[0] + "." + strategy_symbol.split(".")[1]
@classmethod
def __get_strategy_vt_symbols(cls, strategy_symbols):
strategy_vt_symbols = []
for strategy_symbol in strategy_symbols:
vt_symbol = cls.__get_vt_symbol(strategy_symbol=strategy_symbol)
strategy_vt_symbols.append(vt_symbol)
return strategy_vt_symbols
@classmethod
def __find_strategy_symbol_with_vt_symbol(cls, strategy_symbols, vt_symbol):
find_strategy_symbol = None
for strategy_symbol in strategy_symbols:
strategy_vt_symbol = cls.__get_vt_symbol(strategy_symbol=strategy_symbol)
if vt_symbol == strategy_vt_symbol:
find_strategy_symbol = strategy_symbol
return find_strategy_symbol