- Советники: e-PSI@MultiSET_v.01.05.2014
- Помогите найти индикатор или советник нового бара
- Вопрос
Это струдом но сделано.
Кто подскажет как избежть пересчета индикатора на каждом овом цикле? А заставить считаться только на каждом новом баре?
Такая конструкция:
static int prevtime=0; void start() { if(Time[0] != prevtime) { // Считаем показания индикатора } prevtime=Time[0]; return; }поможет?
Не понял.
Такая конструкция:
static int prevtime=0; void start() { if(Time[0] != prevtime) { // Считаем показания индикатора } prevtime=Time[0]; return; }поможет?
Да наверно такая конструкция будет самая оптимальная. Спасибо.
Такая конструкция:
static int prevtime=0; void start() { if(Time[0] != prevtime) { // Считаем показания индикатора } prevtime=Time[0]; return; }поможет?
Минутку. А если запустить индикатор в 00:00, он заработает? Вроде же нет.
Если грамотно то так можно
static datetime New_Day_DateTime = 0 ; // новый день static datetime New_Hour_DateTime = 0 ; // новый час void init() { /* // 1-й одна проблема если будете перезапускать программу // она начинает отсчет с этого момента // при каждом запуске программы переменная сбрасывается , а это криво! New_Day_DateTime = iTime(Symbol(),PERIOD_D1,0); // НОВЫЙ ДЕНЬ наступил New_Hour_DateTime = iTime(Symbol(),PERIOD_H1,0); // НОВЫЙ ЧАС наступил */ //-------------- // 2-й это лечиться если сохранять как глобальную переменную // или писать на диск в файл // лечим проблему , теперь только при первом старте переменна создается if ( GlobalVariableCheck("gNew_Day_DateTime") == false ) { GlobalVariableSet("gNew_Day_DateTime",iTime(Symbol(),PERIOD_D1,0)); } else { New_Day_DateTime = GlobalVariableGet("gNew_Day_DateTime"); } if ( GlobalVariableCheck("gNew_Hour_DateTime") == false ) { GlobalVariableSet("gNew_Hour_DateTime",iTime(Symbol(),PERIOD_H1,0)); } else { New_Hour_DateTime = GlobalVariableGet("gNew_Hour_DateTime"); } } void start() { if( iTime(Symbol(),PERIOD_D1,0) != New_Day_DateTime ) { New_Day_DateTime = iTime(Symbol(),PERIOD_D1,0); // НОВЫЙ ДЕНЬ наступил GlobalVariableSet("gNew_Day_DateTime",New_Day_DateTime); // в таком режиме намного надежней код - если перезапускать не влияет } if( iTime(Symbol(),PERIOD_D1,0) != New_Hour_DateTime ) { New_Hour_DateTime = iTime(Symbol(),PERIOD_H1,0); // НОВЫЙ ЧАС наступил GlobalVariableSet("gNew_Hour_DateTime",New_Hour_DateTime );// в таком режиме намного надежней код - если перезапускать не влияет } return; }
Не понял.
Такая конструкция:
static int prevtime=0; void start() { if(Time[0] != prevtime) { // Считаем показания индикатора } prevtime=Time[0]; return; }поможет?
Да наверно такая конструкция будет самая оптимальная. Спасибо.
такая конструкция работает только на том ТФ на котором стоит советник!
и увы новый день она найдет только на D1
а новый час только на H1
В своё время встретилась та же проблема отслеживания момента начала нового бара именно в индикаторе. Сразу же обнаружился некий "подводный камень". Вышеуказанная конструкция на самом деле самая надежная для демо/реала, однако не работает в визуальном режиме, если индикатор просто прицеплен к графику, а не вызывается из эксперта через iCustom( ). Индикатор "не понимает" функцию IsVisualMode( ) (по крайней мере, в 209-й сборке; в более новых не проверял). Поэтому приходится использовать комбинированный метод с использованием внешней логической переменной, явно указывающей на визуальный режим. Если она "истина", т.е. происходит тестирование индикатора в визуальном режиме, переключение на новый бар происходит по условию "Volume <= 1" ИЛИ "общее число баров (Bars) на графике изменилось на 1". Если она "ложь", то используется вышеописанный трюк со временем. Код из индикатора, весящего более 100 кб, выдрать довольно затруднительно, поэтому надеюсь, что словесного описания вкупе со встроенной справкой по языку (топики Bars, iBars( ), Volume, iVolume( ), Time[], iTime( )) будет вполне достаточно.
Пользуясь случаем, хотел бы высказать пожелание разработчикам решить проблему с функцией IsVisualMode( ) в индикаторе в будущих релизах МТ, если она почему-либо не решена в сборках новее 209-й.
такая конструкция работает только на том ТФ на котором стоит советник!
Речь не о советнике а о индикаторе.
if(Volume[0]<=1) { // строим индюк }То есть в анализе ты можешь использовать только приход первого тика
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования