为MetaTrader 4开发了一个API函数库 - 页 5

 
顺便说一下,现在Min提供的东西比以前更像你能买到的东西。<br / translate="no"> 纯粹是imho :)

谢谢!期待商业报价。好运!
 
很难说它是一个API。图书馆+EA。工作非常缓慢。
 
...
 
向库的开发者提问:为什么使用你的库时,获取报价的速度甚至比通过临时文件工作时还要慢?那么使用共享内存的好处是什么?<br/ translate="no">

你说的获取报价的速度是什么意思?如果是获取刻度线,那么我已经写过,即使直接在MT4中处理报价的刻度线 也很困难。该图书馆最初的设计并不是为了捕捉蜱虫。这与以下事实有关:当市场非常活跃时,系统可能会简单地挂起,因为它无法跟上刻度。这就是为什么图书馆有一个内置的软件保护,防止蜱虫雪崩。使用共享内存的优点是这种系统的可靠性高,而且没有硬盘堵塞的问题。此外,几个程序可能会访问这个库,它们不需要 "知道 "临时文件的确切位置。好运!
 
当市场非常活跃时,系统可能会因为无法跟上刻度而直接冻结。这就是为什么在库中有一个内置的软件保护,以防止tick雪崩。


,似乎作者做得过头了:)
,据我所知,如果EA在start()函数内(并且它从那里向API客户端发送一个tick的信息),那么MT不会给出一个新的tick,直到EA离开start()函数。这就是为什么不清楚如何发生雪崩式的蜱虫?

,如果EA是循环的,并通过RefreshRates接收蜱虫,那么首先它应该从客户端API退出,然后会发生RefreshRates的调用。这就是为什么这里也没有地方可以冻住。

使用共享内存的优势在于这种系统的高可靠性

听起来不错,但它不是进程间通信的唯一方式。 ,所以
"共享内存的使用有什么意义?" 这个话题并没有得到解决:) imho,MMF只在一种情况下是好的,当你需要在进程间抽取大量数据时--抽取速度是~150Mb/秒。(几个月前,我不得不用MMF建立这样的机制,因为根据测试,这是最快的方法)。 ,在这个任务中(为



OrderSend 等传输参数)--这就像一只鸟穿过羽毛,更容易创建一个窗口并使用SendMessage与wm_copydata。
 
听起来很可靠,但它不是进程间通信的唯一方式。<br / translate="no">所以"......那么使用共享内存的好处是什么?"这个问题没有得到解决 :)

我不认为我在争论所使用的算法是最好的。这就是编程的魅力,这样的问题至少可以用一打方法解决。带有临时文件的变体也完全正常。我的任务是开发一个可靠的、可行的、功能齐全的MT3 API的替代品。现在,图书馆与实践交易项目合作了大约半年。而这里的主要问题不是实现最高速度,而是可靠性和对大量紧急情况的适当反应。因此,感谢你的评论,它们相当恰当,但这是 "另一个故事"。好运!
 
你好,所以目前的主要问题是连接:

在项目中包括Mforex2.lib导入库(对于Delpi--只是描述库的功能),
在主程序中指定Mforex.h头文件(例如:#include "Mforex.h" - 只适用于Builder C++);

这两点对我来说很神秘,因为Omega已经准备好了程序,所有其他文件我都按照描述放置,规定了启动MT4的功能,在启动时我得到消息说必须规定准确的路径,但我也规定了路径。我不知道接下来该怎么做。
 
在项目中包括导入库Mforex2.lib(用于Delpi--只描述库的功能),<br/ translate="no"> 在主程序头文件Mforex.h中指定(例如:#include "Mforex.h" - 只适用于Builder C++);
这两点让我很困惑,因为Omega是现成的程序,所有其他文件我都按照描述放置,规定了MT4的启动功能,在启动时我得到消息说必须规定准确的路径,但我也规定了路径。我不知道接下来该怎么做。

Omega有可能从外部DLLs导入功能。因此,你应该指定Mforex2.dll作为外部库。同时,该文件应在欧米茄程序的 "视域 "内。在调用程序中,指定从DLL导入的函数的名称,如文档中所示。还要注意,Omega "不知道 "Mforex.h文件中的定义。也就是说,例如,当调用开仓 功能时,你需要指定操作代码,例如,Sell - 1,而不是OP_SELL,等等。更多细节,请参见DevKit文档,其中描述了omega与外部库的工作方式。好运!
 
<br / translate="no"> 在Omega中可以从外部DLLs导入函数。因此,Mforex2.dll应该被指定为一个外部库。同时,这个文件必须在欧米茄程序的 "视线 "内。在调用程序中,指定从DLL导入的函数的名称,如文档中所示。还要注意,Omega "不知道 "Mforex.h文件中的定义。也就是说,例如,当调用开仓功能时,你需要指定操作代码,例如,Sell - 1,而不是OP_SELL,等等。更多细节,请参见DevKit文档,其中描述了omega与外部库的工作方式。
好运!


所以我在欧米茄中开了以下处方。

DefineDLLfunc: "Mforex2.dll", int, "Start"; {DLL调用}.
_gbp = Start(); {终端启动功能}

但是你说在这里我们应该写一些其他的东西来代替 "Start()",我没有理解错吗?
 
<br/ translate="no"> 所以我在欧米茄开了以下处方。

DefineDLLfunc: "Mforex2.dll", int, "Start"; {调用DLL}
_gbp = Start(); {终端启动函数}

但是你说你应该写一些别的东西来代替 "Start()",我说得对吗?

我自己回答:你不应该写其他东西来代替 "Start()"--没错,欧米茄启动MT4没有任何问题。但在

开仓的 功能上就有点复杂了,所以我规定了这个函数: Input: Symbol(NumericSimple), Order(NumericSimple), Lot(NumericSimple), price(NumericSimple), sl(NumericSimple), tp(NumericSimple); DefineDLLfunc: "Mforex2。dll", int, "NewPos",char, int, int, double, double; _NewPos = NewPos(Symbol, Order, Lot, price, sl, tp); 逻辑上一切都符合制造商的描述,但实际上有问题:一切都用数字来设定。