设为首页 收藏本站 切换语言

【MQL5函数】python与MT5交互下单  

| 发表于 2021-6-5 10:36:07 | 显示全部楼层 |复制链接
昨天刚学习的MQL5,看到可以用python 进行操作,就试了一下,简单写了个挂单的案例,python方面还是新手,所以代码写的不是很美观,大家包容一下哈,自行优化。
还有很多地方需要优化和处理的,目前只写了这么多
上案例:

  1. import MetaTrader5 as mt5
  2. import json
  3. import time
  4. import pytz
  5. import pandas as pd
  6. from datetime import datetime
  7. K1 = 0.2
  8. K2 = 0.2
  9. xlot = 0.1  # 下单手数
  10. slPrices = 50  # 止损
  11. tpPrices = 50  # 止盈
  12. magic = 234000  # magic编号
  13. currencyList = ["EURUSDm", "GBPUSDm", "USDCHFm", "USDJPYm", "USDCADm", "CHFJPYm", "AUDUSDm", "EURGBPm", "CADJPYm",
  14.                 "GBPJPYm", "EURJPYm", "AUDJPYm", "NZDUSDm"]
  15. """
  16. 执行下单方法
  17. symbol     #货币对名称
  18. actiontype #订单类型
  19. lot        #下单手数
  20. order_type #订单类型
  21. sl, tp     #止损,止盈
  22. """
  23. def OrderSend_Task(symbol, actiontype, lot, order_type, price, tp, sl, order_fs):
  24.         deviation = 5  # 滑点
  25.         zhiying = 0
  26.         if (order_fs == 1):  # 多单
  27.                 zhiying = price + tp * mt5.symbol_info(symbol).point
  28.         elif (order_fs == 2):  # 空单
  29.                 zhiying = price - tp * mt5.symbol_info(symbol).point
  30.         print("止损=", 0, "止盈=", zhiying, "挂单价位=", price)
  31.         request = {
  32.                 "action": actiontype,
  33.                 "symbol": symbol,
  34.                 "volume": lot,
  35.                 "type": order_type,
  36.                 "price": price,
  37.                 # "sl": zhisun,
  38.                 "tp": zhiying,
  39.                 "deviation": deviation,
  40.                 "magic": 234000,
  41.                 "comment": "python script open",
  42.                 "type_time": mt5.ORDER_TIME_GTC,
  43.                 "type_filling": mt5.ORDER_FILLING_RETURN,
  44.         }
  45.         # 发送交易请求
  46.         result = mt5.order_send(request)
  47.         # # 检查执行结果
  48.         print("1. 发送订单:  {} {} 手数 价格 {}  滑点={} points".format(symbol, lot, price, deviation))
  49.         print("2. 订单返回结果=", result.retcode)
  50.         answer = result.retcode
  51.         if (answer == 10006):
  52.                 print("拒绝请求!")
  53.         elif (answer == 10007):
  54.                 print("交易者取消请求!")
  55.         elif (answer == 10009):
  56.                 print("下单完成!")
  57.         elif (answer == 10009):
  58.                 print("############{}下单完成###############!", format(symbol))
  59.         elif (answer == 10010):
  60.                 print("请求部分完成!")
  61.         elif (answer == 10011):
  62.                 print("请求处理错误!")
  63.         elif (answer == 10011):
  64.                 print("超时取消请求!")
  65.         elif (answer == 10013):
  66.                 print("无效请求!")
  67.         elif (answer == 10014):
  68.                 print("请求中无效成交量!")
  69.         elif (answer == 10015):
  70.                 print("请求中的无效价格!")
  71.         elif (answer == 10016):
  72.                 print("请求中的无效访问!")
  73.         elif (answer == 10026):
  74.                 print("服务器无效自动交易!")
  75.         elif (answer == 10027):
  76.                 print("客户端无效自动交易!")
  77.         elif (answer == 10030):
  78.                 print("无效命令填满字节!")
  79.         return
  80. # 建立MetaTrader 5到指定交易账户的连接
  81. if (mt5.initialize(login=28210, server="Exness-MT5", password="XXXXXX") == False):
  82.    print("连接失败code =", mt5.last_error())
  83.    quit()
  84. else:
  85.    CuttenTime = True
  86.    while CuttenTime:
  87.       localtime = time.localtime(time.time())
  88.       time.sleep(5)
  89.       if (localtime.tm_hour == 8):
  90.          for item in currencyList:
  91.             # 获取5日内的柱状图数据
  92.             rates = mt5.copy_rates_from_pos(item, mt5.TIMEFRAME_H4, 0, 5)
  93.             #次数省略了部分策略代码
  94.             print(item, "多单=", BuyLine)
  95.             print(item, "空单=", SellLine)
  96.             OrderSend_Task(item, mt5.TRADE_ACTION_PENDING, xlot, mt5.ORDER_TYPE_BUY_STOP, BuyLine, tpPrices,
  97.                            slPrices,
  98.                            1)  # 发送多单挂单
  99.             OrderSend_Task(item, mt5.TRADE_ACTION_PENDING, xlot, mt5.ORDER_TYPE_SELL_STOP, SellLine, tpPrices,
  100.                            slPrices,
  101.                            2)  # 发送空单挂单
  102.          CuttenTime = False
  103.          print("时间=", localtime.tm_hour, localtime.tm_sec)
复制代码
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论41

xs025932
DD
| 发表于 2021-6-5 11:49:39 | 显示全部楼层
谢谢分享,居然还可以这样玩!
举报

点赞 评论 使用道具

海胆战士
D
| 发表于 2021-6-5 13:42:47 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

jongjongyoshen
D
| 发表于 2021-6-6 08:26:34 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

ajax9999
未及格
| 发表于 2021-6-6 13:29:03 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

gzj
DD
| 发表于 2021-7-1 19:29:36 来自手机 | 显示全部楼层
支持分享
举报

点赞 评论 使用道具

wirst
D
| 发表于 2021-7-13 08:03:50 | 显示全部楼层
我们是用的mt人家都ai了牛人啊
举报

点赞 评论 使用道具

tianping
DDD
| 发表于 2021-7-13 09:33:12 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

yifu0821
未及格
| 发表于 2021-7-13 12:43:13 来自手机 | 显示全部楼层
感謝分享資訊
举报

点赞 评论 使用道具

巴比伦雄鹰
D
| 发表于 2021-7-13 15:21:29 | 显示全部楼层
关注
举报

点赞 评论 使用道具

宝宝
DD
| 发表于 2021-7-29 15:07:17 | 显示全部楼层
厉害
举报

点赞 评论 使用道具

yuiran
DDD
| 发表于 2021-7-30 03:12:50 | 显示全部楼层
支持分享
举报

点赞 评论 使用道具

akkk333
DDD
| 发表于 2021-8-7 23:13:00 | 显示全部楼层
可 以回测吗?
举报

点赞 评论 使用道具

猎鲸人
D
| 发表于 2021-8-8 17:42:32 | 显示全部楼层
看看看看。。。。
举报

点赞 评论 使用道具

zm0688
未及格
| 发表于 2021-8-17 09:40:57 | 显示全部楼层
感謝分享
举报

点赞 评论 使用道具

qiu0711
D
| 发表于 2021-8-24 01:17:42 来自手机 | 显示全部楼层
学习了
举报

点赞 评论 使用道具

zm0688
未及格
| 发表于 2021-9-1 14:16:04 | 显示全部楼层
你的代码测试过吗?里边的quit()语法能通过吗?
举报

点赞 评论 使用道具

twb818
C
| 发表于 2021-9-1 17:11:52 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

Jacquelinekxl
D
| 发表于 2021-10-29 19:05:24 | 显示全部楼层
import MetaTrader5 as mt5
举报

点赞 评论 使用道具

Moel2016
DD
| 发表于 2021-12-12 05:24:15 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

123下一页
发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

天眼云VPS
简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)