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

 
подскажите функцию на ограничение, в эксперт хочу засунуть запрет на продажу или покупку от скользящей средней
 
KoltRU:
подскажите функцию на ограничение, в эксперт хочу засунуть запрет на продажу или покупку от скользящей средней
сделал проще, добавил условие на открытие
 

Заколдобило. Не передается  ссылка на массив в функцию.

void GetIndValue(int IndNo, int Vol, double *out[]){;};

 с этим double *out[] - хоть как его не пиши - все ошибки.

 'BatIndicators.mqh' BatIndicators.mqh 1 1

'*' - pointer cannot be used BatIndicators.mqh 18 45

'out' - arrays are passed by reference only BatIndicators.mqh 18 46

2 error(s), 0 warning(s) 3 1

либо одна либо другая, либо вместе. Помнится раньше без проблем было, или это в С. ) 


 
Yuriy Asaulenko:

Заколдобило. Не передается  ссылка на массив в функцию.

 с этим double *out[] - хоть как его не пиши - все ошибки.

 'BatIndicators.mqh' BatIndicators.mqh 1 1

'*' - pointer cannot be used BatIndicators.mqh 18 45

'out' - arrays are passed by reference only BatIndicators.mqh 18 46

2 error(s), 0 warning(s) 3 1

либо одна либо другая, либо вместе. Помнится раньше без проблем было, или это в С. ) 


Попробуйте так

void GetIndValue(int IndNo, int Vol, double &out[]){}
 
Andrey Barinov:

Попробуйте так

Спасибо. 
[Удален]  

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

         int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);

Вот этот код смотрю https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd 

В примере показывают как в подокно уставить индикатор, а если не нужно подокно, просто на примере мувига как сделать?  

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Antoshkin:

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

         int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);

Вот этот код смотрю https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd 

В примере показывают как в подокно уставить индикатор, а если не нужно подокно, просто на примере мувига как сделать?  

Если нужно добавить индикатор в главное окно, то:

sub_window

[in]  Номер подокна графика. 0 означает главное окно графика. Чтобы добавить индикатор в новое окно, параметр должен быть на единицу больше, чем индекс последнего существующего окна, то есть равен CHART_WINDOWS_TOTAL. Если значение параметра превышает значение CHART_WINDOWS_TOTAL, то новое окно создано не будет, индикатор не будет добавлен.

[Удален]  
Karputov Vladimir:

Если нужно добавить индикатор в главное окно, то:

//+------------------------------------------------------------------+
//|                                                         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;

int MA_handle=INVALID_HANDLE; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
  
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",  MA_Period,  MA_Shift, MA_Method,  PRICE_CLOSE  );
//--- попробуем добавить индикатор на график 
AddIndicator();

   return(INIT_SUCCEEDED); 
  } 

//+------------------------------------------------------------------+ 
//| Функция проверки и добавления индикатора на график               | 
//+------------------------------------------------------------------+ 
bool AddIndicator() { if(MA_handle==INVALID_HANDLE) 
{ Print(__FUNCTION__,"  Создаем индикатор ");

 MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",  MA_Period,  MA_Shift, MA_Method,  PRICE_CLOSE  );
if(MA_handle==INVALID_HANDLE) 
{ 
 Print("Не удалось создать индикатор . Код ошибки ",GetLastError()); 
 } 
  }     
//--- сбросим код ошибки 
   ResetLastError(); 
//--- накладываем индикатор на график 
  
   Print("Mа построен "); 
//--- получим номер нового подокна, в которое добавим индикатор  
   int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL); 
   PrintFormat("Добавляем индикатор на окно %d графика",subwindow); 
   if(!ChartIndicatorAdd(0,subwindow,MA_handle)) 
     { 
      PrintFormat("Не удалось добавить индикатор  на окно %d графика. Код ошибки  %d", 
                  subwindow,GetLastError()); 
     } 
   return(true); 
  } 
void OnDeinit(const int reason)
{
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",  MA_Period,  MA_Shift, MA_Method,  PRICE_CLOSE  );

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

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

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

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

 

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

 
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:

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

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

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

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

 

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

Индикатор может иметь имя, если Вам нравятся цифры, то пусть это будет цифра. Однако цифра будет не числом, а текстом. Вам нужна пользовательская панель управления, которая позволит добавлять какой-либо номер индикатора в количестве от одного и более?