来自一个 "傻瓜 "的问题 - 页 40

 

请解释为什么MetaTrader 5 中的EA都没有在 策略测试器中 得到测试。我按下启动键,但什么也没有发生。 请解释一下。

 
PATRIOT:

请解释为什么MetaTrader 5 中的EA都没有在 策略测试器中 被测试。我按下启动键,但什么也没有发生。 请解释一下。

看一下日志中的内容(首先)。
 

无法从创建的函数中的预定义结构中检索数据。比如说。

void OnTick()
{
//--- Объявляем структуру
 MqlRates rates[];
 ArraySetAsSeries(rates,true);

//--- Скопировать необходимое количество значений в массив
 if(CopyRates(NULL,0,0,4,rates) < 0) { Print(ErrorDescription(GetLastError())); return; }
...
}

然后,当试图在一个创建的函数中检索值时。

void Trailing_Stop_Loss(ENUM_POSITION_TYPE Type, double Trailing_Stop)
{
 string Val_Time = TimeToString(rates[1].time,TIME_DATE|TIME_MINUTES);

...
}

我们得到一个错误信息。

我如何声明结构以便它们在程序的所有部分都可用?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
tol64:

无法从创建的函数中的预定义结构中检索数据。比如说。

然后,当试图在一个创建的函数中检索值时。

我们得到一个错误信息。

我如何声明结构以便它们在程序的所有部分都可用?

在全球范围内。职能之外。
 
哪些函数可以用来检查一个交易线程是否可以执行交易操作?在MQL4中,函数IsTradeAllowed()IsTradeContextBusy() 是为了这个目的。

标准库的CAccountInfo 类有TradeAllowed() 函数。在帮助中写到,它的意思是。"该账户 允许/禁止交易"我在贸易服务器的返回代码 中没有发现错误代码,这意味着贸易流可能很忙。这个检查现在是在交易终端本身吗?请澄清一下。


 
tol64:
哪些函数可以用来检查一个交易线程是否可以执行交易操作?在MQL4中,函数IsTradeAllowed()IsTradeContextBusy() 是为了这个目的。

标准库的CAccountInfo 类有TradeAllowed() 函数。在帮助中写到,它的意思是。"该账户 允许/禁止交易"我在贸易服务器的返回代码 中没有发现错误代码,这意味着贸易流程可能很繁忙。这个检查现在是在交易终端本身吗?请澄清一下。

在MT5中,交易线程从不忙碌,因为交易操作是异步的。欢欣鼓舞。
 
tol64:
哪些函数可以用来检查一个交易线程是否可以执行交易操作?在MQL4中,函数IsTradeAllowed()IsTradeContextBusy() 是为了这个目的。

标准库的CAccountInfo 类有TradeAllowed() 函数。在帮助中写到,它的意思是。"该账户 允许/禁止交易"我在贸易服务器的返回代码 中没有发现错误代码,这意味着贸易流程可能很繁忙。这个检查现在是在交易终端本身吗?请解释。


在MetaTrader5中,不存在繁忙的交易线程,而MT4只能处理一个交易者的订单,在MT5中,大量的订单被平行处理。在OnTrade()函数中可以获得任何订单的服务器返回代码。
 
uncleVic:

你只需要设定价格。

如果没有设置价格(默认为0.0)或者设置了市场价格,CExpertTrade就会从CExpert提示在市场上开仓

如果价格设定得比市场好(低于当前价格买入,高于当前价格卖出),CExpertTrade将下限价单(如果保证金得到尊重)。

如果价格低于市场(高于当前买入价和低于当前卖出价),CExpertTrade将下达止损单(以缩进为准)。

bool Chhhh::OpenLongParams(double& price, double& sl, double& tp, datetime& expiration)
{
   printf("11111111");
   if(2+2==4)
   {
      price=1.5;
      sl=0;
      tp=0;
      expiration=0;
      return(true);
   }
   else
   {
      return(false);
   }
}

int Chhhh::LongCondition()
{
  printf("222222222");
  return(60);
}
OpenLongParams根本不起作用,它甚至不会返回 "111111111",
,LongCondition会返回 "222222 "并打开一个订单,
,是有什么问题还是设置不同?
 
sergeev:

具体类型是在下订单时设定的。订单发送
OrderSend 与此有什么关系?
 
Lodar:
OpenLongParams根本不执行,它甚至不写 "111111111", ,但LongCondition会写 "22222222 "并开单, ,是我做错了什么还是它的设置不同?


原则上,事情要简单得多。在99%的情况下,可以通过输入参数来调整输入电平。

input double Inp_Signal_PriceLevel    =0.0;

该值是以 "大 "点数设置的(即2/4位)。

值=0--市场进入。

值>0 - 通过限价单进入。

值<0 - 通过止损单进入。

该参数与主信号有关(在向导中选择的信号被收集用于投票)。价格水平设置的算法已经在CExpertSignal基类 中实现(其实例是主信号)。

但是,如果你想使用一种与已实现的算法不同的算法...但这是为以后准备的,到时候会很有趣。