mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-08-17 12:48:11 +00:00
PyMtApi5: implemented function MarketBookGet
This commit is contained in:
+14
-2
@@ -44,6 +44,7 @@ class Mt5ApiApp:
|
|||||||
"SymbolInfoSessionTrade": self.process_symbol_info_session_trade,
|
"SymbolInfoSessionTrade": self.process_symbol_info_session_trade,
|
||||||
"MarketBookAdd": self.process_market_book_add,
|
"MarketBookAdd": self.process_market_book_add,
|
||||||
"MarketBookRelease": self.process_market_book_release,
|
"MarketBookRelease": self.process_market_book_release,
|
||||||
|
"MarketBookGet": self.process_market_book_get,
|
||||||
}
|
}
|
||||||
|
|
||||||
def on_disconnect(self, error_msg=None):
|
def on_disconnect(self, error_msg=None):
|
||||||
@@ -76,13 +77,16 @@ class Mt5ApiApp:
|
|||||||
def process_command(self, mtapi, command):
|
def process_command(self, mtapi, command):
|
||||||
pieces = command.split(" ", 1)
|
pieces = command.split(" ", 1)
|
||||||
if len(pieces) != 2 or not pieces[0] or not pieces[1]:
|
if len(pieces) != 2 or not pieces[0] or not pieces[1]:
|
||||||
print(f"! Invalid command format: {command}")
|
print(f"! Invalid command format: {command.rstrip()}")
|
||||||
return
|
return
|
||||||
if pieces[0] not in self.cmd_functions:
|
if pieces[0] not in self.cmd_functions:
|
||||||
print(f"! Unknown command: {pieces[0]}")
|
print(f"! Unknown command: {pieces[0]}")
|
||||||
return
|
return
|
||||||
params = pieces[1].rstrip()
|
params = pieces[1].rstrip()
|
||||||
self.cmd_functions[pieces[0]](mtapi, params)
|
try:
|
||||||
|
self.cmd_functions[pieces[0]](mtapi, params)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Failed to process command {command.rstrip()}: {e}")
|
||||||
|
|
||||||
def process_account_info_double(self, mtapi, parameters):
|
def process_account_info_double(self, mtapi, parameters):
|
||||||
property_id = mt5enums.ENUM_ACCOUNT_INFO_DOUBLE(int(parameters))
|
property_id = mt5enums.ENUM_ACCOUNT_INFO_DOUBLE(int(parameters))
|
||||||
@@ -266,6 +270,14 @@ class Mt5ApiApp:
|
|||||||
result = mtapi.market_book_release(symbol)
|
result = mtapi.market_book_release(symbol)
|
||||||
print(f"> MarketBookRelease: response = {result}")
|
print(f"> MarketBookRelease: response = {result}")
|
||||||
|
|
||||||
|
def process_market_book_get(self, mtapi, parameters):
|
||||||
|
if len(parameters) == 0:
|
||||||
|
print(f"! Invalid parameters for command MarketBookGet: {parameters} - {len(parameters)}")
|
||||||
|
return
|
||||||
|
symbol = parameters
|
||||||
|
result = mtapi.market_book_get(symbol)
|
||||||
|
print(f"> MarketBookGet: response = {result}")
|
||||||
|
|
||||||
def mtapi_command_thread(self, mtapi):
|
def mtapi_command_thread(self, mtapi):
|
||||||
while mtapi.is_connected():
|
while mtapi.is_connected():
|
||||||
filename = "client.cmd"
|
filename = "client.cmd"
|
||||||
|
|||||||
@@ -130,6 +130,15 @@ class MqlTradeResult:
|
|||||||
f"bid = {self.bid}, ask = {self.ask}, comment = {self.comment}, request_id = {self.request_id}"
|
f"bid = {self.bid}, ask = {self.ask}, comment = {self.comment}, request_id = {self.request_id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class MqlBookInfo:
|
||||||
|
def __init__(self, mql_book_info):
|
||||||
|
self.book_type = ENUM_BOOK_TYPE(mql_book_info["type"])
|
||||||
|
self.price = mql_book_info["price"]
|
||||||
|
self.volume = mql_book_info["volume"]
|
||||||
|
self.volume_real = mql_book_info["volume_real"]
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return ( f"book_type = {self.book_type}, price = {self.price}, volume = {self.volume}, volume_real = {self.volume_real}" )
|
||||||
|
|
||||||
class Mt5ApiClient:
|
class Mt5ApiClient:
|
||||||
def __init__(self, address, port, callback=None):
|
def __init__(self, address, port, callback=None):
|
||||||
@@ -376,6 +385,11 @@ class Mt5ApiClient:
|
|||||||
cmd_params = {"Symbol": symbol}
|
cmd_params = {"Symbol": symbol}
|
||||||
return self.__send_command(self.__get_default_expert(), Mt5CommandType.MarketBookRelease, cmd_params)
|
return self.__send_command(self.__get_default_expert(), Mt5CommandType.MarketBookRelease, cmd_params)
|
||||||
|
|
||||||
|
# MarketBookGet
|
||||||
|
def market_book_get(self, symbol: str):
|
||||||
|
cmd_params = {"Symbol": symbol}
|
||||||
|
return self.__send_command(self.__get_default_expert(), Mt5CommandType.MarketBookGet, cmd_params)
|
||||||
|
|
||||||
# Private methods
|
# Private methods
|
||||||
|
|
||||||
def __event_thread_func(self):
|
def __event_thread_func(self):
|
||||||
@@ -404,8 +418,9 @@ class Mt5ApiClient:
|
|||||||
response_json = json.loads(response)
|
response_json = json.loads(response)
|
||||||
error_code = int(response_json["ErrorCode"])
|
error_code = int(response_json["ErrorCode"])
|
||||||
if error_code != 0:
|
if error_code != 0:
|
||||||
self.__logger.warning(f"send_command: ErrorCode = {response.ErrorCode}. {response.ErrorMessage}")
|
error_message = response_json["ErrorMessage"]
|
||||||
raise Exception(f"Failed to send command: ErrorCode = {response.ErrorCode}. {response.ErrorMessage} ")
|
self.__logger.warning(f"send_command: ErrorCode = {error_code}. {error_message}")
|
||||||
|
raise Exception(f"Failed to send command: ErrorCode = {error_code}. {error_message} ")
|
||||||
return response_json["Value"]
|
return response_json["Value"]
|
||||||
|
|
||||||
def __process_tick_event(self, payload):
|
def __process_tick_event(self, payload):
|
||||||
|
|||||||
Reference in New Issue
Block a user