Пишу индюкатор и отлаживаю его. Результат обработки на каждом
тике выводится в лог экспертов. Так как это не скрипт, то он исполняется
при поступлении каждого тика. На этапе отладки хотелось бы сделать так, чтобы он единожды
вычислял результат и затем не реагировал на последующие тики.
Или, скажем, реагировал только раз в несколько минут, или раз
в несколько тиков. Короче, хочется иногда просто посмотреть
на результаты в логе и спокойно оценить их в течение нескольких
минут. Кто как это делает, поделитесь идеями, пожалуйста. Подозреваю,
что можно как-то использовать Volume[], но пока не проверял.
- Особенности тестирования - Алгоритмический трейдинг, торговые роботы
- Тестер стратегий в торговой платформе MetaTrader 5
- Пример создания программы
Простой флаг bool first поможет ;)
А ещё можно попробовать весь старт временно в инит перенести.
А ещё можно попробовать весь старт временно в инит перенести.
Спасибо, komposter. Ну а если, скажем, индюкатор должен вычисляться (и выводить в лог) раз в 100 тиков, начиная с первого после запуска
индюкатора, можно ли так вот?
int _VolumeOnStart; // Глобальная переменная тикового объема нулевого бара при запуске советникаint init()
{
_VolumeOnStart = Volume[0]; // вместо Volume[] можно воспользоваться iVolume(), указав более крупный ТФ
...
return(0);
}
...
int start()
{
if ( ( Volume[0] - _VolumeOnStart ) % 100 == 1 ) { все вычисления старта и вывод в лог; } // вместо Volume[] можно и iVolume(), указав более крупный ТФ
return( 0 );
}
Может я чего не понимаю, но зачем так сложно?
start() вызывается на каждом тике. Сделать статик каунтер, на каждом тике прибавлять единичку, когда каунтер стал равен 100, сделать свое темное дело и обнулить каунтер, и все по-новой.
Ну я фактически так и сделал. Это разве сложно?
Я-то хочу, чтобы при новой компиляции или смене ТФ индюкатор пересчитался на первом же тике, а потом запускался на 101-м, 201-м и т.п.
Откровенно говоря, я до сих пор не понимал смысл статических переменных. Пока необходимости в них не было. Ну сейчас вроде как понял.
Я-то хочу, чтобы при новой компиляции или смене ТФ индюкатор пересчитался на первом же тике, а потом запускался на 101-м, 201-м и т.п.
Откровенно говоря, я до сих пор не понимал смысл статических переменных. Пока необходимости в них не было. Ну сейчас вроде как понял.
if(NewBars!=Bars){
Запускаем пересчет значений();
NewBars=Bars;
}
Можно пересчитывать по приходу каждого нового бара
if(NewBars!=Bars){
SumBars++
if(SumBars>30){
Запускаем пересчет значений();
SumBars =0;
}
NewBars=Bars;
}
Можно пересчитывать по сумме новых баров
Или такой вариант
Mathemat писал (а):
Я-то хочу, чтобы при новой компиляции или смене ТФ индюкатор пересчитался на первом же тике, а потом запускался на 101-м, 201-м и т.п.
Ну так сделай чтобы темное дело делалось при каунтер = 0, а обнуление
его происходило после 100. Я-то хочу, чтобы при новой компиляции или смене ТФ индюкатор пересчитался на первом же тике, а потом запускался на 101-м, 201-м и т.п.
Сложность-то мне померещилась когда Волюмы увидел...
Всем ответившим большое спасибо за помощь.
И еще один момент - уже не вопрос, а констатация: в выходные тиков
нет, а индюкатор, допустим, отлаживать надо. Ну и фиг с ним, пусть
в выходные работает как скрипт - тем более что у меня графических
буферов там нет, хе-хе... Я так понимаю, что достаточно убрать
все индюкозависимые #property, скопировать измененный файл в каталог скриптов и компильнуть.
Можно еще запустить тестирование в визуальном режиме и набросить
на график индикатор.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь