如何在VPS上创建Metatrader终端使用c#DLL?

时间:2014-11-22 19:43:47

标签: c# dll vps algorithmic-trading mql4

状态:

我在C#中写了一个 DLL ,这是从用 MQL4 编写的代码调用的(基本上是类似于C语言)并发送回一些数据(未管理到托管和返回)。

通常,DLL会向 MySQL -host发送查询,并在需要时返回一些数据。我使用了 NuGet 包“非托管导出”。 我将此DLL用于外汇交易 MetaTrader终端 程序,在Windows 8.1 x64上运行,一切运行良好。 C#代码是在x86中编译的,因为 MetaTrader终端仅在x86上运行。


目标:

现在我有兴趣使用相同的DLL并使用相同的代码调用它,但这次我需要从VPS运行代码。

此VPS在Windows Server 2008 R2 SP1 x64上运行。

除此之外一切都是一样的:相同版本的 MetaTrader终端,我甚至安装了VS 2013(与我在笔记本电脑上使用的版本相同) VPS和编译C#代码没有问题。

我还安装了Microsoft Visual C ++ 2010 Redistributable,希望这能帮助但我还在这里......

也没有可能阻止访问主机的防火墙。

什么可能妨碍DLL在VPS上运行?

谢谢!


问题隔离:

我在VPS上写了一个简短的C#程序来检查DLL。它(DLL)效果很好。

我知道 MetaTrader终端确实识别DLL,否则我会收到有关该基本问题的错误。

所以问题必须在 MetaTrader终端DLL之间。

1 个答案:

答案 0 :(得分:1)

根据给出的输入,

在其他正在运行的 MT4/DLL 合作计划中出现了一个问题,毫无疑问,防火墙不应该受到指责。 DLL机制不包含防火墙需要关注的操作。

为了避免任何Win服务器设置, 通常超出您的控制,请移动您的DLL - 文件( s)进入最安全的位置,最近对 - MQL4.56789 的更改已设置默认位置不安全
- 所以不要像往常一样将文件放在MT4 〜终端目录〜 /MQL4/Library 上{{1 }}

请注意嵌套的localhost来电

  

调用导入的函数
  要在执行mql4程序期间导入函数,客户端终端使用早期绑定。这意味着如果程序调用了导入的函数,则在程序加载期间会加载相应的模块(ex4或dll)。 MQL4和DLL库在调用模块的线程中执行。

  建议不要使用要加载的模块的完全指定名称,如Drive:\ Directory \ FileName.Ext。 MQL4库是从terminal_dir \ MQL4 \ Libraries文件夹加载的。如果找不到库,则客户端终端尝试从terminal_dir \ experts文件夹加载库。

  系统库(DLL)由操作系统规则加载。如果库已经加载(例如,另一个EA交易,甚至是另一个客户端,并行运行),那么它会使用已加载库的请求。否则,它按以下顺序执行搜索:
   - 目录,从中导入dll的模块已启动。这里的模块是EA交易,脚本,指标或EX4库;
   - 目录terminal_data_directory \ MQL4 \ Libraries(TERMINAL_DATA_PATH \ MQL4 \ Libraries);
   - 启动MetaTrader 4客户终端的目录;
   - 系统目录;
   - Windows目录;
   - 当前目录;
   - PATH系统变量中列出的目录。

  如果DLL库在其工作中使用另一个DLL,则在没有第二个DLL时无法加载第一个DLL。

最后的手段

如果所有努力都失败了,那么使VPS托管解决方案独立于VPS提供商限制的一种可靠方法,以便最大限度地减少潜在非反应性风险的影响,将整个马戏团安装在您的内部 - 受控VM(通常是带有整个工作解决方案的简约wXP配置虚拟客户机,或者您可以" en-can"工作的localhost安装(不是您的整个笔记本,而是测试机))

所需的唯一适应是VPS主机安装Hypervisor系统(VmWare WorkStation或VM-Player)以及协调的IP地址,这不应该是匹配免费IP-s /端口#-s的问题根据需要。

在linux中进行WINE精简包装操作怎么样?

虽然在项目上测试和工作顺利,但我不会从另一种方法开始,类似于linux / WINE瘦身的MetaTrader Terminal 4操作(实际上将 DLL 嵌入到{{ 1}} - 非Win O / S在WINE / linux适配器的周围群体后面提供的抽象)因为主要任务是消除DLL冲突的根源。