mirror of
https://github.com/Ichinga-Samuel/aiomql.git
synced 2026-08-23 08:48:05 +00:00
v4
This commit is contained in:
@@ -8,7 +8,7 @@ from ...core.constants import AccountTradeMode, AccountMarginMode, AccountStopOu
|
|||||||
class BackTestAccount:
|
class BackTestAccount:
|
||||||
login: int = 0
|
login: int = 0
|
||||||
trade_mode: AccountTradeMode = AccountTradeMode.DEMO
|
trade_mode: AccountTradeMode = AccountTradeMode.DEMO
|
||||||
leverage: float = 0
|
leverage: float = 1
|
||||||
limit_orders: float = 0
|
limit_orders: float = 0
|
||||||
margin_so_mode: AccountStopOutMode = AccountStopOutMode.PERCENT
|
margin_so_mode: AccountStopOutMode = AccountStopOutMode.PERCENT
|
||||||
trade_allowed: bool = True
|
trade_allowed: bool = True
|
||||||
|
|||||||
@@ -612,18 +612,11 @@ class BackTestEngine:
|
|||||||
# @error_handler
|
# @error_handler
|
||||||
async def get_rates_from_pos(self, *, symbol: str, timeframe: TimeFrame, start_pos: int, count: int) -> np.ndarray:
|
async def get_rates_from_pos(self, *, symbol: str, timeframe: TimeFrame, start_pos: int, count: int) -> np.ndarray:
|
||||||
if self.use_terminal:
|
if self.use_terminal:
|
||||||
# Todo: Optimize this!!!
|
|
||||||
# now = datetime.now(tz=UTC).timestamp()
|
|
||||||
# b_now = self.cursor.time
|
|
||||||
# diff = ceil((now - b_now) / timeframe.seconds)
|
|
||||||
# start_pos = int(diff + start_pos)
|
|
||||||
# # print('hehk', start_pos, count)
|
|
||||||
# res = await self.mt5.copy_rates_from_pos(symbol, timeframe, start_pos, count)
|
|
||||||
current_time = self.cursor.time if start_pos == 0 else self.cursor.time - start_pos * timeframe.seconds
|
current_time = self.cursor.time if start_pos == 0 else self.cursor.time - start_pos * timeframe.seconds
|
||||||
start = current_time - count * timeframe.seconds
|
current_time = round_up(current_time, timeframe.seconds)
|
||||||
start = datetime.fromtimestamp(start, tz=UTC)
|
start = datetime.fromtimestamp(current_time, tz=UTC)
|
||||||
rates = self.mt5.copy_rates_from(symbol, timeframe, start, count)
|
rates = await self.mt5.copy_rates_from(symbol, timeframe, start, count)
|
||||||
return res
|
return rates
|
||||||
|
|
||||||
rates = self.rates[symbol][timeframe]
|
rates = self.rates[symbol][timeframe]
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from aiomql.lib.bot import Bot
|
from aiomql.lib.bot import Bot
|
||||||
from aiomql.core import Config
|
from aiomql.contrib.strategies import Chaos
|
||||||
from aiomql.contrib.strategies import FingerTrap, Chaos
|
|
||||||
from aiomql.contrib.symbols import ForexSymbol
|
from aiomql.contrib.symbols import ForexSymbol
|
||||||
|
|
||||||
|
|
||||||
async def test_bot():
|
async def test_bot():
|
||||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||||
syms = ['Volatility 75 Index', 'Volatility 100 Index', 'Volatility 50 Index']
|
syms = ['BTCUSD', 'SOLUSD', 'ETHUSD']
|
||||||
symbols = [ForexSymbol(name=sym) for sym in syms]
|
symbols = [ForexSymbol(name=sym) for sym in syms]
|
||||||
stgs = [Chaos(symbol=symbol, name='test_chaos') for symbol in symbols]
|
stgs = [Chaos(symbol=symbol, name='test_chaos') for symbol in symbols]
|
||||||
bot = Bot()
|
bot = Bot()
|
||||||
@@ -16,9 +15,8 @@ async def test_bot():
|
|||||||
bot.executor.timeout = 30
|
bot.executor.timeout = 30
|
||||||
bot.add_strategies(strategies=stgs)
|
bot.add_strategies(strategies=stgs)
|
||||||
await bot.initialize()
|
await bot.initialize()
|
||||||
|
await bot.executor.execute()
|
||||||
assert bot.executor.no_of_running_strategies == 3
|
assert bot.executor.no_of_running_strategies == 3
|
||||||
assert len(bot.executor.coroutines) == 1
|
assert len(bot.executor.coroutines) == 1
|
||||||
assert len(bot.executor.coroutine_threads) == 1
|
assert len(bot.executor.coroutine_threads) == 1
|
||||||
assert len(bot.executor.tasks) == 5
|
|
||||||
assert bot.config.shutdown is True
|
assert bot.config.shutdown is True
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from datetime import datetime, UTC
|
|||||||
from aiomql import TimeFrame
|
from aiomql import TimeFrame
|
||||||
from aiomql.contrib.backtesting import BackTestEngine
|
from aiomql.contrib.backtesting import BackTestEngine
|
||||||
from aiomql.contrib.backtesting.get_data import GetData
|
from aiomql.contrib.backtesting.get_data import GetData
|
||||||
from aiomql._utils import round_down
|
from aiomql._utils import round_down, round_up
|
||||||
from aiomql.core.constants import OrderType, TradeAction
|
from aiomql.core.constants import OrderType, TradeAction
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -136,8 +136,8 @@ class TestBackTestEngine:
|
|||||||
tf = TimeFrame.H2
|
tf = TimeFrame.H2
|
||||||
start_pos = 2
|
start_pos = 2
|
||||||
rates = await self.bte.get_rates_from_pos(symbol='BTCUSD', timeframe=tf, start_pos=start_pos, count=24)
|
rates = await self.bte.get_rates_from_pos(symbol='BTCUSD', timeframe=tf, start_pos=start_pos, count=24)
|
||||||
assert int(rates[-1][0]) == round_down(int(now.replace(hour=7).timestamp()), tf.seconds)
|
|
||||||
assert len(rates) == 24
|
assert len(rates) == 24
|
||||||
|
assert int(rates[-1][0]) == round_down(int(now.replace(hour = now.hour - start_pos).timestamp()), tf.seconds)
|
||||||
|
|
||||||
async def test_get_rates_from_pos2(self, bte2):
|
async def test_get_rates_from_pos2(self, bte2):
|
||||||
now = datetime(2024, 2, 4, 12, 15, tzinfo=UTC)
|
now = datetime(2024, 2, 4, 12, 15, tzinfo=UTC)
|
||||||
|
|||||||
@@ -41,9 +41,8 @@ class TestBotFactoryAndExecutor:
|
|||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
def test_add_workers(self):
|
def test_add_workers(self):
|
||||||
assert len(self.bot.executor.coroutines) == 2
|
assert len(self.bot.executor.coroutines) == 3
|
||||||
# exit function already added
|
assert len(self.bot.executor.functions) == 1
|
||||||
assert len(self.bot.executor.functions) == 2
|
|
||||||
# task_queue already added coroutine_thread
|
# task_queue already added coroutine_thread
|
||||||
assert len(self.bot.executor.coroutine_threads) == 2
|
assert len(self.bot.executor.coroutine_threads) == 2
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
actual_profit,deal,ask,ltf,htf,price,order,slow_ema,symbol,expected_profit,lcc,date,bid,name,win,hcc,fast_ema,volume,closed
|
|
||||||
0,127446532,643587.63,TIMEFRAME_M1,TIMEFRAME_M2,643587.63,436128326,20,Volatility 75 Index,0,100,2021-01-01 00:00:00.000000,643457.63,Chaos,False,100,8,0.001,False
|
|
||||||
0,337655374,2268.02,TIMEFRAME_M1,TIMEFRAME_M2,2267.34,580347053,20,Volatility 100 Index,0,100,2021-01-01 00:00:00.000000,2267.34,Chaos,False,100,8,0.5,False
|
|
||||||
0,895556166,189.1722,TIMEFRAME_M1,TIMEFRAME_M2,189.1452,645695617,20,Volatility 50 Index,0,100,2021-01-01 00:00:00.000000,189.1452,Chaos,False,100,8,4.0,False
|
|
||||||
0,215199127,643587.63,TIMEFRAME_M1,TIMEFRAME_M2,643587.63,274191555,20,Volatility 75 Index,0,100,2021-01-01 00:00:00.000000,643457.63,Chaos,False,100,8,0.001,False
|
|
||||||
0,949649264,2268.02,TIMEFRAME_M1,TIMEFRAME_M2,2268.02,740685256,20,Volatility 100 Index,0,100,2021-01-01 00:00:00.000000,2267.34,Chaos,False,100,8,0.5,False
|
|
||||||
0,939601387,189.1722,TIMEFRAME_M1,TIMEFRAME_M2,189.1452,969153963,20,Volatility 50 Index,0,100,2021-01-01 00:00:00.000000,189.1452,Chaos,False,100,8,4.0,False
|
|
||||||
|
Reference in New Issue
Block a user