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

 
Andrei01:
время новой свечи это Time[0].

и как дальше определить поступление новой свечи?
 
reag:

и как дальше определить поступление новой свечи?
запомнить в переменной предыдущее и сравнивать.
 
Andrei01:
запомнить в переменной предыдущее и сравнивать.

сейчас попробую..
 
reag:

и как дальше определить поступление новой свечи?


есть несколько вариантов, вот парочка:

1. запомним при запуске советника общее кол-во баров на графике и в ходе выполнения советника будем контролировать изменение количества баров:

//начало кода - самый верх
int counted;

int init(){
   counted=Bars;     // запомним общее количество баров на активном ТФ
    Myorders();
return(0);
}

int start(){
   Myorders();
........................

// я рассполагаю этот код в самом конце ф-ции start() - мне так удобнее
  int bar = Bars;
  if (bar != counted ) { // сравним запомненное кол-во баров с текущим если они равны тогда нет нового бара на активном ТФ
      counted= bar;
// код который необходимо выполнить по закрытию/открытию бара
  }
return(0);
}

2. запомнить время открытия последнего бара, код примерно такой-же,

используем datetime last=Time[0];

и сравниваем last==Time[0]  --> да время открытия последнего бара соответствует запомненному, если не равно, значит открылся новый бар

какая схема эффективнее 1 или 2 не знаю - есть сомнения насчет автоматической подкачки истории в терминал, но вроде  проблем не наблюдал

 
IgorM:


есть несколько вариантов, вот парочка:

1. запомним при запуске советника общее кол-во баров на графике и в ходе выполнения советника будем контролировать изменение количества баров:

это работать не будет. количество баров ограничено.
 
Andrei01:
это работать не будет. количество баров ограничено.


это работает, т.к. общее количество не имеет значение, интересует только момент когда изменилось количество баров на графике, в этот момент переменная bar != counted, обратите внимание, я специально запоминаю int bar = Bars;  -чтобы не потерять значение Bars, и потом сравнить и присвоить это значение counted= bar; - а ведь можно было все делать с Bars без лишней переменной - но я решил переподстраховаться 

я же упомянул, что во время автоподкачки истории может быть небольшой  казус, может это и хорошо а может и плохо, если использовать время открытия бара то будет точно работать - время открытия бара не изменится никогда

 
IgorM:


интересует только момент когда изменилось количество баров на графике

после достижения максимального значения, задаваемого в установках, количество баров на графике расти не должно. хотя может это и прыгает плюс минус один на максимуме, не проверял, тогда может и можно это словить, но это уже незадокументированная опция.
 
Andrei01:
после достижения максимального значения, задаваемого в установках, количество баров на графике расти не должно. хотя может это и прыгает, не проверял, тогда может и можно это словить, но это уже незадокументированная опция.

в этом и состоял вопрос. Я проверил при достижении максимума... Bars не меняется, а остается равным Макс. баров в окне (см. сво-ва).
 
reag:

в этом и состоял вопрос. Я проверил при достижении максимума... Bars не меняется, а остается равным Макс. баров в окне (см. сво-ва).
ну так и должно быть. значит первый вариант не будет работать.
 
Andrei01:
ну так и должно быть. значит первый вариант не будет работать.

Да, первый вариант не работает, правда я работаю на нестандартном таймфрейме, второй работает. Всем спасибо!
Причина обращения: