"ダミー "からの質問 - ページ 65

 
x100intraday:

関数を呼び出すとき、配列を参照で渡すか、ポインタで渡すか、あるいは他の方法で渡すべきでしょうか。

パラメータを 値で渡す 場合と参照で渡す場合のセクションを読んでください。

MQL5リファレンス / 言語の基礎 / 関数 / パラメータの受け渡し

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin:

パラメータを 値で渡す 場合と参照で渡す場合について、リファレンス・マニュアルのセクションを読んでください。

MQL5リファレンス / 言語の基礎 / 関数 / パラメータの受け渡し

実は、今、そこから来たのですが、前のメッセージに書いたコンパイルエラーは、上記のセクションを読んだ後に起こりました。

今、よく読み直してみると、コンストとどこに入れるかが重要なんですね。

ありがとうございます、わかりました。

 
x100intraday:

OnCalculateでは、インデックスによるhighのような配列要素を簡単に使用 することができますね。この配列のインデックス要素にExtFuncでアクセスすることも可能でしょうか?関数を呼び出すとき、配列の引数を参照で渡すか、ポインタで渡すか、あるいは他の何かで渡すべきでしょうか?今のところ、OnCalculateからの 配列引数を持つ私の関数呼び出しの同じ行に関するエラーメッセージは、"'high' - パラメータ変換は許可されていません "と"'high' - 定数変数は参照として渡すことはできません "になんとか抑えています。絶望的なのか、解決策はあるのか。

これまでOnCalculateでは、highを別の配列にコピー することに頼っていました。

を作成し、ExtFunc で HighArray を直接使用するのではなく、CopyOfHigh を使用します。

配列を関数に参照渡せばよいだけです。

bool ExtFunc (string str, int P, int i, double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 

皆さん、こんにちは。

警告の意味は?

タイプ変換エキスパート.mq5でデータが失われる可能 性があります。

コンパイル時? こう書いてある。

   string Symb="EURJPY";
   int DIGITS = SymbolInfoInteger(Symb,SYMBOL_DIGITS);

どうしたんですか?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294:

配列を参照として関数に渡すだけです。

そうではありません。

bool ExtFunc (string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 
RomanS:

皆さん、こんにちは。

警告の意味は?

タイプ変換エキスパート.mq5でデータが失われる可能 性があります。

をコンパイルするとき、どのようにすればよいのでしょうか?こう書いてある。

どうしたんですか?

SymbolInfoInteger()関数はlong型(参考)の値を返すが、DIGITSはint型として宣言されている。これは暗黙の型変換である。型変換」を参照。
 
RomanS:

警告が意味すること

型変換によるデータ消失の可能

このメッセージの意味は、考慮する文脈によって異なります。

例えば、こんな感じです。

1. "明示的な型変換をしろ!"

   int DIGITS = (int) SymbolInfoInteger(Symb,SYMBOL_DIGITS);

2."暗黙の型変換でデータひっかかりの可能性" // これは直訳です。

これは、関数が返すlong型のサイズが大きく、より広い範囲の値をカバーするため、理解できることです。

もうひとつ、最近よく思い浮かぶ選択肢があります。

3. "エラーメッセージやmql5コンパイラの警告がユーザーの母国語で出れば、どれだけクールで魅力的で効果的な学習ができるかをMetaQuotesのスタッフは理解していない"。

 
MetaDriver:

...mql5のコンパイラの エラーメッセージや警告が ユーザーの母国語で表示されたら、どんなにクールで魅力的で効果的な学習ができるだろう。"

うん......悪くはないだろう。とはいえ、私個人はすでに英語に精通していますし、最近は翻訳家も掃いて捨てるほどいますが、やはり貴重な時間を割いてしまうので、それほどでもないのですが。金融市場での取引+プログラミングのような複雑なテーマで翻訳機を使うほどでもない人もいます。MetaTrader 5は、多言語対応プラットフォームです。ヘルプの例にあるメッセージやコメント(時々出くわす)は、ターミナルで選択されている言語にしてほしいです。
 

iCustomでインジケータを起動した場合、1tick 毎に計算されているのではないかという疑念があります。そして、CopyBufferを介した呼び出しに依存しない。これでいいのでしょうか?

もしそれが正しいのであれば、インジケータの計算を無効にして、CopyBufferを呼び出す前だけ有効にすることは可能でしょうか?

 
masharov:

iCustomでインジケータを起動した場合、1tick毎に計算されているのではないかという疑念があります。そして、CopyBufferを介した呼び出しに依存しない。これでいいのでしょうか?

カスタムインジケータの ロジックに依存します。実は、1日に1回、他の全ての刻みを飛ばして値を再計算することができるのです。いわば、作者の意志に従って。

マシャロフ

その場合、インジケータの再計算を無効にして、CopyBufferを呼び出す前のみ有効にすることは可能でしょうか?

基本的に、iCustom経由でインジケーターのコピーを作成し、必要なデータをコピーし、インジケーターのコピーを削除するという、この怪しげな方法を使おうとする人がいるのですが、この方法では、インジケーターのコピーを削除することができません。必要に応じて、この手順を繰り返します。

OnTimer()関数もありますが、私自身は扱ったことがありません。