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

 
TYRBO:
プライスレス
テスターで?フローティング・スプレッド 口座の実際の市場では、損益分岐価格は1ティック後に変更されます。
 
Artyom Trishkin:

その中で、私が言いたいのはこういうことです。

  1. 1ティックあたりのサイクルをなるべく少なくする必要があるのです。
  2. 成行注文とポジションのデータを持つ定数配列と、削除/決済された注文とポジションのデータを持つ配列が必要です
  3. 関数の中でローカルに配列を持っている場合、それを繰り返し呼び出すと、再度入力する必要があります。この配列は新しいティックに一度だけ埋められるようにすることを提案します。そうすれば配列はグローバルになり、そうでなければ関数を終了するときに失われます。
  4. その中で(配列の中で)何かを見つけるためには、満たされた配列と、見つかったデータを返す関数が必要です。関数内では、必要な計算を行うための補助配列を宣言することができる。

このため、グローバル配列(クローズド、オープンオーダー、ポジション)を用意するのがよいでしょう。新しいティックに一度、必要な量のオーダー/ポジションを 一度だけ渡し、2つのアレイにそれらを満たします。そして、彼らから必要なデータを同じティックで取得するのです。最後のクローズ/オープンオーダー/ポジションとそのすべてのデータが計算されるだけでなく、部分クローズの場合には、すべてのポジションの親ティックと子ティックが検索されることに注意してください。したがって、どのチケットがどのポジションから発券されたのか、部分的に複数回クローズされたのか、いつでも確認することができます。これらはすべて、タイマーで動作するクラスですでに動作しています。他にも必要なデータがたくさんあって、総サイクル数が少ないんです。配列に必要な履歴の深さがテスターに設定されている。

などなど・・・。

すみません。もう一つ付け加えると(対抗するためではなく、追加として)、staticを 使ったローカル配列は失われないということです。つまり、条件によって、グローバルに宣言しなくてもできるようになればいいのです。

 
追伸:もちろん、私自身の「既得権益」に基づいて完成させています)))。許容されるケースでローカルスタティックを 適用できるからです。
 
Vitaly Muzichenko:

今は5用にゆっくり書き換えています。 価格の変動が激しく、レベルがストップロスの値より低くなってエラーになる可能性があるという意味です。価格が急激に変化して、レベルが許容ストップレベルより低くなり、エラーになる可能性があるということです。

この「SymbolInfoTick」というのは、現在の価格を取得するために必要なのですね。

つまり、mql4で実際のAskとBidを取得するためには、とにかくrefreshを呼び出せばよかったのです。そして、SymbolInfoTick()を呼び出す 場合と比較して、負荷が変化しにくいことが判明しました。

しかし、ここでもう一つ追加です。正確な価格を得るために、以下のループでSymbolInfoTick()を書いています。

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

初回から正常な価格を得ることができれば、このループは実行時間を増加させることはない。多少の失敗があっても、今の値段ではなく同じ値段になるよりは、繰り返したほうがいいしね。

 
Alexey Viktorov:

そのため、mql4で実際のAskとBidを取得するためには、とにかくrefreshを呼び出す必要があるのです。そして、SymbolInfoTick()を呼び出す 場合と比較して、負荷が変化しにくいことが判明しました。

しかし、ここでもう一つ追加です。実際の価格をエラーなしで取得するために、このループにSymbolInfoTick()を入れています。

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

初回から正常な価格を得ることができれば、このループは実行時間を増加させることはない。多少の失敗があっても、今の値段ではなく同じ値段になるよりは、繰り返したほうがいいしね。

なるほど、ループの中か前か、どこに入れればいいのでしょうか。
 
Vitaly Muzichenko:
なるほど、でも、サイクルの中と前、どちらに入れればいいのでしょうか?
まあ、今の価格が出るまでは別のサイクルなんだけどね。どこに置くかはすでに検討済みです。実勢価格でないアンブッシュがあれば、注文評価のループの中で設定すべきです。
 
Alexey Viktorov:

そのため、mql4で実際のAskとBidを取得するためには、とにかくrefreshを呼び出す必要があるのです。そして、SymbolInfoTick()を呼び出す 場合と比較して、負荷が変化しにくいことが判明しました。

しかし、ここでもう一つ追加です。実際の価格をエラーなしで取得するために、SymbolInfoTick()をこのループに入れました。

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

初回から正常な価格を得ることができれば、このループは実行時間を増加させることはない。多少の失敗があっても、今の値段ではなく同じ値段になるよりは、繰り返したほうがいいしね。

もし、まったく手に入らなかったら?ループを遅くする方法は?
 
Artyom Trishkin:
また、全く受信しない場合は?そのサイクルを遅らせるにはどうしたらいいのでしょうか?

そうですね、論理的には、たとえば端末が接続できなくなったということもありえますが、理由はいくらでもあります。

最新の価格を知るにはどうしたらいいのでしょうか。グリッドトローリングには、あまりリソースを必要としません。

 
Vitaly Muzichenko:

そうですね、論理的には、たとえば端末が接続できなくなったということもありえますが、理由はいくらでもあります。

最新の価格を得るための最良の方法は何か、より少ない資源消費でありながら、グリッドトロールのために - 覚えておいてください。

10ページ前をチェックすると、そこに良い計画があります。
 
trader781:
10ページ前に戻ってみると、かなり良い回路図があります。
見つからなかったし、ここにも覚えがない。