MetaTrader Trade¶
Init API¶
In [1]:
Copied!
from lettrade.exchange.metatrader import MetaTraderAPI
from dotenv import load_dotenv
import os
load_dotenv()
api = MetaTraderAPI(
login=int(os.environ["MT5_LOGIN"]),
password=os.environ["MT5_PASSWORD"],
server=os.environ["MT5_SERVER"],
# wine=os.getenv("MT5_WINE", None),
)
from lettrade.exchange.metatrader import MetaTraderAPI
from dotenv import load_dotenv
import os
load_dotenv()
api = MetaTraderAPI(
login=int(os.environ["MT5_LOGIN"]),
password=os.environ["MT5_PASSWORD"],
server=os.environ["MT5_SERVER"],
# wine=os.getenv("MT5_WINE", None),
)
Init DataFeed¶
In [2]:
Copied!
from lettrade.exchange.metatrader import MetaTraderDataFeed
data = MetaTraderDataFeed(symbol="USDCAD", timeframe="5m", api=api)
data.bars_load(since=0, to=10)
data
from lettrade.exchange.metatrader import MetaTraderDataFeed
data = MetaTraderDataFeed(symbol="USDCAD", timeframe="5m", api=api)
data.bars_load(since=0, to=10)
data
Out[2]:
open | high | low | close | volume | |
---|---|---|---|---|---|
datetime | |||||
2024-09-06 23:10:00+00:00 | 1.35662 | 1.35678 | 1.35653 | 1.35656 | 169 |
2024-09-06 23:15:00+00:00 | 1.35656 | 1.35692 | 1.35655 | 1.35682 | 214 |
2024-09-06 23:20:00+00:00 | 1.35682 | 1.35725 | 1.35675 | 1.3571 | 496 |
2024-09-06 23:25:00+00:00 | 1.3571 | 1.35731 | 1.35708 | 1.35725 | 147 |
2024-09-06 23:30:00+00:00 | 1.35724 | 1.35732 | 1.35713 | 1.35722 | 455 |
2024-09-06 23:35:00+00:00 | 1.35721 | 1.35727 | 1.35711 | 1.3572 | 180 |
2024-09-06 23:40:00+00:00 | 1.3572 | 1.35735 | 1.35691 | 1.35714 | 635 |
2024-09-06 23:45:00+00:00 | 1.35714 | 1.3573 | 1.35702 | 1.35709 | 186 |
2024-09-06 23:50:00+00:00 | 1.35709 | 1.35717 | 1.3569 | 1.35712 | 341 |
2024-09-06 23:55:00+00:00 | 1.35712 | 1.35715 | 1.35685 | 1.35704 | 390 |
In [3]:
Copied!
info = data.symbol_info()
info
info = data.symbol_info()
info
Out[3]:
Box({'symbol': 'USDCAD', 'type': 'Forex', 'description': 'US Dollar vs Canadian Dollar', 'currency_base': 'USD', 'currency_profit': 'CAD', 'raw': {'custom': False, 'chart_mode': 0, 'select': True, 'visible': True, 'session_deals': 0, 'session_buy_orders': 0, 'session_sell_orders': 0, 'volume': 0, 'volumehigh': 0, 'volumelow': 0, 'time': 1725667140, 'digits': 5, 'spread': 44, 'spread_float': True, 'ticks_bookdepth': 0, 'trade_calc_mode': 0, 'trade_mode': 4, 'start_time': 0, 'expiration_time': 0, 'trade_stops_level': 0, 'trade_freeze_level': 0, 'trade_exemode': 2, 'swap_mode': 1, 'swap_rollover3days': 3, 'margin_hedged_use_leg': False, 'expiration_mode': 15, 'filling_mode': 2, 'order_mode': 127, 'order_gtc_mode': 0, 'option_mode': 0, 'option_right': 0, 'bid': 1.35696, 'bidhigh': 1.3581699999999999, 'bidlow': 1.34649, 'ask': 1.3574, 'askhigh': 1.35835, 'asklow': 1.34676, 'last': 0.0, 'lasthigh': 0.0, 'lastlow': 0.0, 'volume_real': 0.0, 'volumehigh_real': 0.0, 'volumelow_real': 0.0, 'option_strike': 0.0, 'point': 1e-05, 'trade_tick_value': 0.7367025195226169, 'trade_tick_value_profit': 0.7367025195226169, 'trade_tick_value_loss': 0.7369413984199977, 'trade_tick_size': 1e-05, 'trade_contract_size': 100000.0, 'trade_accrued_interest': 0.0, 'trade_face_value': 0.0, 'trade_liquidity_rate': 0.0, 'volume_min': 0.01, 'volume_max': 100.0, 'volume_step': 0.01, 'volume_limit': 0.0, 'swap_long': 2.4699999999999998, 'swap_short': -5.99, 'margin_initial': 0.0, 'margin_maintenance': 0.0, 'session_volume': 0.0, 'session_turnover': 0.0, 'session_interest': 0.0, 'session_buy_orders_volume': 0.0, 'session_sell_orders_volume': 0.0, 'session_open': 1.34962, 'session_close': 1.35028, 'session_aw': 0.0, 'session_price_settlement': 0.0, 'session_price_limit_min': 0.0, 'session_price_limit_max': 0.0, 'margin_hedged': 0.0, 'price_change': 0.5006, 'price_volatility': 0.0, 'price_theoretical': 0.0, 'price_greeks_delta': 0.0, 'price_greeks_theta': 0.0, 'price_greeks_gamma': 0.0, 'price_greeks_vega': 0.0, 'price_greeks_rho': 0.0, 'price_greeks_omega': 0.0, 'price_sensitivity': 0.0, 'basis': '', 'category': '', 'currency_base': 'USD', 'currency_profit': 'CAD', 'currency_margin': 'USD', 'bank': '', 'description': 'US Dollar vs Canadian Dollar', 'exchange': '', 'formula': '', 'isin': '', 'name': 'USDCAD', 'page': '', 'path': 'Forex\\USDCAD'}})
Place new order¶
In [ ]:
Copied!
from lettrade.exchange.metatrader import MetaTraderOrder, OrderType
from unittest.mock import MagicMock
order = MetaTraderOrder(
id="",
data=data,
exchange=MagicMock(),
type=OrderType.Market,
size=0.1,
api=api,
)
order.place()
from lettrade.exchange.metatrader import MetaTraderOrder, OrderType
from unittest.mock import MagicMock
order = MetaTraderOrder(
id="",
data=data,
exchange=MagicMock(),
type=OrderType.Market,
size=0.1,
api=api,
)
order.place()
Get order by id¶
In [ ]:
Copied!
order = api.orders_history_get(id=44222563)
order
order = api.orders_history_get(id=44222563)
order
Position¶
Get position by id¶
In [ ]:
Copied!
from lettrade.exchange.metatrader import MetaTraderPosition
api.positions_get(id="44209922")
from lettrade.exchange.metatrader import MetaTraderPosition
api.positions_get(id="44209922")
Update position¶
In [ ]:
Copied!
result = api.do_position_update(id=44209922, sl=1.370)
result
result = api.do_position_update(id=44209922, sl=1.370)
result
Close position¶
In [ ]:
Copied!
tick = api.tick_get(symbol="USDCAD")
price = tick.ask if True else tick.bid
result = api.do_position_close(
id=44209922, symbol="USDCAD", price=price, size=0.1, type=1
)
result
tick = api.tick_get(symbol="USDCAD")
price = tick.ask if True else tick.bid
result = api.do_position_close(
id=44209922, symbol="USDCAD", price=price, size=0.1, type=1
)
result
Execution¶
In [ ]:
Copied!
result = api.executions_get(id=36461502)
# result = api.executions_get(position_id=44222563)
result
result = api.executions_get(id=36461502)
# result = api.executions_get(position_id=44222563)
result