mirror of
https://github.com/Ichinga-Samuel/aiomql.git
synced 2026-07-31 06:07:43 +00:00
190 lines
5.8 KiB
Python
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
|