初学者的问题 MQL5 MT5 MetaTrader 5 - 页 997

 

问候各位程序员朋友。我需要你的帮助。专家顾问在一个月的第一个交易日只开出一笔交易,可能是第一天、第二天、第三天甚至第四天。我的条件是这样的:if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){交易被打开}我想问,在MQL5中是否有任何函数可以 "告诉EA今天是本月的第一个交易日"?

 
Kolya32:

问候各位程序员朋友。我需要你的帮助。我的专家顾问在一个月的第一个交易日只开一笔交易,而且可以是第一天或第二天、第三天甚至第四天。我的条件是这样的:if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){交易被打开}我想问,在MQL5中是否有任何函数可以 "告诉EA今天是本月的第一个交易日"?

你找不到第一个交易日,或者你不能用这个月的第一个交易日来检查当日的日期?

这样你就可以更准确地找出当前TF中的月份的起始日期(当然PERIOD_CURRENT 可以改成任何一天,例如)。

 datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),PERIOD_MN1,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);

但最好是检查每个函数iTime,Bars

 
Kolya32:

问候各位程序员朋友。我需要你的帮助。我的专家顾问在一个月的第一个交易日只开出一笔交易。 但它可能是第一天或第二天,第三天甚至第四天。我的条件是这样的:if(Day == 1 || Day == 2 || Day == 3 || Day == 4 ){交易被打开}我想问,在MQL5中是否有任何函数可以 "告诉EA今天是本月的第一个交易日"?

找到讨论新柱状体开盘的地方,并在那里替代周期PERIOD_MN1

一个新酒吧的开业将是本月的第一个交易日。

 
Aleksey Vyazmikin:

不能确定第一个交易日或不能将当日的日期与每月的第一个交易日进行核对?

我无法确定本月的第一个交易日。谢谢你的建议,我将进行试验)

 
Alexey Viktorov:

找到讨论新柱状体开盘的地方,并替换掉周期PERIOD_MN1

新酒吧的开业将是本月的第一个交易日。

谢谢你。我也将在这个方向上进行实验)

 

为什么作者要用冒号来写呢? 下面的代码简直充满了冒号。虽然同样的::Sleep(5);也可以不用冒号来写?

void CProgram::GetSymbols(void)
  {
   m_progress_bar.LabelText("Get symbols...");
   m_progress_bar.Update(1,2);
   ::Sleep(5);
//--- Освободить массив символов
   ::ArrayFree(m_symbols);
//--- Массив элементов строк
   string elements[];
//--- Фильтр названий символов
   if(m_symb_filter.IsPressed())
     {
      string text=m_symb_filter.GetValue();
      if(text!="")
        {
         ushort sep=::StringGetCharacter(",",0);
         ::StringSplit(text,sep,elements);
         //---
         int elements_total=::ArraySize(elements);
         for(int e=0; e<elements_total; e++)
           {
            //--- Чистка по краям
            ::StringTrimLeft(elements[e]);
            ::StringTrimRight(elements[e]);
           }
        }
     }
//--- Собираем массив форекс-символов
   int symbols_total=::SymbolsTotal(true);
   for(int i=0; i<symbols_total; i++)
     {
      //--- Получим имя символа
      string symbol_name=::SymbolName(i,false);
      //--- Скроем его в окне Обзор рынка
      ::SymbolSelect(symbol_name,false);
      //--- Если не форекс-символ, перейти к следующему
      if(::SymbolInfoInteger(symbol_name,SYMBOL_TRADE_CALC_MODE)!=SYMBOL_CALC_MODE_FOREX)

         if(m_symb_filter.IsPressed())
           {
            bool check=false;
            int elements_total=::ArraySize(elements);
            for(int e=0; e<elements_total; e++)
              {
               //--- Ищем совпадение в названии символа
               if(::StringFind(symbol_name,elements[e])>-1)
                 {
                  check=true;
                  break;
                 }
              }
            //--- Перейти к следующему, если не пропускает фильтр
            if(!check)
               continue;
           }
      //--- Сохраним символ в массив
      int array_size=::ArraySize(m_symbols);
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=symbol_name;
     }
//--- Если массив пустой, установим текущий символ по умолчанию
   int array_size=::ArraySize(m_symbols);
   if(array_size<1)
     {
      ::ArrayResize(m_symbols,array_size+1);
      m_symbols[array_size]=::Symbol();
     }
//--- Покажем в окне Обзор рынка
   int selected_symbols_total=::ArraySize(m_symbols);
   for(int i=0; i<selected_symbols_total; i++)
      ::SymbolSelect(m_symbols[i],true);
  }
 
BillionerClub:

为什么作者要用冒号来写呢? 下面的代码简直充满了冒号。但我们能不能写出 同样的::Sleep(5);而不加冒号?

操作环境解析 ( :: )

mql5-program中的每个函数都有自己的执行环境。例如,系统函数Print() 是在全局环境下执行的。导入的 函数在相应的导入的上下文中被调用。类的 函数-方法具有相应类的上下文。语境解析操作的语法。

[context_name]::function_name(参数)

如果没有上下文名称,则是明确提到要使用全局上下文。如果没有上下文解析操作,则在最近的上下文中搜索该函数。如果该函数不在本地上下文中,则在全局上下文中进行搜索。

另外,上下文解析操作被用来确定 一个类的成员函数

类型 Class_name::function_name(description_parameters)
{
// 函数主体
}

如果一个程序在不同的执行环境中使用或在将来可能使用几个同名的函数,就可能发生歧义。在不明确指定上下文的情况下调用函数的顺序。

  1. 类方法。如果在类中没有指定给定名称的函数,你将在下一层寻找它。
  2. MQL5函数。如果语言中没有这样的功能,我们就在看下一个层次。
  3. 由用户定义的全局功能。如果没有这样的功能,你要看的是下一个层次。
  4. 进口的功能。如果在导入的函数中没有找到该函数,编译器将产生一个错误。

为了消除函数调用的模糊性,使用上下文解析操作明确地指定范围。

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
-1. В частном случае одномерного массива из 50 элементов обращение к первому элементу будет выглядеть как array[0], к последнему элементу - array[49]. Вызов функции с аргументами x1, x2,..., xn Каждый аргумент может представлять собой константу, переменную или выражение соответствующего типа. Передаваемые аргументы разделяются запятыми и должны...
 
Artyom Trishkin:

语境解析操作( ::: )

我认为作者是在加快代码处理速度。做得好。

 

交易历史被绘制在图表上,我如何禁止这种绘制?


 
BillionerClub:

交易历史被画在图表上,我怎样才能禁止这种画法?


服务 - 设置 - 交易 - "在图表上 实时显示交易"。