附件中的C++源代码是实现用python来控制MT4交易软件的工具,主要是使用boost中的通信协议,一个是MT4中的EA程序,在MT4中执行它,它作为一个服务端,用一个端口来监听命令,另一个是python的链接库,供python来和MT4中的服务器程序进行沟通,从而实现MT4命令的执行。
这段代码是用vs2015写的,可以正常编译,但是这段程序有一个BUG,就是当涉及到时间的时候,一些在MT4上执行得很好的命令,在pythhon中调用命令的时候,却执行得不对,例如我在 PyMT4_example_account_information.py 中
if __name__ == "__main__":
connected = Connect()
if connected:
后面增加:
print "TimeCurrent".ljust(10),":", time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(TimeCurrent()))
print "TimeLocal".ljust(10),":", time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(TimeLocal()))
print "TimeGMT".ljust(10),":", time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(TimeGMT()))
print "iBars".ljust(10),":", iBars("EURUSD", PERIOD_M1)
print "iClose".ljust(10), ":", iClose("EURUSD", PERIOD_M1, 3)
print "iVolume".ljust(10), ":", iVolume("EURUSD", PERIOD_M1, 3)
print "iTime".ljust(10),":", iTime("EURUSD", PERIOD_M1, 3)
前面三个不包含参数的关于时间函数的调用 TimeCurrent()、 TimeLocal()、TimeGMT()都返回了很大的一个整数,这个是时间戳,没有错误,可是最后一句 iTime("EURUSD", PERIOD_M1, 3), PERIOD_M1是个整数常量,表示取得是1分钟数据,3表示第3个行情柱,却取不到值,返回0,从2开始就都是0了,即使是0,返回的值也不对。我看了一下代码,应该在 pymt4_client_dispatcher.h 中的
template R DispatchFunction(const CommandIdentifier& commandIdentifier, const A&... args)
{
//boost::mutex::scoped_lock dispatchLock(_dispatchLock);
std::tuple< const A*...> tuple(&args;...);
这一段,这一段都是boost的通信协议方面的代码,我不知道怎么改了,能否帮我改一下,让iTime()能返回正常的值。我的运行环境是python2.7 64位版本,也就是需要你提供编译好的64位的python动态链接库文件 PyMT4.pyd。
我只要求你修改这个源代码的一个关于调用MT4时间的一个BUG,相信会的人很快就调试好了,不会花很多时间。