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

 
Maxim Kuznetsov:

このキャノンは何ですか?公式のドキュメントがあります - それはあなたのものと全く同じです...他のすべてはただの偽物です。

1. OnCalculateの内部で、使用するすべての配列のシリアライズを設定する価値があります。

2.ループに入る前に、buff[length]=Bid+size; -とすると、ほぼ思い通りの結果が得られます。Bid+sizeで曲線とその先にある "バイザー"

3.アレイの境界を見る。もちろん、rates_total < lengthですが、冗談では済まされませんよ :-)

つまり、最初にArraySetAsSeriesと書いて、そこから踊らなければならないのですか?

そうそう、表現が悪かったですね。この線はチャート上で左に進み、各ティックで 更新される必要があります。

 
YanSay:

詳細なご回答をいただき、誠にありがとうございました

アドバイスに従って枝分かれして、すべてがうまくいきました。

私は10-15個の保留中の注文を同時に開く問題に直面しましたが、その後にあなたのコードを追加することで問題を解決しました。

これも解決策にはならない。注文は手動または他のEAによって開くことができます。その結果、開発中のEAでは何も開くことができません。したがって、Expert Advisor が開いた注文の数をカウントする必要があります。このデータをもとに、注文を出すか出さないかを決める。

きっと、もっといい方法があるはずです。

あなたのコードに関して、1; i >=0; --i とは何か、説明してください。

これが標準的な注文のループです。OrdersTotal() は、注文数です。注文はゼロから始まるインデックスを持つ。つまり、注文が1件あれば、そのインデックスは0になり、OrdersTotal()は1を返します。したがって、ループは注文数より1少ないインデックスで開始する必要があります。OrdersTotal() - 1 を得る。第2オペランドは、ループ本体の実行条件である。この場合、ループは i = -1 で終了する。第3オペランドは、次のインデックスへのループジャンプの実行(1ずつ減少)です。

ループ演算子については、ドキュメントに 記載されています。

 
Ihor Herasko:

これも仕方がないことです。注文は手動または他のEAによって開くことができます。その結果、開発中のEAでは何も開くことができません。したがって、Expert Advisor が開いた注文の数をカウントする必要があります。このデータがあれば、注文を出すかどうかの判断ができる。

この方法で試しましたが、また1シグナルあたり10~15個の注文を開くようになりました。

if ((OrdersTotal ()>0) && (OrderMagicNumber() != 100)) return;

第3オペランドは、次のインデックスに移動します(1つ減らします)。

すべての注文を端から見ているのですね。

 
YanSay:

これを試したが、また1シグナルで10~15オーダーを開くようになった。

すべての注文を端から見ているわけですね。

OrderMagicNumber()関数を使用するには、まず注文を選択 する必要があります。自分の注文に関する情報を収集する標準的なループは次のようになる(例えば、自分の注文の数を数える)。

int nCnt = 0;    // Счетчик количества своих ордеров
for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))
         continue;

      if (OrderSymbol() != Symbol())
         continue;

      if (OrderMagicNumber() != <значение ID ордеров эксперта>)
         continue;

      ++nCnt;
   }

このコードが実行されると、変数 nCnt には Expert Advisor のワークオーダーの数が格納されます。

 
Ihor Herasko:

私は次のように問題を解決しています...


ありがとうございます。

 
Ihor Herasko:

OrderMagicNumber()関数を使用するには、まず注文を選択 する必要があります。自分の注文に関する情報を収集する標準的なサイクルは、次のようになる(例えば、自分の注文数を数える)。

このコードが実行されると、変数 nCnt には EA の作業オーダーの数が格納されます。

int nCnt = 0;    // Счетчик количества своих ордеров
for (int i = OrdersTotal() - 1; i >= 0; i--)
 {
  if (!OrderSelect(i, SELECT_BY_POS))
     continue;
  if (OrderSymbol() != Symbol())
     continue;
  if (OrderMagicNumber() != MagicNumber)
     continue;
  ++nCnt;
  {
   if (nCnt>0)
      return;
  }
 }

ありがとうございました。うまくいった!

また、++nCntは、取得したオーダー数をnCnt変数そのものに代入しているのか、アドバイスをお願いします。

 
YanSay:

ありがとうございました。うまくいった。

++nCntは、受信した注文数をnCnt変数自体に代入しているのかどうか教えてください。

そのような場合は、すぐに書類を ご覧ください。))

 
YanSay:

ありがとうございました。うまくいった。

++nCnt は、受信した注文数を nCnt 変数自身に代入しているのか、教えてください。

言語の完全なドキュメントがあります。サイトのトップメニューを見てみてください。

読むのを怠るな!全てを頭に入れるのは不可能だ。 初心者に限らず、ほぼ全員が必ずそこで管理している。

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...
 
Artyom Trishkin:

言語に関する完全なドキュメントがありますので、ウェブサイトのトップメニューからご覧ください。

読むのを怠らないでください - すべてを頭に入れておくことはできません - 初心者だけでなく、ほとんどすべての人のために常にそこにあるのです。

ありがとうございます。どのセクションを見ればいいのか、まだあまり得意ではないし、F1エディタがいつも正しい場所に送ってくれるわけでもないので、いつも迷ってしまいます)

くだらない質問で悩まないようにします、よろしくお願いします)

 
Roman Sharanov:

1.最初にArraySetAsSeriesと書いて、そこからということでしょうか?

そうそう、表現が間違っていました。この線はチャート上で左に進み、各ティックで 更新される必要があります。

そこで、水平線を描きます。

なぜ、バッファとその再計算が必要なのですか?ObjectSetDoubke(0,myHLine,OBJPROP_PRICE,concrete_price_value);

ユーザはその行を見ることができ、バッファの再計算に時間を費やすこともなく、誰もがハッピーで幸せな気分になることができます。

追記・正しく理解しましょう。インジケータ・バッファは、最初に行った計算結果を転送(共有/シェア)するためのものです。長さNの水平線を引くと、違うものになる

理由: