This commit is contained in:
Ichinga Samuel
2024-10-02 01:16:56 +01:00
parent 2df892af34
commit 9b55214d1a
6 changed files with 2 additions and 128 deletions
+2
View File
@@ -43,6 +43,7 @@ htmlcov/
.coverage
.coverage.*
.cache
.pytest_cache
nosetests.xml
coverage.xml
*,cover
@@ -77,4 +78,5 @@ config.json
aiomql.json
config/
test_data/
test.json
View File
View File
-95
View File
@@ -1,95 +0,0 @@
import signal
import asyncio
from asyncio import Condition, Task
import random
class EventManager:
def __init__(self, num_tasks: int, lock = None):
self.event = Condition(lock=lock)
self.num_tasks = num_tasks
self.counter = 0
self.state = 0
self.tasks: list[Task] = []
async def sleep(self, secs):
while secs > self.state:
await self.wait()
async def acquire(self):
await self.event.acquire()
def notify_all(self):
self.event.notify_all()
def sigint_handler(self, sig, frame):
for task in self.tasks:
print(task.get_name())
task.cancel() if not task.done() else ...
async def event_monitor(self):
while True:
async with self.event:
if self.counter == self.num_tasks:
self.counter = 0
self.state += 1
self.event.notify_all()
await asyncio.sleep(0)
async def wait(self):
self.counter += 1
await self.event.wait()
def release(self):
self.event.release()
async def long_task1(event: EventManager):
counter = 0
while True:
await event.acquire()
try:
await event.wait()
sleep = random.randint(1, 2)
await asyncio.sleep(sleep)
counter += 1
print(f'task 1: {event.state}-{counter}')
finally:
event.release()
async def long_task2(event: EventManager):
counter = 0
while True:
await event.acquire()
try:
await event.wait()
sleep = random.randint(1, 2)
await asyncio.sleep(sleep)
counter += 1
print(f'task 2: {event.state}-{counter}')
finally:
event.release()
async def long_task3(event: EventManager):
sleep = 10
while True:
await event.acquire()
try:
await event.wait()
await event.sleep(sleep)
print(f'task 3: {event.state}-{sleep}')
sleep += 10
finally:
event.release()
async def main():
manager = EventManager(num_tasks=3)
signal.signal(signal.SIGINT, manager.sigint_handler)
task1 = asyncio.create_task(long_task1(manager), name='task1')
task2 = asyncio.create_task(long_task2(manager), name='task2')
task3 = asyncio.create_task(long_task3(manager), name='task3')
control = asyncio.create_task(manager.event_monitor(), name='monitor')
manager.tasks.extend([task1, task2, task3, control])
res = await asyncio.gather(task1, task2, task3, control)
asyncio.run(main())
-5
View File
@@ -1,5 +0,0 @@
class Check1:
f: str
t: str
v: float
-28
View File
@@ -1,28 +0,0 @@
import asyncio
from aiomql import MetaTester, StrategyTester, FingerTrapTest, ForexSymbol, Account, TestData, GetData, Config, \
TestStrategy, EventManager, FingerTrapSingleTest, SingleStrategyTester
async def test_mul():
config = Config()
name = config.test_data_dir/"august_2024.pkl"
data = GetData.load_data(name=name)
td = TestData(data)
st1 = FingerTrapTest(symbol=ForexSymbol(name='Volatility 100 (1s) Index'))
st2 = FingerTrapTest(symbol=ForexSymbol(name='Volatility 25 Index'))
st = StrategyTester(strategies=[st1, st2])
await st.run(td)
async def test_one():
sym = ForexSymbol(name='Volatility 100 (1s) Index')
st1 = FingerTrapSingleTest(symbol=sym)
config = Config()
data = GetData.load_data(name=f"{config.test_data_dir}/august_24.pkl")
td = TestData(data)
st = SingleStrategyTester(strategy=st1)
await st.run(td)
asyncio.run(test_mul())