使用Python + MetaTrader5库(适合自动化交易)平仓MT5 二分之一订单
import MetaTrader5 as mt5
if not mt5.initialize():
print("MT5初始化失败")
quit()
positions = mt5.positions_get()
total_volume = sum(pos.volume for pos in positions)
close_volume = total_volume * 0.5
for pos in positions:
if close_volume <= 0:
break
if pos.volume >= close_volume:
request = {
"action": mt5.TRADE_ACTION_DEAL,
"position": pos.ticket,
"symbol": pos.symbol,
"volume": close_volume,
"type": mt5.ORDER_TYPE_SELL if pos.type == mt5.ORDER_TYPE_BUY else mt5.ORDER_TYPE_BUY,
"price": mt5.symbol_info_tick(pos.symbol).ask if pos.type == mt5.ORDER_TYPE_BUY else mt5.symbol_info_tick(pos.symbol).bid,
"deviation": 10,
}
mt5.order_send(request)
break
else:
request = {
"action": mt5.TRADE_ACTION_DEAL,
"position": pos.ticket,
"symbol": pos.symbol,
"volume": pos.volume,
"type": mt5.ORDER_TYPE_SELL if pos.type == mt5.ORDER_TYPE_BUY else mt5.ORDER_TYPE_BUY,
"price": mt5.symbol_info_tick(pos.symbol).ask if pos.type == mt5.ORDER_TYPE_BUY else mt5.symbol_info_tick(pos.symbol).bid,
"deviation": 10,
}
mt5.order_send(request)
close_volume -= pos.volume
mt5.shutdown()
感谢分享,很大收获@@ 平部分仓 搞起来不好看日记记录。我试过平三分之一仓,后面去对数据查问题的时候费脑 来学习了 可惜了,我不会编程 认真学编程, 值得学习,很不错 非常感谢你学到了 非常感谢你不错的东西 我觉得可以直接上手杀手锏4.0~
有注释就更好了 思路简洁清晰,先汇总总仓位再按顺序扣减到一半,可读性好。提两点小建议:每次 order_send 后检查返回的 retcode,避免部分成交被误判为成功;下单参数建议带上 magic 和 comment,多策略同账户时方便对账。整体逻辑挺适合自动化分批止盈的场景。
页:
[1]