Не получается. Счёт MetaQuotes-Demo, пароль от него я забыл, его теперь ни передать ни изменить, а инвесторский пароль без основного пароля не установить.
Но судя по всему ошибка должна быть на любом счёте.
А код для воспроизведения написан в вашей HistoryPosition, если в вашем примере изменить from_date=0 на любую дату, то распечатывается только последняя позиция
Странно.
Должно воспроизводиться и в таком виде
voidOnStart()
{
_HistorySelect(0, INT_MAX);
Print("-----------");
_HistorySelect(D'2024.01.01 17:32:47', INT_MAX);
}
//+------------------------------------------------------------------+void _HistorySelect(datetime from_date, datetime to_date)
{
if(HistorySelect(from_date, to_date)) // Запросили интервал торговой истории.for(uint i = HistoryDealsTotal(); (bool)i--;) // Бежим по всем сделкам в обратной хронологии.Print(HistoryDealGetTicket(i)); // Тикет сделки.
}
//+------------------------------------------------------------------+
А нет. Так всё нормально.
Нужно разбираться с вашим кодом, что то в нём не так.(но это не точно)
Предлагаю сделать тему "Баги" в которой могут писать только модераторы и админы.
Если пользователь выявил баг и его смогли воспроизвести ещё пара пользователей, то модератор переносит пост в эту тему и ссылки на подтверждающие посты.
А админы отвечают уже не по всем веткам форума, а в этой конкретной теме. Пользователи смогут зайти и почитать, без возможности захламить тему.
Если нашли воспроизводимый баг, то тот кто его нашел - дает ссылки на посты в официальную ветку по релизу (сейчас это эта ветка Новая версия платформы MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX ), и в ней админы отвечают (например - сегодня отвечали - #92), так как это - их ветка. Если долго не отвечают - то у админов есть группа (на английском), и некоторые пишут туда как ссылки на посты или ветку с просьбой обратить внимание (на английском).
Тоже самое и на англоязычном форуме: есть ветка по багам, и если баг воспроизводится - то дают ссылки или повторяют пост(ы) уже в релизную ветку (на англоязычную или сюда).
Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.
Призываем всех трейдеров присоединиться к тестированию новой версии платформы. Для обновления на новый билд платформы MetaTrader 5 достаточно нажать После окончания данного этапа бета-тестирования будет выпущен финальный билд новой платформы MetaTrader 5. Terminal Добавлено 28 новых советников и 12 новых индикаторов в стандартную поставку платформы
Нужно разбираться с вашим кодом, что то в нём не так.(но это не точно)
Вот сделали HistorySelect(From, To), где DEAL_ENTRY_OUT присутствует в списке, а DEAL_ENTRY_IN - нет: From больше времени этой сделки.
И вот вызываете для DEAL_ENTRY_OUT HistoryPositionSelect. Откуда возьмутся данные о DEAL_ENTRY_IN? Правильно, будет сделан HistorySelect для получения недостающей информации.
Получилось, что после HistoryPositionSelect таблица история пересобрана (например, изменился HistoryDealsTotal). Как следствие, в коде HistoryDealGetTicket внутри цикла будет возвращать совсем не то, что задумали.
Перепишите так.
int GetDeals( ulong &Deals[] )
{
for (uint i = ArrayResize(Deals, HistoryDealsTotal()); (bool)i--;)
Deals[i] = HistoryDealGetTicket(i);
return(ArraySize(Deals));
}bool PositionHistori(datetime from_date = 0, datetime to_date = INT_MAX)
{
if(m_TF.flagCustom)
{
int Amount = 0; // Количество закрытых позиций.ulong Deals[];if(HistorySelect(from_date, to_date)) // Запросили интервал торговой истории.for(uint i = ArrayResize(Positions, GetDeals(Deals)); (bool)i--;) // Бежим по всем сделкам в обратной хронологии.
{
constulong DealTicket = Deals[i]; // Тикет сделки.if(HistoryDealGetString(DealTicket, DEAL_SYMBOL) == _Symb && (HistoryDealGetInteger(DealTicket, DEAL_MAGIC) == Magic || Magic == 0))
if((HistoryDealGetInteger(DealTicket, DEAL_ENTRY) != DEAL_ENTRY_IN) && // Если сделка не является открывающей,
Positions[Amount].Set(DealTicket)) // записываем данные позиции, закрытой этой сделкой.
Amount++;
}
if(Amount <= 0)
returnfalse;
ArrayResize(Positions, Amount); // Определили количество закрытых позиций.ArrayReverse(Positions); // Расположили закрытые позиции по хронологии закрытия.ArrayPrint(Positions); // Распечатали информацию обо всех закрытых позициях.
}
returntrue;
}
Если нашли воспроизводимый баг, то тот кто его нашел - дает ссылки на посты в официальную ветку по релизу (сейчас это эта ветка Новая версия платформы MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX ), и в ней админы отвечают (например - сегодня отвечали - #92), так как это - их ветка. Если долго не отвечают - то у админов есть группа (на английском), и некоторые пишут туда как ссылки на посты или ветку с просьбой обратить внимание (на английском).
Тоже самое и на англоязычном форуме: есть ветка по багам, и если баг воспроизводится - то дают ссылки или повторяют пост(ы) уже в релизную ветку (на англоязычную или сюда).
Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.
Ну, я явно и писал изначально в ветку бро бэтку - но реакции ноль.
Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.
Так вопрос то не в том куда писать.
Некоторые баги тянутся от версии к версии, предлагаете пользователю в каждой новой теме о новой версии, переписывать своё сообщение в новую тему?
Вопрос в том, чтоб была обратная связь.
Какой смысл, что админ потратил время #92 ответив на вопрос, на который могли ответить другие пользователи?
Лучше бы он это время потратил ответив на вопрос, который был подтверждён другими пользователями.
Не получается. Счёт MetaQuotes-Demo, пароль от него я забыл, его теперь ни передать ни изменить, а инвесторский пароль без основного пароля не установить.
Но судя по всему ошибка должна быть на любом счёте.
А код для воспроизведения написан в вашей HistoryPosition, если в вашем примере изменить from_date=0 на любую дату, то распечатывается только последняя позиция
Странно.
Должно воспроизводиться и в таком виде
А нет. Так всё нормально.
Нужно разбираться с вашим кодом, что то в нём не так.(но это не точно)
Предлагаю сделать тему "Баги" в которой могут писать только модераторы и админы.
Если пользователь выявил баг и его смогли воспроизвести ещё пара пользователей, то модератор переносит пост в эту тему и ссылки на подтверждающие посты.
А админы отвечают уже не по всем веткам форума, а в этой конкретной теме. Пользователи смогут зайти и почитать, без возможности захламить тему.
Задумка интересная.
Что скажет модератор по поводу реализации?
Если нашли воспроизводимый баг, то тот кто его нашел - дает ссылки на посты в официальную ветку по релизу (сейчас это эта ветка Новая версия платформы MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX ), и в ней админы отвечают (например - сегодня отвечали - #92), так как это - их ветка.
Если долго не отвечают - то у админов есть группа (на английском), и некоторые пишут туда как ссылки на посты или ветку с просьбой обратить внимание (на английском).
Тоже самое и на англоязычном форуме: есть ветка по багам, и если баг воспроизводится - то дают ссылки или повторяют пост(ы) уже в релизную ветку (на англоязычную или сюда).
Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.
Нужно разбираться с вашим кодом, что то в нём не так.(но это не точно)
Вот сделали HistorySelect(From, To), где DEAL_ENTRY_OUT присутствует в списке, а DEAL_ENTRY_IN - нет: From больше времени этой сделки.
И вот вызываете для DEAL_ENTRY_OUT HistoryPositionSelect. Откуда возьмутся данные о DEAL_ENTRY_IN? Правильно, будет сделан HistorySelect для получения недостающей информации.
Получилось, что после HistoryPositionSelect таблица история пересобрана (например, изменился HistoryDealsTotal). Как следствие, в коде HistoryDealGetTicket внутри цикла будет возвращать совсем не то, что задумали.
Перепишите так.
Если нашли воспроизводимый баг, то тот кто его нашел - дает ссылки на посты в официальную ветку по релизу (сейчас это эта ветка Новая версия платформы MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX ), и в ней админы отвечают (например - сегодня отвечали - #92), так как это - их ветка.
Если долго не отвечают - то у админов есть группа (на английском), и некоторые пишут туда как ссылки на посты или ветку с просьбой обратить внимание (на английском).
Тоже самое и на англоязычном форуме: есть ветка по багам, и если баг воспроизводится - то дают ссылки или повторяют пост(ы) уже в релизную ветку (на англоязычную или сюда).
Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.
Ну, я явно и писал изначально в ветку бро бэтку - но реакции ноль.
Deals[i]
Отлично! Заработало!!!
Только мне не понятно, почему код из советника, скопированный один в один в скрипт, в скрипте работал правильно, а в советнике не правильно.
почему код из советника, скопированный один в один в скрипт, в скрипте работал правильно, а в советнике не правильно.
В скрипте не вызывалась HistoryPositionSelect.
Sergey Golubev #:
Остальные схемы - не рабочие. Потому что за баг "отвечает" и знает о нем тот, кто сказал что это баг и что он воспроизводится, а админы отвечают в ветке, которую они и создали для таких воспроизводимых багов, и отвечают (и исправляют) согласно приоритетности, которую задают сами.
Так вопрос то не в том куда писать.
Некоторые баги тянутся от версии к версии, предлагаете пользователю в каждой новой теме о новой версии, переписывать своё сообщение в новую тему?
Вопрос в том, чтоб была обратная связь.
Какой смысл, что админ потратил время #92 ответив на вопрос, на который могли ответить другие пользователи?
Лучше бы он это время потратил ответив на вопрос, который был подтверждён другими пользователями.
В скрипте не вызывалась HistoryPositionSelect.
Я не понял. Что значит не вызывалась?
Я скопировал код из советника с в скрипт.
Вот скрипт. Он работает правильно. Этот же код в советнике работает не правильно.
Не понятно почему так происходит.
Вопрос чисто риторический, так как вы написали как изменить код, чтоб он работал и в советнике тоже.
Вот скрипт. Он работает правильно. Этот же код в советнике работает не правильно.
Не понятно почему так происходит.
Этот код не может работать правильно и в скрипте. В нем логическая ошибка, про которую писал выше.
Попробуйте распечатывать HistoryDealsTotal еще и там, где Amount++. Увидите, что значение меняется.
Вопрос в том, чтоб была обратная связь.