エキスパートアドバイザー - 雑多な質問 - ページ 17

 

#注文の計算とアカウント 情報の更新 - オープン

( 一度質問したのですが、まだ助けを必要としています )

私はOnTick() またはStart() で計算関数を呼び出していますが、これらはチャートシンボルのティックに 依存しています。
そして、EAの計算更新をティックやシンボルに依存しない ようにするにはどうしたらいいか、研究を始めています(/ Chart - Ticks, Symbols )。
ただ、「すべての注文の計算と口座情報」が「ターミナル > トレード」と同期(/ リアルタイム)して 更新されるようにしようとしています。

私を助けてください、ありがとうございます。
事前にありがとうございます。

 

OnTimer()

https://www.mql5.com/en/docs/basis/function/events#ontimer

そして、SymbolName(x,1)。
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
  • www.mql5.com
Language Basics / Functions / Event Handling Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

そして、SymbolName(x,1)。

良いコメント、それは私が助けられた、どうもありがとうございます。
今、OnTick()とOnTimer()を使って いますが、どちらもうまくいっています。(EAでOnTimer()を使うのは初めてです。)

---

また、Ticksも試してみたいです。Terminal > Trade'でどのシンボル(Pairs)と現在のチャートシンボルからのTicksだけが必要です。このSymbolName()は私を助けることができますか?
どうすればいいのか、アドバイスお願いします。

全て最高です。

 
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }
 
Marco vd Heijden:
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }

素晴らしい例で、私にとって本当に役に立つコメント です。

ティックが トレードペア/シンボルから 来ることは可能でしょうか?
なぜなら、私のマーケットウォッチはほとんど常にすべてのシンボルを表示しているからです。特に、私はトレードのための新しい良いペアを探しており、それが私が現在トレードのティックを開くだけで、' Terminal > Trade ' シンボル/ペアを取得できる方法について研究している唯一の理由です。

ありがとうございました。

 
しかし、OnTimer()関数で 低い値を設定して価格を更新することができます。例えば、250ミリ秒は1秒間に4ティックに等しいので、なぜそれが必要なのでしょうか?
 
Marco vd Heijden:
いいえ、しかし、あなたは、例えば250ミリ秒は4ティックに等しくなるように低い値に設定OnTimer()関数で 価格を更新することができますので、なぜあなたはそれを必要とするのでしょうか?

コメントありがとうございます。

( サブテーマ -#注文の計算と口座情報の更新 - オープン)私は注文の利益計算を使用していると述べたように、それは 'ターミナル>取引'と同期して実行されていない、それが唯一の理由です。
そのため、時々ボラティリティが非常に低く、ティックが最低量になり、私は関数が1秒間に4回実行される可能性があると思いますので、無駄に実行されています(/無駄)。

私はそれが私に与えることができる方法を見つけることができない場合 ' ターミナル > 取引' 注文利益計算とアカウント情報(/更新)同期のためのティック。私はあなたの非常に有用な方法を使用します - あなたの最後のコメントでその方法を教えてくれたのはどれ、どうもありがとうございました。(私はすでにテストし、その方法は私を動作します)。

事前にありがとうございました。

 

まあ、本当に好きな人なら使えると思います。

struct MqlTick
  {
   datetime     time;          // Time of the last prices update
   double       bid;           // Current Bid price
   double       ask;           // Current Ask price
   double       last;          // Price of the last deal (Last)
   ulong        volume;        // Volume for the current Last price
   long         time_msc;      // Time of a price last update in milliseconds
   uint         flags          // Tick flags
  };

現在の価格を返す構造体(MqlTick)

これは、シンボルの最新価格を保存するための構造体です。これは、最も要求の多い現在の価格に関する情報をすばやく取得できるように設計されています。

MqlTick型の変数を使用すると、SymbolInfoTick() 関数を1回呼び出すだけで、Ask、Bid、Last、Volumeの値を取得することができます。

各ティックのパラメータは、前のティックと比較して変化があるかどうかに関係なく、記入されます。従って、ティック履歴で過去の値を検索することなく、過去のどの時点でも正しい価格を知ることができます。例えば、1ティック到着時にBid価格だけが変化していても、その前のAsk価格や出来高など、他のパラメータも構造的に含まれています。

ティックフラグを分析することで、どのデータが正確に変更されたかを調べることができます。

  • TICK_FLAG_BID - ビッド価格が変更されたティック。
  • TICK_FLAG_ASK - 呼値が変更されました。
  • TICK_FLAG_LAST - 直近の取引価格が変更されました。
  • TICK_FLAG_VOLUME - 刻印が音量を変更しました。
  • TICK_FLAG_BUY - このティックは買い取引の結果です。
  • TICK_FLAG_SELL - チックは売り取引の結果です。

void OnTick()
  {
   MqlTick last_tick;
//---
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print(last_tick.time,": Bid = ",last_tick.bid,
            " Ask = ",last_tick.ask,"  Volume = ",last_tick.volume);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
//---
  }

以下もご参照ください。

https://www.mql5.com/en/docs/constants/structures/mqltick

構造体とクラスCopyTicks()SymbolInfoTick()

特定のシンボルに新しいティックがあるかどうかを確認するために使用することができますが、これは実際には価格水準を直接読み取るよりも一段階多くなるので、もう一度言いますが、なぜそれが必要なのでしょうか。

Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure - Reference on algorithmic/automated trading language for MetaTrader 5
 

Marco vd Heijden:

さて、もしあなたが本当にそれに夢中になっているなら、あなたは以下を使用することができます:...
特定のシンボルに新しいティックがあるかどうかを確認するために使用することができますが、これは実際に直接価格レベルを読み取るよりも1つのステップになるので、もう一度、あなたはそれを必要とする理由です。

参考になるコメント、ありがとうございます。

---

もし私が正しければ、文のこの部分は質問です。

...なぜそれが必要なのでしょうか。
理由はただ
一つ、無関係な関数のループや実行を防ぐためです。

( I would like to mention today while I was testing my EA's Orders Profit calculation, calculation was continuous updates ( / loops for nothing ) I was test it onEURUSD chart, and while I was testing, I saw very low volume almost 20 ( no over ) a minute.and I was testing.
そして、私がテストしている間、もう一回私は確かに知っていた、私はそれが私にだけ 'ターミナル>トレード'ティックを与える方法を見つけることができました。もう一回言っておきますが、何の理由もありません。
ただ、OnTick()でティックだけを出す方法は、Chart Symbolからティックを出すことができると知っている。その他、OnTimer()では1秒間に4ティック...といった具合に、皆さんの有益で素晴らしいコメントから学んだものです、本当にありがとうございました。)

そして、私は私の状況を説明する必要があります。

注文の利益計算は、EAがどのチャートシンボル(例:EURUSD)で動いていても、チャートシンボルと注文シンボルが同じであれば、Terminal Tradeパネルと同期することができますが、GBPUSDで新しいポジションを開くと、同期が途切れることになります。
また、EURUSDの注文を出した後、他のチャートシンボル(例えばGBPUSDやNZDUSDなど)で新しいペアを探そうとすると、注文の利益計算が「ターミナル > トレード」パネルと同期されません。
( OnTimer()は既に知っていることを忘れないでください。)

その懸念はすべてここから来ています。

今日、私は短期間のポジションを開くと、私は長期的なポジションを開く場合、私はターミナルトレードとその同期に注意を払うことはありません。

---

より明確に理解していただけたでしょうか?

では、よろしくお願いします。

 

もし、本当に各ティックで待ちたいのであれば、各シンボルに対して別々のEAを書き、OnTick()関数を 使用する必要があります。

しかし、私はマイクロコントローラをプログラムしていますが、彼らは電源障害や割り込みが発生するまで、エンドレスループ(永遠)になっていることを伝えることができます。

ある条件が真か偽かをチェックするには、最小のブール型データ型を使いますが、プロセッサはバックグラウンドで動作するすべてのプロセスとグラフィックスなどで、1秒間に何百万回、何十億回とそれを行っています。

これが問題になるのは、より大きなデータ型を含む重い計算をし始めたときです。