Нужен совет для организации программной переинициализации советника.
Ну или, если кто-то знает, как БЫСТРО переинициализировать все переменные, тоже прошу помочь.
Внешние (которые задаются через input) лучше не трогать. Лучше сделать их копии, а вот их уже можно менять как хочется.
Ну и при смене параметров предусмотреть полный перерасчет.
Менять можно через глобальные переменные, через создание диалогов, через файл, да мало ли какие идеи могут появиться
Внешние (которые задаются через input) лучше не трогать. Лучше сделать их копии, а вот их уже можно менять как хочется.
Ну и при смене параметров предусмотреть полный перерасчет.
Менять можно через глобальные переменные, через создание диалогов, через файл, да мало ли какие идеи могут появиться
По-моему вы меня не совсем правильно поняли.
Мне бы хотелось программно переинициализировать советник, так же как это бывает при вызове его окна свойств и последующем закрытии (кнопка ОК), чтобы "сбросились" все переменные.
По-моему вы меня не совсем правильно поняли.
Мне бы хотелось программно переинициализировать советник, так же как это бывает при вызове его окна свойств и последующем закрытии (кнопка ОК)
По-моему вы меня не совсем правильно поняли.
Мне бы хотелось программно переинициализировать советник, так же как это бывает при вызове его окна свойств и последующем закрытии (кнопка ОК), чтобы "сбросились" все переменные.
Нужен совет для организации программной переинициализации советника.
Ну или, если кто-то знает, как БЫСТРО переинициализировать все переменные, тоже прошу помочь.
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; }
вот такой способ в моем понимании как раз НЕбыстрый.
мне бы хотелось найти что-то вроде: reinit all
быстро и просто.
мне бы хотелось найти что-то вроде: 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()!!!");
}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужен совет для организации программной переинициализации советника.
Ну или, если кто-то знает, как БЫСТРО переинициализировать все переменные, тоже прошу помочь.