新的API MetaTrader 4可用 - 页 6

[删除]  
yewnix:

我不明白的是...

我可以整天都在做订单发送。

但是我在做订单关闭时遇到了很大的问题。


你能不能举个例子说明这些问题。


我真的不认为是我的.NET包装DLL。

嗨,yewnix!


你可以看一下<程序文件>\TradeZone\TZMT4API\Developer\Short_Sample_MQL4.zip


这个简单的mql代码,一旦你包括<orderproxy.mqh>,就会关闭所有未结订单。


int hAccount = TZ_LogIn(Login, Password, Server, "", "", "", "");

int Total = TZ_OrdersTotal();


for(i=0;i<Total;i++)

{

TZ_OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

TZ_OrderClose(TZ_OrderTicket(), TZ_OrderLots(), TZ_OrderClosePrice(), 3);

}

最亲切的问候。

[Deleted]  
TradeZone:

嗨,yewnix!


你可以看看C:\Arquivos de programas\TradeZone\TZMT4API\Developer\Short_Sample_MQL4.zip


这个简单的mql代码,一旦你包括<orderproxy.mqh>,就会关闭所有未结订单。


int hAccount = TZ_LogIn(Login, Password, Server, "", "", "", "");

int Total = TZ_OrdersTotal();


for(i=0;i<Total;i++)

{

TZ_OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

TZ_OrderClose(TZ_OrderTicket(), TZ_OrderLots(), TZ_OrderClosePrice(), 3);

}

最诚挚的问候。

我正在尝试用C#做这个。

我采用了你的函数 并为.NET写了一个dll封装器

即。


double askprice = MT4ApiNet.MarketInfo_MT4(h, "GBPUSD", (int)MT4ApiNet.MarketInfoType.MODE_ASK)

MT4ApiNet.OrderSend_MT4(h, "GBPUSD", (int)MT4ApiNet.OrderType.OP_BUY, 1, askprice, 3, (askprice - 0.0050), (askprice + 0.0050), "My Program", 100, 0)。


这完美地工作。这个订单完美地显示出来。

现在......如果我从MetaTrader获得订单#(使用1234作为订单#为例)


MT4ApiNet.OrderClose_MT4(h, 1234, 1, MT4ApiNet.OrderClosePrice_MT4(h,1234), 20)。


这并没有取消订单...

即使我循环查看订单,并进行MT4ApiNet.OrderGet_MT4的操作,它仍然不起作用。

[Deleted]  

参考一下。

在做完OrderClose 后,如果我得到最后一个错误。

MessageBox.Show(MT4ApiNet.ErrorDescription_MT4(MT4ApiNet.GetLastError_MT4(h)) )。


这返回一般的Erro



你能不能至少在Delphi中显示一个适当的OrderClose?

即使在Delphi中,我的代码也会挂起

[Deleted]  
TradeZone:

嗨,juso。


<程序文件>\TradeZone\TZMT4API\Developer\MetaTrader4 API.txt包含您想要的内容。


谨致以诚挚的问候。

嗨,TradeZone


谢谢你的及时回复。我最后一次积极进行c++开发是在8年前,那时人们需要有*.h和*.lib的dll才能自然地行使api。如果你有*.h文件而没有*.lib,你仍然可以通过动态解析函数 地址来实现,尽管这个过程比较繁琐。所以,我可以自己创建*.h文件,尽管*.lib仍然没有。也许,有一种简单的方法可以从dll本身创建lib的东西,但我不知道。


请注意

Juso

[Deleted]  

TradeZone,


你能不能发布一个从Delphi应用程序发送的OrderClose_MT4命令的工作样本。

如前所述,我不能让它工作。


谢谢!

[Deleted]  
撞击...撞击...。
[Deleted]  

好吧,因为我还没有收到这方面的回复,我开始挖掘你的DLL实际上是如何工作的。

其实这是个不错的主意。

加载10个图表,每个图表附加在一个不同的EA上。

这些EA运行并在experts/files目录下创建文件。

DLL将这些文件读回来,在你的程序化应用中显示数据。

EA检查文件是否存在(由DLL调用产生),如果它们存在,则处理交易,然后创建其他文件,以反馈响应数据,然后删除DLL创建的文件,因此我们知道交易已经完成或失败。


如果我没有弄错的话,你从Login_MT4命令返回的Handle只是一个随机生成的目录名称的索引。这样,你就知道要控制哪个终端.exe进程,以及把你生成的文件放在哪里。


我可能对这些都是错的,我只是想解决我一直以来的OrderClose 问题...


然而,与其一遍又一遍地创建文件...我强烈建议使用内存映射(Create / Open Memory Map based on Pair Name_Handle)

顺便说一句,做得很好......只是你可以告诉我关于OrderClose的情况,这样我就不必自己编写EA和Memory Map DLL接口。


各位,这就是我对这个API的分析。


干杯!

[删除]  

各位。

我有一个像这样的集成,工作得很好,并经过测试(不是这个代码)。它是通过一个专家完成的,并通过一个C++/托管C++向一个.NET模块暴露功能。它允许顺利的交易管理,报告错误,提供实时报价,等等。通信是通过TCP进行的,所以它是快速和可靠的。

它将作为一个新的开源交易平台(基于.NET,它可以使用MT4来接收数据或执行订单)的一部分,完全免费开放发布。你可以选择使用该平台,或者仅仅是集成的一小部分--这取决于你。

如果你有兴趣,请举手,我将给你更多的细节。)

该平台计划在几天后推出(约10月15日)。

[Deleted]  

Peer2k,


很好,我想过用TCP而不是内存映射。

如果你愿意把代码的链接发给我,我不介意看一下。

不过这取决于你 :)


谢谢!

yewnix@gmail.com

[Deleted]  
嘿,peer2k,这将是非常酷的,请把细节发到我这里,yuryrub@gmail.com。