EA不会在多对上运行,需要帮助
我是编码mql4的新手,并且已经完成了我的第一个EA。我现在唯一的问题是,我不能让它在一个以上的货币对上进行交易。在终端上日记旁边的EA部分,它发送了一个错误流,订单关闭功能的无效票据,尽管EA在一个货币对上打开和关闭交易都很好。谁能帮帮我。
如果你不展示你的代码和你的错误日志,你怎么能指望我们知道呢?
我们不是读心者! 如果你想得到我们的帮助,你必须展示你的代码以及它给出的错误(日志中的结果)。当我们看了你的代码后,知道你在哪些货币对和时间框架上进行测试也会有帮助。
另外,请注意,在MetaTrader 4 上,你在策略测试器中 一次只能测试一种货币。如果您的EA在一个图表上同时交易多种货币,您将无法在策略测试器中 测试它--只能在真实的模拟账户或真实账户上测试
Matt_Townsend: 即使该EA在一个货币对上打开和关闭交易都很好。 | 这就是为什么我建议 不要在一个EA中交易多种货币
|
请编辑你的帖子并使用SRC按钮来添加你的代码不 要只是复制/粘贴为标准文本,因为这很难阅读。我相信你可以从其他主题中看到应该如何做。请使用SRC按钮来发布你的代码。
编辑:正如之前所要求的那样-- ...如果知道你在什么货币对 和时间框架上进行测试,也会有帮助...
EDIT2: 按照之前 的要求 - ... 以及它给出的错误(日志中的结果) ...
请编辑你的帖子并使用SRC按钮来添加你的代码不 要只是复制/粘贴为标准文本,因为这很难阅读。我相信你可以从其他主题中看到应该如何做。请使用SRC按钮来发布你的代码。
//| Simple Moving Average Crossover Strategy.mq4 |
//| Matthew Townsend |
//+------------------------------------------------------------------+
#property version "1.05"
#property strict
//---
//---Inputs
extern double Lots =0.01;
extern int FastMA =5;
input int FastMAMode =MODE_EMA;
extern int SlowMA =8;
input int SlowMAMode =MODE_SMA;
//+----------------------------------------+
//|undesirables |
//+----------------------------------------+
int init()
{
//----
//----
return(0);
}
int deinit()
{
//----
//----
return(0);
}
//+---------------------------------------------+
//|System start |
//+---------------------------------------------+
int start()
{
double fastma, slowma;
int ticket, total;
//---define Ma's
fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
total = OrdersTotal();
//---Start operations
if(total < 1)
{
if(fastma > slowma)
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
if(fastma < slowma)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
return(0);
}
bool ans;
if(OrderType()==OP_BUY)
{
while(fastma < slowma)
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
if(OrderType()==OP_SELL)
{
while(fastma > slowma)
{
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
return(0);
}
//+-----------------------------------------------------------------------------------+
我要求你编辑 你之前的帖子,而不是添加新的帖子,这样就不会让这个主题变得那么长了
下面的代码已经有两个编译器警告了。
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...
你没有正确检查关闭操作的结果。
在逻辑方面,你的EA有几个问题,但就目前的情况来看,它在我这边的运行没有任何错误,所以请提供你得到的错误列表
我从EA得到的唯一错误是订单关闭功能 的无效票据,旁边有一个数字,我想显示实际的日志,但在EA运行的第二个图表上,它没有做任何事情,因为通常它会试图立即打开一个交易。如果,当日志中开始出现错误时,我将如何向你展示实际的日志?
用点击、Ctrl-点击或Shift-点击(标准的windows操作)选择有问题的线条,然后右击选择的内容,选择 "复制"!这样就可以了。
编辑:关于代码,你正在使用OrderSelect,但你总是假设它每次都有效。当它不工作时,你就继续使用订单的细节函数,如OrderTicket(),如果最初的OrderSelect() 也失败了,这可能会失败。正如我所说,你的代码中有许多逻辑问题
bool ans;
//You do not select an order
{
while(fastma < slowma) //Use if not while
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1) //ticket is a local variable and has not been assigned a value
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
我从EA得到的唯一错误是订单关闭功能 的无效票据,旁边有一个数字,我想显示实际的日志,但在EA运行的第二个图表上,它没有做任何事情,因为通常它会试图立即打开一个交易。如果,当日志中开始出现错误时,我将如何向你展示实际的日志?
关于在多个货币对或时间框架上使用您的EA,还有一个非常重要的说明。
您的代码没有使用 "神奇数字 "选择,也没有在检查历史上的未结订单时检查使用的符号(或 "神奇数字")。因此,从本质上讲,您的EA将无法正常工作,无论是对自己还是对其他EA。
现在的情况是,你只能在没有其他EA运行的情况下单独使用这个EA,甚至不能在另一个图表上使用这个EA!