[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 38

 
ikatsko >>:

Оставил (для упрощения) в коде только то, что составляет проблему. Ставим индикатор и, так сказать, видим проблему.




Если не ошибаюсь, то функция инит вызывается только один раз при завешивании на чарт. Логично было бы делать принудительную переинициализацию при смене т\ф - во избежание "непонятных моментов" с работой менеджера памяти.

if(CurrentPeriod!=Period())
{
    ReInitParam();
    CurrentPeriod=Period();
}

Успехов.

 
ikatsko писал(а) >>

Оставил (для упрощения) в коде только то, что составляет проблему. Ставим индикатор и, так сказать, видим проблему.



//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//...........................................................
Set_SL[History*Depth]=1.0*Level*Point;
Alert("Init:"," Set_SL[",History*Depth,"]=",Set_SL[History*Depth]);//Специально вывел его, чтоб посмотреть: показывает (допустим) 0,0001
//--------------------------------------------------------------------//----
return(0);
}

Не стоит обращаться к массивам из init(). Вернее всего массивы еще не инициализированы. Есть смысл перенести проблемную часть в start()

 
Vinin >>:

Достаточно проверять последнюю закрытую сделку. Но нужно предусмотреть когда истории еще нет

а с помощью какой функции это можно сделать?

 
xruss писал(а) >>

а с помощью какой функции это можно сделать?

Функцию писать надо или поискать готовую.

 
VladislavVG >>:

Если не ошибаюсь, то функция инит вызывается только один раз при завешивании на чарт. Логично было бы делать принудительную переинициализацию при смене т\ф - во избежание "непонятных моментов" с работой менеджера памяти.


Успехов.

Из учебника:

Специальная функция init().
В пользовательских индикаторах специальная функция init() вызывается (и исполняется) сразу после старта клиентского терминала, после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor и после смены входных параметров из окна настройки пользовательского индикатора.

 
ikatsko >>:

Из учебника:

Специальная функция init().
В пользовательских индикаторах специальная функция init() вызывается (и исполняется) сразу после старта клиентского терминала, после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor и после смены входных параметров из окна настройки пользовательского индикатора.

Вы все-таки попробуйте. Это займет минут пять от силы - объявите функцию и перенесите туда из инит присовения и вызовите так, как я Вам написал.

Успехов.

ЗЫ значение макс инт, которое выдает Вам функция - это скорее всего EMPTY_VALUE.

Да, еще: переменная CurrentPeriod должна быть объявлена как статическая или глобальная для файла. Я обычно присваиваю таким переменным значение -1.

 
Как обратиться к предыдущему бару(уже сформированному)?
 
RocketTrend >>:
Как обратиться к предыдущему бару(уже сформированному)?

Close[1]/Open[1]/High[1]/Low[1]/.... В зависимости от того, какое значение необходимо.

 
VladislavVG >>:

Close[1]/Open[1]/High[1]/Low[1]/.... В зависимости от того, какое значение необходимо.

Спасибо

 
VladislavVG >>:

Close[1]/Open[1]/High[1]/Low[1]/.... В зависимости от того, какое значение необходимо.

Спасибо

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