Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 637

 
RostZ:

Всем приветы!

Помогите разобраться с ошибкой: "Недостаточно прав" или "Not enough rights" code #7

Происходит следующее: советник на паре EURCHFХ M1 не может открыть позиции, выдается эта ошибка (обнаружил в журнале), а в это время он открывает без проблем на других парах и на EURCHF M5. Руками открывается без проблем. У другого брокера работает. В чем проблема может быть?

Заранее благодарю за помощь.

Не зная, что написано внутри вашего советника невозможно сказать в чём проблема. Как себя ведёт советник на EURCHFХ M5 и на EURCHF M1?
 
Top2n:


Эта функция же возвращает номер позиции в сроке, а не само число.

 Допустим я достал номер позиции, как тогда дальше, изъять эту позицию?

Я-же дал тебе сцильку на справку, там через 6 строк ниже есть справка по StringSubstr которая как раз извлекает подстроку из текстовой строки, начинающейся c указанной позиции.
 
AlexeyVik:
Я-же дал тебе сцильку на справку, там через 6 строк ниже есть справка по StringSubstr которая как раз извлекает подстроку из текстовой строки, начинающейся c указанной позиции.


sc=ObjectsTotal(OBJ_LABEL);
for(int i=0;i<sc;i++) 
 {
 Neme=ObjectName(i);
 
 if(Neme="lTrend_Power") //Если имя объекта OBJ_LABEL то самое,
{
  NemeText="Trend Power: "; // часть описания из строки текст
  for(int il=0;il<=99;il++) // перебираем 1-99
  {
NemeTextPol = StringFind(NemeText+il+"%",il,0); //Полное имя строки текст "Trend Power: 99%". (99% меняется от 1 до 99)

Kon = StringSubstr(NemeText+il+"%",13,3);
  }
}
Что делаю не так?  Задача вытащить 99(цифру) из строки
 
Top2n:

Что делаю не так?  Задача вытащить 99(цифру) из строки

sc=ObjectsTotal(OBJ_LABEL);

Это количество объектов лейбл, но если присутствует ещё какой-то объект, то здесь будет ошибка в цикле перебора объектов.

Дальше, если у тебя нет других лейблов с похожим именем то и нет необходимости перебирать все объекты. Просто вытаскиваешь OBJPROP_TEXT и с ним работаешь.


string NameText = ObjectGetString(0, "lTrend_Power", OBJPROP_TEXT);

string Kon = StringSubstr(NameText, 13, 2);

и потом переводишь строку содержащую число в формате строки в нужный тип.

А вообще, судя по этому примеру, ты ещё очень далеко от понимания всего процесса программирования.

NemeText="Trend Power: "; // часть описания из строки текст

Это не часть описания объекта, это переменной NеmeText присваивается значение "Trend Power: "

Не поленись почитай ВСЮ справку, а потом будешь вспоминать что решение где-то встречал... и тебе будет проще найти всё необходимое в документации.

 
paladin80:
Не зная, что написано внутри вашего советника невозможно сказать в чём проблема. Как себя ведёт советник на EURCHFХ M5 и на EURCHF M1?

Работает везде, кроме EURCHFX M1. Мне не понятно, что за "Недостаточно прав" и не смог нигде найти более подробные объяснения, в каких случаях появляется это сообщение; как реакция на что... Метаквотсы должны знать, что это означает.
 
AlexeyVik:

Это количество объектов лейбл, но если присутствует ещё какой-то объект, то здесь будет ошибка в цикле перебора объектов.

Дальше, если у тебя нет других лейблов с похожим именем то и нет необходимости перебирать все объекты. Просто вытаскиваешь OBJPROP_TEXT и с ним работаешь.


string NameText = ObjectGetString(0, "lTrend_Power", OBJPROP_TEXT);

string Kon = StringSubstr(NameText, 13, 2);

и потом переводишь строку содержащую число в формате строки в нужный тип.

А вообще, судя по этому примеру, ты ещё очень далеко от понимания всего процесса программирования.

Это не часть описания объекта, это переменной NеmeText присваивается значение "Trend Power: "

Не поленись почитай ВСЮ справку, а потом будешь вспоминать что решение где-то встречал... и тебе будет проще найти всё необходимое в документации.


Спасибо вам, да вы правы, на выходных займусь чтением, как раз в аркаим поеду)))
 

Подскажите, кто-нибудь пробовал идентификатор INDICATOR_COLOR_INDEX для раскраски одного индикаторного буфера разными цветами ? Или это пока не работает в MT4 ?

Пример >>>

В MT5 вот этот код работает так:

 

//+------------------------------------------------------------------+
//|                                                        #Test.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_color1  clrRoyalBlue,clrRed
//--- Индикаторные буферы
double indicator_buffer[];
double color_indicator_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Установка буферов
   SetIndexBuffer(0,indicator_buffer,INDICATOR_DATA);
   SetIndexBuffer(1,color_indicator_buffer,INDICATOR_COLOR_INDEX);
//--- Свойства
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,5);
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- Инициализация буфера
   ArrayInitialize(indicator_buffer,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int      rates_total,
                const int      prev_calculated,
                const datetime &time[],
                const double   &open[],
                const double   &high[],
                const double   &low[],
                const double   &close[],
                const long     &tick_volume[],
                const long     &volume[],
                const int      &spread[])
  {
   int limit=0;
//--- Если первый вызов
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(indicator_buffer,0);
     }
   else
      limit=prev_calculated-1;
//--- Основной цикл
   for(int i=limit; i<rates_total && !IsStopped(); i++)
     {
      indicator_buffer[i]=rand()%3;
      color_indicator_buffer[i]=(indicator_buffer[i]==1) ? 0 : 1;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+

//---

А в MT4 аналогичный, но с небольшими корректировками под MQL4, показывает вот такой результат:

 

//+------------------------------------------------------------------+
//|                                                        #Test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrRoyalBlue,clrRed
//--- Индикаторные буферы
double indicator_buffer[];
double color_indicator_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Установка буферов
   SetIndexBuffer(0,indicator_buffer,INDICATOR_DATA);
   SetIndexBuffer(1,color_indicator_buffer,INDICATOR_COLOR_INDEX);
//--- Свойства
   SetIndexStyle(0,DRAW_ARROW,EMPTY,5);
   SetIndexArrow(0,159);
   SetIndexEmptyValue(0,0);
//--- Инициализация буфера
   ArrayInitialize(indicator_buffer,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int      rates_total,
                const int      prev_calculated,
                const datetime &time[],
                const double   &open[],
                const double   &high[],
                const double   &low[],
                const double   &close[],
                const long     &tick_volume[],
                const long     &volume[],
                const int      &spread[])
  {
   int limit=0;
//--- Если первый вызов
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(indicator_buffer,0);
     }
   else
      limit=prev_calculated-1;
//--- Основной цикл
   for(int i=limit; i<rates_total && !IsStopped(); i++)
     {
      indicator_buffer[i]=rand()%3;
      color_indicator_buffer[i]=(indicator_buffer[i]==1) ? 0 : 1;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Да понимаю, что много вопросов глупых. Честно стараюсь, весь день просидел, но без результатно. 

Записываю в массив, значение цен нескольких трендовых линий на текущем баре. 

Как удалить из массива значение, если объекта нет?


 

 
Top2n:

Да понимаю, что много вопросов глупых. Честно стараюсь, весь день просидел, но без результатно. 

Записываю в массив, значение цен нескольких трендовых линий на текущем баре. 

Как удалить из массива значение, если объекта нет?

Если пробегать по значениям цен трендовых на каждом тике, инициализировать массив, и увеличивать его размерность при нахождении очередной нужной цены нужной трендовой линии, то отпадёт необходимость убирать из массива уже отработанные значения удалённых трендовых. Массив будет динамическим, и в нём каждый раз на каждом тике будут только значения существующих объектов.
 
Top2n:

Как удалить из массива значение, если объекта нет?


Указав нулевую цену. 
Причина обращения: