Как при перезапуске терминала выключать автоторговлю

 

Друзья!

Бывает так, что терминал с работающим советником выключается аварийно. При повторном запуске терминала тут же включается и советник. Как сделать так, чтобы терминал при перезапуске не включал автоторговлю??

Заранее спасибо

 

Выключите терминал с выключенной кнопкой "Автоторговля". В итоге сохранится именно это состояние. При следующих запусках, если работа терминала завершится аварийно, он не перезапишет состояние этой кнопки. В итоге новый запуск произойдет с выключенной кнопкой.

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

 
Scriptong:

Выключите терминал с выключенной кнопкой "Автоторговля". В итоге сохранится именно это состояние. При следующих запусках, если работа терминала завершится аварийно, он не перезапишет состояние этой кнопки. В итоге новый запуск произойдет с выключенной кнопкой.

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

хм.. не понял...

1. я выключаю терминал с отжатой кнопкой (Автоторговля)

2. я включаю терминал. Что бы запустить советник, надо нажать кнопку.

3. Кнопка нажата. Советник работает. Терминал выключается аварийно и ... ??

 
gora:

3. Кнопка нажата. Советник работает. Терминал выключается аварийно и ... ??

И не может записать новое состояние кнопки (включено). В файле конфигурации по-прежнему записано состояние "Выключено".
 
Scriptong:
И не может записать новое состояние кнопки (включено). В файле конфигурации по-прежнему записано состояние "Выключено".

Я решил эту проблему программно. При запуске терминала, или установке советника на график, он блокируется программно.

Чтобы активировать советник, нужно имитировать изменение параметров советника: Контекстное меню -> Советники -> Свойства -> Ок 

// блокировка эксперта при старте
   bool ExpertBlocked = true;
...
      
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
...

  // экперт активируется при изменении параметров
   if ( UninitializeReason() == REASON_PARAMETERS )
   {
      ExpertBlocked = false;
   }

...
//----
   return( INIT_SUCCEEDED );
}

 Далее, разрешаем в программе совершать торговые операции, если ( !ExpertBlocked ) 

 

Scriptong,  Спасибо! Теперь понял. Но тут есть минус: при штатном закрытии терминала не забывать отжимать кнопку.

Mislaid, красиво!


Я вчера вечером реализовал это через кнопку:


int OnInit()

{

   ...

    ObjectCreate(0, "button", OBJ_BUTTON, 0,0,0);
    ObjectSetInteger(0, "button", OBJPROP_XDISTANCE, 300);
    ObjectSetInteger(0, "button", OBJPROP_YDISTANCE, 0);
    ObjectSetInteger(0, "button",OBJPROP_XSIZE, 100);
    ObjectSetInteger(0, "button",OBJPROP_YSIZE, 50);
    ObjectSetString(0, "button", OBJPROP_TEXT, "Старт!");
    ObjectSetInteger(0, "button", OBJPROP_SELECTABLE, false);  
    ChartRedraw();

    g_work = false; 

    return(INIT_SUCCEEDED);

}


void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
  if (id == CHARTEVENT_OBJECT_CLICK)
    if (sparam == "button")
    {

      send_order();

      g_work = true;

     
      ObjectDelete(0, "button");
      ChartRedraw();
    }
}


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