图书馆 - 实现这一想法 Expert Advisor 通过 iCustom 创建该指标。 在执行的任何时候,EA 都可以看到该指标写入的所有交易。
OnTradeTransaction 编写一个指标(没有缓冲区和输入变量),该指标将所有交易写入公共位置(例如,资源)。
因此,它具有极大的灵活性。
例如,您可以发送一百个异步订单,然后等待它们的执行,而无需离开深度内核,继续执行您的代码。
当然,我们说的是请求。魔法主题与此无关。
虽然让开发人员在公共数组中执行事务记录是合理的。不带指示器
当然,从开发人员进行终端操作的那一刻起,公开可用的交易数组将是促进 MT5 交易异步化的合理方式。但这种解决方案的需求可能接近于零。当然,如果有人需要的话,目前该库弥补了这一空白。
例如,由于部分执行,可能会有许多仓位而不是一个仓位。当您需要修改大量仓位/订单时,使用建议的方法会变得非常方便。
从 OnTick 退出时不需要记住任何东西,也不需要写OnTradeTransaction 和处理 RequestID - 方法相同。像往常一样,您只需在 OnTick 中编写。在其中,您始终可以完全控制任何地方的异步交易。 您可以获得快如闪电的多重修改,无需手鼓--您甚至无需考虑异步及其特殊性。
有趣的想法,谢谢。 据我所知,由于代码并行化,性能应该会有所提高。 它在测试器中工作正常吗?
Alexey Navoykov:
有趣的想法,谢谢。 据我所知,由于代码并行化,性能应该会提高。 在测试版中能正常工作吗?
有趣的想法,谢谢。 据我所知,由于代码并行化,性能应该会提高。 在测试版中能正常工作吗?
我还没在测试版中试过。但如果多货币 OnTick 在测试版中也能以同样的思路运行,那么在这里也应该能运行。
ZЫ 但我们的想法不是并行化。在 MT4 中,我们是通过交易流进行分配的。
// 通过终端内的资源存储/交换数据的示例 #include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/zh/code/22166 void OnStart() { const RESOURCEDATA<int> ResourceINT("::int"); // 用于交换 ints 的资源。const - 证明没有向类对象写入任何内容 int ArrayINT[] = {1, 2, 3}; int Num = 5; ResourceINT = ArrayINT; // 资源存储一个数组。 ResourceINT += Num; // 为资源添加了另一个值. ResourceINT += ArrayINT; // 添加了一个数组。 int ArrayINT2[]; ResourceINT.Get(ArrayINT2); // 从资源中读取数据。 ArrayPrint(ArrayINT2); // 撤回: 1 2 3 5 1 2 3 ResourceINT.Free(); // 删除资源中的数据 Print(ResourceINT.Get(ArrayINT2)); // 检查是否没有数据:0 const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // 用于交换刻度的资源。const - 证明没有向类对象写入任何内容 MqlTick Tick; if (SymbolInfoTick(_Symbol, Tick)) for (int i = 0; i < 3; i++) ResourceTicks += Tick; // 添加到提基资源 MqlTick Ticks[]; ResourceTicks.Get(Ticks); // 从资源中读取数据。 ArrayPrint(Ticks); // 撤回。 // 这是要从另一个程序访问的资源的全名 const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks"; Print(NameOut); // 打印资源的全名。 const RESOURCEDATA<MqlTick> Resource(NameOut); // 从另一个程序访问数据(只读)的资源 MqlTick TicksOut[]; Resource.Get(TicksOut); // 从资源中读取数据。 ArrayPrint(TicksOut); // 撤回。 Resource.Free(); // 无法影响只读资源数据。 Print(_LastError); // ERR_INVALID_PARAMETER - 调用系统函数时出现错误参数。 }
fxsaber:
通过终端内的资源存储/交换数据的示例
通过终端内的资源存储/交换数据的示例
能否读取正在写入的数据?即能否读取不完整的信息?
到目前为止,我还想不出这个库有什么用处。
外汇交易肯定不需要它,证券交易所也不需要它。
您在证券交易所测试过这个库吗?
您认为它在什么情况下有用?
TradeTransactions:
在应用程序中的任何位置来访问 OnTradeTransaction 中的数据。
作者: fxsaber