ФОРТС Прошу помощи - страница 5

 

Кто то врет, или Михаил не принимает возражения техподдержки, или техподдержка не хочет признавать проблему.

Mikalas 2015.03.26 00:44  RU

Опять сервисдекск не может воспроизвести ошибку!


 alexvd 2015.03.26 15:16 

В первом посте тоже не правильный код. 

 
MigVRN:

Давайте жить дружно :)

Только не сразу - а при удачной загрузке.

В вашем коде видно что функция OnInit никчемная, или разработчики схалтурили.

 
Mikalas:

Да, ну а если данных действительно нет?

Что тогда? Цикл? с каким количеством итераций? 

Нет тут конкретных рецептов…

Я вообще индикаторы не люблю… Исключительно только из-за этого:

В одном потоке с индикаторами также последовательно выполняются остальные действия по данному символу - обработка тиков и синхронизация истории. Это означает, что если в индикаторе выполняется бесконечное действие, все остальные события по его символу никогда не выполнятся.

Из-за них чат, да и всё остальное, может тормозить. Поэтому использую их без запросов к котировкам соседних чатов и в качестве поставщика пользовательских событий. Вообщем, работаю только с тем, что пришло в OnCalculate().

Serj_Che:

В вашем коде видно что функция OnInit никчемная, или разработчики схалтурили.

Это же Ваш код - я в него вставил только то, о чем говорил alexvd. Не понял почему из него следует что функция OnInit никчемная.

 
alexvd:
ПРосто в вашем коде в он калькулейте сразу после ResetLastError() нужно сбросить ошибку в глобальной переменной is_failed. Иначе раз словив ошибку так и будем получать сообщение о ней

Бинго! Вы почти угадали)) Не зря таки говорят - доверяй, но проверяй. Окончательный текст ниже.

#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//
bool is_failed = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  SymbolSelect( "MIX-6.15", true );
  SymbolSelect( "RTS-6.15", true );
  SymbolSelect( "Si-6.15", true );
//---  
  ResetLastError();
//---  
  int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
           is_failed = false;
           Print( "Init OK." );
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   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[])
  {
  ResetLastError();
//---  
 int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
          Print( "Init OK." );
          is_failed = false;
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
MigVRN:

Нет тут конкретных рецептов…

Я вообще индикаторы не люблю… Исключительно только из-за этого:

В одном потоке с индикаторами также последовательно выполняются остальные действия по данному символу - обработка тиков и синхронизация истории. Это означает, что если в индикаторе выполняется бесконечное действие, все остальные события по его символу никогда не выполнятся.

Из-за них чат, да и всё остальное, может тормозить. Поэтому использую их без запросов к котировкам соседних чатов и в качестве поставщика пользовательских событий. Вообщем, работаю только с тем, что пришло в OnCalculate().

Это же Ваш код - я в него вставил только то, о чем говорил alexvd. Не понял почему из него следует что функция OnInit никчемная.

Какой это мой код? Я кодов никаких не выкладывал тут.

Из за индикаторов все остальное тормозить не будет. В том и дело что в МТ5 все рассинхронизировано, индикаторы работают в своем потоке, советники в своем. Стакан сам по себе.

Тоже индикаторы не люблю, но использовать приходится иногда. 

 
Dima_S:

Бинго! Вы почти угадали)) Не зря таки говорят - доверяй, но проверяй. Окончательный текст ниже.

Для чего вы в OnCalculate повторяете то что было в OnInit? Это такое заклинание?)
 
Serj_Che:

Какой это мой код? Я кодов никаких не выкладывал тут.

ООО... сори. перепутал с Dima_S.

Serj_Che:

Из за индикаторов все остальное тормозить не будет. В том и дело что в МТ5 все рассинхронизировано, индикаторы работают в своем потоке, советники в своем. Стакан сам по себе.

Тоже индикаторы не люблю, но использовать приходится иногда. 

Индикаторы то работают в своем потоке... только в этом же потоке работает и чат. И если что-то в индюке пойдет не так (вечный цикл в OnCalculate())  то советник, который тоже в "своем" потоке работает - с этого чата уже ничего не увидит...

 
MigVRN:

ООО... сори. перепутал с Dima_S.

Индикаторы то работают в своем потоке... только в этом же потоке работает и чат. И если что-то в индюке пойдет не так (вечный цикл в OnCalculate())  то советник, который тоже в "своем" потоке работает - с этого чата уже ничего не увидит...

Сомневаюсь, больше даже склоняюсь что это не так, советник должен работать сам по себе. Конкретно таких заморочек не было, но при желании такой экстрим можно проверить.

 
Serj_Che:

Сомневаюсь, больше даже склоняюсь что это не так, советник должен работать сам по себе. Конкретно таких заморочек не было, но при желании такой экстрим можно проверить.

Набросаю проверочный код. Часика через 2-3. Но то что если 1 индикатор на чате "тормозит" то вместе с ним тормозят и другие - это факт с которым не раз сталкивался.
 
MigVRN:
Набросаю проверочный код. Часика через 2-3. Но то что если 1 индикатор на чате "тормозит" то вместе с ним тормозят и другие - это факт с которым не раз сталкивался.

Ок, интересно! 

Индикаторы работают в своем потоке, советники в своем. Если конечно не одноядерный камень. 

Причина обращения: