Не отображается индикатор..... ошибка в ДНК или "неправильные пчелы", помогите определиться ) - страница 2

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

У меня в визуал не отображается никак и ни разу.
Все корректно кроме использования функций времени.

 

"По "стоп" визуализации, если вызывался в эксперте, то тут же отображается (.... ну "как надо" все - Pic1,2)."..... это если с графиком больше ничего не делать: "старт......(в теле эксперта вызов через кастом)........стоп"

Про функции времени не понял..... в чем некорректность?

Нас двое пока, я без обращений, как в аське :)

 

Функции времени в тестере моделируются или приравниваются чему либо,
т.е. здесь Ваш индикатор может взять не то время, и не ту разницу.

а также, непонятно распечатывает и в реал и в визуал

if (Per<43200 && (TimeCurrent()- TimeSeconds(PrevTimePer[y]))<Per*60 )continue;
         
         Alert(TimeCurrent(),"   ",TimeSeconds(PrevTimePer[y]),"   ",PrevTimePer[y] ,"  ",TimeCurrent()- TimeSeconds(PrevTimePer[y]));


2008.05.05 14:08:12    fractal_rider EURUSD,H1: Alert: 1209982097   0   1172804400  1209982097
Таймсекондс возвращает ноль, хотя аргумент неравен ни тайм карент ни тайм локал.
 
хорошо, спасибо, сейчас попробую разобраться.... получается, что после первого тика эта конструкция просто сворачивает все вычисления, но тогда куда девается результат той итерации, да и когда это дело отключаешь все равно ничего не отображается..... надо дальше копать, а с этим все равно нужно разбираться
 
if (Per<43200 && (TimeCurrent()- PrevTimePer[y])<Per*60 )continue;
Alert(TimeCurrent(),"   ",PrevTimePer[y] ,"  ",TimeCurrent()- (PrevTimePer[y]));
 
 
2008.05.05 16:35:26    2006.12.01 09:00  i_Model_Fractal_3in1 GBPUSD,H1: Alert: 1164963600   1164960000  3600

теперь это так выглядит..... datetime -  это ведь не что иное, как секунды, а TimeSecond() от них - это уже через чур будет :) особенно если учесть, что:




int TimeSeconds( datetime time)
Возвращает количество секунд, прошедших с начала минуты для указанного времени.
Параметры:
time - Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.

Но проблему это все равно не решило. Да, поменял контроль ТФ и в init dsytc, теперь это так выглядит^



int init() 
{
   SetIndexBuffer(0,Large); SetIndexStyle(0,DRAW_SECTION); SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,Midle); SetIndexStyle(1,DRAW_SECTION); SetIndexEmptyValue(1,0.0); 
   SetIndexBuffer(2,Small); SetIndexStyle(2,DRAW_SECTION); SetIndexEmptyValue(2,0.0);
   PrevTimeCalc=0; 
   ArrayInitialize(PrevTimePer,0);
   CurPeriod=Period();
   // контроль ТФ и введенных параметров - 
   // ????????????????????????  это можно вынести в init ?????????????????????????????
   if (MathCeil(TFSmall/CurPeriod) != TFSmall/CurPeriod) TFSmall=MathCeil(TFSmall/CurPeriod)*CurPeriod;
   if (MathCeil(TFMidle/CurPeriod) != TFMidle/CurPeriod) TFMidle=MathCeil(TFMidle/CurPeriod)*CurPeriod;
   if (MathCeil(TFLarge/CurPeriod) != TFLarge/CurPeriod) TFLarge=MathCeil(TFLarge/CurPeriod)*CurPeriod;
   if (CurPeriod > TFSmall) {Alert ("Период графика должен быть меньше или равен ", TFSmall, " мин."); ErrorTF=1;return;}
   if (TFSmall >= TFMidle || TFMidle >= TFLarge || TFLarge>43200) {Alert ("Некорректный выбор таймфреймов для расчета!!!"); ErrorTF=1;return;}
   return;              
}
//--------------------------------------------------------------------
int start()
{
   if ( ErrorTF==1 ) return; // некорректный таймфрейм   
   // Непосредственно "наше ВСЁ"     
   FractalCalc(); // вычисление 5-ти барных фракталов на старших таймфреймах по барам текущего
   ClearFractal(); // очистка (удаление) лишних экстремумов, для формирования правильного зигзага
                   // если эту функцию закомментить, то код совсем коротенький будет, но все равно
                   // как надо не отображается - этот кусок не показываю
   return;
}



 

Может быть сначала решить проблему не отображения М1. Вот здесь исключаются бары пришедшие внутри минуты,т.к. округляется к "60".

t1=MathCeil((TimeCurrent()/Per)/60)*Per*60-x*Per*60+(k-1)*CurPeriod*60; // время начала последнего бара тек ТФ, закрывающего бар №1 старшего ТФ
Вполне может быть, что тестер работает кратно 60 сек, и тогда...
 
Korey:

Может быть сначала решить проблему не отображения М1. Вот здесь исключаются бары пришедшие внутри минуты,т.к. округляется к "60".

t1=MathCeil((TimeCurrent()/Per)/60)*Per*60-x*Per*60+(k-1)*CurPeriod*60; // время начала последнего бара тек ТФ, закрывающего бар №1 старшего ТФ
Вполне может быть, что тестер работает кратно 60 сек, и тогда...

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


Я чтобы проверить это все дело - на сутки на демо его на все ТФ его повесил, чтобы посмотреть, как он новые фракталы обработает в реале....

 

MathCeil(TimeCurrent()/Per/60) - целое кол-во баров старшего TF

*Per*60 - время начала 0-го бара старшего ТФ

-x*Per*60 - время начала Х-бара старшего ТФ

+(k-1)*CurPeriod*60 - время начала последнего бара рабочего ТФ, которым заканчивается Х-бар старшего


=) не слишком заморочено? - формулу можно и упростить, но это на потом, а то и так трудно разобраться


а тестер "кратно" 60 - это вряд ли, обратите внимание сколько он тиков на минутке делает, когда по всем тикам тестирование идет, впрочем пусть разработчики ответят.


О, заметил только, что картинку не прикрепил

 
картинка на минутках
Файлы:
gbrusdr1min.rar  28 kb
Причина обращения: