Уравнение прямой не работает с переходом на новую неделю

 

Привет! я наверне думаю что вопрос будет относится математикам!

Рассматриваем ситуацию на EURUSD с периодом М1.

Даны две точки

1. D'2023.09.29 21:58:00'

2. D'2023.10.02 00:05:00'

нужно найти значение прямой в точке

3. D'2023.10.02 00:16:00'

Формула прямой взята от Кима

double EquationDirect(double x1, double y1, double x2, double y2, double x)
  {
   if(x2==x1)
      return(y1);
   return((y2-y1)/(x2-x1)*(x-x1)+y1);
  }

Тут видно что значение третей точки переходит за выходные, и поэтому формула Кима не работает или....? Т.е. там где есть дыры - то эта формула не работает? Помогите понять и разобраться!

ниже привожу скрипт который нужно накинуть на EURUSD c периодом М1

//+------------------------------------------------------------------+
//|                                                        test_.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--скрипт надо накинуть на EURUSD M1
   ObjectDelete(0,"nn");
   int x1=iBarShift(NULL,PERIOD_CURRENT,D'2023.09.29 21:58:00',true);
   double y1=iHigh(NULL,0,x1);
   int x2=iBarShift(NULL,PERIOD_CURRENT,D'2023.10.02 00:05:00',true);
   double y2=iHigh(NULL,0,x2);
   int x3=iBarShift(NULL,PERIOD_CURRENT,D'2023.10.02 00:16:00',true);
   double y3=NormalizeDouble(EquationDirect(x1,y1,x2,y2,x3),Digits());
   int count=x3;
   for(int i=x2-1; i>=count; i--)
     {
      x3=iBarShift(NULL,PERIOD_CURRENT,iTime(NULL,0,i),true);
      y3=NormalizeDouble(EquationDirect(x1,y1,x2,y2,x3),Digits());
      if(iHigh(NULL,0,i)>y3)
        {
         y2=iHigh(NULL,0,i);
         x2=x3;
        }
     }
   ObjectCreate(0,"nn",OBJ_TREND,0,iTime(NULL,0,x1),y1,iTime(NULL,0,x3),y3);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double EquationDirect(double x1, double y1, double x2, double y2, double x)
  {
   if(x2==x1)
      return(y1);
   return((y2-y1)/(x2-x1)*(x-x1)+y1);
  }
//+------------------------------------------------------------------+
 
нашел ошибку! думаю это из-за нее. тема  пока закрыта!
 
Tango_X #:
нашел ошибку! думаю это из-за нее. тема  пока закрыта!

поделитесь решением

 
Forester #:

поделитесь решением

.

 
Forester #:

поделитесь решением

Делюсь:

https://www.mql5.com/ru/articles/200

 
Forester #:

поделитесь решением

а его (решения) нет :-) то есть всё предложенное о чём-то о своём

есть жизнь: баров M1,M5,M15 может не быть в таймфрейме (или пост-фактум вам дорисуют в историю, что ещё хуже). Сутки это не 1440 минут, между 12 часами вторника и четверга число баров M5 колеблется, и в произвольном часе бывает всего 40 штук M1

если как в школе провести линии между 14:00/close сейчас и на прошлой неделе,  на M1 и H1, то они не будут совпадать и не будут параллельны. Или не будут прямыми

вам трендовую по имеющимся барам строить, в пропорции от старших ТФ, по времени котирования, по реальному времени и включать ли туда выходные..? 
уже ГОРА. 

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

в ваших вводных :

1. D'2023.09.29 21:58:00'

2. D'2023.10.02 00:05:00'

какие цены взяты ? моменты (точное время) high,low определены всего-то с точностью таймфрейма. От них вообще нельзя строит линий. Или помолясь рассчитывать набегающую ошибку и вместо одной линии будет два хорошо расходящихся предела:-)

с open-close примерно такое же, они известны с точностью spread но не точнее 10^(1-digits). Для близких построений на M1,M5 это каюк..

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