Алексей, ты уверен, что твои новые индикаторы лучше старых?
У меня сейчас Метатрейдер заморозился так капитально, что мне придется его удалить и переустановить.
Я сначала пошел с реала на демо, проверить все ли так же выглядит. Потом вернулся на реал. Потом мне взбрело в голову, что я сверял только евроиену, я захотел сверить евро. И вот когда я второй раз пошел с реала на демо-счет, Метатрейдер заморозился так капитально, что я даже не смог закрыть его ТаскМенеджером, мне пришлось выключить компьютер с насильственным закрытием всех программ. Включил компьютер, попытался включить Метатрейдер - опять все то же самое.
Абсолютно уверен.
Сначала для ускорения вычисления я предпринял сокращение к-ва пересчитываемых баров limit =
500-(Bars - counted_bars); не вникая в основной код индикатора.
Но когда понял, что это не сильно помогает, начал искать действительную причину и нашёл её. Она была в том, что в цикле подсчёта индикатора такие строки
Код:
if(EUR)
{
double [B]EURUSD_Fast[/B] = ma("EURUSD", Fast, MA_Method, Price, i);
double [B]EURUSD_Slow[/B] = ma("EURUSD", Slow, MA_Method, Price, i);
[B]if(!EURUSD_Fast || !EURUSD_Slow)[/B]
[COLOR=Red][B] break;[/B][/COLOR]
}
Такие блоки на каждую валюту.
Выделенное означает, что если одна из этих переменных будет равна нулю, то цикл прекратить.
При первой же итерации обе переменные были равны нулю, потому что на максимальном баре происходит ошибка вычисления МА.
При следующем запуске цикла, (на следующем тике) получается, что индикатор не посчитан, а ф-ция IndicatorCounted() по-любому возвращает посчитанными все бары минус 1 и дальше считается только первый бар. Вот тут и было вставлено "считать 500 баров", но они
все 500 пересчитывались на каждом тике это и грузило комп.
Я заменил
break на continue это просто переводит цикл пересчёта на следующий бар. И так до бара где МА имеет нормальное значение. Дальше эти строки не выполняются. После завершения 1 прохода цикла весь индикатор становится посчитанным и на следующем тике пересчитывается только один последний бар. Вот это и разгрузило процессор.
Зависание компа вероятней всего связано с частым переключением окон и ТФ. При каждом переключении со счёта на счёт происходит пересчёт ВСЕХ индикаторов с максимального бара до текущего. Возможно переключение произошло тогда, когда ещё не все индикаторы пересчитаны. Возможно и другая причина, возможно и их несколько.
Вот это ликбез мне пришлось написать...
