Версия сервера в Открывашке - страница 13

 
prostotrader:

Есть другой вариант, для меди (там, кажется, бывает 2 и 5),

все остальные фьючерсы или 3 или 1 месяц

Можно автоматически подставлять месяц

Ну, если так, то может быть лучше взять

TimeToString(SymbolInfoInteger(_Symbol, SYMBOL_EXPIRATION_TIME), TIME_DATE)

и из этой даты вытащить год и месяц+3(1)

Или засунуть эту дату в структуру и оттуда взять месяц и год. А потом склеить имя символа. Сейчас попробую через структуру.

 

А мне понравилось как получилось через структуру...

string newFutures(const string aSymbol, int month = 3)
 {
  MqlDateTime mqlDateTime;
  TimeToStruct(SymbolInfoInteger(aSymbol, SYMBOL_EXPIRATION_TIME), mqlDateTime);    // Заполнили структуру датой экспирации фьючерса
  string symb = StringSubstr(aSymbol, 0, StringFind(_Symbol, "-")+1);               // Вытащили имя символа вместе с дефисом
  return(symb+(string)(mqlDateTime.mon+month)+"."+(string)(mqlDateTime.year%1000)); // Вернули составленное имя следующего фьючерса
 }
 
Alexey Viktorov:

А мне понравилось как получилось через структуру...

А теперь попробуйте для фьючерса ХХХХ-12.20

Должно получиться ХХХХ-3.21

Добавлено

А потом попробуйте, если Вы захотите не следующий фьючерс, а через фьючерс (NtxFutMonth = 6)

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString(). В качестве второго параметра этих функций допустимо передавать один из идентификаторов из перечислений ENUM_SYMBOL_INFO_INTEGER, ENUM_SYMBOL_INFO_DOUBLE и ENUM_SYMBOL_INFO_STRING соответственно. Некоторые символы (как...
 
prostotrader:

А теперь попробуйте для фьючерса ХХХХ-12.20

Должно получиться ХХХХ-3.21

О! точно. Это следующий этап. Сейчас доделаю.

 
Alexey Viktorov:

О! точно. Это следующий этап. Сейчас доделаю.

:)

Смысл? Функция, которую я Вам дал, работает годами...

 
prostotrader:

А теперь попробуйте для фьючерса ХХХХ-12.20

Должно получиться ХХХХ-3.21

Добавлено

А потом попробуйте, если Вы захотите не следующий фьючерс, а через фьючерс (NtxFutMonth = 6)

Что-то слишком легко получилось. Проверьте пожалуйста.

string newFutures(const string aSymbol, int month = 3) // Сюда можно вставить и 1 и 6
 {
  MqlDateTime mqlDateTime;
  TimeToStruct(SymbolInfoInteger(aSymbol, SYMBOL_EXPIRATION_TIME)+month*PeriodSeconds(PERIOD_MN1), mqlDateTime);// Получилось время экспирации следующего фьючерса
  string symb = StringSubstr(aSymbol, 0, StringFind(_Symbol, "-")+1);
  return(symb+(string)(mqlDateTime.mon)+"."+(string)(mqlDateTime.year%1000));
 }

У меня

newFutures("RTS-12.19")
вернуло RTS-3.20
 
prostotrader:

:)

Смысл? Функция, которую я Вам дал, работает годами...

Я спросил потому, что думал есть простой вариант. Я нисколько не сомневаюсь в работоспособности вашей функции, но она с моей точки зрения чуток сложней чем сделал я.
 
Alexey Viktorov:
Я спросил потому, что думал есть простой вариант. Я нисколько не сомневаюсь в работоспособности вашей функции, но она с моей точки зрения чуток сложней чем сделал я.

Ок, не вопрос.

Подсттавьте NtxFutMonth = 6 на фьючерс ХХХХ-12.20

 
prostotrader:

Ок, не вопрос.

Подсттавьте NtxFutMonth = 6 на фьючерс ХХХХ-12.20

Ставил на RTS-12.19

newFutures("RTS-12.19", 6)

и получил RTS-6.20

Просто боюсь, что я какие-то тонкости упустил. Потому и попросил вас проверить.

 
Alexey Viktorov:

Ставил на RTS-12.19

и получил RTS-6.20

Просто боюсь, что я какие-то тонкости упустил. Потому и попросил вас проверить.

Попробуйте этот вариант

Current Next Futures
Current Next Futures
  • www.mql5.com
Cкрипт с тремя независимыми функциями для определения текущего (ближайшего) фьючерса рынка FORTS. В параметрах вводится короткое наименование фьючерса, например br (можно мелким шрифтом). На выходе полное...
Причина обращения: