Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1196

 
Sergey Voytsekhovsky:

Вот именно эту процедуру сравнения подкиньте плиз, с тикетом позиции, временем открытия и временем сервера я вроде разобрался, сравнить не могу. Через комент посмотрел, получаю просто даты.

Так даты и сравнивайте. Но надо учитывать расхождение. Лучше сравнить разницу времени открытия и эталонного времени с допустимым отклонением.

fabs(время_позиции - эталонное_время) < допустимого_отклонения // например 600 секунд
 
Alexey Viktorov:

Так даты и сравнивайте. Но надо учитывать расхождение. Лучше сравнить разницу времени открытия и эталонного времени с допустимым отклонением.

Alexey Viktorov:

Так даты и сравнивайте. Но надо учитывать расхождение. Лучше сравнить разницу времени открытия и эталонного времени с допустимым отклонением.

Принял, спасибо, буду пробовать, как только буду у компа (сейчас с мобилы).

[Удален]  

Доброго дня.

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

Подскажите, где я не прав.

void OnStart()
{
int      vlines            = 0;
string   vlines_name[];
string   vlines_name_sort[];
datetime tm[];

   vlines = ObjectsTotal(ChartID(),0,OBJ_VLINE);
   if(vlines < 20 * 2)
   {
      Print("вертикальных линий меньше необходимиого. (",vlines," < ",20 * 2,")");
      return;
   }
   ArrayResize(vlines_name,vlines);
   ArrayResize(vlines_name_sort,vlines);
   
   for(int i = 0; i < vlines; i++)
   {
      vlines_name[i] = ObjectName(ChartID(),i,0,OBJ_VLINE);
   }
   ArrayPrint(vlines_name);
   
   for(int i = 0, n = 0; i < 9000; i++)
   {
      ArrayFree(tm);
      CopyTime(Symbol(),Period(),i,1,tm);
      
      for(int a = 0; a < vlines - 1; a++)
      {
         datetime tml = (datetime)ObjectGetInteger(ChartID(),vlines_name[a],OBJPROP_TIME);
         if(tml == tm[0])
         {
            vlines_name_sort[n++] = vlines_name[a];
            break;
         }
      }
   }
   ArrayPrint(vlines_name_sort);
}

Результат:

(GBPUSD,H6)     [ 0] "H6 Vertical Line 10771" "H6 Vertical Line 10884" "H6 Vertical Line 12743" "H6 Vertical Line 1371"  "H6 Vertical Line 14306"
(GBPUSD,H6)     [ 5] "H6 Vertical Line 16501" "H6 Vertical Line 17907" "H6 Vertical Line 20277" "H6 Vertical Line 23365" "H6 Vertical Line 28358"
(GBPUSD,H6)     [10] "H6 Vertical Line 28756" "H6 Vertical Line 29445" "H6 Vertical Line 30340" "H6 Vertical Line 31840" "H6 Vertical Line 32885"
(GBPUSD,H6)     [15] "H6 Vertical Line 33779" "H6 Vertical Line 34048" "H6 Vertical Line 38532" "H6 Vertical Line 38756" "H6 Vertical Line 39075"
(GBPUSD,H6)     [20] "H6 Vertical Line 39458" "H6 Vertical Line 39649" "H6 Vertical Line 40385" "H6 Vertical Line 41116" "H6 Vertical Line 4150" 
(GBPUSD,H6)     [25] "H6 Vertical Line 41900" "H6 Vertical Line 42820" "H6 Vertical Line 43071" "H6 Vertical Line 46245" "H6 Vertical Line 48196"
(GBPUSD,H6)     [30] "H6 Vertical Line 50258" "H6 Vertical Line 50374" "H6 Vertical Line 55171" "H6 Vertical Line 56003" "H6 Vertical Line 56400"
(GBPUSD,H6)     [35] "H6 Vertical Line 57565" "H6 Vertical Line 59075" "H6 Vertical Line 59881" "H6 Vertical Line 59969" "H6 Vertical Line 63122"
(GBPUSD,H6)     [40] "H6 Vertical Line 63540" "H6 Vertical Line 63904" "H6 Vertical Line 64359" "H6 Vertical Line 64420" "H6 Vertical Line 65200"
(GBPUSD,H6)     [45] "H6 Vertical Line 6695"  "H6 Vertical Line 7743"  "H6 Vertical Line 8707"  "H6 Vertical Line 9491"  "H6 Vertical Line 9662" 

(GBPUSD,H6)     [ 0] "H6 Vertical Line 46245" "H6 Vertical Line 39075" "H6 Vertical Line 40385" "H6 Vertical Line 55171" "H6 Vertical Line 31840"
(GBPUSD,H6)     [ 5] "H6 Vertical Line 63904" "H6 Vertical Line 6695"  "H6 Vertical Line 59075" "H6 Vertical Line 28358" "H6 Vertical Line 10884"
(GBPUSD,H6)     [10] "H6 Vertical Line 38532" "H6 Vertical Line 29445" "H6 Vertical Line 23365" "H6 Vertical Line 64420" "H6 Vertical Line 7743" 
(GBPUSD,H6)     [15] "H6 Vertical Line 30340" "H6 Vertical Line 39649" "H6 Vertical Line 38756" "H6 Vertical Line 34048" "H6 Vertical Line 42820"
(GBPUSD,H6)     [20] "H6 Vertical Line 64359" "H6 Vertical Line 50374" "H6 Vertical Line 14306" "H6 Vertical Line 48196" "H6 Vertical Line 57565"
(GBPUSD,H6)     [25] "H6 Vertical Line 20277" "H6 Vertical Line 41116" "H6 Vertical Line 12743" "H6 Vertical Line 50258" "H6 Vertical Line 41900"
(GBPUSD,H6)     [30] "H6 Vertical Line 17907" "H6 Vertical Line 4150"  "H6 Vertical Line 59881" "H6 Vertical Line 56400" "H6 Vertical Line 10771"
(GBPUSD,H6)     [35] "H6 Vertical Line 63540" "H6 Vertical Line 65200" "H6 Vertical Line 9491"  "H6 Vertical Line 16501" "H6 Vertical Line 63122"
(GBPUSD,H6)     [40] "H6 Vertical Line 32885" "H6 Vertical Line 1371"  "H6 Vertical Line 33779" null                     null                    
(GBPUSD,H6)     [45] null                     null                     null                     null                     null                    
 
Сергей Таболин:

Доброго дня.

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

Подскажите, где я не прав.

Результат:

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

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

Во втором цикле выводим результат.

По итогу имеем 2 цикла и между ними сортировку.

Всё, если Я правильно понял задачу :) 

 
Vitaly Muzichenko:

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

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

Во втором цикле выводим результат.

По итогу имеем 2 цикла и между ними сортировку.

Всё, если Я правильно понял задачу :) 

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

[Удален]  
Vitaly Muzichenko:

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

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

Во втором цикле выводим результат.

По итогу имеем 2 цикла и между ними сортировку.

Всё, если Я правильно понял задачу :) 

Вопрос - а какой тип этого двумерного массива должен быть? )))

 
Alexey Viktorov:

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

Почему? Вот

Документация по MQL5: Операции с массивами / ArraySort
Документация по MQL5: Операции с массивами / ArraySort
  • www.mql5.com
//| Получение значений границ для тиковых объемов                    | //| Custom indicator initialization function                         | //| Custom indicator iteration function                              | //
 
Vitaly Muzichenko:

Почему? Вот

Но там нигде не упоминается массив структур. Для уверенности надо будет проверить. Но не сейчас.

 
Alexey Viktorov:

Но там нигде не упоминается массив структур. Для уверенности надо будет проверить. Но не сейчас.

Я ответил касательно массива, для структуры другая сортировка есть, но это не столь важно для поставленной задачи.

[Удален]  
Vitaly Muzichenko:

Я ответил касательно массива, для структуры другая сортировка есть, но это не столь важно для поставленной задачи.

Что-то я торможу....

   long     vlines_arr[][1];

   vlines = ObjectsTotal(ChartID(),0,OBJ_VLINE);
   ArrayResize(vlines_arr,vlines);
   
   for(int i = 0; i < vlines; i++)
   {
      long tml = (long)ObjectGetInteger(ChartID(),vlines_name[i],OBJPROP_TIME);
      vlines_arr[i][0]  = {{tml}, {i}};
      
   }

Так не компилится...