Как привязать советника к одному периоду?

 
Пишу советника для работы на часовом графике какой то пары (например USDCHF). Но в процессе работы этого советника хочу посмотреть другие периоды (например 15-ти минутки или Дневники) и при этом просходит ДЕинициализация советника на "часах" и инициализация его на "15-тиминутках" (в общем на том периоде, который просто смотрю). Как этого избежать и ЖЕСТКО привязать советника к выбранному ПЕРИОДУ???

А вот это уже Пишу после полученных двух ответов от OWL и PSmits. Потому что при посылке текста с ответом выскакивает окно с ЕНТОЙ фигней:
--------------------------------------------------------------------------------------------------------------------------------------------
К сожалению, Ваше сообщение не может быть добавлено. Возможно, вы ввели дубликат существующего сообщения,
вступили в силу ограничения неподтверждённого пользователя
или интервал между добавлениями сообщений составил менее 30 сек.
© 2000-2006, MetaQuotes Software Corp. All rights reserved.
---------------------------------------------------------------------------------------------------------------------------------------------
И правка уже написанного текста единственный способ ответить. ЭТО мой ответ OWL и PSmits:
"Открыть в терминале еще одно окно с тем же инструментом". Да, способ, конечно, простой, но не ЖЕСТКИЙ. К тому же, в новом окне отражаться будут только текущие уровни открытия, SL и TP, а созданные советником в процессе его работы графические ОБЪЕКТЫ не видны. Не полная получается картина!!! Не теряю надежды найти другой способ. Что касается замены в кодах 0 на PERIOD_H1, это, КОНЕЧНО ЖЕ, но все равно будут выскакивать события образования новых свечей не вовремя (например: на 15-ти минутках это будет в 4 раза чаще, чем на нужном часовом графике). А на это событие написан отдельный код обрабатывающий внешний вид только что сформировавшейся свечи. Поэтому получится полная путаница. В этом то вся и прелесть.
 
Самый простой вариант - открыть в терминале еще одно окно с тем же инструментом и переключать в нем таймфреймы в свое удовольствие. ..
 
owl писал (а):
Самый простой вариант - открыть в терминале еще одно окно с тем же инструментом и переключать в нем таймфреймы в свое удовольствие. ..

Совершенно верно!
А в советнике везде использовать нужный период. Например:
// H0 = High[0]                      // неправильно  
H0 = iHigh(Symbol(),PERIOD_H1,0);    // а так правильно
...
//MA = iMA(Symbol(),0,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,1);       // неправильно
MA = iMA(Symbol(),PERIOD_H1,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,1); // а так правильно
...

Тогда и тестировать можно хоть на часах хоть на минутках.
 
albe:
А вот это уже Пишу после полученных двух ответов от OWL и PSmits. Потому что при посылке текста с ответом выскакивает окно с ЕНТОЙ фигней:
_____________________________________________________________________________________________________________________________________________________________________

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

© 2000-2006, MetaQuotes Software Corp. All rights reserved.



_________________________________________________________________________________________________________________________________________________________________
Регистрация на сайте MQL4.community состоит из двух шагов:
  • предварительная регистрация, позволяющая читать, открыть 1 новую тему или написать не более 3х комментов
  • полная регистрация после проверки модератором, после чего становятся доступны все функции
В Вашем случае еще не было подтверждения модератора, поэтому появлялось сообщение "вступили в силу ограничения неподтверждённого пользователя". Обычно аккаунты подтверждаются в течение суток. Сейчас Ваша регистрация подтверждена и ограничений нет.
 
PSmith писал (а):
owl писал (а):
Самый простой вариант - открыть в терминале еще одно окно с тем же инструментом и переключать в нем таймфреймы в свое удовольствие. ..

Совершенно верно!
А в советнике везде использовать нужный период. Например:
// H0 = High[0]                      // неправильно  
H0 = iHigh(Symbol(),PERIOD_H1,0);    // а так правильно
...
//MA = iMA(Symbol(),0,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,1);       // неправильно
MA = iMA(Symbol(),PERIOD_H1,MAPeriod,0,MODE_EMA,PRICE_MEDIAN,1); // а так правильно
...

Тогда и тестировать можно хоть на часах хоть на минутках.

Спасибо Renat-у, теперь я могу ответить. "Открыть в терминале еще одно окно с тем же инструментом"
Да, способ, конечно, простой, но не ЖЕСТКИЙ. К тому же, в новом окне отражаться будут только текущие уровни открытия SL и TP, а созданные советником в процессе его работы графические ОБЪЕКТЫ не видны. Не полная получается картина!!! Не теряю надежды найти другой способ.Что касается замены в кодах 0 на PERIOD_H1, это, КОНЕЧНО ЖЕ, но все равно будут выскакивать события образования новых свечей не вовремя (например: на 15-ти минутках это будет в 4 раза чаще, чем на нужном часовом графике). А на это событие написан отдельный код обрабатывающий внешний вид свечи. Поэтому получится полная путаница. В этом то вся и прелесть.
 
Согласно этому:
Отсоединение программы от графика, смена финансового инструмента и/или периода графика, смена счета, закрытие графика, а также завершение работы клиентского терминала прерывает выполнение программы. Если функция start() выполнялась на момент команды на завершение работы, оставшееся время работы ограничивается 2.5 секундами. Программа может узнать, что её пытаются завершить при помощи встроенной функции IsStopped() и корректно закончить свою работу.
Если скрипт выполняется и в начале привязан к определённому периоду а потом вы поменяли период на часы например то поидее если выполняется в этот момент функция start то ей ещё даётся 2. 5 минуты и этого достаточно чтобы узнать что прерывается выполнение и можно успеть сохранить статус, если надо для очередного тика или бара (смотря с чем работает стратегия).
а в функции deinit можно узнать что деинициализация произошла по причине смены таймфрейма

bool isChartChanged = false;

int deinit()
{
switch(UninitializeReason())
{
case REASON_CHARTCLOSE:
case REASON_REMOVE: CleanUp(); break; // очистка и освобождение ресурсов.
case REASON_RECOMPILE:
case REASON_CHARTCHANGE: isChartChanged = true; break;// Выставяем флаг что поменялся таймфрейм
case REASON_PARAMETERS:
case REASON_ACCOUNT: StoreData(); break; // подготовка к рестарту.
}
...
}

тогда в init

int init()
{
if(isChartChanged == true)
{
isChartChanged = false;
return 0;
}
....
}

То есnь так можно избежать переинициализации при смене таймфрейма. Можно использовать один открытый график и видеть на разных таймфреймах свои граф объекты. А в функции старт проверять на каком таймфрейме сформировался новый бар и выполнять соответсвующую ветку и всё в одном потоке скрипта а не в разных при прикреплении советника к чарту с таймфреймом.