初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 21

 
bablusut:

返信ありがとうございました.そこで、取引履歴の注文を検索するために、関数OrdersHistoryTotalを 使用します。これは、不要なものをすべて削除すると、次のようになります。

for(int i=OrdersHistoryTotal()-1; i>=0; i--) // - ここで疑問なのは廃棄した関数テンプレートのaccTotal」の 意味と、なぜテンプレートのようにi--」 、「i++」を 取ったのか、ということです。
- 2番目の関数OrderComment は、前の関数OrdersHistoryTotal で選択された場合、選択されたオーダーのコメントを返し、次のような形式になります。

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //- ここで、"i", これは 前の関数から"i>=0" 、 "SELECT_BY_TICKET" は "SELECT_BY_POS" で置き換えられ、 "MODE_HISTORY" が 追加さ れた- なぜ?

- 3行目は定義ですが、この履歴にはTPとSLによって閉じられた成行注文しかないので、実際には必要な注文をチェックする必要はありません(閉じられた保留中の注文が あるかもしれませんが、それは稀でしょう)、他のすべての注文パラメータは私たちにとって重要ではありません。ただ、履歴の中のクローズドオーダーの量が常に増えていくのですが、クローズドオーダーの全てではなく、例えば5~10個など直近の一定量を再計算することは可能なのでしょうか。

- 最後の4行は非常に明確です。唯一の疑問はPlaySound関数についてで、そのコードは各「Print("..."」 行の後に次のように 挿入する必要があります。



OrderComment は、前の関数OrdersHistoryTotal で選択された注文のコメントを返します- この関数は何も選択しません - 注文の終了と削除の合計数を返します(クライアント端末に読み込まれた、現在のアカウントの履歴の終了と削除の注文数履歴リストのサイズは、端末の「アカウント履歴」タブの現在の設定に依存します。チュートリアルより引用)。


チュートリアルの例では、accTotal。

int i,accTotal=OrdersHistoryTotal(); - これは int 変数 - 値をとるOrdersHistoryTotal
for(i=0;i<accTotal;i++)// どのように履歴リストをループするかは、最初のオーダーから最後のオーダーまで、またはその逆に関係なく、リスト全体を順に通過させることに変わりはありません。

しかし、前のケースでは、変数は1つ少ないが、OrdersHistoryTotalの リクエストは毎サイクル処理さ れる。

SELECT_BY_POS - インデックスパラメータは、リスト内の順序のインデックス番号を含み、リスト自体は2番目の演算子です -MODE_ HISTORYは、クローズのリスト、MODE_TRADES - オープンまたはペンディング です。 SELECT_BY_TICKET - インデックス・パラメーターにチケット番号が渡されます。注文を選択する前に、どこかで撮影しておく必要があります。


- 最後の4行は概ね問題ありませんが、唯一の疑問はPlaySound関数についてです。この関数のコードは、各「Print("..."」

行の後に、

次の形式で 挿入する必要があります:

bool PlaySound(

string payment // ファイル名

)

; .

..それとも、

これも何らかの方法で変換されて

いるのでしょうか?

プログラムヘッダで bool PlaySound(

宣言してください - セットファイルで音のオンオフができるようになります extern bool Play = TRUE;

では、Printは何を表示するのでしょうか?また、どのような条件下で?

この行為に何の意味があるのでしょうか?注文が成立したときに音を鳴らし、コメントを書く(TPまたはSLで)?






 
bablusut:
Vitalie Postolacheに 感謝します、アドバイスありがとうございます、これらの教科書の情報は、私が6年目に勉強するには少し遅いかもしれません、私はおそらくそんなにすることはできません、私はより早くする必要がありますが、 時間がありませんでした。ここで本当に退屈させてしまった、そうなら申し訳ない、もう続かない、帰るよ。
むしろトピックを分けて、こんな風に動いてほしい。例えば、いろいろな選択肢を見て、どれが論理的に正しいのか、ということも理解したいと思います。
 

ところで、私も質問があります。

スプレッドチェックを書きたいのですが。

私はこれまで、単純にその値を要求し、スプレッドが指定した値を超えたら注文を出すことを禁止する、という方法をとってきました。

しかし、起こったことは、スプレッドが減少しているときに、EAが注文を開き、そのスプレッドが増加することです。

もし、スプレッドが1ティック ごとに配列に追加されるとしたら、配列はどれくらいの大きさになるのでしょうか?そしてまた、それがいつまで続くのか。

もちろん、似たような値を使わなかったり、小さい値と大きい値だけを使うこともありますが、この場合は、何らかの方法でゼロにリセットしなければなりません。

そして何より、最小・最大スプレッドやそのジャンプの表示を考慮すべきなのかが理解できないのです。
 
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
保存されるSpread値について教えてください。バーのオープニングの冒頭の状態?
 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
Spreadのどの値が保存されるか教えてください。バーのオープニングの冒頭の状態でしょうか。

int spread;// スプレッド

乃至は

 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
保存されるSpread値について教えてください。バーのオープニングの冒頭の状態でしょうか。
現在のバーを要求している場合は、現在のスプレッド、履歴からであれば、終了時。
 
Vitalie Postolache:
現在のバーを求めるなら、現在のスプレッド、履歴からなら、終値時。
ありがとうございます。
 

配列にデータを書き込むには、各セルに異なる値を割り当てる必要があることは正しく理解しています array1[i] = x; 特定のセル番号を示す

それとも、i=0 から順次、配列を埋めていくことができるのでしょうか?

 
A1exPit:

配列にデータを書き込むには、各セルに異なる値を割り当てる必要があることは正しく理解しています array1[i] = x; 特定のセル番号を示す

それとも、i=0 から順次、配列を埋めていくことができるのでしょうか?

どう違うのでしょうか?
 
Renat Akhtyamov:
何が違うかというと、2つの道が違うだけだと思うんです。
配列にデータを渡すと、array1[] = xのように順次埋められるという意味ですが、セル番号が明示的に指定されていない場合、xの値はどのセルに書き込まれるのでしょうか?