#property script_show_inputs// m[a].Column[b]inputint A=11;
inputint B=3;
#define a A//#define b B // тут раскоментировать#define b 3// тут закоментировать// размер одного элемента 4 байтаstruct ArrWe
{
float Column [b];
};
voidOnStart()
{
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));
}
もしかしたら、PositionTotal()が必要なのかも?
また、OrdersTotal()に 現在の注文数を聞いた場合、ポジションとどのような関係があるのでしょうか?
そして、この情報をOnTrade()で要求するのですが、注文が存在する瞬間は見逃すことができません。
しかし実際には、どうせこのタイミングを逃して、まだ注文がないときか、すでにあるときにリクエストが処理されることが判明しているのです。
しかし、それが存在する瞬間は、OnTrade()で検出されないか、さもなければ、OrdersTotal()が嘘をつく。
コードの不完全さについて文句を言うのを避けるために、ここではExpert Advisorのスクリプトを私が改良したMetaQuotesのコードを紹介します。
OnTrade()関数を 追加し、OnInit()にスクリプトコードを配置した。
注文があることを示すメッセージを表示するプリントは1枚もない。
MetaTrader 5のトレードイベントという 記事でお答えするしかないですね。
Заключение
MetaTrader 5の取引および分析プラットフォームのすべての操作は非同期であり、取引口座のすべての変更は互いに独立して報告されます。 したがって、「1つの要求 - 1つの取引イベント」ルールに従って単一のイベントを追跡しようと するべきではありません。取引イベントの後に何が変わったかを正確に判断するには、ハンドラ OnTrade が呼び出されるたびに、すべての取引、ポジション、注文を分析し、イベントが現れる前の状態と比較する必要があるのです。MetaTrader 5のTrading Events の記事でお答えするしかないでしょう。
つまり、あなたが捕らえようとしている注文は、おそらくすでにHistoryOrdersTotalを 使用して検索されているはずです。この記事に導かれています。注文を出したがまだ約定していない瞬間をトレードイベントで見逃すのはどうなのか、という疑問に対する答えを見つけたいのです。
以下の場合、サーバーからトレードイベントが発生します。
OrderTotal()が失敗しているのでは?でも、この機能では証明できない。
オプションとして、私はOrderTotal()が私が考えるところではない(つまり、サーバ上ではない)データを取っていることを拒否しませんが。
この記事に倣っています。注文を出したがまだ約定していない瞬間をトレードイベントが見逃すのはどうしてか、という疑問に対する答えを見つけたいのです。
トレードイベントが到来する頃には、すでに注文が発注され、実行されています。そのため、有効な注文の中にはなく、すでに履歴に追加されています。
そうそう、この答えには私の思いがこもっている。
このようにお答えしますと、注文が入った時点で、サーバーは「取引」イベントを生成して端末に送り、端末がそれを受信すると、コードは注文 数のリクエストを行いますが、このリクエストがサーバーに来た時点で、サーバーは既に注文を実行しています。
それ以外に説明がつかないのです。
トレードイベントは、以下の場合にサーバーから発生します。
OrderTotal()が失敗しているのでは ?でも、この機能では証明できない。
有効な注文のリストには、有効な保留中の 注文とポジションを開くための注文の両方が含まれるというのは正しく理解されましたか?
これはどういうことでしょうか?
... "Experts "タブでこのメッセージが表示されます。エラーではなく、警告です。何についての警告ですか?
まあ、「間違い」とは言っていないんですけどね。警告」であることにしましょう。私はすでに、例を挙げて私のバージョンを言っています。ここからの議論をもう一度見てください(ラインリークについて - ページの最後までお読みください)https://www.mql5.com/ru/forum/1111/page345#comment_54616。
あなたの状況を詳しく説明した上で、BODに行く必要があるかもしれません。
混乱」を発見。
なぜコンパイラは2番目のb 変数の定義を好まないのでしょうか?
また、一般的に、このような場合、どのように対処すればよいのでしょうか?