mql5 - вертикальная линия через определенное время с момента последней сделки - страница 4

 
renatmt5:
Кстати,  по защите, которую вы добавили есть следующий момент. Поскольку до расчета правильного значения у меня идет задержка 1-2 минуты, в течении которых переменные равны нулю, я для быстрого обновления переключаю текущий таймфрейм на другой - значения сразу же пересчитываются. Наверное, можно по этому принципу какой-то программный костыль сделать?

Ненавижу слово "костыль".


Я уже всё наперёд продумал и очень хорошо, что Вы спросили. Нужно LastProfitForPeriod из void сделать bool. И если какая ошибка - например дата не получена или ещё что, то возвращаем false и так по кругу.

То есть не будет потери минуты.

 

Если получили "false" - сбрасываем время:

   double profit_last_day=0.0,profit_last_deal=0.0;
   if(!LastProfitForPeriod(profit_last_day,profit_last_deal))
     {
      ExtLastMove=0;
      return(rates_total);
     }

   Comment("Profit last day: ",DoubleToString(profit_last_day,2),"\n",
           "Profit last deal: ",DoubleToString(profit_last_deal,2));


Версия 1.003

Файлы:
 
Vladimir Karputov:

Ненавижу слово "костыль".


Я уже всё наперёд продумал и очень хорошо, что Вы спросили. Нужно LastProfitForPeriod из void сделать bool. И если какая ошибка - например дата не получена или ещё что, то возвращаем false и так по кругу.

То есть не будет потери минуты.

По поводу "костыль" - да, есть в этом слове какое-то небрежное отношение к программированию :)

Да, эффект потерянной минуты пропал в v.3 скрипта.

 
renatmt5:

По поводу "костыль" - да, есть в этом слове какое-то небрежное отношение к программированию :)

Да, эффект потерянной минуты пропал в v.3 скрипта.

Это индикатор :)

 
Vladimir Karputov:

Это индикатор :)

Да, верно - еще путаюсь.

 

добавил блок расчета смещения по времени относительно закрытия последней сделки. При попытке использовать в дальнейшем last_time и n для смещения линии получаю ошибку при компилировании :( 

.....

                    {

                     last_time=deal_time;

                     profit_last_deal=full_profit;

                    }

                 }

        }

     }

//-------------//     

// MY CODE     //   

//-------------//

if (profit_last_day<=0 && profit_last_deal<=0){uint n=60*60*24;}

else if (profit_last_day>0 && profit_last_deal<=0){uint n=60*60*2;}

else {uint n=60*60*1;}

//-------------//     

// MY CODE END //   

//-------------//

   return(true);

  }

.......
 
Как-то некомпактно я вставляю фрагмент кода :)
 
При создании ObjectCreate (chart_ID,name,OBJ_VLINE,sub_window,time,0) мне надо как я понимаю изменить значение time, чтобы оно было не TimeCurrent(), а last_time со смещением в будущее на период, равный n.
Или может быть существует функция смещения объекта вперед/назад на заданное кол-во баров? Как лучше? А то, признаюсь, пока что мои самостоятельные  потуги не увенчались успехом :(
 
renatmt5:
При создании ObjectCreate (chart_ID,name,OBJ_VLINE,sub_window,time,0) мне надо как я понимаю изменить значение time, чтобы оно было не TimeCurrent(), а last_time со смещением в будущее на период, равный n.
Или может быть существует функция смещения объекта вперед/назад на заданное кол-во баров? Как лучше? А то, признаюсь, пока что мои самостоятельные  потуги не увенчались успехом :(

Линия создаётся один раз - в OnInit().

Потом она только передвигается - VLineMove

 

Я правильно понимаю, что надо внести изменения в последней строчке фрагмента кода (time=0 в частности)?

//+------------------------------------------------------------------+ 
//| Move the vertical line                                           | 
//+------------------------------------------------------------------+ 
bool VLineMove(const long   chart_ID=0,   // chart's ID 
               const string name="VLine", // line name 
               datetime     time=0)       // line time 


Или VLineMove - это функция, которую еще надо инициировать в каком-то месте (напр. в OnCalculate) и передать ей параметры входящие?
Запутался я что-то совсем :)