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

 
Alexander Antoshkin:

你好,弗拉基米尔。

我一定是把我的问题表述错了。

我不需要一个子窗口,指标应该作为一个标准图表放在价格图表上

我把它看作是一个例子,并试图理解。

我希望安装在图表上的指标有自己的编号,这样就可以使用 "添加 "按钮在图表上创建必要数量的副本.....。我想删除一个由 "十字 "按钮选择的........(我还不想描述它们))

什么时候应该在主图表窗口中添加一个指标

子窗口

[in] 图表子窗口编号。要为一个新窗口添加指标,参数必须比最后一个现有窗口的索引多一个,即等于CHART_WINDOWS_TOTAL。如果参数值超过CHART_WINDOWS_TOTAL,将不创建新窗口,不添加指标。

你不能在OnInit()中添加指标--因为在这个阶段专家还没有形成。但是函数--OnTick()是专家顾问完全工作的标志。

//+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- variables
int MA_handle=INVALID_HANDLE;
bool first_start=false;
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit()
  {
   Print(__FUNCTION__,", first_start = ",first_start);
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",MA_Period,MA_Shift,MA_Method,PRICE_CLOSE);
   if(MA_handle==INVALID_HANDLE)
      return(INIT_FAILED);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!first_start)
     {
      if(AddIndicator()) //попробуем добавить индикатор на график 
         first_start=true;
     }
  }
//+------------------------------------------------------------------+ 
//| Функция проверки и добавления индикатора на график               | 
//+------------------------------------------------------------------+ 
bool AddIndicator()
  {
//--- сбросим код ошибки 
   ResetLastError();
//--- накладываем индикатор на график   
   int subwindow=0;
   PrintFormat("Добавляем индикатор на окно %d графика",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,MA_handle))
     {
      PrintFormat("Не удалось добавить индикатор  на окно %d графика. Код ошибки  %d",
                  subwindow,GetLastError());
     }
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
并重写AddIndicator()函数,使其在尝试添加指标失败时返回false。
 
Alexander Antoshkin:

你好,弗拉基米尔。

我一定是把我的问题表述错了。

我不需要一个子窗口,指标应该作为一个标准图表放在价格图表上

我把它看作是一个例子,并试图理解。

我希望安装在图表上的指标有自己的编号,这样就可以使用 "添加 "按钮在图表上创建必要数量的副本.....。我想删除一个由 "十字架 "按钮选择的........(有很多幻想,我还不想描述它们))。

指标可以有一个名字,如果你喜欢数字,就让它成为一个数字。然而,该号码将不是一个数字,而是一个文本。你想要一个自定义的控制面板,允许你从一个或多个指标中添加任何指标号码吗?
 
你能告诉我如何在一个月内按日号和按周号分别进行过滤吗? 在日内我已经这样做了。


bool TimeStart=false;

int hour=12;


//--Фильтр по ремени открытия бара внутри дня

if (TimeStart==true)

{      

      datetime  Open_timePos=iTime(_Symbol,0,0);

      MqlDateTime str1; 

      TimeToStruct(Open_timePos,str1);

      str1.hour=hour;

      str1.min=0;

      str1.sec=0;


      datetime start_time=StructToTime(str1);

      if (start_time>iTime(_Symbol,0,0))

      {

            BuyPrIMA=false;

            SellPrIMA=false;      

      

      } 

 

 

 
-Aleks-:
你能告诉我如何在一个月内按日号和按周号分别进行过滤吗? 在日内我已经这样做了。

int НомерДНЯвМесяце=TimeDay(iTime(_Symbol,0,0));

int НомерДняНедели=TimeDayOfWeek(iTime(_Symbol,0,0)); int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);

 
new-rena:
他问的是每月的那一周
 
pako:
他问的是每月的那一周

我在那里做了所有三个选项。请问他想用哪一个作为基础?

这个?

int НомерНеделиВмесяце=NormalizeDouble(НомерДНЯвМесяце/7,0);
 
new-rena:
我在那里做了所有三个选项。请说明。

每月有五到六个星期,今天是本月的第四个星期

str.day 每月的日期

str.day_of_weekday

 
new-rena:
谢谢你。
 
pako:
一个月有四个五周,今天是这个月的第四周
我明白了,所以他想核算上个月29日(比如说星期一)到本月31日(比如说也是星期一)的这种性质的星期。这是一个多月的时间。计算这样的周数是不符合逻辑的。如果不是这样,那么这个星期就不是一个完整的星期。没有,没有点....
 
new-rena:

我在那里做了所有三个选项。请问他想用哪一个作为基础?

这个?

那是不行的。