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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Sergey Chalyshev
7754
Sergey Chalyshev  

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

Mikalas 2015.03.26 00:44  RU

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


 alexvd 2015.03.26 15:16 

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

Sergey Chalyshev
7754
Sergey Chalyshev  
MigVRN:

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

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

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

Andrey Miguzov
1976
Andrey Miguzov  
Mikalas:

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

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

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

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

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

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

Serj_Che:

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

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

Dmitriy Skub
11773
Dmitriy Skub  
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);
  }
Sergey Chalyshev
7754
Sergey Chalyshev  
MigVRN:

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

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

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

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

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

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

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

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

Sergey Chalyshev
7754
Sergey Chalyshev  
Dima_S:

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

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

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

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

Serj_Che:

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

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

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

Sergey Chalyshev
7754
Sergey Chalyshev  
MigVRN:

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

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

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

Andrey Miguzov
1976
Andrey Miguzov  
Serj_Che:

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

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

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

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

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