オープナーでサーバーバージョン - ページ 13

 
prostotrader:

銅の場合、もう一つ選択肢があります(2と5があるようです)。

その他の先物はすべて3ヶ月または1ヶ月です。

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:

構造を貫くやり方が良かった...。

今度は先物 XXX-12.20に挑戦してみよう

XXXX-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:

今度は先物で 挑戦 XXXX-12.20

XXXX-3.21を取得する必要があります。

ああ!そうだったんですか。それが次の段階です。完成させればいい

 
Alexey Viktorov:

ああ!そうだったんですか。それが次のステップです。すぐに取り掛かります。

:)

何が言いたいの?私があげた関数は、何年も前から動いているのですが...。

 
prostotrader:

今度は先物 XXX-12.20に挑戦

それはXXXX-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:
簡単なオプションがあると思ったので質問しました。御社の機能を疑うつもりは全くありませんが、私の目から見ると、少し複雑になっています。

OK、問題なし。

先物XXXX-12.20にNtxFutMonth = 6を プットする。

 
prostotrader:

OK、問題なし。

先物XXXX-12.20にNtxFutMonth = 6を プットする。

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 (можно мелким шрифтом). На выходе полное...