Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2313

 
Andrei Sokolov #:
Приветствую. Подскажите, пожалста: можно ли сделать чтоб индикатор работал и в отдельном окне и одновременно на графике?

В MQL5 один индикатор может присоединить к графику другой индикатор.

 
Andrei Sokolov #:
Приветствую. Подскажите, пожалста: можно ли сделать чтоб индикатор работал и в отдельном окне и одновременно на графике?
Буферы + объекты
 
Artyom Trishkin #:
Смотря что он должен выводить в окне и на графике.

В отдельном - уровень типа rsi, на графике - стрелочки по "теням" свечей.

 
Alexey Viktorov #:

В MQL5 один индикатор может присоединить к графику другой индикатор.

спасиб

 
Tretyakov Rostyslav #:
Буферы + объекты
спасиб. Действительно.
 
Andrei Sokolov #:

В отдельном - уровень типа rsi, на графике - стрелочки по "теням" свечей.

Стрелки на графике - графические объекты сделайте
 
Sergei Kiriakov #:

Как узнать причину Init() ?

У  OnDeinit() есть UninitializeReason() которая возвращает причину деинициализации.

А как в OnInit() получить причину инициализации ?

Хочу предотвратить выполнение инициализации при событии смены периода графика.

Не совсем понятен вопрос. Причину завершения в онинит указываете Вы программе, а в деините программа указывает Вам о причине своего окончания.

int OnInit()
   {
   return(INIT_SUCCEEDED);
   }

То есть, если что-то Вас не устраивает, указываете что: INIT_FAILED, INIT_PARAMETERS_INCORRECT

И дальнейший код не будет исполнен по Вашей причине.

 
Aleksei Stepanenko #:

Не совсем понятен вопрос. Причину завершения в онинит указываете Вы программе, а в деините программа указывает Вам о причине своего окончания.

То есть, если что-то Вас не устраивает, указываете что: INIT_FAILED, INIT_PARAMETERS_INCORRECT

И дальнейший код не будет исполнен по Вашей причине.

Вопрос был в другом. Я понял так, что надо определить причину инициализации в результате смены ТФ или периода графика. В этом случае был дан полноценный ответ.

 

Добрый вечер! Задача разделить строку превысившую допустимую длину на строки. 

Получилось так:

//+------------------------------------------------------------------+
//|                                                 StringDemo01.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int chapter=0,
       length=26;     // Допустимая длинна стоки
   string str,text;
   StringInit(str,length,32);
   Print("str = ",str,": StringBufferLen(str) = ",StringBufferLen(str),"  StringLen(str) = ",StringLen(str));
//-----------------
   text= "Привет! Над всей Испанией безоблачное небо. А у вас какая погода? Если погода у вас плохая, то приезжайте к нам в Испанию";
   comp(str,text);
  }
//+------------------------------------------------------------------+
void comp(const string st1,string st2)
  {
   int static temp;
   int len01=0,len02=0,res=-1,f=0,t=0;
   string result[];               // массив для получения строк
   if(st1!=""&&st2!="")
     {
      st2=StringTrimLeft(st2);
      st2=StringTrimRight(st2);
      len01=StringLen(st1);
      len02=StringLen(st2);
      if(len01>=len02)
         return ;
      else
        {
         while(f<len02&&!IsStopped())
           {
            if(StringGetChar(st2,f)==32)
               temp=f;
            if(len01<=f)
              {
               StringSetCharacter(st2,temp,34);
               int k=StringSplit(st2,34,result);
               PrintFormat("Получено строк: %d.",k);
               if(k>0)
                 {
                  for(int i=0; i<k; i++)
                    {
                    if(i==0)
                       {
                        Print("t = ",t);
                        t++;
                       }
                     if(i==1)
                        st2= result[1];
                     PrintFormat("result[%d]=%s",i,result[i]);
                     
                    }
                 }
               if(StringLen(st2)>len01)
                  f=0;
               else
                  break;
              }
            f++;
           }
        }
     }
  }
//+------------------------------------------------------------------+

Результат не конечный. По всей видимости потребуется еще массив. Вопрос: насколько верна конструкция и если есть под рукой или можете "на коленке", альтернативные варианты. 

 
Artyom Trishkin #:
Стрелки на графике - графические объекты сделайте
спасиб. 
Причина обращения: