опираться лучше на время открытия бара на текущем ТФ
меня просили сделать закрытие сделок за ХХ секунд до закрытия текущего бара, написал такую ф-цию:
bool CHeckBarTimeLeft(int sec) { datetime t; t=TimeCurrent()-Time[0]; if(t>=(PeriodSeconds()-sec)) return(true); return(false); }
входной параметр сколько секунд до закрытия бара анализировать, выход если до закрытия бара осталось меньше sec то вернем true
модифицируйте мой пример под свои задачи самостоятельно
если речь идет о конкретном времени открытия сделки, то переведите исходные данные в формат datetime и сравнивайте с временем сервера, примерно так:
// откроем ордер сегодня в 10:39:14 input int inputHour = 10; //часы input int inputMin = 39; //минуты input int inputSec = 14; //секунды ....... MqlDateTime date=TimeCurrent(); date.hour = inputHour; date.min = inputMin; date.sec = inputSec; datetime ordertime = StructToTime(date); ..... if(TimeCurrent()>=ordertime) OrderSend(......
Здравствуйте, друзья.
Подскажите, пожалуйста каким образом записать, чтобы советник открывал и закрывал сделки в часах, минутах и секундах?
У меня получается только в часах и минутах, а секунды добавить не выходит.
string TIME = TimeToStr(Time[0],TIME_MINUTES);
if(TIME == "13:46")
{
. . .
}
Если этот код выполняется в OnTick(), то будут пропуски. Тики не приходят с каким-то заданным периодом. Между ними могут быть довольно ощутимые перерывы. В некоторых случаях - минуты. Что уж говорить о секундах?
Здравствуйте, друзья.
Подскажите, пожалуйста каким образом записать, чтобы советник открывал и закрывал сделки в часах, минутах и секундах?
У меня получается только в часах и минутах, а секунды добавить не выходит.
string TIME = TimeToStr(Time[0],TIME_MINUTES);
if(TIME == "13:46")
{
. . .
}
Как же не помочь хорошему человеку-легенде :)
//Объявляем переменные
bool FlagOpen; string TIME;
// в OnInit инициализируем переменные и таймер
int OnInit() { FlagOpen=false; TIME=""; EventSetTimer(1); //--- return(INIT_SUCCEEDED); }
//в OnDeinit "убиваем" таймер
void OnDeinit(const int reason) { EventKillTimer(); }
// в таймере выполняем нужный код
void OnTimer() { TIME = TimeToString(TimeCurrent(),TIME_SECONDS); if(TIME == "00:50:10" && !FlagOpen) { Print("Время наступило! Открываем сделку: "+TIME); FlagOpen=true; TIME=""; } if(TIME == "00:51:20" && FlagOpen) { Print("Время наступило! ЗАКРЫВАЕМ сделку: "+TIME); FlagOpen=false; TIME=""; } }
Котировки приходят когда им вздумается, могут задерживаться на много секунд, поэтому TimeCurrent не подходит.
Нужно синхронизировать время брокера со своим локальным временем.
И ловить нужную секунду по таймеру компьютера.
Котировки приходят когда им вздумается, могут задерживаться на много секунд, поэтому TimeCurrent не подходит.
Нужно синхронизировать время брокера со своим локальным временем.
И ловить нужную секунду по таймеру компьютера.
может не прокатить, у брокеров у которых тики приходят один раз в 20-30 секунд ни ордера ни открыть и закрыть не получится, если не ошибаюсь, то у *нсты в прошлом годы отвратительные сервера были, мне несколько претензий клиенты выставляли, что ордера от 30 сек до минуты закрываются, я задолбался тесты проводить ((((
может Вы и правы, но на моей практике работает четко только система - пришел тик - можно заниматься ордерами, нет тика, то скорее всего на любые действия с ордерами получишь реквоту или не правильные цены
может не прокатить, у брокеров у которых тики приходят один раз в 20-30 секунд ни ордера ни открыть и закрыть не получится, если не ошибаюсь, то у *нсты в прошлом годы отвратительные сервера были, мне несколько претензий клиенты выставляли, что ордера от 30 сек до минуты закрываются, я задолбался тесты проводить ((((
может Вы и правы, но на моей практике работает четко только система - пришел тик - можно заниматься ордерами, нет тика, то скорее всего на любые действия с ордерами получишь реквоту или не правильные цены
Да, бывает такое. Приходится ждать тика.
может не прокатить, у брокеров у которых тики приходят один раз в 20-30 секунд ни ордера ни открыть и закрыть не получится, если не ошибаюсь, то у *нсты в прошлом годы отвратительные сервера были, мне несколько претензий клиенты выставляли, что ордера от 30 сек до минуты закрываются, я задолбался тесты проводить ((((
может Вы и правы, но на моей практике работает четко только система - пришел тик - можно заниматься ордерами, нет тика, то скорее всего на любые действия с ордерами получишь реквоту или не правильные цены
тики не нужны, (нужен только один-первый тик, для сравнения/синхронизации времени), дальше считается только локальное время, и по нему всё считается/открывается/закрывается.
...открою секрет - для открытия/закрытия ордеров не нужно ждать тики)
тики не нужны, (нужен только один-первый тик, для сравнения/синхронизации времени), дальше считается только локальное время, и по нему всё считается/открывается/закрывается.
...открою секрет - для открытия/закрытия ордеров не нужно ждать тики)
что значит не нужно ждать тики?, а как же 3 секунды и оффквот (нет цены)
Здравствуйте, друзья.
Подскажите, пожалуйста каким образом записать, чтобы советник открывал и закрывал сделки в часах, минутах и секундах?
У меня получается только в часах и минутах, а секунды добавить не выходит.
string TIME = TimeToStr(Time[0],TIME_MINUTES);
if(TIME == "13:46")
{
. . .
}
Вот здесь функция TimeCross() ее можно доработать немного. Но не нужны эти секунды.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, друзья.
Подскажите, пожалуйста каким образом записать, чтобы советник открывал и закрывал сделки в часах, минутах и секундах?
У меня получается только в часах и минутах, а секунды добавить не выходит.
string TIME = TimeToStr(Time[0],TIME_MINUTES);
if(TIME == "13:46")
{
. . .
}