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

- docs.mql4.com
Час ночи сегодняшнего дня по времени сервера:
#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().

- www.mql5.com
Функция 'Day()'
ищи в документации
Функция 'Day()'
ищи в документации
И что дальше с этим днем делать? Дата нужна.
Час ночи сегодняшнего дня по времени сервера:
Если нужно по локальному времени компьютера, то 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); // функция проверки и возврата ошибки.
И что дальше с этим днем делать? Дата нужна.
каждый день в час ночи пересмотр позиций.
'if (hour==1 && minute==00 && second==00) то пересмотр ордеров;'
я это и сразу имел в виду. Нафиг вам дата. Операторы смотрите сами, возможно где-то не так написал
Нафиг вам дата.
Для того, чтобы сравнить время закрытия ордера с ней. Смотрите код, который дал ТС.
Aleksandr Morozov:
Что вам конкретно нужно от даты? После закрытия торгов чтобы был пересчет ордеров, либо просто печатать текущую дату и время, либо сравнивать время ордера, либо ещё что-то. Какой рынок? Акции или круглосуточная торговля? Я написал просто код на запуск вашего кода, чтобы каждый день в час ночи было что-то, то есть какая-то программа, то есть на запуск какой-то программы.
Добрый ночи, Всем спасибо за участие!!!
Что мне нужно: нужно чтобы в начале торгов пересчет истории ордеров начинался заново Для того чтобы получился баланс на это время. Делается с целью получения входящего остатка, от которого будет рассчитываться процент прибыли, который я задам от этого баланса, входящий баланс выходит только от пересчета ордеров и их минуса от баланса. В чем суть я хочу сделать к примеру чтобы советник делал к примеру в день 10% от баланса,который был в начале дня. так как аккаутБаланс расчитывает баланс текущий,к примеру на начало дня 100 уе хочу чтобы 110 и перенос на следующтй день,ждать волну новую, но к примеру что делать если одна из сделок закрылась прежде чем набрались эти 10%, при закрытии ордера баланс поменялся и теперь от него рассчитываются 10%, а я хочу его сделать константой до определенного времени. пробывал с глобальными переменными по достижении времени что он get ее в set по времени, но чет не получилось. Рынок валютные пары, торговля там с небольшим перерывом с 00.00 до 01.00, вот потому и хочу на 01.00 сделать чтобы в начале торгов получить входящий баланс(путем вычета закрытых ордеров), от которого советник будет считать прибыль

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть код благополучно стыбжен из инета, так как с датами вообще вообще засаду не могу понять как сделать их так сказать динамическими, т.е. есть цикл который перебирает все закрытые ордера из истории и отнимает от баланса,так как в мт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));
}