Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1132
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Где-то в справке разработчики сообщали, что никакая упорядоченность не гарантируется.
По тикету всегда упорядоченность есть. Никогда тикет более позднего ордера не будет меньше, чем у более раннего (по времени открытия).
А если искать среди незакрытых ордеров, то и просто по порядку - с порядковым номером 0 - самый старый ордер, а с номером OrdersTotal()-1 будет самый свежий ордер (опять же по времени открытия), без учёта типа.
В истории закрытых ордеров, там да, ещё зависит от сортировки на вкладке истории в окне терминала.
Пришлось искать. В справке по MQL5 не нашел, нашел в справке по OrderSelect для MQL4:
"При последовательном выборе ордеров с помощью параметра SELECT_BY_POS информация отдаётся в том порядке, в котором она поступила с торгового сервера. Никакая сортировка полученного списка ордеров не гарантируется."
Вообще-то я систематически контролирую, есть ли в используемых мной списках упорядоченность по номеру тикета. Случаев ее отсутствия не было. Но и со справкой спорить нельзя, нет аргументов. Никакая так никакая...
Пришлось искать. В справке по MQL5 не нашел, нашел в справке по OrderSelect для MQL4:
"При последовательном выборе ордеров с помощью параметра SELECT_BY_POS информация отдаётся в том порядке, в котором она поступила с торгового сервера. Никакая сортировка полученного списка ордеров не гарантируется."
Вообще-то я систематически контролирую, есть ли в используемых мной списках упорядоченность по номеру тикета. Случаев ее отсутствия не было. Но и со справкой спорить нельзя, нет аргументов. Никакая так никакая...
Что значит "никакая"? По тикету сортируйте - всегда будет порядок и с документацией никаких противоречий, там про сортировку по порядковому номеру написано, а не по тикету, это разные вещи.
Запустите этот код, и почитайте журнал
void OnTick()
{
//--
if(flag)
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Print(i," = ",OrderOpenTime());
}
}
flag=false;
}
//-
}
Еще столкнулся с одной проблемкой! Не судите строго, язык изучаю недели 2-3, может просто туплю!
Задача на советнике, уведомить трейдера через почту каждые 4 часа, если свободная маржа на счете привесила определенное значение.
В тему сообщения нужно написать название брокера и торгуемую пара, а в тело сообщения "Опасность! Просадка привысила допустимое значение. Примите необходимые меры"
Компилятор ругается, с английском не дружу и не могу понять в чем ошибка!
double Sag;
void OnTick()
{
Sag = NormalizeDouble(100-100*(AccountInfoDouble(ACCOUNT_FREEMARGIN)/AccountInfoDouble(ACCOUNT_BALANCE)), 1); //находим процент просадки и округляем до 1 знака
if(Sag > MessageMail && iVolume(NULL,PERIOD_H4,0)<3) //если просадка больше заданного и начата новая свеча на 4ч таймфрейме
{
Alert(Symbol(), ": Просадка = ", Sag, " % ", " > ", MessageMail, " % "); //вывести предупреждение в терминале
//Сюда нужно вставить команду SendMail для отправки сообщения, а что и как не понятно
// пробовал bool SendMail( AccountInfoString(ACCOUNT_COMPANY)|Symbol, "Опасность! Просадка привысила допустимое значение. Примите необходимые меры")
//что то не выходит
}
}
PS: Может в целом есть проще решение для такой задачи, но я пока ее вижу только так)
Еще столкнулся с одной проблемкой! Не судите строго, язык изучаю недели 2-3, может просто туплю!
Задача на советнике, уведомить трейдера через почту каждые 4 часа, если свободная маржа на счете привесила определенное значение.
В тему сообщения нужно написать название брокера и торгуемую пара, а в тело сообщения "Опасность! Просадка привысила допустимое значение. Примите необходимые меры"
Компилятор ругается, с английском не дружу и не могу понять в чем ошибка!
double Sag;
void OnTick()
{
Sag = NormalizeDouble(100-100*(AccountInfoDouble(ACCOUNT_FREEMARGIN)/AccountInfoDouble(ACCOUNT_BALANCE)), 1); //находим процент просадки и округляем до 1 знака
if(Sag > MessageMail && iVolume(NULL,PERIOD_H4,0)<3) //если просадка больше заданного и начата новая свеча на 4ч таймфрейме
{
Alert(Symbol(), ": Просадка = ", Sag, " % ", " > ", MessageMail, " % "); //вывести предупреждение в терминале
//Сюда нужно вставить команду SendMail для отправки сообщения, а что и как не понятно
// пробовал bool SendMail( AccountInfoString(ACCOUNT_COMPANY)|Symbol, "Опасность! Просадка привысила допустимое значение. Примите необходимые меры")
//что то не выходит
}
}
PS: Может в целом есть проще решение для такой задачи, но я пока ее вижу только так)
Грехов нет, на что ругается.
Какие ошибки компилятора
prıvet .podskajıte pojalusta pochemu na demo schete ne mogu otkrıt zdelkı