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

 
Alexander:

安定した再生が可能か?ビルドとは?

はい、問題は再現可能です。バージョン1870。
 

質問です。

Expert Advisor やインジケータで複数のシンボル、あるいは Market Watch ウィンドウに表示されているすべてのシンボルを扱うとします。

課題は、いずれかのシンボルで新しいティックが発生した瞬間を捉えることです。

今のところ、選択肢は2つしかないですね。
  1. 全シンボルのポーリングを伴うタイマーを通じて。(もちろん、TimeCurrent() の新しい値だけをポーリングすることもできますが、この関数は秒単位の値を返すので、この場合、エラーは1秒になります)
  2. OnTick(またはOnCalculate)の各シンボルで、EventChartCustomを通してカスタムイベントを生成します。

最初の選択肢の欠点は、リソースとデータの関連性の点で非最適であることである。OnTimerは主にアイドル時に打ち込み、新しい見積もりをキャッチすると、到着時間の誤差はタイマーの周期と同じになります。

2つ目のバリエーションは、特にシンボルが何十個もある場合、面倒なのが欠点です。

他の選択肢(よりシンプルでエレガントなもの)はない、という理解で合っていますか?それとも(私が)間違っているのでしょうか?

 
Nikolai Semko:

質問です。

Expert Advisor やインジケータで複数のシンボル、あるいは Market Watch ウィンドウに表示されているすべてのシンボルを扱うとします。

課題は、いずれかのシンボルで新しいティックが発生した瞬間を捉えることです。

今のところ選択肢は2つしかないですね。
  1. 全シンボルのポーリングを伴うタイマーを通じて。(もちろん、TimeCurrent() の新しい値だけをポーリングすることもできますが、この関数は秒単位の値を返すので、この場合、エラーは1秒になります)
  2. OnTick(またはOnCalculate)の各シンボルで、EventChartCustomを通してカスタムイベントを生成します。

最初の選択肢の欠点は、リソースとデータの関連性の点で非最適であることである。OnTimerは主にアイドル時に打ち込み、新しい見積もりをキャッチすると、到着時間の誤差はタイマーの周期と同じになります。

2つ目のバリエーションは、特にシンボルが何十個もある場合、面倒なのが欠点です。

他の選択肢(よりシンプルでエレガントなもの)はない、という理解で合っていますか?それとも(私が)間違っているのでしょうか?

もしかしたら、これが役に立つかも?https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

リアルタイムの相場情報を持つ総合的な商品

この取引プラットフォームでは、1つまたは複数の既存の金融商品を基にした合成金融商品を作成することができます。相場計算式を設定するだけで、プラットフォームがリアルタイムで合成商品のティックを生成し、その分履歴も作成します。
仕組み

合成楽器を作り、その公式を設定するのです。
プラットフォームは、1秒間に10回の頻度でそのティックを計算します(式中の少なくとも1つの商品の価格が変更された場合のみ)
 
SEM:

もしかしたら、これが役に立つかも?https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

リアルタイムの相場情報を持つ総合的な商品

この取引プラットフォームでは、1つまたは複数の既存の金融商品を基にした合成金融商品を作成することができます。相場計算式を指定するだけで、プラットフォームがリアルタイムで合成商品のティックを生成し、その分履歴を作成します。
仕組み

合成楽器を作り、その公式を設定するのです。
プラットフォームは、1秒間に10回の頻度でそのティックを計算します(式中の少なくとも1つの商品の価格が変更された場合のみ)

そう、もちろん、その変種にも生きる権利がある。ありがとうございます。
しかし、実際には、タイマーの周期を100msにした私の変形例1と同じであり、同じ欠点があります。

選択肢2の方が合理的な気がしますが。

ところで、選択肢2については、すでにここで 議論されていることを思い出しました。


 
Nikolai Semko:

そう、もちろん、この変種にも生きる権利がある。ありがとうございました。
しかし、本質的には、タイマーの周期を100msとした上記variant1 と同じである。

EAが動作しているシンボルと連動したものを作れば簡単ではないか。次に、すべてのシンボルを開き、このEAを使ったテンプレートを各チャートに適用 します。

for(int i=PositionsTotal()-1;i>=0;i--)
     {
      if(PositionGetSymbol(i)==Symbol())
        {
         //Код
        };

     }
 
SEM:
EAが動作しているシンボルと連動したものを作れば簡単ではないか。次に、すべてのシンボルを開き、各チャートにこのEAを使ったテンプレートを適用 します。

できることは明らかです。私が知らないだけで、たった一つの多通貨EAのコードから、別のシンボルの相場が来る瞬間を正確にトレースすることが可能だということです。
しかし、カスタム割り込みを介したバリエーション2が 唯一の合理的な解決策であると思われます。

 
Nikolai Semko:

はい、そのようにできることは明らかです。質問は、私は何かを知らないということです、それは唯一のマルチ通貨Expert Advisorのコードを介して別のシンボルの引用符の来るの正確な瞬間をキャッチすることが可能です。
しかし、カスタム割り込みを介したバリエーション2が 唯一の合理的な解決策であると思われます。

実施する。

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.01.28
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Nikolai Semko:
  1. 全キャラクターのポーリングによるタイマー経由。(もちろん、TimeCurrent() の新しい値をポーリングすればよいのですが、この関数は秒単位の値を返すので、この場合、エラーは1秒になります)。

他の選択肢(よりシンプルでエレガントなもの)はないと考えてよいのでしょうか?それとも(私が)間違っているのでしょうか?

ミリ秒タイマー + SymbolInfoTick()でミリ秒単位の時間を取得します。

 
はい、すでに投稿22214で、このリンクをあなたの実装に渡しました。何度も言いますが、このバリエーションが今までで一番リーズナブルだと思います。そして、CPU負荷の最小化と、結果として新しいティックの瞬間の関連性という点で、これ以上の実装はないように思われます。
 
Nikolai Semko:
  1. через таймер c опросом всех символов. (можно, конечно, только опрашивать новое значение функции TimeCurrent(), но в этом случае погрешность будет равна 1 секунде, т.к. эта функция возвращает значение в секундах)

Я правильно понимаю, что других вариантов (более простых и изящных) не существует? Или (надеюсь) я не прав?

ミリ秒タイマー + SymbolInfoTick()でミリ秒単位で時間を取得します。

アレクセイ・コジツィン

ミリ秒タイマー + SymbolInfoTick()でミリ秒単位で時間を取得します。

このような構成(ミリ秒タイマー+SymbolInfoTick()ループ)のことを指しています。TimeCurrent()の 話をしたのは、現在のシンボルに限らず、「Market Watchウィンドウで利用できる任意のシンボルの最終気配値の到着時刻」を返すからですが、残念ながら秒数しか返さないので、ティックには非常に失礼な 話です。
客観的には、ユーザ割り込みの方が合理的です。なぜなら、相場が眠っているときでさえ、常に高価な SymbolInfoTick 関数でループを構成する必要がなく、したがってプロセッサにアイドル時間がかかるからです。また、新しいtickの計算誤差はタイマーの周期に等しい場合があり、そのようなtickが1以上だった場合、OnTimer実行の間にすべてのtickが失われます。
SZZ mql5の話をしているところです。mql4では、ユーザー割り込みが正しく動作しない。そのため、mql4ではタイマーを使用することのみ可能です。