Как программно переинициализировать советник?

 

Нужен совет для организации программной переинициализации советника.

Ну или, если кто-то знает, как БЫСТРО переинициализировать все переменные, тоже прошу помочь.

 
I_SPQR_I:

Нужен совет для организации программной переинициализации советника.

Ну или, если кто-то знает, как БЫСТРО переинициализировать все переменные, тоже прошу помочь.

Внешние (которые задаются через input) лучше не трогать. Лучше сделать их копии, а вот их уже можно менять как хочется.

Ну и при смене параметров предусмотреть полный перерасчет.

Менять можно через глобальные переменные, через создание диалогов, через файл, да мало ли какие идеи могут появиться

 
Vinin:

Внешние (которые задаются через input) лучше не трогать. Лучше сделать их копии, а вот их уже можно менять как хочется.

Ну и при смене параметров предусмотреть полный перерасчет.

Менять можно через глобальные переменные, через создание диалогов, через файл, да мало ли какие идеи могут появиться

По-моему вы меня не совсем правильно поняли.

Мне бы хотелось программно переинициализировать советник, так же как это бывает при вызове его окна свойств и последующем закрытии (кнопка ОК), чтобы "сбросились" все переменные.

 
I_SPQR_I:

По-моему вы меня не совсем правильно поняли.

Мне бы хотелось программно переинициализировать советник, так же как это бывает при вызове его окна свойств и последующем закрытии (кнопка ОК)

А вроде Вы меня не поняли. Хотя дело хозяйское
 
I_SPQR_I:

По-моему вы меня не совсем правильно поняли.

Мне бы хотелось программно переинициализировать советник, так же как это бывает при вызове его окна свойств и последующем закрытии (кнопка ОК), чтобы "сбросились" все переменные.

Программно поменять ТФ с текущего на любой другой и обратно, всё что на графике переинициализируется как мне кажется.
 
I_SPQR_I:

Нужен совет для организации программной переинициализации советника.

Ну или, если кто-то знает, как БЫСТРО переинициализировать все переменные, тоже прошу помочь.

int init() {
   int Error;
   if( МинНаклонТренда<Zero ) МинНаклонТренда=0.0;
   if( МинНаклонТренда-МаксНаклонТренда>Zero ) МаксНаклонТренда=МинНаклонТренда;
   if( БарОкончания<1 ) БарОкончания=1;
   if( МинБазовыйПериод<1 ) МинБазовыйПериод=1;
   if( МаксБазовыйПериод<МинБазовыйПериод ) МаксБазовыйПериод=МинБазовыйПериод;
   if( БарНачала<МинБазовыйПериод+БарОкончания ) БарНачала=МинБазовыйПериод+БарОкончания;
   if( БарНачала>Bars-1 ) {
      if( Bars>МинБазовыйПериод+БарОкончания ) БарНачала=Bars-1;
      else Alert("Неразрешимая ошибка: история("+Bars+")<=активация("+МинБазовыйПериод
                +")+окончание("+БарОкончания+")");
   }
   if( ТолщинаТрендовой<1 ) ТолщинаТрендовой=1;
   if( ТолщинаТрендовой>5 ) ТолщинаТрендовой=5;
   if( РазмерИндикатораТиков<1 ) РазмерИндикатораТиков=1;
   if( РазмерИндикатораТиков>5 ) РазмерИндикатораТиков=5;
   if( СдвигИндикатораТиков<3 ) СдвигИндикатораТиков=3;
   if( СдвигИндикатораТиков>100 ) СдвигИндикатораТиков=100;
   if( ПоказыватьВсе ) Visibility=0; else Visibility=EMPTY;
   LastBar=БарОкончания;
   ЦветЛиний[0]=ЦветПоддержки;
   ЦветЛиний[1]=ЦветСопротивления;
   ЦветХорды[0]=ЦветВосходящейХорды;
   ЦветХорды[1]=ЦветНисходящейХорды;
   ReInit();                                       // Повторная инициализация
   ClearScreen();                                  // Очистить экран
   Error=fVLine("StartLine","Старт",0,БарНачала,0,0,0,0,0,ЦветВертикалей);
   Error=fVLine("DeadLine","Пуск",0,БарОкончания,0,0,0,0,0,ЦветВертикалей);
   DeadLine=TimeCurrent();
   if( СтатическийРежим ) {
      РежимРаботы=" Статический режим Пауза "+ПериодИмитацииТиков+" мс";
      МоделироватьДинамику=false;
      РежимОтладки=false;
      while( true ) {                              // Бесконечный цикл
         ReInit();                                 // Повторная инициализация
         start();                                  // Имитация тика
         Sleep(ПериодИмитацииТиков);               // Не работает в индикаторах
   }  }
   else {
      if( МоделироватьДинамику ) {
         РежимРаботы=" Режим имитации динамики Размерность "+DoubleToStr(0.5*БарНачала*БарНачала,0);
         Print("*     "+Version+РежимРаботы+" История: "+(БарНачала)+" баров с "+TimeToStr(Time[БарНачала]));
         LastBar=БарНачала;
         while( LastBar>БарОкончания ) {           // Перебор всех баров истории
            LastBar--;
            start();                               // Имитация тика
         }
         МоделироватьДинамику=false;
         Print("Режим имитации динамики отключен!");
   }  }
   if( РежимОтладки ) РежимРаботы=" Отладка "; else РежимРаботы=" ";
   РежимРаботы=РежимРаботы+"Динамический режим";
   Print("*     "+Version+РежимРаботы+" История: "+(БарНачала)+" баров с "+TimeToStr(Time[БарНачала]));
   if( РежимОтладки ) start();                     // Имитация тика
   return(0);
}
//-----------------------------------------------------------------------------
// Повторная инициализация глобальных переменных и массивов
void ReInit() {
   StartTime[0]   =Time[БарНачала];
   StartTime[1]   =Time[БарНачала];
   Groups[0]      =0;
   Groups[1]      =0;
   OldMG[0]       =0;
   OldMG[1]       =0;
   MainGroup[0]   =0;
   MainGroup[1]   =0;
   QualityMax[0]  =0;
   QualityMax[1]  =0;
   OldStopLine    =0;
   return;
}
 
tara:

вот такой способ в моем понимании как раз НЕбыстрый.

мне бы хотелось найти что-то вроде: reinit all

быстро и просто.

 
I_SPQR_I:

мне бы хотелось найти что-то вроде: reinit all

#property copyright "IgorM"
#property link      "IgorM"
#property version   "1.00"
#property strict
//--- input parameters
input int      Input1=1;
input int      Input2=2;
input int      Input3=3;
//____________________________________________________________________
bool NewInit;
int My_Input1,My_Input2,My_Input3;
//____________________________________________________________________
int OnInit(){
   NewInit = true;
   return(INIT_SUCCEEDED);
}
//____________________________________________________________________
void OnDeinit(const int reason){
   Comment("");
}
void OnTick(){
   if(NewInit) reinit_all();
   Comment("Внешние переменные:","\n",
           "Input1 = ", My_Input1,"\n",
           "Input2 = ", My_Input2,"\n",
           "Input3 = ", My_Input3);
}
//____________________________________________________________________
void reinit_all(){
   My_Input1 = Input1;
   My_Input2 = Input2;
   My_Input3 = Input3;
   NewInit = false;
   Print("Выполнен OnInit()!!!");
}