Files
2026-02-21 16:53:12 +01:00

190 lines
5.8 KiB
Python

from datetime import datetime, timedelta, UTC
import MetaTrader5
from aiomql.core.sync.meta_trader import MetaTrader
class TestMetaTraderSync:
@classmethod
def setup_class(cls):
cls.mt = MetaTrader()
cls.mt5 = MetaTrader5
cls.symbol = "BTCUSD"
now = datetime.now(tz=UTC)
cls.start = now - timedelta(hours=10)
cls.end = now + timedelta(hours=1)
cls.tf = cls.mt.TIMEFRAME_H1
@classmethod
def teardown_class(cls):
cls.mt.shutdown()
def test_initialize(self):
res = self.mt.initialize()
assert res == True
def test_login(self):
res = self.mt.login()
assert res == True
def test_last_error(self):
res = self.mt.last_error()
assert isinstance(res, tuple)
assert res[0] == 1
assert res[1] == "Success"
def test_version(self):
res = self.mt.version()
res2 = self.mt5.version()
assert res is not None
assert res == res2
def test_account_info(self):
res = self.mt.account_info()
res2 = self.mt5.account_info()
assert res is not None
assert res == res2
def test_terminal_info(self):
res = self.mt.terminal_info()
res2 = self.mt5.terminal_info()
assert res is not None
assert res == res2
def test_symbols_total(self):
res = self.mt.symbols_total()
res2 = self.mt5.symbols_total()
assert isinstance(res, int)
assert res == res2
def test_symbols_get(self):
res = self.mt.symbols_get()
res2 = self.mt5.symbols_get()
assert res is not None
assert len(res) == len(res2)
def test_symbol_info(self):
res = self.mt.symbol_info(self.symbol)
res2 = self.mt5.symbol_info(self.symbol)
assert res is not None
assert res == res2
def test_symbol_info_tick(self):
res = self.mt.symbol_info_tick(self.symbol)
res2 = self.mt5.symbol_info_tick(self.symbol)
assert res is not None
assert res == res2
def test_symbol_select(self):
res = self.mt.symbol_select(self.symbol, True)
assert res == True
def test_market_book_add(self):
res = self.mt.market_book_add(self.symbol)
assert res == True
def test_market_book_get(self):
res = self.mt.market_book_get(self.symbol)
res2 = self.mt5.market_book_get(self.symbol)
assert res is not None
assert res == res2
def test_market_book_release(self):
res = self.mt.market_book_release(self.symbol)
assert res == True
def test_copy_rates_from(self):
res = self.mt.copy_rates_from(self.symbol, self.tf, self.start, 10)
assert res is not None
assert res.shape[0] == 10
def test_copy_rates_from_pos(self):
res = self.mt.copy_rates_from_pos(self.symbol, self.tf, 0, 10)
assert res is not None
assert res.shape[0] == 10
def test_copy_rates_range(self):
res = self.mt.copy_rates_range(self.symbol, self.tf, self.start, self.end)
assert res is not None
assert res.shape[0] == 10
def test_copy_ticks_from(self):
res = self.mt.copy_ticks_from(self.symbol, self.start, 10, self.mt.COPY_TICKS_ALL)
assert res is not None
assert res.shape[0] == 10
def test_copy_ticks_range(self):
res = self.mt.copy_ticks_range(self.symbol, self.start, self.end, self.mt.COPY_TICKS_ALL)
res2 = self.mt5.copy_ticks_range(self.symbol, self.start, self.end, self.mt5.COPY_TICKS_ALL)
assert res is not None
assert res.shape[0] == res2.shape[0]
def test_orders_total(self):
res = self.mt.orders_total()
assert isinstance(res, int)
def test_orders_get(self):
res = self.mt.orders_get()
assert res is not None
assert isinstance(res, tuple)
assert len(res) == 0
def test_order_calc_margin(self, sell_order_sync):
price = sell_order_sync["price"]
volume = sell_order_sync["volume"]
type_ = sell_order_sync["type"]
res = self.mt.order_calc_margin(type_, self.symbol, volume, price)
assert isinstance(res, float)
def test_order_calc_profit(self, buy_order_sync):
volume = buy_order_sync["volume"]
price_open = buy_order_sync["price"]
price_close = buy_order_sync["tp"]
type_ = buy_order_sync["type"]
res = self.mt.order_calc_profit(type_, self.symbol, volume, price_open, price_close)
assert isinstance(res, float)
def test_order_check(self, buy_order_sync):
res = self.mt.order_check(buy_order_sync)
assert res is not None
assert res.retcode == 0
def test_order_send(self, sell_order_sync):
res = self.mt.order_send(sell_order_sync)
assert res is not None
assert res.retcode == 10009
def test_positions_total(self):
res = self.mt.positions_total()
assert isinstance(res, int)
assert res >= 0
def test_positions_get(self):
res = self.mt.positions_get()
assert res is not None
assert isinstance(res, tuple)
assert len(res) >= 0
def test_history_orders_total(self):
res = self.mt.history_orders_total(self.start, self.end)
assert isinstance(res, int)
assert res >= 0
def test_history_orders_get(self):
res = self.mt.history_orders_get(self.start, self.end)
assert res is not None
assert isinstance(res, tuple)
assert len(res) >= 0
def test_history_deals_total(self):
res = self.mt.history_deals_total(self.start, self.end)
assert isinstance(res, int)
assert res >= 0
def test_history_deals_get(self):
res = self.mt.history_deals_get(self.start, self.end)
assert res is not None
assert isinstance(res, tuple)
assert len(res) >= 0