在 main.cpp 文件中写入以下代码:
[C] 纯文本查看 复制代码#include "stdafx.h"
#include "NSNetwork.h"
extern "C" __declspec(dllexport) int __stdcall CalcNeuralNet(
LPCWSTR dllPath_u, LPCWSTR weightsPath_u,
double* inputs, double* outputs)
{
// Transform the lines from Unicode to normal ones
CString dllPath (dllPath_u);
CString weightsPath (weightsPath_u);
// Create neuronet
NSRecallNetwork nn(dllPath);
if (!nn.IsLoaded()) return (1);
// Load balances
if (nn.LoadWeights(weightsPath) != 0) return (2);
// Pass input data and calculate the output
if (nn.GetResponse(1, inputs, outputs) != 0) return (3);
return 0;
}
编译。DLL 适配程序就绪! 在“EA 交易”中使用神经网络 至此,我们已创建了多个文件。我将列出这些“EA 交易”工作所需的文件,以及您应该将它们放入的文件夹。所有文件均已附于本文。
[td]文件
描述
存放路径(终端文件夹中)
WeekPattern.dll
我们在 NeuroSolutions 中创建的 DLL 神经网络
MQL5\Files\NeuroSolutions\
WeekPattern.nsw神经网络的平衡设置
MQL5\Files\NeuroSolutions\NeuroSolutionsAdapter.dll
可用于任何 DLL 神经网络的通用 DLL 适配程序
MQL5\Libraries\
以下是完整的“EA 交易”WeekPattern.mq5 的代码。为便于搜寻和进一步修改,与神经网络相关的一切已放在单独的 CNeuroSolutionsNeuralNet 类中。
[C] 纯文本查看 复制代码input double Lots = 0.1;
//+------------------------------------------------------------------+
// Connect the DLL adapter, using which we are going to use the DLL neuronet created in NeuroSolutions
#import "NeuroSolutionsAdapter.dll"
int CalcNeuralNet(string dllPath, string weightsPath, double& inputs[], double& outputs[]);
#import
//+------------------------------------------------------------------+
class CNeuroSolutionsNeuralNet
{
private:
string dllPath; // Path to a DLL neuronet created in NeuroSolutions
string weightsPath; // Path to a file of the neuronet balances
public:
double in[20]; // Neuronet inputs - OHLC of 5 bars
double out[1]; // Neuronet outputs - Close of a current bar
CNeuroSolutionsNeuralNet();
bool Calc();
};
//+------------------------------------------------------------------+
void CNeuroSolutionsNeuralNet::CNeuroSolutionsNeuralNet()
{
string terminal = TerminalInfoString(TERMINAL_PATH);
dllPath = terminal + "\\MQL5\\Files\\NeuroSolutions\\WeekPattern.dll";
weightsPath = terminal + "\\MQL5\\Files\\NeuroSolutions\\WeekPattern.nsw";
}
//+------------------------------------------------------------------+
bool CNeuroSolutionsNeuralNet::Calc()
{
// Get current quotes for the neuronet
MqlRates rates[], rate;
CopyRates(Symbol(), Period(), 0, 6, rates);
ArraySetAsSeries(rates, true);
// Fill the array of input data of the neuronet
double zlevel=0;
for (int bar=0; bar= 0)) close = true;
if(close)
{
CTrade trade;
trade.PositionClose(_Symbol);
}
}
// If there is no positions, open one according to the prediction
if((Prognoze!=0) && (!PositionSelect(_Symbol)))
{
CTrade trade;
if(Prognoze > 0) trade.Buy (Lots);
if(Prognoze
一个检查我们是否正确连接神经网络的好方法是,在策略测试程序中运行“EA 交易”——采用与训练神经网络所使用的同一时间周期。
好吧,有经验的交易人员要说了,该神经网络是此周期的“适配程序”。因此它被训练为针对那些确切的数据模式(主导特定的周期)识别和通知获利信号。针对这样一段时间绘制的“EA 交易”的盈利图应该是上升的。
我们来检查一下。在我们的示例中,它应该是如下的漂亮图形: