MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1448

 
Alexey Viktorov:

そうですか、ありがとうございます・・・少なくとも私は6年前の自分を見ました・・・今のあなたのような感じでした。間違った方法でアドバイスをすることは考えませんでした。

テンプレートについて:テンプレートにインジケータがあり、EAがない場合、テンプレートはEAなしで読み込まれます...テンプレートにEAがある場合は?テンプレートに読み込まれたEAが、テンプレートを適用 しないため、端末が固定されてハングアップしてしまうということはないでしょうか?

すべて正常に動作します。

 
SanAlex:

ハングアップもなく、すべてうまくいっています。

私のように怠け者にならないように。このような操作の動画を作ってください :-)))

 
Vitaly Muzichenko:

さて、mt4の "SmoothedMAOnBuffer() "コンストラクトのデバッグにやってきました。

どうしたんだろう、まったく理解できない。

何度も書いていることですが、ループから関数を削除してください。

こんなくだらない ことより

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);
   for(i = 0; i < counter - a; i++) {
     // buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i); // Так индикатор работает
      SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff); Совсем не работает, но и ошибок в журнале нет
      buf_3[i] = buff[0]; ???
   }
   for(i = counter - a; i > 0; i--) {
      Array_2[i] = Array_2[i + 1];

このように書きます

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);

if(SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff)==0)
   return 0;

for(i = counter - a; i > 0; i--) {
   Array_2[i] = Array_2[i + 1];

私はあなたに言っている - この関数の呼び出しは、Arrayのデータを平滑化する完全なループです。この配列の平滑化データは buff 配列に格納され、そこからさらに必要な平滑化データを取り出すだけです。

 
Alexey Viktorov:

私のように怠け者にならないように。このような操作の動画を作ってください :-)))

残念なのは、あなたのプロフィールを見たことがないことです。そんな素敵なコードがあるんですね。本当に好きなんです。https://www.mql5.com/ru/code/16396

EURGBPH1

TralingLine
TralingLine
  • www.mql5.com
Виртуальный Stop Loss или Trailing Stop.
 
Artyom Trishkin:

何度も言いますが、ループから関数を削除してください。

こんなくだらない ことより

この ように書きます。

この関数の呼び出しは、Arrayのデータを平滑化するための全サイクルに相当します。この配列の平滑化データは buff 配列に格納され、そこからさらに必要な平滑化データを取り出すだけです。

ありがとうございます!、うまくいきました。

SmoothedMAOnBuffer(rates_total, prev_calculated, count, period, Array_1, buf_3);

仕組みがよく分からないので、これから考えてみます。

 
Artyom Trishkin:

何度も言いますが、ループから関数を削除してください。

こんなくだらない ことより

この ように書きます。

この関数の呼び出しは、Arrayのデータを平滑化するための全サイクルに相当します。この配列の平滑化されたデータがbuff配列に入ります。さらに進んで、そこから必要な平滑化されたデータを取り出せばよいのです。

決して全部塗れたわけではなく、4時間以上かけました。

初回起動時は正常に表示され、その後更新されずにフリーズしてしまう、標準のものは正常に動作する。

   double Array_1[];
   double Array_2[];
   int i=0;
   int period = (int)MathFloor(MathSqrt(a));
   int val = (int)MathFloor(a / 1.9);
   int bars=rates_total;
   int counter = bars - prev_calculated + a + 1;
   if(counter > bars)
      counter = bars;
   ArrayResize(Array_1, counter);
    ArraySetAsSeries(Array_1, true);
   ArrayResize(Array_2, counter);
    ArraySetAsSeries(Array_2, true);

   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val) - ma_1(i, a);
  //  for(i = 0; i < counter - a; i++)
  //  buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i);
   SmoothedMAOnBuffer(rates_total, prev_calculated, prev_calculated, period, Array_1, buf_3); // Где-то здесь не правильно вписаны параметры

---

何を入力すればいいのですか?

MT5では全く表示されない。

ファイル:
test.mq4  13 kb
 
Vitaly Muzichenko:

どう考えても全部は適用できず、4時間以上費やしました。

初回起動時は正常に表示されるが、その後更新されずフリーズ、標準では正常に動作する

---

何を入力すればいいのですか?

MT5で何が起こっているのかわからない。

その結果、何を得たいのかを説明していただけますか?

あなたのインジケータは、どのようにやってはいけないかを人々に示すために必要な方法で構築されています :)

描画されたバッファと計算されたバッファがごちゃごちゃになっている。計算されたものは最後にすべきです。残念ながら、ランダムに混ぜることはできません。

5 の ma_1() 関数は MA の値ではなく、ハンドルを返すので、5 では動作しません。

SmoothedMAOnBuffer() 関数で、配列内の意味のあるデータの先頭ではなくprev_calculated を渡していますが、 何のためでしょうか?Array_1に格納されているMAデータの計算周期に応じた計算値、つまり最低でも周期 0、最大値を渡す必要があります。

どの色を描画するかを選択するブロックでは、論理的なエラーが発生します - バッファを上書きしてしまいます - カッコの外に空白の値を入れてください。条件を確認するのはいいのですが、真実の場合はどうすればいいのかがカッコの外に出てしまいます。すなわち、常に実行される。これは、括弧の位置がはっきりしない場合、括弧の配置の癖の結果です。

Array_1 と Array_2 - なぜ計算されたバッファでないのですか?

全体として - 疑問はたくさんあります。

a 変数の値が厳密に設定される。なぜ毎ティック ごとに変数valの 値を計算するのか?

OnInit()で周期a、valで計算された2つの変数に対して、2つの計算バッファを作成する。これらのバッファから、値を取得する - それはその後、両方のプラットフォームで動作します。

 
Artyom Trishkin:

最終的にどうしたいのか、言葉にできますか?

あなたのインジケータは、どのようにやってはいけないかを人々に示すために必要な方法で構築されています :)

描画バッファと計算バッファがごっちゃになっている。計算されたものは最後にすべきです。残念ながら、ランダムに混ぜることはできません。

5 の ma_1() 関数は MA の値ではなく、ハンドルを返すので、5 では動作しません。

SmoothedMAOnBuffer() 関数で、配列内の意味のあるデータの先頭ではなくprev_calculated を渡していますが、 何のためでしょうか?Array_1に格納されているMAデータの計算周期に応じた計算値、つまり最低でも周期 0、最大値を渡す必要があります。

どの色を描画するかを選択するブロックでは、論理的なエラーが発生します - バッファを上書きしてしまいます - カッコの外に空白の値を置くだけです。条件があり、真実の場合はどうすればいいのか、括弧の中に入れています。すなわち、常に実行される。これは、括弧の位置がはっきりしない場合、括弧の配置の癖の結果です。

Array_1 と Array_2 - なぜ計算されたバッファでないのですか?

全体として - 疑問はたくさんあります。

a 変数の値が厳密に設定される。なぜ毎ティック ごとに変数valの 値を計算するのか?

OnInit()で周期a、valで計算された2つの変数に対して、2つの計算バッファを作成する。これらのバッファから、値を取得する - それはその後、両方のプラットフォームで動作します。

解答がわかっていれば、 書かなかったでしょう。

このインジケータは私のものではなく、iMAOnArray()の下も見ておらず、全体のタスクはiMAOnArray()を何かに置き換えるだけです。

あるべき姿の動作例を教えてください。

ありがとうございます。

追伸:mt5の場合、ハンドルは問題ありません。
ファイル:
max.mq5  14 kb
 
Vitaly Muzichenko:

あるべき姿の動作例を教えてください。

何の実例?4のインジケーターが5で機能する?それなら4から完全に動くインジケータを出せよ。

また、SmoothedMAOnBuffer()関数の動作例を教えてください。

 
Artyom Trishkin:

何の実例?4のインジケーターが5で機能する?それなら4から完全に動くインジケータを出せよ。

また、SmoothedMAOnBuffer()関数の動作例を教えてください。

mt4の動作例で、標準のiMAOnArrayは更新されるが、SmoothedMAOnBufferは初回実行時はOKで、その後更新されない。

SmoothedMAOnBuffer()の動作例を教えてください。

ファイル:
test.mq4  17 kb