mirror of
https://github.com/Ichinga-Samuel/aiomql.git
synced 2026-08-19 06:48:06 +00:00
v4
This commit is contained in:
@@ -50,7 +50,9 @@ async def close_all_positions():
|
||||
@pytest.fixture(scope="package", autouse=True)
|
||||
async def config(request):
|
||||
Path("tests/backtest/configs").mkdir(exist_ok=True)
|
||||
with open("aiomql.json", "r") as fh, open("tests/backtest/configs/test2.json", "w") as fh1, open("tests/backtest/test.json", "w") as fh2:
|
||||
with open("aiomql.json", "r") as fh, open("tests/backtest/configs/test2.json", "w") as fh1, open(
|
||||
"tests/backtest/test.json", "w"
|
||||
) as fh2:
|
||||
data = json.load(fh)
|
||||
data["mode"] = "backtest"
|
||||
json.dump(data, fh1, indent=2)
|
||||
|
||||
@@ -112,7 +112,11 @@ async def test_account(backtest_engine, positions):
|
||||
deal = backtest_engine.deals.history_deals_get(position=bo.order)
|
||||
bo_profit = deal[-1].profit
|
||||
assert len(all_pos) == 1
|
||||
assert backtest_engine.positions.margin == backtest_engine._account.margin == backtest_engine.positions.margins[so.order]
|
||||
assert (
|
||||
backtest_engine.positions.margin
|
||||
== backtest_engine._account.margin
|
||||
== backtest_engine.positions.margins[so.order]
|
||||
)
|
||||
profit = sum([pos.profit for pos in all_pos])
|
||||
n_balance = backtest_engine._account.balance
|
||||
n_equity = backtest_engine._account.equity
|
||||
|
||||
@@ -21,4 +21,8 @@ async def test_deals_manager(backtest_engine, sell_order, buy_order, period, pos
|
||||
deals = backtest_engine.deals.history_deals_get(position=bo.order)
|
||||
assert len(deals) <= 2
|
||||
orders = backtest_engine.deals.get_deals_range(date_from=start, date_to=end)
|
||||
assert len(orders) == backtest_engine.deals.history_deals_total(date_from=start, date_to=end) == len(backtest_engine.deals._data.keys())
|
||||
assert (
|
||||
len(orders)
|
||||
== backtest_engine.deals.history_deals_total(date_from=start, date_to=end)
|
||||
== len(backtest_engine.deals._data.keys())
|
||||
)
|
||||
|
||||
@@ -21,4 +21,8 @@ async def test_orders_manager(backtest_engine, sell_order, buy_order, period, po
|
||||
orders = backtest_engine.orders.history_orders_get(position=bo.order)
|
||||
assert len(orders) <= 2
|
||||
orders = backtest_engine.orders.get_orders_range(date_from=start, date_to=end)
|
||||
assert len(orders) == backtest_engine.orders.history_orders_total(date_from=start, date_to=end) == len(backtest_engine.orders._data.keys())
|
||||
assert (
|
||||
len(orders)
|
||||
== backtest_engine.orders.history_orders_total(date_from=start, date_to=end)
|
||||
== len(backtest_engine.orders._data.keys())
|
||||
)
|
||||
|
||||
@@ -47,7 +47,9 @@ async def close_all_positions():
|
||||
@pytest.fixture(scope="package", autouse=True)
|
||||
async def config(request):
|
||||
Path("tests/live/configs").mkdir(exist_ok=True)
|
||||
with open("aiomql.json", "r") as fh, open("tests/live/configs/test2.json", "w") as fh1, open("tests/live/test.json", "w") as fh2:
|
||||
with open("aiomql.json", "r") as fh, open("tests/live/configs/test2.json", "w") as fh1, open(
|
||||
"tests/live/test.json", "w"
|
||||
) as fh2:
|
||||
data = json.load(fh)
|
||||
json.dump(data, fh1, indent=2)
|
||||
json.dump(data, fh2, indent=2)
|
||||
|
||||
@@ -36,7 +36,13 @@ class TestRecordsAndResults:
|
||||
async def sell(self, mt):
|
||||
sym = "BTCUSD"
|
||||
sym_info = await mt.symbol_info(sym)
|
||||
return {"action": mt.TRADE_ACTION_DEAL, "symbol": sym, "volume": sym_info.volume_min, "type": mt.ORDER_TYPE_SELL, "price": sym_info.bid}
|
||||
return {
|
||||
"action": mt.TRADE_ACTION_DEAL,
|
||||
"symbol": sym,
|
||||
"volume": sym_info.volume_min,
|
||||
"type": mt.ORDER_TYPE_SELL,
|
||||
"price": sym_info.bid,
|
||||
}
|
||||
|
||||
@pytest.fixture(scope="class", autouse=True)
|
||||
async def setup(self, sell, buy, mt):
|
||||
@@ -48,7 +54,12 @@ class TestRecordsAndResults:
|
||||
sell_res = Result(result=OrderSendResult(**sell_res._asdict()), name="test_result")
|
||||
sell_res_2 = Result(result=OrderSendResult(**sell_res_2._asdict()), name="test_result")
|
||||
buy_res_2 = Result(result=OrderSendResult(**buy_res_2._asdict()), name="test_result")
|
||||
await asyncio.gather(buy_res.save(), sell_res.save(), buy_res_2.save(trade_record_mode="json"), sell_res_2.save(trade_record_mode="json"))
|
||||
await asyncio.gather(
|
||||
buy_res.save(),
|
||||
sell_res.save(),
|
||||
buy_res_2.save(trade_record_mode="json"),
|
||||
sell_res_2.save(trade_record_mode="json"),
|
||||
)
|
||||
await Positions().close_all()
|
||||
|
||||
def test_records_dir(self):
|
||||
|
||||
@@ -14,7 +14,13 @@ class TestBackTestEngine:
|
||||
def setup_class(cls):
|
||||
cls.start = datetime(2024, 2, 1)
|
||||
cls.end = datetime(2024, 2, 7)
|
||||
cls.g_data = GetData(start=cls.start, end=cls.end, symbols=["BTCUSD", "SOLUSD"], timeframes=[TimeFrame.H1, TimeFrame.H2], name="test_engine")
|
||||
cls.g_data = GetData(
|
||||
start=cls.start,
|
||||
end=cls.end,
|
||||
symbols=["BTCUSD", "SOLUSD"],
|
||||
timeframes=[TimeFrame.H1, TimeFrame.H2],
|
||||
name="test_engine",
|
||||
)
|
||||
cls.bte = BackTestEngine(start=cls.start, end=cls.end, assign_to_config=True, preload=False)
|
||||
|
||||
@pytest.fixture(scope="class")
|
||||
@@ -27,7 +33,13 @@ class TestBackTestEngine:
|
||||
@pytest.fixture(scope="class")
|
||||
async def sell_order(self):
|
||||
sym = await self.bte.get_symbol_info(symbol="BTCUSD")
|
||||
request = {"type": OrderType.SELL, "symbol": "BTCUSD", "volume": sym.volume_min, "price": sym.bid, "action": TradeAction.DEAL}
|
||||
request = {
|
||||
"type": OrderType.SELL,
|
||||
"symbol": "BTCUSD",
|
||||
"volume": sym.volume_min,
|
||||
"price": sym.bid,
|
||||
"action": TradeAction.DEAL,
|
||||
}
|
||||
return request
|
||||
|
||||
@pytest.fixture(scope="class")
|
||||
@@ -47,7 +59,8 @@ class TestBackTestEngine:
|
||||
}
|
||||
return request
|
||||
|
||||
def modify_stops(self, order): ...
|
||||
def modify_stops(self, order):
|
||||
...
|
||||
|
||||
def test_span_and_range(self):
|
||||
assert self.bte.range == range(0, int((self.end - self.start).total_seconds()), self.bte.speed)
|
||||
@@ -255,10 +268,14 @@ class TestBackTestEngine:
|
||||
bte2.go_to(time=moment)
|
||||
sym = "BTCUSD"
|
||||
sym_info = await self.bte.get_symbol_info(symbol=sym)
|
||||
margin = await self.bte.order_calc_margin(action=OrderType.SELL, symbol=sym, volume=sym_info.volume_min, price=sym_info.bid)
|
||||
margin = await self.bte.order_calc_margin(
|
||||
action=OrderType.SELL, symbol=sym, volume=sym_info.volume_min, price=sym_info.bid
|
||||
)
|
||||
assert margin > 0
|
||||
sym_info2 = await self.bte.get_symbol_info(symbol=sym)
|
||||
margin2 = await bte2.order_calc_margin(action=OrderType.SELL, symbol=sym, volume=sym_info2.volume_min, price=sym_info2.bid)
|
||||
margin2 = await bte2.order_calc_margin(
|
||||
action=OrderType.SELL, symbol=sym, volume=sym_info2.volume_min, price=sym_info2.bid
|
||||
)
|
||||
assert margin2 > 0
|
||||
|
||||
async def test_order_check(self, buy_order, sell_order):
|
||||
|
||||
@@ -14,7 +14,9 @@ class TestGetData:
|
||||
cls.end = datetime(2024, 2, 2, tzinfo=UTC)
|
||||
cls.symbols = ["BTCUSD", "ETHUSD"]
|
||||
cls.timeframes = [TimeFrame.H1, TimeFrame.H2]
|
||||
cls.g_data = GetData(start=cls.start, end=cls.end, symbols=cls.symbols, timeframes=cls.timeframes, name="test_data")
|
||||
cls.g_data = GetData(
|
||||
start=cls.start, end=cls.end, symbols=cls.symbols, timeframes=cls.timeframes, name="test_data"
|
||||
)
|
||||
|
||||
@pytest.fixture(scope="class", autouse=True)
|
||||
async def get_data(self):
|
||||
|
||||
Reference in New Issue
Block a user