Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 605

 
Alexander Antoshkin:

 Здравствуйте Владимир

Видимо я неправильно сформулировал вопрос ,Вы не поняли ..

мне подокно не нужно , индикатор надо поставить на график цены  так как ставится  стандартная машка 

это я рассматриваю как пример, и пытаюсь понять . 

 

А конечный результат  хочу чтобы  индикатор установленный  на график имел свой номер , чтобы можно было созданной на графике копкой "Добавить" набрать  необходимое количество копий .... и удалить так же  один ,выбранный  кнопкой  крестика ........ ну там  много всяких еще фантазий   пока  не хочу   о них писать))

Когда индикатор нужно добавить в главное окно графика то:

sub_window

[in]  Номер подокна графика. 0 означает главное окно графика. Чтобы добавить индикатор в новое окно, параметр должен быть на единицу больше, чем индекс последнего существующего окна, то есть равен 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_week день недели

 
new-rena:
Спасибо.
 
pako:
В месяце четыре пять недель, сегодня четвертая неделя месяца
Понял. то есть он хочет учесть недели такого характера 29 число предыдущего месяца (Понедельник, к примеру) и по 31 число текущего месяца (к примеру тоже понедельник). Это уже больше месяца получится. Не логично считать такие недели. Если не так, то неделя будет не целой. Неее, нет смысла....
 
new-rena:

я там все три варианта сделал. Уточни плиз, который он хочет взять за основу?

Этот?

Так не пойдет
Причина обращения: