Особенности языка mql5, тонкости и приёмы работы - страница 181

 
Andrey Khatimlianskii:

На таком терминале у меня 1-2 графика обычно, запутаться сложно. Но смысл понятен.

Торгую больше символов, советников запущено еще больше. Мониторинг неторгуемых символов еще. Кастомные символы создаются, Тестер пашет и т.д.

Рабочая лошадка, в общем.
 
fxsaber:

Торгую больше символов, советников запущено еще больше. Мониторинг неторгуемых символов еще. Кастомные символы создаются, Тестер пашет и т.д.

Рабочая лошадка, в общем.

У меня рабочая лошадка только под инвест паролем на все счета. И пофиг, есть там какие-то советники или нет.

 
trader_number_one:

У меня рабочая лошадка только под инвест паролем на все счета. И пофиг, есть там какие-то советники или нет.

Советники не только торгуют. Более того, на рабочей лошадке нужно иметь возможность торговли.

 
fxsaber:

У меня десять Терминалов. В суматохе на одном переключился на другой счет. Проходит время, смотрю на Терминал и вижу, что мне нужен другой счет - переключаюсь на прежний. И совершенно не ожидая, что висит советник, вижу, что запустился советник.

такой простой код будет работать при смене счета?

bool IsShowMessageBox = true;
//+------------------------------------------------------------------+
int OnInit()
{
   if(IsShowMessageBox && MessageBox("Произвести запуск эксперта?", "Run EA", MB_OKCANCEL) == IDCANCEL) return(INIT_FAILED);
   IsShowMessageBox = false;
   return(INIT_SUCCEEDED);
}


а релогин при обрыве связи будет запускать этот код?

 
Igor Makanu:

такой простой код будет работать при смене счета?

Нет.

а релогин при обрыве связи будет запускать этот код?

Автоматический релогин не будет. Ручной - будет.

 

Решение-то на поверхности. Что не меняется на графике при переключении? Правильно - графические объекты. При старте робота, создаете графический объект, который удаляете в DeInit, при штатной ситуации, соответственно, в OnInit проверка на наличие объекта, если есть, то, что-то пошло не так и return INIT_FAILED.

Примерно так:

#define NAME "test"

int OnInit()
  {
   static const string symbol=_Symbol;
   if (ObjectFind(0,NAME)>=0||symbol!=_Symbol) return INIT_FAILED;
   else ObjectCreate(0,NAME,OBJ_HLINE,0,0,0);
   return INIT_SUCCEEDED;
  }

void OnDeinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: ObjectDelete(0,NAME);
      case REASON_RECOMPILE:
      case REASON_ACCOUNT: break;
   }
}

void OnTick(){
}
 
Vladimir Simakov:

Решение-то на поверхности. Что не меняется на графике при переключении? Правильно - графические объекты. При старте робота, создаете графический объект, который удаляете в DeInit, при штатной ситуации, соответственно, в OnInit проверка на наличие объекта, если есть, то, что-то пошло не так и return INIT_FAILED.

Примерно так:

сохраниться не проблема, тут в общем нужно правильно распределить инициализацию ЕА, случай с переключением счетов меня меньше всего волнует, а вот как происходит запуск самого чарта и когда чарт не готов - это тайна покрытая мраком )))

проверил чтение комментария... а вот и не все гладко - его даже не видно на "черном экране" когда на несуществующем символе между счетами переключишься ;)

int OnInit()
{
   string arr_comm[];
   if(StringSplit(ChartGetString(0, CHART_COMMENT), StringGetCharacter(";", 0), arr_comm) == 2) Print("_StopFlag = ", (bool)((int)arr_comm[0]), " ; _UninitReason = ", (int)arr_comm[1]);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment((string)_StopFlag + ";" + (string)_UninitReason);
}
 
Vladimir Simakov:

Решение-то на поверхности. Что не меняется на графике при переключении? Правильно - графические объекты. При старте робота, создаете графический объект, который удаляете в DeInit, при штатной ситуации, соответственно, в OnInit проверка на наличие объекта, если есть, то, что-то пошло не так и return INIT_FAILED.

Примерно так:

С таким-же успехом можно использовать глобальные переменные терминала. Они то-же не удаляются.

 
Konstantin Nikitin:

С таким-же успехом можно использовать глобальные переменные терминала. Они то-же не удаляются.

На вкус и цвет... Вот не люблю я их...

 
Vladimir Simakov:

На вкус и цвет... Вот не люблю я их...

Например я на VDS удаляю все объекты. Просто что лишним не нагружать график. Да и ни к чему они там. Я глобалками пользуюсь. Так что все зависит от ситуаций.

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