Files
2026-02-21 07:43:33 +01:00

54 lines
3.1 KiB
Python

from logging import getLogger
from datetime import datetime
from aiomql import Trader, OrderType, OpenPosition, Positions, PositionTracker, Store, exit_at_profit, round_off
from ..trackers import close_after, track_hedges, hedge_position
logger = getLogger(__name__)
class TestTrader(Trader):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.positions = Positions()
self.store = Store()
async def place_trade(self, *, order_type: OrderType, volume: float = None, parameters: dict = None):
"""Places a trade based on the order_type and volume. The volume is optional. If not provided, the minimum volume
for the symbol will be used. This trade is placed without a stop_loss or take_profit. The trade is recorded in the
trade_record file.
Args:
order_type (OrderType): The order_type
volume (float): The volume to trade
parameters (dict): Parameters associated with the trade
"""
try:
self.parameters |= parameters or {}
volume = volume or self.symbol.volume_min * 20
await self.create_order_no_stops(order_type=order_type, volume=volume)
if not await self.check_order():
return
self.order.comment = self.parameters.get("name", self.__class__.__name__)
res = await self.send_order()
if res is not None and res.retcode == 10009:
position = await self.positions.get_position_by_ticket(ticket=res.order)
open_position = OpenPosition(ticket=res.order, symbol=self.symbol, position=position,
close_hedges_on_close=True, close_stacks_on_close=True)
kwargs = {"duration": 3600, "start": datetime.now().timestamp()}
PositionTracker(open_position, hedge_position)
PositionTracker(open_position, track_hedges)
PositionTracker(open_position, close_after, function_params=kwargs)
PositionTracker(open_position, exit_at_profit, function_params={"tp": 10, "sl": -12})
price_to_hedge2 = await open_position.profit_to_price(profit=-8)
price_to_hedge2 = round_off(price_to_hedge2, self.symbol.digits)
price_to_stack2 = await open_position.profit_to_price(profit=7)
price_to_stack2 = round_off(price_to_stack2, self.symbol.digits)
await open_position.hedge_order(price=price_to_hedge2,
open_pos_params={"close_hedges_on_close": True})
await open_position.stack_order(price=price_to_stack2,
open_pos_params={"close_stacks_on_close": True})
await self.record_trade(result=res, parameters=self.parameters)
except Exception as err:
logger.error(f"{err} in {self.__class__.__name__}.place_trade for {self.symbol.name}")