int i,accTotal=OrdersHistoryTotal(); - これは int 変数 - 値をとるOrdersHistoryTotal for(i=0;i<accTotal;i++)// どのように履歴リストをループするかは、最初のオーダーから最後のオーダーまで、またはその逆に関係なく、リスト全体を順に通過させることに変わりはありません。
structMqlRates { datetime time; // время начала периода double open; // цена открытия double high; // наивысшая цена за период double low; // наименьшая цена за период double close; // цена закрытия long tick_volume; // тиковый объем int spread; // спред long real_volume; // биржевой объем };
structMqlRates { datetime time; // время начала периода double open; // цена открытия double high; // наивысшая цена за период double low; // наименьшая цена за период double close; // цена закрытия long tick_volume; // тиковый объем int spread; // спред long real_volume; // биржевой объем };
structMqlRates { datetime time; // время начала периода double open; // цена открытия double high; // наивысшая цена за период double low; // наименьшая цена за период double close; // цена закрытия long tick_volume; // тиковый объем int spread; // спред long real_volume; // биржевой объем };
返信ありがとうございました.そこで、取引履歴の注文を検索するために、関数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で)?
Vitalie Postolacheに 感謝します、アドバイスありがとうございます、これらの教科書の情報は、私が6年目に勉強するには少し遅いかもしれません、私はおそらくそんなにすることはできません、私はより早くする必要がありますが、 時間がありませんでした。ここで本当に退屈させてしまった、そうなら申し訳ない、もう続かない、帰るよ。
ところで、私も質問があります。
スプレッドチェックを書きたいのですが。
私はこれまで、単純にその値を要求し、スプレッドが指定した値を超えたら注文を出すことを禁止する、という方法をとってきました。
しかし、起こったことは、スプレッドが減少しているときに、EAが注文を開き、そのスプレッドが増加することです。
もし、スプレッドが1ティック ごとに配列に追加されるとしたら、配列はどれくらいの大きさになるのでしょうか?そしてまた、それがいつまで続くのか。
もちろん、似たような値を使わなかったり、小さい値と大きい値だけを使うこともありますが、この場合は、何らかの方法でゼロにリセットしなければなりません。
そして何より、最小・最大スプレッドやそのジャンプの表示を考慮すべきなのかが理解できないのです。{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
int spread;// スプレッド
乃至は
{
datetime time; // время начала периода
double open; // цена открытия
double high; // наивысшая цена за период
double low; // наименьшая цена за период
double close; // цена закрытия
long tick_volume; // тиковый объем
int spread; // спред
long real_volume; // биржевой объем
};
現在のバーを求めるなら、現在のスプレッド、履歴からなら、終値時。
配列にデータを書き込むには、各セルに異なる値を割り当てる必要があることは正しく理解しています array1[i] = x; 特定のセル番号を示す
それとも、i=0 から順次、配列を埋めていくことができるのでしょうか?
配列にデータを書き込むには、各セルに異なる値を割り当てる必要があることは正しく理解しています array1[i] = x; 特定のセル番号を示す
それとも、i=0 から順次、配列を埋めていくことができるのでしょうか?
何が違うかというと、2つの道が違うだけだと思うんです。