Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 433

 
Alekseu Fedotov:

Все просто

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));

Как то так


Alekseu Fedotov, К сожалению это не то. Вы получаете, номер бара с ТФ, после чего используете этот же ТФ, а нужно другой (в этом то и проблема). Нужно получив номер бара с ТФ (например 30), а затем получить МА, с ТФ (1440), отталкиваясь именно  от этого бара с ТФ 30. Т.е. это как если бы вы сейчас (в 14.30)  пожелали получить МА с ТФ 1440. Сейчас - не проблема, а вот перенести это на пару дней назад, вот это проблема.

 
STARIJ:
Да. Надо использовать М1, а М5, ... - для проверки. Может быть, интерполяцию использовать? в МТ5 есть история тиков. Если сообщите, где тут профит - посмотрю еще

Мне нужно сделать тех анализ задним числом, как будто это сейчас происходить и посмотреть на его результат. Т.е. как будто я вчера в 14.30 сделал тех анализ МА с ТФ 1d и сегодня получил результаты движения цены по вчерашнему МА. Если я сегодня буду использовать ТФ 1440 и посмотрю с точки зрения вчерашнего  дня, то данные тех анализа будут другие, а стало быть и результатов ожидать нужно других. 

 
Roman Sharanov:

Помогите, мне нужно чтобы рисовался прямоугольник от хая предыдущей свечи до точки на 200п выше него и времени на бара вперед.

Я написал код, но не пойму почему левая точка прямоугольника не смещается? А правая скользит за хаем

Неожиданное поведение функции... Раньше при попытке создать объект с именем уже имеющегося, возвращалась ошибка и объект не изменял имеющиеся параметры на новые. А теперь, видимо внесли изменения и при каждом изменении high[0] либо при появлении нового бара high[1] уже имеет другое значение и при создании нового прямоугольника меняется один из параметров.

Выход из положения очень прост: Проверить существование объекта перед его созданием.

 
STARIJ:

     Двигается



Нет, у меня ничего не рисует с этим кодом

 
Roman Sharanov:   Нет, у меня ничего не рисует с этим кодом

Посмотрите мой файл целиком

Файлы:
PR.mq4  3 kb
 
STARIJ:

Посмотрите мой файл


А понял, у вас MQL4 :)
Сделал массивы таймсериями и заработало, так и не понял почему у меня не получалось

 
Boss11: Мне нужно сделать тех анализ задним числом, как будто это сейчас происходить и посмотреть на его результат. Т.е. как будто я вчера в 14.30 сделал тех анализ МА с ТФ 1d и сегодня получил результаты движения цены по вчерашнему МА. Если я сегодня буду использовать ТФ 1440 и посмотрю с точки зрения вчерашнего  дня, то данные тех анализа будут другие, а стало быть и результатов ожидать нужно других. 

с ТФ 1440 все понятно. а с М1 как написал большая погрешность?

 
STARIJ:

с ТФ 1440 все понятно. а с М1 как написал большая погрешность?


С М1 не пробовал, но думаю погрешность будет меньше. М1->М5 будет точнее чем М30-> 1d

 

Подскажите, пожалуйста, ответ на конкретный вопрос. Переделываю Боллинджер.

Изменил пару строку, не рисует полосы. В чем дело, в логарифмах?

Формула волатильности из https://research-journal.org/economical/analiz-razlichnyx-metodov-ocenki-istoricheskoj-volatilnosti-dlya-opcionnoj-torgovli/

int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres,oldpos;
//----
   if(Bars<=BandsPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=BandsPeriod;i++)
        {
         MovingBuffer[Bars-i]=EMPTY_VALUE;
         UpperBuffer[Bars-i]=EMPTY_VALUE;
         LowerBuffer[Bars-i]=EMPTY_VALUE;
        }
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<limit; i++)
      MovingBuffer[i]=iMA(NULL,0,BandsPeriod,BandsShift,MODE_EMA,PRICE_WEIGHTED,i);
//----
   i=Bars-BandsPeriod+1;
   if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      sum=0.0;
      k=i+BandsPeriod-1;
      oldval=MovingBuffer[i];
      oldpos=i;
      while(k>=i)
        {
         //newres=Close[k]-oldval;
         //sum+=newres*newres;
          sum+=log(fabs(High[k]/Close[k]))*log(fabs(High[k]/Open[k]))+log(fabs(Low[k]/Close[k]))*log(fabs(Low[k]/Open[k]));
         k--;
        }
      deviation=BandsDeviations*MathSqrt(fabs(sum/BandsPeriod));
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
Файлы:
 

Подскажите пожалуйста, как удалить графический объект. Есть вертикальные линии чьи имена строятся из значений переменной.

 string name=="test1"; string Vertline="линия_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,time,cena);  Как удалить только вертикальные линии имеющие в названии test1?

Причина обращения: