如何了解市场是否关闭?(mql4) - 页 3

 

所有这些检查的实际需要是什么?

为什么要检查,例如,专家是否被允许交易?谁是目标?跌倒的用户?贸易许可的标志在终端中被设置一次,仅此而已。为什么我们要在每次打勾时检查呢?还是每隔N秒检查一次?专家顾问没有别的事可做吗?

为什么要检查市场是否开放?市场是否在它想开的时候开?或者有些工具今天在16点交易,明天在14点交易,这种混乱的情况一直在发生?如果交易时间表是已知的,并且从未改变,那么,如果市场是开放的,你为什么要检查每一个刻度或每N秒?

还有这个关于发送交易请求 以了解市场是否开放的有趣提示?对于那些喜欢笑的人?还是为了一个满意的用户?

没有勾选,就没有交易。

 
abolk:

所有这些检查的实际需要是什么?

为什么要检查,例如,专家是否被允许交易?谁是目标?跌倒的用户?贸易许可的标志在终端中被设置一次,仅此而已。为什么我们要在每次打勾时检查呢?还是每隔N秒检查一次?专家顾问没有别的事可做吗?

为什么要检查市场是否开放?市场是否在它想开的时候开?或者有些工具今天在16点交易,明天在14点交易,这种混乱的情况一直在发生?如果交易时间表是已知的,并且从未改变,为什么我们要每隔一格或每隔N秒检查一次,如果市场是开放的?

还有这个发送交易请求 看市场是否开放的把戏?

没有勾选 - 没有交易。

任务是不同的。对于所有我不能说,但我的任务是为一个EA的不同符号开立订单,其中一些有不同的交易时段(我的意思是有可能使用账户中的任何一组符号)。

因此,所有的检查都不是在OnTick而是在OnTimer中完成的。我在上一页描述了我的版本。尽管从原则上讲,这是一种 "不打勾--不交易 "的检查。

 
abolk:

......市场是否在它想开的时候开?或者有些工具的交易从今天下午4点开始,从明天下午2点开始,一直都是一团糟?

...

它发生了...有不同的节日...不同的国家。外汇成功了,但黄金和白银却没有。

而如果你有机会在外汇上面使用期货,那么提前收盘,以及超过限额的截止日期和其他花招都会发生。

 
papaklass:

这里是四个人的另一个选择。

bool flag;
//-----------------------------------------------------------------------------+

bool RealSymbol(string str)
{
   return(MarketInfo(str, MODE_BID) != 0);
}//----------------------------------------------------------------------------+
 
void init()
{
   flag = RealSymbol(Symbol());
         
   return;  
}//----------------------------------------------------------------------------+
 
void deinit()
{
   return;
}//----------------------------------------------------------------------------+
 
void start()
{
   if (!flag)
   {
      return;
   }
   
   //дальше Ваш рабочий код
     
   return;  
}//----------------------------------------------------------------------------+

惊人的选择 -- 主要是在开市前运行顾问 -- 如果你不关闭它,不超载,不改变时间框架 -- 那么顾问将永远不会工作,因为标志将始终处于 "不 "的状态。

p.s. 有趣的建议主题

p.s.2.特别奇怪的是,当他们在一个封闭的市场中这样说时

MarketInfo(Symbol(), MODE_BID)

给出了零分。

 

检查刻度线之间的滞后,并在此基础上推断出平仓交易是一个错误的决定。

 
avtomat:

检查刻度线之间的滞后,并在此基础上推断出平仓交易是一个错误的决定。

然而。
1)如果答案不是 "交易是否关闭",而是 "是否有可能在这个价格打开交易"(在当前条件下)。
2) 事先知道,如果一个报价超过xx分钟,那么服务器在试图打开一个订单时,保证会返回关闭的报价。
那么它将是可以接受的。当然,是IMHO。
 

关于MT5的这个问题 已经有一些讨论。

对我来说,正确的选择是使用SymbolInfoSessionTrade() 来确定是否有交易。


//+------------------------------------------------------------------+
//|Открыта ли торговая сессия                                        |
//|                                                 Copyright,Sergeev|
//|                           https://login.mql5.com/ru/users/sergeev|                 
//+------------------------------------------------------------------+
bool IsTradeSessionOpen()
  {
   MqlDateTime _DateTime;
   datetime _TimeCurrent=TimeTradeServer(_DateTime);

// проверяем время торгов по инструменту
   datetime _TradeEnd=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_EXPIRATION_TIME);
   if(_TimeCurrent>_TradeEnd && _TradeEnd>0) return(false);

   datetime _TradeStart=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_START_TIME);
   if(_TimeCurrent<_TradeStart && _TradeStart>0) return(false);

// проверяем сессии инструмента
   datetime _DayStart=_TimeCurrent/(60*60*24); _DayStart*=(60*60*24); // начало текущего дня
   datetime _sec=_TimeCurrent-_DayStart; // число секунд от начала дня

   for(int i=0; i<10; i++) // подразумеваем, что админ сделал не более 10 сессий в сутки
     {
      datetime _from,_to;
      if(!SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)_DateTime.day_of_week,i,_from,_to)) break; // данные сессии
      if(_sec>=_from && _sec<=_to) return(true);
     }
   return(false);
  }
Как узнать, что по выходным нет торговли?
Как узнать, что по выходным нет торговли?
  • www.mql5.com
Пытаюсь дать понять советнику, что по выходным дням торговать не нужно :). - - Категория: общее обсуждение
 
Kino:

将专家顾问切换到OnTimer()模式,现在当市场关闭时,它不理解这一点,并试图进行交易,一般来说,它与服务器联系,当然会收到错误和堵塞日志。GetLastError() = 市场已关闭。还有什么条件可以用来检查市场是否关闭或在周末?

持续时间=(以毫秒为单位的设定值,如6小时=1000*60*60*6)。

如果(GetLastError()==132(市场已关闭) ) 睡眠(持续时间)。

 

有一次我用SymbolInfoSessionTrade() 和Quote做实验,结果发现这些函数的数据只与现实近似对应,在某些情况下并不对应。

也许几种检查的结合会给交易是否结束的问题一个明确的答案?

SymbolInfoSessionTrade - Документация на MQL4
  • docs.mql4.com
SymbolInfoSessionTrade - Документация на MQL4
 

哇,那是一个很大的文本。

MarketInfo(Symbol(),MODE_TRADEALLOWED)