Доброго времени суток, уважаемые форумчане) Прошу помощи, только начал изучать и запутался, не могу сделать , так чтобы в коде менялась дата на текущую автоматом.

 

Есть код благополучно стыбжен из инета, так как с датами вообще вообще засаду не могу понять как сделать их так сказать динамическими, т.е. есть цикл который перебирает все закрытые ордера из истории и отнимает от баланса,так как в мт4 нет допустим как в квике входящего остатка приходится получать его из сделок, нужно это для того чтобы рассчитать процент прибыли от баланса начала торгов, чтобы к примеру не жадничать и закрывать все позы при достижении нужной копейки(основной код по индюкам уже написан,осталось только это). Статическую я нашел, в ней ручками нужно вбивать, но зачем тогда писать советника если в него лазить постоянно после торгов время позднее уже у нас,когда они заканчиваются и смысл писать "алкостратегию" чтобы в нее потом тыкать неумелыми пальцами. Кто чем может, люди добрые. Не обязательно писать его за меня (ну если только очень хочется),можно напнуть в правильном направлении. Заранее благодарю)

код вот:

  double Earn(datetime startDate = D'26.11.2020 01:40:27') --- вот эта чертовка!хочу чтобы автомат к примеру в час ночи начал заново перебирать ордера и отсчет пошел с него. Где - то в глубине души понимаю, что это можно сделать и не так сложно это, но чет уже иссяк! 

{

   double result = 0;


   for (int i = 0; i < OrdersHistoryTotal(); i++)

   {

      if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY))

      

         

         {

            if (startDate < OrderCloseTime())

               result += OrderProfit() + OrderSwap() + OrderCommission();

         }Print(result);

      

   }

  

   return(NormalizeDouble(result, 2));         

}

//+------------------------------------------------------------------+

 double EarnOpen(datetime startDate = D'26.11.2020 01:40:27')

{

   double result = 0;

  

   for (int i = 0; i < OrdersTotal(); i++)

   {

      if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))

      

         

         {

            if (startDate < OrderOpenTime())

               result += OrderProfit() + OrderSwap() + OrderCommission();

         }Print(result);

      

   }

  

   return(NormalizeDouble(result, 2)); 

   }


   

 
Vados Tim:

Есть код благополучно стыбжен из инета, так как с датами вообще вообще засаду не могу понять как сделать их так сказать динамическими, т.е. есть цикл который перебирает все закрытые ордера из истории и отнимает от баланса,так как в мт4 нет допустим как в квике входящего остатка приходится получать его из сделок, нужно это для того чтобы рассчитать процент прибыли от баланса начала торгов, чтобы к примеру не жадничать и закрывать все позы при достижении нужной копейки(основной код по индюкам уже написан,осталось только это). Статическую я нашел, в ней ручками нужно вбивать, но зачем тогда писать советника если в него лазить постоянно после торгов время позднее уже у нас,когда они заканчиваются и смысл писать "алкостратегию" чтобы в нее потом тыкать неумелыми пальцами. Кто чем может, люди добрые. Не обязательно писать его за меня (ну если только очень хочется),можно напнуть в правильном направлении. Заранее благодарю)


TimeToString

TimeToString - Преобразование данных - Справочник MQL4
TimeToString - Преобразование данных - Справочник MQL4
  • docs.mql4.com
TimeToString - Преобразование данных - Справочник MQL4
 

Час ночи сегодняшнего дня по времени сервера:

#define SECONDS_PER_HOUR 60 * 60
#define SECONDS_PER_DAY  SECONDS_PER_HOUR * 24

datetime dtCurDayStart = TimeCurrent() / SECONDS_PER_DAY * SECONDS_PER_DAY;
datetime dt1am = dtCurDayStart + SECONDS_PER_HOUR;
Если нужно по локальному времени компьютера, то TimeCurrent() замените на TimeLocal().
Документация по MQL5: Дата и время / TimeTradeServer
Документация по MQL5: Дата и время / TimeTradeServer
  • www.mql5.com
Возвращает расчетное текущее время торгового сервера. В отличие от функции TimeCurrent(), расчет значения времени производится в клиентском терминале и зависит от настроек времени на компьютере пользователя. Существует 2 варианта функции.
 

Функция 'Day()'

ищи в документации

 
Aleksandr Morozov:

Функция 'Day()'

ищи в документации

И что дальше с этим днем делать? Дата нужна.

 
Ihor Herasko:

Час ночи сегодняшнего дня по времени сервера:

Если нужно по локальному времени компьютера, то TimeCurrent() замените на TimeLocal().
datetime dtCurDayStart = TimeCurrent() / SECONDS_PER_DAY * SECONDS_PER_DAY;

Напомнило любопытную задачку-шутку типа сколько будет 6/3*2

Многие математики тут бы поспорили с компилятором))

 
 var1="."+(string)Year()+"."+(string)Month()+"."+(string)Day()+"."+(string)Hour()+"."+(string)Minute(); // для имени
// файла получаем год месяц день час минуты, можно даже миллисекунды получить)

   File_Name=MQLInfoString(MQL_PROGRAM_NAME)+"_"+(string)Symbol()+"_TF_"+(string)Period()+var1+".qstr.csv"; // в имени 
//файла пишем название советника, откуда ведем запись в файл, символ, таймфрейм, время запуска советника и что захочется 
// или идентификатор какой либо.
   
   FileTest(); // функция открытия файла
   point = 1.0/Point; // чтобы не делить на пойнт
   period = 1.0/(double) Period();//что бы не делить на период
   tx=TimeCurrent();// задание времени начала работы советника
   var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

   Qnt_Symb=FileWrite(Handle," Имя файла ",File_Name," Локальное время ",TimeLocal(),"Серверное время ",var1); //Запись в 
// файл первая строка имя файла и время локальное и серверное. Помогает)
   PrintErrF(Qnt_Symb); // функция проверки и возврата ошибки.
 
Ihor Herasko:

И что дальше с этим днем делать? Дата нужна.

каждый день в час ночи пересмотр позиций.

'if (hour==1 && minute==00 && second==00) то пересмотр ордеров;'

я это и сразу имел в виду. Нафиг вам дата. Операторы смотрите сами, возможно где-то не так написал

 
Aleksandr Morozov:

Нафиг вам дата.

Для того, чтобы сравнить время закрытия ордера с ней. Смотрите код, который дал ТС.

 
Что вам конкретно нужно от даты? После закрытия торгов чтобы был пересчет ордеров, либо просто печатать текущую дату и время, либо сравнивать время ордера, либо ещё что-то. Какой рынок? Акции или круглосуточная торговля? Я написал просто код на запуск вашего кода, чтобы каждый день в час ночи было что-то, то есть какая-то программа, то есть на запуск какой-то программы.
 

Aleksandr Morozov:
Что вам конкретно нужно от даты? После закрытия торгов чтобы был пересчет ордеров, либо просто печатать текущую дату и время, либо сравнивать время ордера, либо ещё что-то. Какой рынок? Акции или круглосуточная торговля? Я написал просто код на запуск вашего кода, чтобы каждый день в час ночи было что-то, то есть какая-то программа, то есть на запуск какой-то программы.


Добрый ночи, Всем спасибо за участие!!!

Что мне нужно: нужно чтобы в начале торгов пересчет истории ордеров начинался заново Для того чтобы получился баланс на это время. Делается с целью получения входящего остатка, от которого будет рассчитываться процент прибыли, который я задам от этого баланса, входящий баланс выходит только от пересчета ордеров и их минуса от баланса. В чем суть я хочу сделать к примеру чтобы советник делал к примеру в день 10% от баланса,который был в начале дня. так как аккаутБаланс расчитывает баланс текущий,к примеру на начало дня 100 уе хочу чтобы 110 и перенос на следующтй день,ждать волну новую, но к примеру что делать если одна из сделок закрылась прежде чем набрались эти 10%, при закрытии ордера баланс поменялся и теперь от него рассчитываются 10%, а я хочу его сделать константой до определенного времени. пробывал с глобальными переменными по достижении времени что он get ее в set по времени, но чет не получилось.  Рынок валютные пары, торговля там с небольшим перерывом с 00.00 до 01.00, вот потому и хочу на 01.00 сделать чтобы в начале торгов получить входящий баланс(путем вычета закрытых ордеров), от которого советник будет считать прибыль