mirror of
https://github.com/Ichinga-Samuel/aiomql.git
synced 2026-07-29 21:27:43 +00:00
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
import asyncio
|
|
from logging import getLogger
|
|
from datetime import datetime
|
|
|
|
from aiomql import OpenPosition
|
|
|
|
logger = getLogger(__name__)
|
|
|
|
|
|
async def close_after(open_pos: OpenPosition, /, *, duration: int, start: float = 0):
|
|
if not await open_pos.update_position():
|
|
return
|
|
pos = open_pos.position
|
|
start = start or pos.time
|
|
diff = datetime.now().timestamp() - start
|
|
if diff > duration:
|
|
_, res = await open_pos.close_position()
|
|
if res.retcode == 10009:
|
|
logger.info("%s, %d closed", pos.symbol, pos.ticket)
|
|
|
|
|
|
async def hedge_position(pos: OpenPosition, /, *, hedge_amount: float = -2, close_hedge_amount: float = 0,
|
|
order_params: dict = None):
|
|
is_open = await pos.update_position()
|
|
position = pos.position
|
|
if not (is_open and pos.is_hedged is False and position.profit < 0):
|
|
return
|
|
|
|
if position.profit <= hedge_amount:
|
|
ok, order = await pos.hedge_position(order_params=order_params)
|
|
if not ok:
|
|
logger.error("Could not hedge %s:%d", pos.symbol, pos.ticket)
|
|
|
|
|
|
async def track_hedges(pos: OpenPosition, close_hedge_amount: float = -10):
|
|
res = await pos.update_position()
|
|
if not res:
|
|
return
|
|
hedges = list(pos.hedges.values())
|
|
await asyncio.gather(*[hedge.update_position() for hedge in hedges], return_exceptions=True)
|
|
hedges = [hedge for hedge in hedges if hedge.is_open]
|
|
await asyncio.gather(*[hedge.close_position() for hedge in hedges if hedge.position.profit <= close_hedge_amount],
|
|
return_exceptions=True) |