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

 
Alexey Viktorov:

Для отображения в тестере? Есть. Создайте шаблон со всеми индикаторами которые нужны и сохраните его с именем советника или с именем tester и тест будет открываться с этими настройками.

На графике реал и на графике демо-счета.

 

Приветствую!

Кто нибудь знает как связаться с Максимом Гутманом?

Трейдер, разработчик торговой автоматизированной системы

 
odyn:

На графике реал и на графике демо-счета.

Ну вот, например MACD

Все остальные так-же.

 

Добрый день, подскажите плиз или пдкиньте ссылку на посмотреть

возникла необходимость отобрать из открытых позиций те, время жизни которых превышает определенный срок.

Как правильно сравнить время открытия позиции и текущее время ,,,???

Накидал вот такую функцию, ва что делать дальше что-то в голову не приходит (опыта мало), как сравнивается время???

//+------------------------------------------------------------------+
bool Selected_Positions_Time_Life(datetime time_life, int &array_base[][observations])
{
int n = 0;
int size = ArrayRange(array_base,0);

for(int i=0; i<size; i++)
{
   int index  = Arr_Position[i][0];
   int ticket = m_position.SelectByIndex(index);
   datetime tl = m_position.Time();
   datetime tc = TimeCurrent();
 //Вот тут наверное нужно сравнить tl и tc 
 //и если разница превышает time_life, то это наша позиция
}

return(n>0);
}
//+------------------------------------------------------------------+
 
Sergey Voytsekhovsky:

Добрый день, подскажите плиз или пдкиньте ссылку на посмотреть

возникла необходимость отобрать из открытых позиций те, время жизни которых превышает определенный срок.

Как правильно сравнить время открытия позиции и текущее время ,,,???

Накидал вот такую функцию, ва что делать дальше что-то в голову не приходит (опыта мало), как сравнивается время???

В цикле выбрать позицию и получить её тикет

ulong posTicket = PositionGetTicket(i);

Дальше получить время открытия позиции

PositionGetInteger(POSITION_TIME)
и сравнить с эталонным временем ±.
 
Alexey Viktorov:

В цикле выбрать позицию и получить её тикет

Дальше получить время открытия позиции

и сравнить с эталонным временем ±.

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

 
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 цикла и между ними сортировку.

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

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