エラー、バグ、質問 - ページ 734

 
Vitya:
もしかしたら、PositionTotal()が必要なのかも?

また、OrdersTotal()に 現在の注文数を聞いた場合、ポジションとどのような関係があるのでしょうか?

そして、この情報をOnTrade()で要求するのですが、注文が存在する瞬間は見逃すことができません。

しかし実際には、どうせこのタイミングを逃して、まだ注文がないときか、すでにあるときにリクエストが処理されることが判明しているのです。

しかし、それが存在する瞬間は、OnTrade()で検出されないか、さもなければ、OrdersTotal()が嘘をつく。

 

コードの不完全さについて文句を言うのを避けるために、ここではExpert Advisorのスクリプトを私が改良したMetaQuotesのコードを紹介します。

OnTrade()関数を 追加し、OnInit()にスクリプトコードを配置した。

注文があることを示すメッセージを表示するプリントは1枚もない。

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

MetaTrader 5のトレードイベントという 記事でお答えするしかないですね。

Заключение

MetaTrader 5の取引および分析プラットフォームのすべての操作は非同期であり、取引口座のすべての変更は互いに独立して報告されます。 したがって、「1つの要求 - 1つの取引イベント」ルールに従って単一のイベントを追跡しようと するべきではありません。取引イベントの後に何が変わったかを正確に判断するには、ハンドラ OnTrade が呼び出されるたびに、すべての取引、ポジション、注文を分析し、イベントが現れる前の状態と比較する必要があるのです。
これは、あなたが捕らえようとしている注文は、おそらくすでにHistoryOrdersTotalを 使用して検索する必要があることを意味します。
 
Rosh:

MetaTrader 5のTrading Events の記事でお答えするしかないでしょう。

つまり、あなたが捕らえようとしている注文は、おそらくすでにHistoryOrdersTotalを 使用して検索されているはずです。

この記事に導かれています。注文を出したがまだ約定していない瞬間をトレードイベントで見逃すのはどうなのか、という疑問に対する答えを見つけたいのです。

以下の場合、サーバーからトレードイベントが発生します。

  • 有効な注文の変更。
  • のポジションを変更しました。
  • は、トレードの変化。
  • 取引履歴の変更

OrderTotal()が失敗しているのでは?でも、この機能では証明できない。

オプションとして、私はOrderTotal()が私が考えるところではない(つまり、サーバ上ではない)データを取っていることを拒否しませんが。

 
Urain:

この記事に倣っています。注文を出したがまだ約定していない瞬間をトレードイベントが見逃すのはどうしてか、という疑問に対する答えを見つけたいのです。

単純に言えば、トレードイベントが来た時点で、すでに注文は入っており、実行されているのです。そのため、履歴には残らず、すでに発効しているのです。
 
Rosh:
トレードイベントが到来する頃には、すでに注文が発注され、実行されています。そのため、有効な注文の中にはなく、すでに履歴に追加されています。

そうそう、この答えには私の思いがこもっている。

このようにお答えしますと、注文が入った時点で、サーバーは「取引」イベントを生成して端末に送り、端末がそれを受信すると、コードは注文 数のリクエストを行いますが、このリクエストがサーバーに来た時点で、サーバーは既に注文を実行しています。

それ以外に説明がつかないのです。

 
Urain:

トレードイベントは、以下の場合にサーバーから発生します。

  • 有効受注額の推移。
  • のポジションを変更しました。
  • は、トレードの変化。
  • 取引履歴の推移

OrderTotal()が失敗しているのでは ?でも、この機能では証明できない。

有効な注文のリストには、有効な保留中の 注文とポジションを開くための注文の両方が含まれるというのは正しく理解されましたか?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
papaklass:

これはどういうことでしょうか?

プログラム終了後、使用したメモリの一部が解放されていない」みたいなこと。特に、プログラムがnew演算子でダイナミックオブジェクトを作成し、その後delete演算子で 削除しなかった場合に、同様のメッセージが発生します。
 
papaklass:
... "Experts "タブでこのメッセージが表示されます。エラーではなく、警告です。何についての警告ですか?

まあ、「間違い」とは言っていないんですけどね。警告」であることにしましょう。私はすでに、例を挙げて私のバージョンを言っています。ここからの議論をもう一度見てください(ラインリークについて - ページの最後までお読みください)https://www.mql5.com/ru/forum/1111/page345#comment_54616。

あなたの状況を詳しく説明した上で、BODに行く必要があるかもしれません。

 

混乱」を発見。

なぜコンパイラは2番目のb 変数の定義を好まないのでしょうか?

また、一般的に、このような場合、どのように対処すればよいのでしょうか?

#property script_show_inputs

// m[a].Column[b]
input int A=11;
input int B=3;

#define a A
//#define b B // тут раскоментировать
#define b 3   // тут закоментировать

// размер одного элемента 4 байта
struct ArrWe
{
  float Column [b];
};

void OnStart()
{
  ArrWe m[11]; // тут вместо "11" хочу использовать "a"
  Print("Размер структуры ArrWe ",sizeof(ArrWe));
  Print("Количество элементов 1-го измерения ",sizeof(m)/sizeof(ArrWe));
  Print("Количество элементов 2-го измерения ",sizeof(ArrWe)/4);   
  Print("Размер массива из 11 ArrWe ",sizeof(m));
}