Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
int Weekday = TimeDayOfWeek(TimeLocal()); //Локальное время |
int Weekdays = TimeDayOfWeek(TimeCurrent()); //Серверное время |
while(IsExpertEnabled()) //До тех пор пока запушенно |
{if(Weekday!=0||Weekday!=6){Exp=true;if(Weekday==1){Info(4,Weekday,0);}} //Если не Сбб. Воск. то разрешено |
if(Weekdays==0||Weekdays==6) //Если Сбб. Воск. то не разрешено |
{
Exp=false;Info(5,Weekdays,0);
if(Weekdays==6){Sleep(86400000);} //Если суббота пауза 24 часа |
if(Weekdays==0){Sleep(3600000);} //Если воскресение пауза 1 час |
}
IsTradeAllowed
Возвращает информацию о возможности торговли при помощи экспертов.
bool IsTradeAllowed();
Вторая форма вызова возвращает информацию о возможности торговли для заданного символа в указанное время.
bool IsTradeAllowed(
const string symbol // символ
datetime tested_time // время
);
Параметры
symbol
[in] Символ.
tested_time
[in] Время.
Возвращаемое значение
Возвращает true, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает false.
Спасибо конечно, но это как говорится лезть к глазу через одно место) Я тоже могу влепить отложку на евро на цене 5.0 сервер позволит это делать, а потом при каждом цикле таймера пытаться изменить отложку, если ошибка 132 то рынок закрыт, если норм то торговля есть, но в торговое время это флуд сервера, хотелось бы решение проблемы по человечески, а не через "коромысло", а это уже к разработчикам МК.
IsTradeAllowed
Возвращает информацию о возможности торговли при помощи экспертов.
bool IsTradeAllowed();
Вторая форма вызова возвращает информацию о возможности торговли для заданного символа в указанное время.
bool IsTradeAllowed(
const string symbol // символ
datetime tested_time // время
);
Параметры
symbol
[in] Символ.
tested_time
[in] Время.
Возвращаемое значение
Возвращает true, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает false.
Александр, вы ошибаетесь)
вот такой вариант работает совсем не плохо
вот такой вариант работает совсем не плохо
Спасибо за наводку на путь истинный, но когда рынок открыт пытаться определить возможность работы с ордерами это как то всеравно не корректно, но работать будет.
Со своей стороны рассуждаю следующим образом.
Если необходимо торговать на текущем символе, то косвенным признаком того, что рынок открыт, является приход новых тиков. Таким образом, достаточно события OnTick и вопрос закрыт.
Если же необходимо работать с символами, отличными от текущего, то факт открытия торгов по текущему символу не гарантирует нам того, что торги идут по какому-то другому символу. Например, советник запущен на EURUSD, время 09:00 UTC, а торговать нужно в том числе и акциями компаний США, рынок которых откроется только в 13:00 UTC. То есть OnTick не поможет. Потребуется определять факт открытия рынка по другим символам именно путем попыток отсылки приказов на сервер с некоторым интервалом. Отсылка приказа один раз в минуту - это ни в коем случае не бомбежка сервера, а вполне нормальный подход. Что тут некорректного?
нет тиков нет торговли как мне когда то ответили в сервисдеск по этой проблеме определения дня недели,
предложено ими решение как
TimeDayOfWeek(TimeLocal());
хотя оно конечно не совсем верно, ведь день недели может отличаться от терминального.
Важным условием было - не пытаться открывать ордера, хотя в прочих проектах неоднократно прибегал к такому. И, честно говоря, мне кажется, что пока это самый простой и надёжный метод.
Итак пока лучшим вариантом у меня получилось сделать так (но я всё ещё в поиске, см. ниже):
1) Определяем, разрешена ли торговля "в лоб" - вторая форма функции IsTradeAllowed() (выше про неё говорилось). Если нет, то и суда нет :)
2) Сравниваем время последней котировки по символу SymbolInfoInteger(<symbol>, SYMBOL_TIME) с временем одной из торговых сессий (SymbolInfoSessionTrade()), если время котировки попадает в диапазон одной из сессий - считаем, что торговать можно.
3) Проверяем, чтобы время котировки не было слишком "устаревшим": если оно было более xx минут назад (сравниваем SymbolInfoInteger(<symbol>, SYMBOL_TIME) и TimeCurrent()), то считаем, что котировка устаревшая, а следовательно торговать по ней не выйдет (если не ошибась, у нас шла речь о трёх минутах).
Недостаток такого подхода в следующем: возможны условия, когда по инструменту торговать нельзя, а тики идут.
В механизм не вникал, разработка делалась для брокера и вот при тестировании они включали такой режим - тики идут, а торговать нельзя. Побороть такой вариант пока не удалось.
Справедливости ради следует отметить, что при реальной торговле с таким не сталкивался. Так что в "обычных" условиях решение видится сносным. Но я всё же пока скорее в поиске :)
P.S. шаги 1 и 2 видится возможным объединить (в функцию IsTradeAllowed передавать SymbolInfoInteger(<symbol>, SYMBOL_TIME)), но тестов такого варианта пока не проводил и утверждать не буду.