文章 "EA 交易中的限制和验证"

 

新文章 EA 交易中的限制和验证已发布:

是否可以在周一交易此交易品种?是否有足够的资金用于开仓?如果止损触发,损失有多大?如何限制挂单数量?交易操作在当前柱上执行还是在前一柱上执行?如果交易机器人无法执行此类验证,则任何交易策略可转为带来损失。本文说明在EA交易中有用的验证示例。

在创建一个算法用于自动交易时,您不仅应能处理价格以形成交易信号,还应能获取大量有关在“EA 交易”操作上施加限制的辅助信息。本文将指导您:

  • 获取交易时段相关信息;
  • 检查是否有足够的资产用于开仓;
  • 通过交易品种对总交易量加以限制;
  • 对总订单数量加以限制;
  • 计算入账价格与“止损”间的潜在损失;
  • 检查是否有新柱。

作者:MetaQuotes Software Corp.

 

有用的文章

 
我同意,有很多有用的东西......请不要认为这很难,请解释一下 "交易时段 "和 "报价时段 "的概念。
 

我知道交易时段 不同于 报价时段,因为您已经可以下订单。

但报价还没有开始,即交易没有进行,但可以下订单。

很明显,报价正在进行,这意味着该工具的交易正在进行。


如果我说错了,请指正

 
交易时段,您可以进行交易;在报价时段,价格与交易时段 一样,但您不能进行交易。
 
Rosh:
交易时段,您可以进行交易;在报价时段,价格与交易时段 一样,但您不能进行交易。

谢谢,这就说得通了。
 
由于MQL5 语言 的变化,现在应通过这种方式获得每个符号允许的最大累计交易量:
//--- 获取音量的字符限制
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

旧版本 是这样的,不应使用

//--- 获取音量的字符限制
   double max_volume=AccountInfoDouble(ACCOUNT_LIMIT_VOLUME);


文章已更正,并附上Check_Order_And_Volume_Limits.mq5 Expert Advisor 的新代码。

 

由于 MQL5 中的更改,现在一个符号允许的最大总交易量可以通过以下方式获得:

//--- 获取卷的符号限制
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

请勿使用旧版本! 原来是这样的:

//--- 获取卷的符号限制
   double max_volume=AccountInfoDouble(ACCOUNT_LIMIT_VOLUME);
文章已更正,并附上了新的Check_Order_And_Volume_Limits.mq5 专家代码。
 

(建设 306)

void OnStart()
{
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);
}

编译错误:

SYMBOL_VOLUME_LIMIT' - 未声明标识符 test.mq5 4 46
'SymbolInfoDouble' - 没有一个重载可应用于函数调用 test.mq5 4 20

 

引自文章:"要获取最后一棒的开仓时间,可以使用SeriesInfoInteger() 函数,该函数需要给出符号名称、时间框架和SERIES_LASTBAR_DATE 属性

在参考书的早期版本中,有一个使用 CopyTime 函数 获取最后一栏开仓时间的示例,大致如下:

datetime lastbar_time[1];

CopyTime(Symbol(),0,0,1,lastbar_time);

问题:就信息检索速度和使用效率而言,这两种获取最后一棒打开时间的方法哪种更优?

 
Yedelkin:

引自文章:"要获取最后一栏的打开时间,可以使用SeriesInfoInteger() 函数,该函数需要提供符号名称、时间框架和SERIES_LASTBAR_DATE 属性

在早期版本的《参考手册》中,有一个使用 CopyTime 函数 获取最后一栏开仓时间的示例,如下所示:

问题:就信息检索速度和使用效率而言,这两种获取最后一栏打开时间的方法哪种更优?

就时间而言,它们应该是相等的,但SERIES_LASTBAR_DATE 选项看起来更好。