mirror of
https://github.com/Ichinga-Samuel/aiomql.git
synced 2026-08-12 19:38:05 +00:00
92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
# from datetime import datetime
|
|
# from collections import defaultdict
|
|
# from pickle import HIGHEST_PROTOCOL
|
|
# import _pickle as pickle
|
|
# import lzma
|
|
# import asyncio
|
|
# from itertools import product
|
|
# from typing import Iterable, TypeAlias
|
|
#
|
|
# from .meta_trader import MetaTrader
|
|
# from .constants import TimeFrame
|
|
# from .. import account, Account, Ticks, Symbol, Candles
|
|
#
|
|
# Rates: TypeAlias = dict[Symbol, dict[TimeFrame, Candles]]
|
|
# PriceTicks: TypeAlias = dict[Symbol, Ticks]
|
|
#
|
|
#
|
|
# class MetaTester(MetaTrader):
|
|
|
|
# def __init__(self, *, file=None, data: 'TestData' = None):
|
|
# self.file = file
|
|
#
|
|
# @property
|
|
# def data(self):
|
|
# return TestData.load(self.file)
|
|
#
|
|
#
|
|
# class TestData:
|
|
# rates: Rates
|
|
# ticks: PriceTicks
|
|
# account: Account
|
|
#
|
|
# def __init__(self, symbols: Iterable[Symbol], timeframes: Iterable[TimeFrame], start: datetime, end: datetime, file: str):
|
|
# self.symbols = symbols
|
|
# self.timeframes = timeframes
|
|
# self.start = start
|
|
# self.end = end
|
|
# self.file = file
|
|
#
|
|
# @property
|
|
# async def _account(self) -> Account:
|
|
# await account.refresh()
|
|
# return account
|
|
#
|
|
# @property
|
|
# async def _ticks(self) -> PriceTicks:
|
|
# tasks = []
|
|
# symbols = []
|
|
# for symbol in self.symbols:
|
|
# coro = symbol.copy_ticks_range(date_from=self.start, date_to=self.end)
|
|
# symbols.append(symbol)
|
|
# tasks.append(asyncio.create_task(coro))
|
|
# ticks = await asyncio.gather(*tasks)
|
|
# return {symbol: ticks for symbol, ticks in zip(symbols, ticks)}
|
|
#
|
|
# @property
|
|
# async def _rates(self) -> Rates:
|
|
# _data = {'tasks': [], 'symbols': [], 'timeframes': []}
|
|
# args: Iterable[tuple[Symbol, TimeFrame]] = product(self.symbols, self.timeframes)
|
|
# for symbol, timeframe in args:
|
|
# coro = symbol.copy_rates_range(date_from=self.start, date_to=self.end, timeframe=timeframe)
|
|
# _data['tasks'].append(asyncio.create_task(coro))
|
|
# _data['symbols'].append(symbol)
|
|
# _data['timeframes'].append(timeframe)
|
|
# _data['rates'] = await asyncio.gather(*_data['tasks'])
|
|
#
|
|
# data = defaultdict(dict)
|
|
# for rates, symbol, timeframe in zip(_data['rates'], _data['symbols'], _data['timeframes']):
|
|
# data[symbol] |= {timeframe: rates}
|
|
# return data
|
|
#
|
|
# async def copy_data(self):
|
|
# self.rates, self.ticks, self.account = await asyncio.gather(self._rates, self._ticks, self._account)
|
|
#
|
|
# async def dumps(self):
|
|
# return pickle.dumps(self, protocol=HIGHEST_PROTOCOL)
|
|
#
|
|
# async def dump(self):
|
|
# await self.copy_data()
|
|
# with lzma.open(self.file, 'wb') as fh:
|
|
# pickle.dump(self, fh, protocol=HIGHEST_PROTOCOL)
|
|
#
|
|
# @classmethod
|
|
# def load(cls, file) -> 'TestData':
|
|
# with lzma.open(file, 'rb') as fh:
|
|
# return pickle.load(fh)
|
|
#
|
|
# @classmethod
|
|
# def loads(cls, obj):
|
|
# return pickle.loads(obj)
|
|
#
|