总所周知,MT5是原生支持python接口的,但是MT4就没有这么荣幸了。
所以本人开发了这个插件,支持MT4 MT5。
使用此Python代码的前提是 需要运行本人开发的EA在图表上,这样就可以调用API接口进行下单了。
需要打开DLL开关
不同的账号用不同的端口区分开。
目前只做了开单和平仓接口
需要更多的接口可以欢迎定制!
python部分代码展示(不定期更新)
- # -*- coding: utf-8 -*-
- from numpy.f2py.crackfortran import expectbegin
- from MtctpTradeInclude import MtctpTradeInclude
- from time import sleep
- m=MtctpTradeInclude("http://127.0.0.1:80/",95031778)# # 连接到 MT4 交易服务器 账号必须输入正确
- # 交易参数
- lot=0.1 # 手数 加仓是递增
- addPoint=40 # 加仓点数
- magic=1233 # 魔术数字
- comm="python-mql-ea"# 注释 不可设置中文
- symbol="EURUSDm"# 交易品种
- closeprofit=1# 盈利平仓*单数 平仓
- # 连接到 MT4 交易服务器
- if m.Initialize()==True:
- print("ea,初始化成功....")
- else:
- print("ea,初始化失败,可能账户不对或者配置错误....")
- exit()
- while True:
- try:
- m.OrdersAndHistoryTotal()
- m.SymbolInfo(symbol)
- if m.SYMBOL_BID==0:
- continue
- buyVol=0
- sellVol=0
- lastbuyOpenPrice=0
- lastsellOpenPrice=0
- lastbuyOpenlots=0
- lastsellOpenlots=0
- allprofit=0;
- for i in range(m.OrdersTotal):
- if m.OrderSymbol[i] == symbol:
- if m.OrderMagicNumber[i] == magic:
- allprofit=allprofit+m.OrderProfit[i]+m.OrderSwap[i]+m.OrderCommission[i]
- if m.OrderType[i] == 0:
- buyVol+=1
- lastbuyOpenPrice=m.OrderOpenPrice[i]
- lastbuyOpenlots=m.OrderLots[i]
- if m.OrderType[i] == 1:
- sellVol+=1
- lastsellOpenPrice = m.OrderOpenPrice[i]
- lastsellOpenlots = m.OrderLots[i]
- if buyVol == 0:
- m.OrderSend(symbol, 0, lot, 0, 3000, 0, 0, comm, magic, 0)
- m.log(symbol+"下多首单",magic)
- else:
- if lastbuyOpenPrice-m.SYMBOL_ASK>addPoint*m.SYMBOL_POINT:
- m.OrderSend(symbol, 0, lastbuyOpenlots+lot, 0, 3000, 0, 0, comm, magic, 0)
- m.log(symbol+"下多加仓",magic)
- if sellVol == 0:
- m.OrderSend(symbol, 1, lot, 0, 3000, 0, 0, comm, magic, 0)
- m.log(symbol+"下空首单",magic)
- else:
- if m.SYMBOL_BID-lastsellOpenPrice>addPoint*m.SYMBOL_POINT:
- m.OrderSend(symbol, 1, lastsellOpenlots+lot, 0, 3000, 0, 0, comm, magic, 0)
- m.log(symbol+"下空加仓",magic)
- m.AccountInfo()
- if allprofit>(buyVol+sellVol)*closeprofit:
- for i in range(m.OrdersTotal):
- if m.OrderSymbol[i] == symbol:
- if m.OrderMagicNumber[i] == magic:
- m.OrderClose(m.OrderTicket[i], 0, 0, 3000, "NONE")
- m.log(symbol+"盈利平仓",magic)
- except MemoryError:
- print("内存不足,清理资源后重试")
- break
复制代码
Python交易MT4 MT5
|
|