Skip to content

Instantly share code, notes, and snippets.

@Ichinga-Samuel
Last active April 29, 2024 09:37
Show Gist options
  • Save Ichinga-Samuel/d1fc085ee3fb58d24fa24ea8133cb1f3 to your computer and use it in GitHub Desktop.
Save Ichinga-Samuel/d1fc085ee3fb58d24fa24ea8133cb1f3 to your computer and use it in GitHub Desktop.
import asyncio
from logging import getLogger
from aiomql import Trader, ForexSymbol, RAM, OrderType, Account
logger = getLogger(__name__)
class SimpleTrader(Trader):
def __init__(self, *, symbol: ForexSymbol, ram: RAM = None):
ram = ram or RAM(risk_to_reward=2, min_amount=2, max_amount=2) # 1
super().__init__(symbol=symbol, ram=ram)
async def create_order(self, order_type: OrderType):
pos = await self.ram.check_losing_positions() # 2
if pos:
raise RuntimeError(f"More than {self.ram.loss_limit} losing positions")
amount = await self.ram.get_amount()
await self.symbol.info()
volume = self.symbol.volume_min
points = self.symbol.compute_points(amount=amount, volume=volume) # 3
self.order.type = order_type
self.order.volume = volume
self.order.comment = self.parameters.get('name', self.__class__.__name__)
tick = await self.symbol.info_tick()
self.set_trade_stop_levels(points=points, tick=tick) # 5
async def place_trade(self, *, order_type: OrderType, parameters: dict = None):
try:
self.parameters |= parameters or {}
await self.create_order(order_type=order_type)
if not await self.check_order():
return
res = await self.send_order()
print(res.comment)
except Exception as err:
logger.error(f"{err} for {self.order.symbol} in {self.__class__.__name__}.place_trade")
async def main():
async with Account() as _:
sym = ForexSymbol(name='BTCUSD')
trader = SimpleTrader(symbol=sym)
await trader.place_trade(order_type=OrderType.BUY)
asyncio.run(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment