Пытаюсь дать понять советнику, что по выходным дням торговать не нужно :)
Для этого делаю так:
Но всегда, в т.ч. и по выходным дням, получаю "Trade: ALL"
Вроде же по выходным должно быть "SYMBOL_TRADE_MODE_DISABLED", что значит "Торговля по символу запрещена"
И еще, почему "SymbolInfoString(strSymbol,SYMBOL_BANK)" ничего не возвращает?, должен быть источник котировок.
То что вы запрашиваете, это запрос "является ли символ торговым или чисто информационный", ответ на этот запрос не зависит от открытия или закрытия рынка.
Проблема с Market closed перекочевала в МТ5 ещё с давних времён, ни в одной версии МТ никогда не было возможности узнать закрыт ли рынок, кроме как через реквот ручного ордера.
Складывается странная ситуация, когда в ответ на выставленный ордер получаем Market closed, но получить эту информацию программно нет возможности даже через фейковый автозапрос. Я поднимал этот вопрос ещё для МТ4, но воз и ныне там.
Может быть сейчас вопрос привлечёт внимание разработчиков.
Пытаюсь дать понять советнику, что по выходным дням торговать не нужно :)
Для этого делаю так:
switch(intTradeMode) {
case SYMBOL_TRADE_MODE_DISABLED:
strTemp="NO TRADE";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_LONGONLY:
strTemp="only LONG";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_SHORTONLY:
strTemp="only SHORT";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_CLOSEONLY:
strTemp="only CLOSE";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_FULL:
strTemp="ALL";
clrColor=clrGreen;
break;
default:
strTemp="N/A !!!";
clrColor=clrRed;
break;
}
ObjectSetInteger(0,strTradeMode_Name,OBJPROP_COLOR,clrColor);
strTemp="Trade: "+strTemp+" "+SymbolInfoString(strSymbol,SYMBOL_BANK);
ObjectSetString(0,strTradeMode_Name,OBJPROP_TEXT,strTemp);
Но всегда, в т.ч. и по выходным дням, получаю "Trade: ALL"
Вроде же по выходным должно быть "SYMBOL_TRADE_MODE_DISABLED", что значит "Торговля по символу запрещена"
И еще, почему "SymbolInfoString(strSymbol,SYMBOL_BANK)" ничего не возвращает?, должен быть источник котировок.
возможно вам подойдут эти функции
bool SymbolInfoSessionQuote( string name, // имя символа ENUM_DAY_OF_WEEK day_of_week, // день недели uint session_index, // номер сессии datetime& from, // время начала сессии datetime& to // время окончания сессии );
bool SymbolInfoSessionTrade( string name, // имя символа ENUM_DAY_OF_WEEK day_of_week, // день недели uint session_index, // номер сессии datetime& from, // время начала сессии datetime& to // время окончания сессии );
возможно вам подойдут эти функции
К ним бы ещё добавить функцию "расписание праздников" и будет полный комплект.
Но всё равно, лучше иметь функцию получения флага "Market closed" чем писать целые библиотеки, для того чтоб получить значение типа bool.

- www.mql5.com
Спасибо!
Я сделал так: завел таймер на 20 секунд и сделал счетчик. В ОнТаймер инкрементирую его, а в ОнТик сбрасываю в ноль.
В ОнТаймере смотрю, если этот счетчик больше 3, (т.е. прошла уже минута, а тиков нет, т.к. он не сбрасывается), то цвет лэйбла, где вывожу время последнего тика, делаю красным
datetime adtmTime[1];
CopyTime(strSymbol,enumTF,0,1,adtmTime);
ObjectCreate(0,strLastBar_Name,OBJ_LABEL,0,0,0);
ObjectSetInteger(0,strLastBar_Name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
ObjectSetInteger(0,strLastBar_Name,OBJPROP_XDISTANCE,intLastBar_X);
ObjectSetInteger(0,strLastBar_Name,OBJPROP_YDISTANCE,intLastBar_Y);
if(_intTimerCount<3) {ObjectSetInteger(0,strLastBar_Name,OBJPROP_COLOR,_clrForTimes);}
else {ObjectSetInteger(0,strLastBar_Name,OBJPROP_COLOR,clrMaroon);}
ObjectSetString(0,strLastBar_Name,OBJPROP_FONT,"Times New Roman");
ObjectSetInteger(0,strLastBar_Name,OBJPROP_FONTSIZE,8);
ObjectSetString(0,strLastBar_Name,OBJPROP_TEXT,"Last Bar: "+TimeToString(adtmTime[0]));
}
//+------------------------------------------------------------------+ //| Открыт ли рынок для торговли | //+------------------------------------------------------------------+ bool MarketOpened() { datetime from,to; MqlDateTime mqltime; TimeToStruct(TimeTradeServer(),mqltime); return(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)mqltime.day_of_week,0,from,to)); }
Вот мой вариант проверки:
Хитёр чертяка, а в пятницу после закрытия работает? или в воскресенье после открытия?
Время ведь не у всех ДЦ имеет смещение как у MQ.
ЗЫ опятьже проверялась ли функция для работы в тестере?
MarketOpened() - Эта функция у меня в эксперте на чемпионате 2011 применялась, так что вероятность что она работает и в тестере тоже очень большая.
Мой вариант - торговля по новому бару. Нет баров - нет торговли. А без контроля баров интересно - надо подумать.
Фактически я так и сделал, с тем отличием, что если Вы работаете на H1, то Вам придется ждать в худшем случае час, чтобы понять, что новых баров нету.
Я же проверяю время последней котировки и если их нет в течение минуты (естественно, это время можно изменять с дискретностью секунда), то здесь что-то не так! :)
Согласен с Urain:
Вот мой вариант проверки:
Интересно, а учитывает ли MarketOpened() разные национальные праздники, а не только субб и воскр?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пытаюсь дать понять советнику, что по выходным дням торговать не нужно :)
Для этого делаю так:
switch(intTradeMode) {
case SYMBOL_TRADE_MODE_DISABLED:
strTemp="NO TRADE";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_LONGONLY:
strTemp="only LONG";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_SHORTONLY:
strTemp="only SHORT";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_CLOSEONLY:
strTemp="only CLOSE";
clrColor=clrRed;
break;
case SYMBOL_TRADE_MODE_FULL:
strTemp="ALL";
clrColor=clrGreen;
break;
default:
strTemp="N/A !!!";
clrColor=clrRed;
break;
}
ObjectSetInteger(0,strTradeMode_Name,OBJPROP_COLOR,clrColor);
strTemp="Trade: "+strTemp+" "+SymbolInfoString(strSymbol,SYMBOL_BANK);
ObjectSetString(0,strTradeMode_Name,OBJPROP_TEXT,strTemp);
Но всегда, в т.ч. и по выходным дням, получаю "Trade: ALL"
Вроде же по выходным должно быть "SYMBOL_TRADE_MODE_DISABLED", что значит "Торговля по символу запрещена"
И еще, почему "SymbolInfoString(strSymbol,SYMBOL_BANK)" ничего не возвращает?, должен быть источник котировок.