Как найти начало таймфрейма? - страница 3

 

мой временный статус модератора мешает Вам оценить Ваши заблуждения?

Я предоставил Вам один реально работающий ассемблерный код (его всегда можно проверить и в случае чего указать на вопиющие ошибки), две реальные ссылки на первоисточник, и данные одной очень хорошей книжки на русском языке. Вы что-нибудь из этого смотрели? Не понравилось?

  • Я являюсь ответственным представителем разработчика. Дальше что?
  • Я являюсь безответственным представителем разработчика. Докажите это.
  • Я не являюсь представителем разработчика. От этого представленные мной аргументы не могут быть рассмотрены?
 
stringo:

  • Я являюсь ответственным представителем разработчика. Дальше что?
  • Я являюсь безответственным представителем разработчика. Докажите это.
  • Я не являюсь представителем разработчика. От этого представленные мной аргументы не могут быть рассмотрены?
  • То что вы указали по ссылке-вовсе не является аргументом-причём тут мануал по некому процессору?
  • Процессор работает под управлением во первых ОС а во вторых- под управлением программы на некоем языке. Вот и приведите данные о скорости выполнения деления  в вышеуказанной среде для некого среднего процессора (например Dual Core и разрядности 64) -тогда это будет неким косвенным аргументом..хотя это совершенно не означает что терминал МТ5 даст такую же скорость.
  • Как нибудь я выберу время и померяю реальную скорость а то я вижу что скорость выполнения вовсе не заботит разработчиков МТ5..
 

Я же Вам сказал.

Целочисленное деление 64-битных целых в 64-битной версии - 1 такт.

Целочисленное деление 64 битных целых в 32-битной версии - около 50 тактов (так как используется вычислительный метод)

Но если иметь некоторые знания, то: дату можно откастить в 32-битное целое (1 такт), деление двух 32-битных целых (ещё 1 такт). Итого 2 такта процессора.

Я не являюсь представителем разработчика. Я являюсь одним из разработчиков языков MQL II, MQL4, MQL5

 
stringo:

Но если иметь некоторые знания, то: дату можно откастить в 32-битное целое (1 такт), деление двух 32-битных целых (ещё 1 такт). Итого 2 такта процессора.

Нечто подобное мне и пришлось сделать:

MqlTick tick;
   if(SymbolInfoTick(Symbol(),tick)) {
     bid0= tick.bid ;
     ask0= tick.ask ; 
     tmtic = tick.time ; } // out SymbolInfo       
      
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
   
      if ( tsec0 < 1) {
tmin0 = tmtic / 60 ;
tsec0 =  tmin0 * 60 ;       } // out tsec0 < 1
 tmsec = tmtic - tsec0 ; 

 то есть операцию деления я делаю только 1 раз а далее- я просто прибавляю 60 сек на каждой следующей минуте:

Gettic(); 
if ( tmsec > 59 ) {
tmmin ++ ;
tsec0 = tsec0 + 60 ;
tmsec = tmtic - tsec0 ;
if ( tmmin > 59 ) {
tsec0 = 0 ;
tmmin = 0 ;  }
Upsv = 1 ;
 }

 

int Dmax,zi,tmsec,tmmin,tsec0,tmin0, tmtic ,Maxsv,Minsv ;
Но это называется -изголяться. На мой взгляд -язык  должен обеспечивать удобное программирование при высокой скорости исполнения

	          
 

Таким образом- я получаю : счётчики минут и секунд ,синхронизированные с  временем сервера.для быстрого доступа

и цикл начала таймфрейма( у меня он 1 минута).

По признаку  Upsv я могу обрабатывать этот цикл в свободное время внутри цикла 

не нагружая основной цикл работы советника.

 
shelandr:

В MQL4 всё было просто  Tic=Volume[0]; и всего то делов..

Кстати не всего делов-то. Иногда он пропускает тики и объем на первом тике мог начаться и с 4 например.

Так же и сейчас у вас.  Момент tsec0<1 и т.д. может быть пропущен со всеми вытекающими. А вы такты считаете.

Надо хотя бы  tsec_new<tsec_before  проверять